[tryton-debian-vcs] tryton-modules-stock branch upstream created. 5b5743ce3a6d773e7b9734406648e9137bb4a25c
Mathias Behrle
tryton-debian-vcs at alioth.debian.org
Wed Nov 27 17:10:22 UTC 2013
The following commit has been merged in the upstream branch:
https://alioth.debian.org/plugins/scmgit/cgi-bin/gitweb.cgi/?p=tryton/tryton-modules-stock.git;a=commitdiff;h=5b5743ce3a6d773e7b9734406648e9137bb4a25c
commit 5b5743ce3a6d773e7b9734406648e9137bb4a25c
Author: Mathias Behrle <mathiasb at m9s.biz>
Date: Sun Nov 24 17:28:20 2013 +0100
Adding 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>
commit d5ffda87059b7dea81346906a4caef19bf03d087
Author: Mathias Behrle <mathiasb at m9s.biz>
Date: Mon Aug 5 18:49:19 2013 +0200
Adding upstream version 2.8.2.
diff --git a/CHANGELOG b/CHANGELOG
index c584c9e..733a200 100644
--- a/CHANGELOG
+++ b/CHANGELOG
@@ -1,3 +1,6 @@
+Version 2.8.2 - 2013-07-22
+* Bug fixes (see mercurial logs for details)
+
Version 2.8.1 - 2013-06-09
* Bug fixes (see mercurial logs for details)
diff --git a/PKG-INFO b/PKG-INFO
index 0a2211e..d1026ee 100644
--- a/PKG-INFO
+++ b/PKG-INFO
@@ -1,6 +1,6 @@
Metadata-Version: 1.1
Name: trytond_stock
-Version: 2.8.1
+Version: 2.8.2
Summary: Tryton module for stock and inventory
Home-page: http://www.tryton.org/
Author: Tryton
diff --git a/product.py b/product.py
index be694ff..6bb1fd0 100644
--- a/product.py
+++ b/product.py
@@ -393,8 +393,8 @@ class Product:
if periods:
period, = periods
state_date_clause += (' AND '
- '(COALESCE(effective_date, planned_date) > %s)')
- state_date_vals.append(period.date)
+ '(COALESCE(effective_date, planned_date, %s) > %s)')
+ state_date_vals.extend([datetime.date.max, period.date])
period_vals[0] = period.id
if with_childs:
diff --git a/tryton.cfg b/tryton.cfg
index 7d3102b..99bdad7 100644
--- a/tryton.cfg
+++ b/tryton.cfg
@@ -1,5 +1,5 @@
[tryton]
-version=2.8.1
+version=2.8.2
depends:
company
currency
diff --git a/trytond_stock.egg-info/PKG-INFO b/trytond_stock.egg-info/PKG-INFO
index c092c87..600870d 100644
--- a/trytond_stock.egg-info/PKG-INFO
+++ b/trytond_stock.egg-info/PKG-INFO
@@ -1,6 +1,6 @@
Metadata-Version: 1.1
Name: trytond-stock
-Version: 2.8.1
+Version: 2.8.2
Summary: Tryton module for stock and inventory
Home-page: http://www.tryton.org/
Author: Tryton
commit d495cdbd63d86f5608dc130da970f79864652bb1
Author: Mathias Behrle <mathiasb at m9s.biz>
Date: Mon Jun 10 13:44:12 2013 +0200
Adding upstream version 2.8.1.
diff --git a/CHANGELOG b/CHANGELOG
index accfa31..c584c9e 100644
--- a/CHANGELOG
+++ b/CHANGELOG
@@ -1,3 +1,6 @@
+Version 2.8.1 - 2013-06-09
+* Bug fixes (see mercurial logs for details)
+
Version 2.8.0 - 2013-04-22
* Bug fixes (see mercurial logs for details)
* Merge all shipment Many2One into shipment Reference
diff --git a/PKG-INFO b/PKG-INFO
index c98ef55..0a2211e 100644
--- a/PKG-INFO
+++ b/PKG-INFO
@@ -1,6 +1,6 @@
Metadata-Version: 1.1
Name: trytond_stock
-Version: 2.8.0
+Version: 2.8.1
Summary: Tryton module for stock and inventory
Home-page: http://www.tryton.org/
Author: Tryton
diff --git a/product.py b/product.py
index 0344367..be694ff 100644
--- a/product.py
+++ b/product.py
@@ -385,9 +385,11 @@ class Product:
context['stock_date_start'], today,
])
else:
- periods = Period.search([
- ('date', '<', context['stock_date_end']),
- ], order=[('date', 'DESC')], limit=1)
+ with Transaction().set_user(0, set_context=True):
+ periods = Period.search([
+ ('date', '<', context['stock_date_end']),
+ ('state', '=', 'closed'),
+ ], order=[('date', 'DESC')], limit=1)
if periods:
period, = periods
state_date_clause += (' AND '
diff --git a/tryton.cfg b/tryton.cfg
index c63f782..7d3102b 100644
--- a/tryton.cfg
+++ b/tryton.cfg
@@ -1,5 +1,5 @@
[tryton]
-version=2.8.0
+version=2.8.1
depends:
company
currency
diff --git a/trytond_stock.egg-info/PKG-INFO b/trytond_stock.egg-info/PKG-INFO
index fb0f48d..c092c87 100644
--- a/trytond_stock.egg-info/PKG-INFO
+++ b/trytond_stock.egg-info/PKG-INFO
@@ -1,6 +1,6 @@
Metadata-Version: 1.1
Name: trytond-stock
-Version: 2.8.0
+Version: 2.8.1
Summary: Tryton module for stock and inventory
Home-page: http://www.tryton.org/
Author: Tryton
commit b86e777edb25b730303990a63c62c5a34fadd94c
Author: Mathias Behrle <mathiasb at m9s.biz>
Date: Thu May 2 00:37:48 2013 +0200
Adding upstream version 2.8.0.
diff --git a/CHANGELOG b/CHANGELOG
index ceabd66..accfa31 100644
--- a/CHANGELOG
+++ b/CHANGELOG
@@ -1,5 +1,8 @@
-Version 2.6.1 - 2013-02-12
+Version 2.8.0 - 2013-04-22
* Bug fixes (see mercurial logs for details)
+* Merge all shipment Many2One into shipment Reference
+* Add origin Reference on Stock Move
+* Add workflow to stock move
Version 2.6.0 - 2012-10-22
* Bug fixes (see mercurial logs for details)
diff --git a/COPYRIGHT b/COPYRIGHT
index 5d0e16a..b9e8d97 100644
--- a/COPYRIGHT
+++ b/COPYRIGHT
@@ -1,6 +1,6 @@
Copyright (C) 2012 Openlabs Technologies & Consulting (P) LTD.
Copyright (C) 2008-2013 Cédric Krier.
-Copyright (C) 2008-2012 Bertrand Chenal.
+Copyright (C) 2008-2013 Bertrand Chenal.
Copyright (C) 2008-2013 B2CK SPRL.
Copyright (C) 2004-2008 Tiny SPRL.
diff --git a/MANIFEST.in b/MANIFEST.in
index 501657d..f040e5e 100644
--- a/MANIFEST.in
+++ b/MANIFEST.in
@@ -6,6 +6,7 @@ include CHANGELOG
include LICENSE
include tryton.cfg
include *.xml
+include view/*.xml
include *.odt
include locale/*.po
include doc/*
diff --git a/PKG-INFO b/PKG-INFO
index 2b0ba30..c98ef55 100644
--- a/PKG-INFO
+++ b/PKG-INFO
@@ -1,12 +1,12 @@
Metadata-Version: 1.1
Name: trytond_stock
-Version: 2.6.1
+Version: 2.8.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.6/
+Download-URL: http://downloads.tryton.org/2.8/
Description: trytond_stock
=============
@@ -53,6 +53,7 @@ Classifier: Intended Audience :: Legal Industry
Classifier: Intended Audience :: Manufacturing
Classifier: License :: OSI Approved :: GNU General Public License (GPL)
Classifier: Natural Language :: Bulgarian
+Classifier: Natural Language :: Catalan
Classifier: Natural Language :: Czech
Classifier: Natural Language :: Dutch
Classifier: Natural Language :: English
diff --git a/__init__.py b/__init__.py
index 4a34707..538a76a 100644
--- a/__init__.py
+++ b/__init__.py
@@ -16,6 +16,7 @@ def register():
Location,
Party,
ProductsByLocationsStart,
+ Move,
ShipmentIn,
ShipmentInReturn,
ShipmentOut,
@@ -27,7 +28,6 @@ def register():
AssignShipmentInReturnAssignFailed,
Period,
Cache,
- Move,
Template,
Product,
ProductByLocationStart,
diff --git a/configuration.xml b/configuration.xml
index 94c9a9b..5a20963 100644
--- a/configuration.xml
+++ b/configuration.xml
@@ -6,22 +6,7 @@ this repository contains the full copyright notices and license terms. -->
<record model="ir.ui.view" id="stock_configuration_view_form">
<field name="model">stock.configuration</field>
<field name="type">form</field>
- <field name="arch" type="xml">
- <![CDATA[
- <form string="Stock Configuration">
- <label name="shipment_in_sequence"/>
- <field name="shipment_in_sequence"/>
- <label name="shipment_in_return_sequence"/>
- <field name="shipment_in_return_sequence"/>
- <label name="shipment_out_sequence"/>
- <field name="shipment_out_sequence"/>
- <label name="shipment_out_return_sequence"/>
- <field name="shipment_out_return_sequence"/>
- <label name="shipment_internal_sequence"/>
- <field name="shipment_internal_sequence"/>
- </form>
- ]]>
- </field>
+ <field name="name">configuration_form</field>
</record>
<record model="ir.action.act_window" id="act_stock_configuration_form">
<field name="name">Stock Configuration</field>
diff --git a/inventory.py b/inventory.py
index d8de0fb..50bf3ef 100644
--- a/inventory.py
+++ b/inventory.py
@@ -52,8 +52,8 @@ class Inventory(Workflow, ModelSQL, ModelView):
super(Inventory, cls).__setup__()
cls._order.insert(0, ('date', 'DESC'))
cls._error_messages.update({
- 'delete_cancel': 'Inventory "%s" must be cancelled before ' \
- 'deletion!',
+ 'delete_cancel': ('Inventory "%s" must be cancelled before '
+ 'deletion.'),
})
cls._transitions |= set((
('draft', 'done'),
@@ -113,9 +113,15 @@ class Inventory(Workflow, ModelSQL, ModelView):
@ModelView.button
@Workflow.transition('done')
def confirm(self, inventories):
+ Move = Pool().get('stock.move')
+ move_ids = []
for inventory in inventories:
for line in inventory.lines:
- line.create_move()
+ move_id = line.create_move()
+ if move_id:
+ move_ids.append(move_id)
+ if move_ids:
+ Move.do(Move.browse(move_ids))
@classmethod
@ModelView.button
@@ -194,6 +200,7 @@ 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]):
@@ -201,7 +208,9 @@ class Inventory(Workflow, ModelSQL, ModelView):
quantity, uom_id = product_qty[product_id]
values = Line.create_values4complete(product_id, inventory,
quantity, uom_id)
- Line.create(values)
+ to_create.append(values)
+ if to_create:
+ Line.create(to_create)
class InventoryLine(ModelSQL, ModelView):
@@ -231,9 +240,9 @@ class InventoryLine(ModelSQL, ModelView):
super(InventoryLine, cls).__setup__()
cls._sql_constraints += [
('check_line_qty_pos',
- 'CHECK(quantity >= 0.0)', 'Line quantity must be positive!'),
+ 'CHECK(quantity >= 0.0)', 'Line quantity must be positive.'),
('inventory_product_uniq', 'UNIQUE(inventory, product)',
- 'Product must be unique by inventory!'),
+ 'Product must be unique by inventory.'),
]
cls._order.insert(0, ('product', 'ASC'))
@@ -263,9 +272,7 @@ class InventoryLine(ModelSQL, ModelView):
@classmethod
def cancel_move(cls, lines):
Move = Pool().get('stock.move')
- Move.write([l.move for l in lines if l.move], {
- 'state': 'cancel',
- })
+ Move.cancel([l.move for l in lines if l.move])
Move.delete([l.move for l in lines if l.move])
cls.write([l for l in lines if l.move], {
'move': None,
@@ -290,16 +297,15 @@ class InventoryLine(ModelSQL, ModelView):
(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,
- 'state': 'done',
- 'effective_date': self.inventory.date,
- })
+ 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
self.save()
return move.id
diff --git a/inventory.xml b/inventory.xml
index 4102c9e..6446b99 100644
--- a/inventory.xml
+++ b/inventory.xml
@@ -7,50 +7,12 @@ this repository contains the full copyright notices and license terms. -->
<record model="ir.ui.view" id="inventory_view_form">
<field name="model">stock.inventory</field>
<field name="type">form</field>
- <field name="arch" type="xml">
- <![CDATA[
- <form string="Inventory" col="4">
- <label name="location"/>
- <field name="location"/>
- <label name="lost_found"/>
- <field name="lost_found"/>
- <label name="date"/>
- <field name="date"/>
- <label name="company"/>
- <field name="company"/>
- <label colspan="2" id="empty"/>
- <button string="Complete Inventory"
- name="complete_lines" colspan="2"
- help="Add an inventory line for each missing products"/>
- <field name="lines" colspan="4"/>
- <group col="4" colspan="4" id="group_buttons">
- <label name="state"/>
- <field name="state"/>
- <group colspan="2" col="3" id="buttons">
- <button string="Cancel" name="cancel"
- icon="tryton-cancel" />
- <button string="Confirm" name="confirm"
- icon="tryton-ok"/>
- </group>
- </group>
- </form>
- ]]>
- </field>
+ <field name="name">inventory_form</field>
</record>
<record model="ir.ui.view" id="inventory_view_tree">
<field name="model">stock.inventory</field>
<field name="type">tree</field>
- <field name="arch" type="xml">
- <![CDATA[
- <tree string="Inventories">
- <field name="location"/>
- <field name="date"/>
- <field name="state"/>
- <field name="company"/>
- <field name="create_date" tree_invisible="1"/>
- </tree>
- ]]>
- </field>
+ <field name="name">inventory_tree</field>
</record>
<record model="ir.action.act_window" id="act_inventory_form">
<field name="name">Inventories</field>
@@ -69,67 +31,30 @@ this repository contains the full copyright notices and license terms. -->
<field name="view" ref="inventory_view_form"/>
<field name="act_window" ref="act_inventory_form"/>
</record>
- <menuitem parent="menu_stock" sequence="50"
- action="act_inventory_form" id="menu_inventory_form"/>
-
- <record model="ir.action.act_window" id="act_inventory_form_draft">
- <field name="name">Draft Inventories</field>
- <field name="res_model">stock.inventory</field>
- <field name="domain">[('state', '=', 'draft')]</field>
- </record>
- <record model="ir.action.act_window.view"
- id="act_inventory_form_draft_view1">
+ <record model="ir.action.act_window.domain" id="act_inventory_form_domain_draft">
+ <field name="name">Draft</field>
<field name="sequence" eval="10"/>
- <field name="view" ref="inventory_view_tree"/>
- <field name="act_window" ref="act_inventory_form_draft"/>
+ <field name="domain">[('state', '=', 'draft')]</field>
+ <field name="act_window" ref="act_inventory_form"/>
</record>
- <record model="ir.action.act_window.view"
- id="act_inventory_form_draft_view2">
- <field name="sequence" eval="20"/>
- <field name="view" ref="inventory_view_form"/>
- <field name="act_window" ref="act_inventory_form_draft"/>
+ <record model="ir.action.act_window.domain" id="act_inventory_form_domain_all">
+ <field name="name">All</field>
+ <field name="sequence" eval="9999"/>
+ <field name="domain"></field>
+ <field name="act_window" ref="act_inventory_form"/>
</record>
- <menuitem parent="menu_inventory_form"
- action="act_inventory_form_draft" id="menu_inventory_form_draft"
- sequence="20"/>
+ <menuitem parent="menu_stock" sequence="50"
+ action="act_inventory_form" id="menu_inventory_form"/>
<record model="ir.ui.view" id="inventory_line_view_form">
<field name="model">stock.inventory.line</field>
<field name="type">form</field>
- <field name="arch" type="xml">
- <![CDATA[
- <form string="Inventory Line" col="4">
- <label name="product"/>
- <field name="product"/>
- <label name="uom"/>
- <field name="uom"/>
- <label name="expected_quantity"/>
- <field name="expected_quantity"/>
- <label name="quantity"/>
- <field name="quantity"/>
- <label name="move"/>
- <field name="move"/>
- <label name="inventory"/>
- <field name="inventory"/>
- <field name="unit_digits" invisible="1" colspan="4"/>
- </form>
- ]]>
- </field>
+ <field name="name">inventory_line_form</field>
</record>
<record model="ir.ui.view" id="inventory_line_view_tree">
<field name="model">stock.inventory.line</field>
<field name="type">tree</field>
- <field name="arch" type="xml">
- <![CDATA[
- <tree string="Inventory Lines" editable="bottom">
- <field name="product"/>
- <field name="expected_quantity"/>
- <field name="quantity"/>
- <field name="uom"/>
- <field name="unit_digits" tree_invisible="1"/>
- </tree>
- ]]>
- </field>
+ <field name="name">inventory_line_tree</field>
</record>
<record model="ir.model.access" id="access_inventory">
diff --git a/locale/bg_BG.po b/locale/bg_BG.po
index 40c062b..e17965d 100644
--- a/locale/bg_BG.po
+++ b/locale/bg_BG.po
@@ -11,42 +11,32 @@ msgstr ""
"налиÑноÑÑ."
msgctxt "error:stock.inventory.line:"
-msgid "Line quantity must be positive!"
-msgstr "ÐолиÑеÑÑвоÑо на Ñеда ÑÑÑбва да е положиÑелно ÑиÑло!"
+msgid "Line quantity must be positive."
+msgstr ""
msgctxt "error:stock.inventory.line:"
-msgid "Product must be unique by inventory!"
-msgstr "ÐÑодÑкÑа ÑÑÑбва да е Ñникален по инвенÑаÑизаÑиÑ!"
+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.location:"
-msgid ""
-"A location with existing moves cannot be changed to a type that does not "
-"support moves."
+msgid "Inventory \"%s\" must be cancelled before deletion."
msgstr ""
-"ÐеÑÑонаÑ
ождение ÑÑÑ ÑÑÑеÑÑвÑваÑи Ð´Ð²Ð¸Ð¶ÐµÐ½Ð¸Ñ Ð½Ðµ може да бÑде пÑоменено Ñ Ñакова"
-" коеÑо не поддÑÑжа движениÑ"
msgctxt "error:stock.location:"
-msgid "Location \"%s\" must be a child of warehouse \"%s\"!"
-msgstr "ÐеÑÑонаÑ
ождение \"%s\" ÑÑÑбва да е подÑинен на Ñклад \"%s\" !"
+msgid "Location \"%(location)s\" must be a child of warehouse \"%(warehouse)s\"."
+msgstr ""
msgctxt "error:stock.location:"
-msgid "You can not create recursive locations!"
-msgstr "Ðе може да ÑÑздаваÑе взаимновложени меÑÑонаÑ
ождениÑ!"
+msgid ""
+"Location \"%s\" with existing moves cannot be changed to a type that does "
+"not support moves."
+msgstr ""
msgctxt "error:stock.move:"
msgid "Internal move quantity must be positive"
msgstr "ÐолиÑеÑÑваÑа на движение ÑÑÑбва да Ñа положиÑелно ÑиÑло"
msgctxt "error:stock.move:"
-msgid "Move can be on only one Shipment"
-msgstr "ÐвижениеÑо ÑÑÑбва да Ñамо вÑÑÑ
Ñ ÐµÐ´Ð½Ð¾ изпÑаÑане"
-
-msgctxt "error:stock.move:"
msgid "Move quantity must be positive"
msgstr "ÐолиÑеÑÑвоÑо на движение ÑÑÑбва да е положиÑелно ÑиÑло"
@@ -55,87 +45,79 @@ msgid "Source and destination location must be different"
msgstr "ÐзÑоÑника и ÑелÑа на меÑÑонаÑ
ождениеÑо ÑÑÑбва да Ñа ÑазлиÑни"
msgctxt "error:stock.move:"
-msgid "You can not modify a move in the state: \"Assigned\", \"Done\" or \"Cancel\""
+msgid ""
+"You can not delete stock move \"%s\" because it is not in draft or cancelled"
+" state."
msgstr ""
-"Ðе може да пÑоменÑÑе движение в ÑÑÑÑоÑние: \"ÐазнаÑен\", \"ÐÑиклÑÑен\" или "
-"\"ÐÑказ\""
msgctxt "error:stock.move:"
-msgid "You can not modify move in closed period!"
-msgstr "Ðе може да пÑоменÑÑе заÑвоÑен пеÑиод!"
+msgid "You can not modify move \"%(move)s\" because period \"%(period)s\" is closed."
+msgstr ""
msgctxt "error:stock.move:"
-msgid "You can not set state to assigned!"
-msgstr "Ðе може да пÑомениÑе ÑÑÑÑоÑниеÑо в назнаÑен!"
+msgid ""
+"You can not modify stock move \"%s\"because it is in \"Assigned\", \"Done\" "
+"or \"Cancel\" state."
+msgstr ""
msgctxt "error:stock.move:"
-msgid "You can not set state to done!"
-msgstr "Ðе може да пÑеÑ
вÑÑлиÑе в ÑÑÑÑоÑние ÐоÑов!"
+msgid "You can not set stock move \"%s\" to assigned state."
+msgstr ""
msgctxt "error:stock.move:"
-msgid "You can not set state to draft!"
-msgstr "Ðе може да пÑаÑиÑе ÑÑаÑÑÑа в пÑоекÑ!"
+msgid "You can not set stock move \"%s\" to done state."
+msgstr ""
msgctxt "error:stock.move:"
-msgid "You can only delete draft or cancelled moves!"
-msgstr "Ðе може да изÑÑиваÑе Ð´Ð²Ð¸Ð¶ÐµÐ½Ð¸Ñ Ð² ÑÑаÑÑÑ Ð¿ÑÐ¾ÐµÐºÑ Ð¸Ð»Ð¸ оÑказан!"
+msgid "You can not set stock move \"%s\" to draft state."
+msgstr ""
msgctxt "error:stock.period:"
-msgid "You can not close a period in the future or today!"
-msgstr "Ðе може да заÑваÑÑÑе пеÑиод Ð¾Ñ Ð´Ð½ÐµÑ Ð¸Ð»Ð¸ в бедеÑеÑо!"
+msgid "You can not close a period in the future or today."
+msgstr ""
msgctxt "error:stock.period:"
-msgid "You can not close a period when there is still assigned moves!"
-msgstr "Ðе може да заÑваÑÑÑе пеÑиод когаÑо ÑÑдÑÑжа назнаÑени движениÑ!"
+msgid "You can not close a period when there still are assigned moves."
+msgstr ""
msgctxt "error:stock.shipment.in.return:"
-msgid "Supplier Return Shipment \"%s\" must be cancelled before deletion!"
+msgid "Supplier Return Shipment \"%s\" must be cancelled before deletion."
msgstr ""
-"ÐÑеди да бÑде изÑÑиÑа пÑаÑка вÑÑнаÑа Ð¾Ñ Ð´Ð¾ÑÑавÑик \"%s\" ÑÑÑбва да бÑде "
-"пÑекÑаÑена!"
msgctxt "error:stock.shipment.in:"
msgid ""
"Incoming Moves must have the warehouse input location as destination "
-"location!"
+"location."
msgstr ""
-"ÐÑ
одÑÑиÑе Ð´Ð²Ð¸Ð¶ÐµÐ½Ð¸Ñ ÑÑÑбва да Ð¸Ð¼Ð°Ñ Ð¼ÐµÑÑонаÑ
ождение-вÑ
од на Ñклад каÑо "
-"меÑÑонаÑ
ождение-Ñел!"
msgctxt "error:stock.shipment.in:"
msgid ""
-"Inventory Moves must have the warehouse input location as source location!"
+"Inventory Moves must have the warehouse input location as source location."
msgstr ""
-"Ðвижение на инвенÑаÑизаÑÐ¸Ñ ÑÑÑбва да Ð¸Ð¼Ð°Ñ Ð¼ÐµÑÑонаÑ
ождение-вÑ
од на Ñклад каÑо"
-" меÑÑонаÑ
ождение-изÑоÑник!"
msgctxt "error:stock.shipment.in:"
-msgid "Supplier Shipment \"%s\" must be cancelled before deletion!"
+msgid "Supplier Shipment \"%s\" must be cancelled before deletion."
msgstr ""
-"ÐÑеди да бÑде изÑÑиÑа пÑаÑка на доÑÑавÑик \"%s\" ÑÑÑбва да бÑде пÑекÑаÑена!"
msgctxt "error:stock.shipment.internal:"
-msgid "Internal Shipment \"%s\" must be cancelled before deletion!"
-msgstr "ÐÑеди да бÑде изÑÑиÑа вÑÑÑеÑна доÑÑавка \"%s\" ÑÑÑбва да бÑде пÑекÑаÑена!"
+msgid "Internal Shipment \"%s\" must be cancelled before deletion."
+msgstr ""
msgctxt "error:stock.shipment.out.return.create:"
-msgid "The shipment with code %s is not yet sent."
-msgstr "ÐÑаÑкаÑа Ñ ÐºÐ¾Ð´ %s оÑе не е изпÑаÑена"
+msgid "The shipment with code \"%s\" is not yet sent."
+msgstr ""
msgctxt "error:stock.shipment.out.return.create:"
msgid "You can not create return shipment"
msgstr "Ðе може да ÑÑздадеÑе вÑÑÑане на пÑаÑка"
msgctxt "error:stock.shipment.out.return:"
-msgid "Customer Return Shipment \"%s\" must be cancelled before deletion!"
+msgid "Customer Return Shipment \"%s\" must be cancelled before deletion."
msgstr ""
-"ÐÑеди да бÑде изÑÑиÑа пÑаÑка вÑÑнаÑа Ð¾Ñ ÐºÐ»Ð¸ÐµÐ½Ñ \"%s\" ÑÑÑбва да бÑде "
-"пÑекÑаÑена!"
msgctxt "error:stock.shipment.out:"
-msgid "Customer Shipment \"%s\" must be cancelled before deletion!"
+msgid "Customer Shipment \"%s\" must be cancelled before deletion."
msgstr ""
-"ÐÑеди да бÑде изÑÑиÑа доÑÑавка за ÐºÐ»Ð¸ÐµÐ½Ñ \"%s\" ÑÑÑбва да бÑде пÑекÑаÑена!"
msgctxt "field:party.address,delivery:"
msgid "Delivery"
@@ -445,6 +427,11 @@ msgctxt "field:stock.move,internal_quantity:"
msgid "Internal Quantity"
msgstr "ÐÑÑÑеÑно колиÑеÑÑво"
+#, fuzzy
+msgctxt "field:stock.move,origin:"
+msgid "Origin"
+msgstr "ÐзÑоÑник"
+
msgctxt "field:stock.move,planned_date:"
msgid "Planned Date"
msgstr "ÐланиÑана даÑа"
@@ -465,25 +452,9 @@ msgctxt "field:stock.move,rec_name:"
msgid "Name"
msgstr "Ðме"
-msgctxt "field:stock.move,shipment_in:"
-msgid "Supplier Shipment"
-msgstr "ÐÑаÑка на доÑÑавÑик"
-
-msgctxt "field:stock.move,shipment_in_return:"
-msgid "Supplier Return Shipment"
-msgstr "ÐÑаÑка вÑÑнаÑа Ð¾Ñ Ð´Ð¾ÑÑавÑик"
-
-msgctxt "field:stock.move,shipment_internal:"
-msgid "Internal Shipment"
-msgstr "ÐÑÑÑеÑно изпÑаÑане"
-
-msgctxt "field:stock.move,shipment_out:"
-msgid "Customer Shipment"
-msgstr "ÐÑаÑка за клиенÑ"
-
-msgctxt "field:stock.move,shipment_out_return:"
-msgid "Customer Return Shipment"
-msgstr "ÐÑаÑка вÑÑнаÑа Ð¾Ñ ÐºÐ»Ð¸ÐµÐ½Ñ"
+msgctxt "field:stock.move,shipment:"
+msgid "Shipment"
+msgstr ""
msgctxt "field:stock.move,state:"
msgid "State"
@@ -1087,10 +1058,6 @@ msgctxt "model:ir.action,name:act_inventory_form"
msgid "Inventories"
msgstr "ÐнвенÑаÑизаÑии"
-msgctxt "model:ir.action,name:act_inventory_form_draft"
-msgid "Draft Inventories"
-msgstr "ÐÑÐ¾ÐµÐºÑ Ð½Ð° инвенÑаÑизаÑиÑ"
-
msgctxt "model:ir.action,name:act_location_form"
msgid "Locations"
msgstr "ÐеÑÑонаÑ
ождениÑ"
@@ -1108,18 +1075,6 @@ msgctxt "model:ir.action,name:act_move_form"
msgid "Moves"
msgstr "ÐвижениÑ"
-msgctxt "model:ir.action,name:act_move_form_cust"
-msgid "Moves to Customers"
-msgstr "ÐÐ²Ð¸Ð¶ÐµÐ½Ð¸Ñ ÐºÑм клиенÑи"
-
-msgctxt "model:ir.action,name:act_move_form_supp"
-msgid "Moves from Suppliers"
-msgstr "ÐÐ²Ð¸Ð¶ÐµÐ½Ð¸Ñ Ð¾Ñ Ð´Ð¾ÑÑавÑик"
-
-msgctxt "model:ir.action,name:act_move_form_supp_proceed"
-msgid "Moves from Suppliers Waiting Arrival"
-msgstr "ÐÐ²Ð¸Ð¶ÐµÐ½Ð¸Ñ Ð¾Ñ Ð´Ð¾ÑÑавÑик оÑакваÑи пÑиÑÑигане"
-
msgctxt "model:ir.action,name:act_period_list"
msgid "Periods"
msgstr "ÐеÑиоди"
@@ -1133,38 +1088,18 @@ msgctxt "model:ir.action,name:act_products_by_locations"
msgid "Products"
msgstr "ÐÑодÑкÑи по меÑÑонаÑ
ождениÑ"
-msgctxt "model:ir.action,name:act_shipment_in_draft"
-msgid "Draft Supplier Shipment"
-msgstr "ЧеÑнова на пÑаÑка на доÑÑавÑик"
-
msgctxt "model:ir.action,name:act_shipment_in_form"
msgid "Supplier Shipments"
msgstr "ÐÑаÑки на доÑÑавÑик"
-msgctxt "model:ir.action,name:act_shipment_in_form_received"
-msgid "Received Supplier shipments"
-msgstr "ÐÑаÑки полÑÑени Ð¾Ñ Ð´Ð¾ÑÑавÑик"
-
msgctxt "model:ir.action,name:act_shipment_in_return_form"
msgid "Supplier Return Shipments"
msgstr "ÐÑаÑка вÑÑнаÑа на доÑÑавÑик"
-msgctxt "model:ir.action,name:act_shipment_internal_assigned_form"
-msgid "Assigned Internal Shipments"
-msgstr "ÐазнаÑаване на вÑÑÑеÑна пÑаÑка"
-
-msgctxt "model:ir.action,name:act_shipment_internal_draft_form"
-msgid "Draft Internal Shipments"
-msgstr "ÐÑÐ¾ÐµÐºÑ Ð½Ð° вÑÑÑеÑна пÑаÑка"
-
msgctxt "model:ir.action,name:act_shipment_internal_form"
msgid "Internal Shipments"
msgstr "ÐÑÑÑеÑни изпÑаÑаниÑ"
-msgctxt "model:ir.action,name:act_shipment_internal_waiting_form"
-msgid "Internal Shipments Waiting Assignation"
-msgstr "ÐÑÑÑеÑни пÑаÑки оÑакваÑи назнаÑаване"
-
msgctxt "model:ir.action,name:act_shipment_out_form"
msgid "Customer Shipments"
msgstr "ÐÑаÑки за клиенÑи"
@@ -1177,18 +1112,6 @@ msgctxt "model:ir.action,name:act_shipment_out_form3"
msgid "Supplier Shipments"
msgstr "ÐÑаÑки на доÑÑавÑик"
-msgctxt "model:ir.action,name:act_shipment_out_form_assigned"
-msgid "Assigned Customer Shipments"
-msgstr "ÐазнаÑени пÑаÑки за клиенÑи"
-
-msgctxt "model:ir.action,name:act_shipment_out_form_ready"
-msgid "Customer Shipments Ready for Shipping"
-msgstr "ÐÑаÑки за клиенÑи гоÑови за изпÑаÑане"
-
-msgctxt "model:ir.action,name:act_shipment_out_form_waiting"
-msgid "Customer Shipments Waiting Assignation"
-msgstr "ÐÑаÑки за клиенÑи ÑакаÑи назнаÑаване"
-
msgctxt "model:ir.action,name:act_shipment_out_return_form"
msgid "Customer Return Shipments"
msgstr "ÐÑаÑки вÑÑнаÑи Ð¾Ñ ÐºÐ»Ð¸ÐµÐ½Ñ"
@@ -1246,6 +1169,144 @@ msgctxt "model:ir.action,name:wizard_shipment_out_assign"
msgid "Assign Shipment Out"
msgstr "ÐазнаÑаване на пÑаÑка за навÑн"
+msgctxt "model:ir.action.act_window.domain,name:act_inventory_form_domain_all"
+msgid "All"
+msgstr ""
+
+#, fuzzy
+msgctxt ""
+"model:ir.action.act_window.domain,name:act_inventory_form_domain_draft"
+msgid "Draft"
+msgstr "ÐÑоекÑ"
+
+msgctxt "model:ir.action.act_window.domain,name:act_move_form_domain_all"
+msgid "All"
+msgstr ""
+
+msgctxt ""
+"model:ir.action.act_window.domain,name:act_move_form_domain_from_supplier"
+msgid "From Suppliers"
+msgstr ""
+
+msgctxt ""
+"model:ir.action.act_window.domain,name:act_move_form_domain_from_supplier_waiting"
+msgid "From Suppliers Waiting"
+msgstr ""
+
+msgctxt ""
+"model:ir.action.act_window.domain,name:act_move_form_domain_to_customer"
+msgid "To Customers"
+msgstr ""
+
+msgctxt ""
+"model:ir.action.act_window.domain,name:act_shipment_in_form_domain_all"
+msgid "All"
+msgstr ""
+
+#, fuzzy
+msgctxt ""
+"model:ir.action.act_window.domain,name:act_shipment_in_form_domain_draft"
+msgid "Draft"
+msgstr "ÐÑоекÑ"
+
+#, fuzzy
+msgctxt ""
+"model:ir.action.act_window.domain,name:act_shipment_in_form_domain_received"
+msgid "Received"
+msgstr "ÐолÑÑен"
+
+msgctxt ""
+"model:ir.action.act_window.domain,name:act_shipment_in_return_form_domain_all"
+msgid "All"
+msgstr ""
+
+#, fuzzy
+msgctxt ""
+"model:ir.action.act_window.domain,name:act_shipment_in_return_form_domain_assigned"
+msgid "Assigned"
+msgstr "ÐазнаÑен"
+
+#, fuzzy
+msgctxt ""
+"model:ir.action.act_window.domain,name:act_shipment_in_return_form_domain_draft"
+msgid "Draft"
+msgstr "ÐÑоекÑ"
+
+#, fuzzy
+msgctxt ""
+"model:ir.action.act_window.domain,name:act_shipment_in_return_form_domain_waiting"
+msgid "Waiting"
+msgstr "ÐÑакване"
+
+msgctxt ""
+"model:ir.action.act_window.domain,name:act_shipment_internal_form_domain_all"
+msgid "All"
+msgstr ""
+
+#, fuzzy
+msgctxt ""
+"model:ir.action.act_window.domain,name:act_shipment_internal_form_domain_assigned"
+msgid "Assigned"
+msgstr "ÐазнаÑен"
+
+#, fuzzy
+msgctxt ""
+"model:ir.action.act_window.domain,name:act_shipment_internal_form_domain_draft"
+msgid "Draft"
+msgstr "ÐÑоекÑ"
+
+#, fuzzy
+msgctxt ""
+"model:ir.action.act_window.domain,name:act_shipment_internal_form_domain_waiting"
+msgid "Waiting"
+msgstr "ÐÑакване"
+
+msgctxt ""
+"model:ir.action.act_window.domain,name:act_shipment_out_form_domain_all"
+msgid "All"
+msgstr ""
+
+#, fuzzy
+msgctxt ""
+"model:ir.action.act_window.domain,name:act_shipment_out_form_domain_assigned"
+msgid "Assigned"
+msgstr "ÐазнаÑен"
+
+#, fuzzy
+msgctxt ""
+"model:ir.action.act_window.domain,name:act_shipment_out_form_domain_draft"
+msgid "Draft"
+msgstr "ÐÑоекÑ"
+
+#, fuzzy
+msgctxt ""
+"model:ir.action.act_window.domain,name:act_shipment_out_form_domain_packed"
+msgid "Packed"
+msgstr "Ðпакован"
+
+#, fuzzy
+msgctxt ""
+"model:ir.action.act_window.domain,name:act_shipment_out_form_domain_waiting"
+msgid "Waiting"
+msgstr "ÐÑакване"
+
+msgctxt ""
+"model:ir.action.act_window.domain,name:act_shipment_out_return_form_domain_all"
+msgid "All"
+msgstr ""
+
+#, fuzzy
+msgctxt ""
+"model:ir.action.act_window.domain,name:act_shipment_out_return_form_domain_draft"
+msgid "Draft"
+msgstr "ÐÑоекÑ"
+
+#, fuzzy
+msgctxt ""
+"model:ir.action.act_window.domain,name:act_shipment_out_return_form_domain_received"
+msgid "Received"
+msgstr "ÐолÑÑен"
+
msgctxt "model:ir.sequence,name:sequence_shipment_in"
msgid "Supplier Shipment"
msgstr "ÐзпÑаÑане на доÑÑавÑик"
@@ -1294,10 +1355,6 @@ msgctxt "model:ir.ui.menu,name:menu_inventory_form"
msgid "Inventories"
msgstr "ÐнвенÑаÑизаÑии"
-msgctxt "model:ir.ui.menu,name:menu_inventory_form_draft"
-msgid "Draft Inventories"
-msgstr "ÐÑÐ¾ÐµÐºÑ Ð½Ð° инвенÑаÑизаÑиÑ"
-
msgctxt "model:ir.ui.menu,name:menu_location_form"
msgid "Locations"
msgstr "ÐеÑÑонаÑ
ождениÑ"
@@ -1310,18 +1367,6 @@ msgctxt "model:ir.ui.menu,name:menu_move_form"
msgid "Moves"
msgstr "ÐвижениÑ"
-msgctxt "model:ir.ui.menu,name:menu_move_form_cust"
-msgid "Moves to Customers"
-msgstr "ÐÐ²Ð¸Ð¶ÐµÐ½Ð¸Ñ ÐºÑм клиенÑи"
-
-msgctxt "model:ir.ui.menu,name:menu_move_form_supp"
-msgid "Moves from Suppliers"
-msgstr "ÐÐ²Ð¸Ð¶ÐµÐ½Ð¸Ñ Ð¾Ñ Ð´Ð¾ÑÑавÑик"
-
-msgctxt "model:ir.ui.menu,name:menu_move_form_supp_proceed"
-msgid "Moves from Suppliers Waiting Arrival"
-msgstr "ÐÐ²Ð¸Ð¶ÐµÐ½Ð¸Ñ Ð¾Ñ Ð´Ð¾ÑÑавÑик оÑакваÑи пÑиÑÑигане"
-
msgctxt "model:ir.ui.menu,name:menu_period_list"
msgid "Periods"
msgstr "ÐеÑиоди"
@@ -1330,58 +1375,26 @@ msgctxt "model:ir.ui.menu,name:menu_reporting"
msgid "Reporting"
msgstr "СпÑавки"
-msgctxt "model:ir.ui.menu,name:menu_shipment_in_draft"
-msgid "Draft Supplier Shipment"
-msgstr "ЧеÑнова на пÑаÑка на доÑÑавÑик"
-
msgctxt "model:ir.ui.menu,name:menu_shipment_in_form"
msgid "Supplier Shipments"
msgstr "ÐÑаÑки на доÑÑавÑик"
-msgctxt "model:ir.ui.menu,name:menu_shipment_in_received"
-msgid "Received Supplier shipments"
-msgstr "ÐÑаÑки полÑÑени Ð¾Ñ Ð´Ð¾ÑÑавÑик"
-
msgctxt "model:ir.ui.menu,name:menu_shipment_in_return_form"
msgid "Supplier Return Shipments"
msgstr "ÐÑаÑка вÑÑнаÑа на доÑÑавÑик"
-msgctxt "model:ir.ui.menu,name:menu_shipment_internal_assigned_form"
-msgid "Assigned Internal Shipments"
-msgstr "ÐазнаÑени вÑÑÑеÑни пÑаÑки"
-
-msgctxt "model:ir.ui.menu,name:menu_shipment_internal_draft_form"
-msgid "Draft Internal Shipments"
-msgstr "ÐÑÐ¾ÐµÐºÑ Ð½Ð° вÑÑÑеÑна пÑаÑка"
-
msgctxt "model:ir.ui.menu,name:menu_shipment_internal_form"
msgid "Internal Shipments"
msgstr "ÐÑÑÑеÑни изпÑаÑаниÑ"
-msgctxt "model:ir.ui.menu,name:menu_shipment_internal_waiting_form"
-msgid "Internal Shipments Waiting Assignation"
-msgstr "ÐÑÑÑеÑни пÑаÑки оÑакваÑи назнаÑаване"
-
-msgctxt "model:ir.ui.menu,name:menu_shipment_out_assigned"
-msgid "Assigned Customer Shipments"
-msgstr "ÐазнаÑени пÑаÑки за клиенÑи"
-
msgctxt "model:ir.ui.menu,name:menu_shipment_out_form"
msgid "Customer Shipments"
msgstr "ÐÑаÑки за клиенÑи"
-msgctxt "model:ir.ui.menu,name:menu_shipment_out_ready"
-msgid "Customer Shipments Ready for Shipping"
-msgstr "ÐÑаÑки за клиенÑи гоÑови за изпÑаÑане"
-
msgctxt "model:ir.ui.menu,name:menu_shipment_out_return_form"
msgid "Customer Return Shipments"
msgstr "ÐÑаÑки вÑÑнаÑи Ð¾Ñ ÐºÐ»Ð¸ÐµÐ½Ñ"
-msgctxt "model:ir.ui.menu,name:menu_shipment_out_waiting"
-msgid "Customer Shipments Waiting Assignation"
-msgstr "ÐÑаÑки за клиенÑи ÑакаÑи назнаÑаване"
-
msgctxt "model:ir.ui.menu,name:menu_stock"
msgid "Inventory & Stock"
msgstr "ÐнвенÑаÑизаÑÐ¸Ñ & налиÑноÑÑ"
@@ -1994,10 +2007,6 @@ msgctxt "view:stock.location:"
msgid "Locations"
msgstr "ÐеÑÑонаÑ
ождениÑ"
-msgctxt "view:stock.location:"
-msgid "Product Stock"
-msgstr "ÐалиÑноÑÑ Ð½Ð° пÑодÑкÑ"
-
msgctxt "view:stock.move:"
msgid "Move"
msgstr "Ðвижение"
@@ -2067,10 +2076,6 @@ msgid "Draft"
msgstr "ÐÑоекÑ"
msgctxt "view:stock.shipment.in.return:"
-msgid "Reset to Draft"
-msgstr "ÐзпÑаÑане в пÑоекÑ"
-
-msgctxt "view:stock.shipment.in.return:"
msgid "Supplier Return Shipment"
msgstr "ÐÑаÑка вÑÑнаÑа на доÑÑавÑик"
@@ -2082,10 +2087,6 @@ msgctxt "view:stock.shipment.in.return:"
msgid "Wait"
msgstr "ÐÑакване"
-msgctxt "view:stock.shipment.in.return:"
-msgid "Waiting"
-msgstr "ÐзÑакваÑ"
-
msgctxt "view:stock.shipment.in:"
msgid "Cancel"
msgstr "ÐÑказ"
@@ -2103,18 +2104,10 @@ msgid "Inventory Moves"
msgstr "ÐÐ²Ð¸Ð¶ÐµÐ½Ð¸Ñ Ð½Ð° инвенÑаÑизаÑиÑ"
msgctxt "view:stock.shipment.in:"
-msgid "Moves"
-msgstr "ÐвижениÑ"
-
-msgctxt "view:stock.shipment.in:"
msgid "Receive"
msgstr "ÐолÑÑаване"
msgctxt "view:stock.shipment.in:"
-msgid "Received"
-msgstr "ÐолÑÑен"
-
-msgctxt "view:stock.shipment.in:"
msgid "Reset to Draft"
msgstr "ÐзпÑаÑане в пÑоекÑ"
@@ -2159,10 +2152,6 @@ msgid "Internal Shipments"
msgstr "ÐÑÑÑеÑни пÑаÑки"
msgctxt "view:stock.shipment.internal:"
-msgid "Reset to Draft"
-msgstr "ÐзпÑаÑане в пÑоекÑ"
-
-msgctxt "view:stock.shipment.internal:"
msgid "Waiting"
msgstr "ÐзÑакваÑ"
@@ -2203,17 +2192,9 @@ msgid "Inventory Moves"
msgstr "ÐÐ²Ð¸Ð¶ÐµÐ½Ð¸Ñ Ð½Ð° инвенÑаÑизаÑиÑ"
msgctxt "view:stock.shipment.out.return:"
-msgid "Moves"
-msgstr "ÐвижениÑ"
-
-msgctxt "view:stock.shipment.out.return:"
msgid "Received"
msgstr "ÐолÑÑен"
-msgctxt "view:stock.shipment.out.return:"
-msgid "Reset to Draft"
-msgstr "ÐзпÑаÑане в пÑоекÑ"
-
msgctxt "view:stock.shipment.out:"
msgid "Assign"
msgstr "ÐазнаÑаване"
@@ -2251,10 +2232,6 @@ msgid "Outgoing Moves"
msgstr "ÐзÑ
одÑÑи движениÑ"
msgctxt "view:stock.shipment.out:"
-msgid "Reset to Draft"
-msgstr "ÐзпÑаÑане в пÑоекÑ"
-
-msgctxt "view:stock.shipment.out:"
msgid "Waiting"
msgstr "ÐзÑакваÑ"
diff --git a/locale/ca_ES.po b/locale/ca_ES.po
index f8c0a57..e0f76b3 100644
--- a/locale/ca_ES.po
+++ b/locale/ca_ES.po
@@ -7,131 +7,135 @@ msgid ""
"You cannot change the default uom for a product which is associated to stock"
" moves."
msgstr ""
-"No pot canviar la UdM predeterminada d'un producte que està associat amb "
+"No podeu canviar la UdM predeterminada d'un producte que està associat amb "
"moviments d'existències."
msgctxt "error:stock.inventory.line:"
-msgid "Line quantity must be positive!"
-msgstr "La quantitat de la lÃnia ha de ser positiva"
+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!"
+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 "Ha de cancel·lar la ubicació \"%s\" abans d'eliminar-la."
+msgid "Inventory \"%s\" must be cancelled before deletion."
+msgstr "Heu de cancel·lar l'inventari \"%s\" abans de ser eliminat."
msgctxt "error:stock.location:"
-msgid ""
-"A location with existing moves cannot be changed to a type that does not "
-"support moves."
+msgid "Location \"%(location)s\" must be a child of warehouse \"%(warehouse)s\"."
msgstr ""
-"Una ubicació amb moviments no pot ser canviat a un tipus que no suporti "
-"moviments."
-
-msgctxt "error:stock.location:"
-msgid "Location \"%s\" must be a child of warehouse \"%s\"!"
-msgstr "La ubicació \"%s\" ha de ser filla del magatzem \"%s\"."
+"La ubicació \"%(location)s\" ha d'estar relacionada amb el magatzem "
+"\"%(warehouse)s\"."
msgctxt "error:stock.location:"
-msgid "You can not create recursive locations!"
-msgstr "No pot crear ubicacions recursives."
+msgid ""
+"Location \"%s\" with existing moves cannot be changed to a type that does "
+"not support moves."
+msgstr ""
+"No es pot canviar la ubicació \"%s\" amb moviments existens a un tipus que "
+"no suporta moviments."
msgctxt "error:stock.move:"
msgid "Internal move quantity must be positive"
msgstr "La quantitat de moviment intern ha de ser positiva."
msgctxt "error:stock.move:"
-msgid "Move can be on only one Shipment"
-msgstr "Un moviment només pot estar en un albarà ."
-
-msgctxt "error:stock.move:"
msgid "Move quantity must be positive"
msgstr "La quantitat a moure ha de ser positiva."
msgctxt "error:stock.move:"
msgid "Source and destination location must be different"
-msgstr "Els llocs origen i destà han de ser diferents"
+msgstr "Les ubicacions origen i destà han de ser diferents."
msgctxt "error:stock.move:"
-msgid "You can not modify a move in the state: \"Assigned\", \"Done\" or \"Cancel\""
+msgid ""
+"You can not delete stock move \"%s\" because it is not in draft or cancelled"
+" state."
msgstr ""
-"No pot modificar un moviment en estat: \"Assignat\", \"Realitzat\" o "
-"\"Cancel·lat\"."
+"No podeu esborrar el moviment d'estoc \"%s\" perquè no està en estat "
+"esborrany o cancel·lat."
msgctxt "error:stock.move:"
-msgid "You can not modify move in closed period!"
-msgstr "No pot modificar un moviment en un perÃode tancat."
+msgid "You can not modify move \"%(move)s\" because period \"%(period)s\" is closed."
+msgstr ""
+"No es pot modificar el moviment \"%(move)s\" perquè el perÃode "
+"\"%(period)s\" està tancat."
msgctxt "error:stock.move:"
-msgid "You can not set state to assigned!"
-msgstr "No pot establir l'estat com a assignat."
+msgid ""
+"You can not modify stock move \"%s\"because it is in \"Assigned\", \"Done\" "
+"or \"Cancel\" state."
+msgstr ""
+"No podeu modificar el moviment d'estoc \"%s\" perquè està en estat "
+"\"Assignat\", \"Realitzat\" o \"Cancel·lat\"."
msgctxt "error:stock.move:"
-msgid "You can not set state to done!"
-msgstr "No pot establir l'estat com a acabat."
+msgid "You can not set stock move \"%s\" to assigned state."
+msgstr "No podeu canviar el moviment d'estoc \"%s\" a estat assignat."
msgctxt "error:stock.move:"
-msgid "You can not set state to draft!"
-msgstr "No pot establir l'estat com a esborrany."
+msgid "You can not set stock move \"%s\" to done state."
+msgstr "No podeu canviar el moviment d'estoc \"%s\" a estat realitzat."
msgctxt "error:stock.move:"
-msgid "You can only delete draft or cancelled moves!"
-msgstr "Només pot esborrar moviments en esborrany o cancel·lats"
+msgid "You can not set stock move \"%s\" to draft state."
+msgstr "No podeu canviar el moviment d'estoc \"%s\" a estat esborrany."
msgctxt "error:stock.period:"
-msgid "You can not close a period in the future or today!"
-msgstr "No pot tancar un perÃode quan té moviments reservats."
+msgid "You can not close a period in the future or today."
+msgstr "No es pot tancar un perÃode d'avui o proximament."
msgctxt "error:stock.period:"
-msgid "You can not close a period when there is still assigned moves!"
-msgstr "No pot tancar un perÃode quan té moviments reservats."
+msgid "You can not close a period when there still are assigned moves."
+msgstr "No podeu tancar un perÃode que encara te moviments assignats."
msgctxt "error:stock.shipment.in.return:"
-msgid "Supplier Return Shipment \"%s\" must be cancelled before deletion!"
+msgid "Supplier Return Shipment \"%s\" must be cancelled before deletion."
msgstr ""
-"Ha de cancel·lar l'abarán devolució de proveïdor \"%s\" abans d'eliminar-lo."
+"Heu de cancel·lar l'albarà devolució al proveïdor \"%s\" abans de ser "
+"eliminat."
msgctxt "error:stock.shipment.in:"
msgid ""
"Incoming Moves must have the warehouse input location as destination "
-"location!"
+"location."
msgstr ""
-"Els moviments d'entrada han de tenir la ubicació del magatzem d'entrada com "
-"la ubicació de destinació"
+"Els moviments d'entrada han de tenir una ubicació d'entrada del magatzem "
+"com a ubicació destÃ."
msgctxt "error:stock.shipment.in:"
msgid ""
-"Inventory Moves must have the warehouse input location as source location!"
+"Inventory Moves must have the warehouse input location as source location."
msgstr ""
-"Els moviments d'inventari han de tenir la ubicació del magatzem d'entrada "
-"com la ubicació d'origen"
+"Els moviments d'inventari han de tenir la ubicació d'entrada del magatzem "
+"com a ubicació origen."
msgctxt "error:stock.shipment.in:"
-msgid "Supplier Shipment \"%s\" must be cancelled before deletion!"
-msgstr "Ha de cancel·lar un albarà de proveïdor \"%s\" abans d'eliminar-lo."
+msgid "Supplier Shipment \"%s\" must be cancelled before deletion."
+msgstr "Heu de cancel·lar l'albarà de proveïdor \"%s\" abans de ser eliminat."
msgctxt "error:stock.shipment.internal:"
-msgid "Internal Shipment \"%s\" must be cancelled before deletion!"
-msgstr "Ha de cancel·lar l'albarà intern \"%s\" abans d'eliminar-lo."
+msgid "Internal Shipment \"%s\" must be cancelled before deletion."
+msgstr "Heu de cancel·lar l'albarà intern \"%s\" abans de ser eliminat."
msgctxt "error:stock.shipment.out.return.create:"
-msgid "The shipment with code %s is not yet sent."
-msgstr "L'albarà amb codi %s no ha estat enviat encara."
+msgid "The shipment with code \"%s\" is not yet sent."
+msgstr "L'albarà amb codi \"%s\" encara no s'ha enviat."
msgctxt "error:stock.shipment.out.return.create:"
msgid "You can not create return shipment"
-msgstr "No pot crear un albarà de devolució."
+msgstr "No podeu crear un albarà de devolució."
msgctxt "error:stock.shipment.out.return:"
-msgid "Customer Return Shipment \"%s\" must be cancelled before deletion!"
+msgid "Customer Return Shipment \"%s\" must be cancelled before deletion."
msgstr ""
-"Ha de cancel·lar l'albarà de devolució de client \"%s\" abans d'eliminar-lo."
+"Heu de cancel·lar l'albarà de devolució de client \"%s\" abans de ser "
+"eliminat."
msgctxt "error:stock.shipment.out:"
-msgid "Customer Shipment \"%s\" must be cancelled before deletion!"
-msgstr "Ha de cancel·lar l'albarà de client \"%s\" abans d'eliminar-lo."
+msgid "Customer Shipment \"%s\" must be cancelled before deletion."
+msgstr "Heu de cancel·lar l'albarà de client \"%s\" abans de ser eliminat."
msgctxt "field:party.address,delivery:"
msgid "Delivery"
@@ -195,23 +199,23 @@ msgstr "Nom"
msgctxt "field:stock.configuration,shipment_in_return_sequence:"
msgid "Supplier Return Shipment Sequence"
-msgstr "Seqüència albarà devolució proveïdor"
+msgstr "Seqüència d'albarà devolució proveïdor"
msgctxt "field:stock.configuration,shipment_in_sequence:"
msgid "Supplier Shipment Sequence"
-msgstr "Seqüència albarà proveïdor"
+msgstr "Seqüència d'albarà proveïdor"
msgctxt "field:stock.configuration,shipment_internal_sequence:"
msgid "Internal Shipment Sequence"
-msgstr "Seqüència albarà intern"
+msgstr "Seqüència d'albarà intern"
msgctxt "field:stock.configuration,shipment_out_return_sequence:"
msgid "Customer Return Shipment Sequence"
-msgstr "Seqüència albarà devolució client"
+msgstr "Seqüència d'albarà devolució client"
msgctxt "field:stock.configuration,shipment_out_sequence:"
msgid "Customer Shipment Sequence"
-msgstr "Seqüència albarà client"
+msgstr "Seqüència d'albarà client"
msgctxt "field:stock.configuration,write_date:"
msgid "Write Date"
@@ -391,7 +395,7 @@ msgstr "Dreta"
msgctxt "field:stock.location,storage_location:"
msgid "Storage"
-msgstr "Magatzem"
+msgstr "Intern"
msgctxt "field:stock.location,type:"
msgid "Location type"
@@ -441,6 +445,10 @@ msgctxt "field:stock.move,internal_quantity:"
msgid "Internal Quantity"
msgstr "Quantitat interna"
+msgctxt "field:stock.move,origin:"
+msgid "Origin"
+msgstr "Origen"
+
msgctxt "field:stock.move,planned_date:"
msgid "Planned Date"
msgstr "Data estimada"
@@ -461,25 +469,9 @@ msgctxt "field:stock.move,rec_name:"
msgid "Name"
msgstr "Nom"
-msgctxt "field:stock.move,shipment_in:"
-msgid "Supplier Shipment"
-msgstr "Albarà de proveïdor"
-
-msgctxt "field:stock.move,shipment_in_return:"
-msgid "Supplier Return Shipment"
-msgstr "Albarà devolució proveïdor"
-
-msgctxt "field:stock.move,shipment_internal:"
-msgid "Internal Shipment"
-msgstr "Albarà intern"
-
-msgctxt "field:stock.move,shipment_out:"
-msgid "Customer Shipment"
-msgstr "Albarà client"
-
-msgctxt "field:stock.move,shipment_out_return:"
-msgid "Customer Return Shipment"
-msgstr "Albarà client devolució"
+msgctxt "field:stock.move,shipment:"
+msgid "Shipment"
+msgstr "Enviaments"
msgctxt "field:stock.move,state:"
msgid "State"
@@ -875,7 +867,7 @@ msgstr "Data creació"
msgctxt "field:stock.shipment.out,create_uid:"
msgid "Create User"
-msgstr "Crear usuari"
+msgstr "Usuari creació"
msgctxt "field:stock.shipment.out,customer:"
msgid "Customer"
@@ -1071,10 +1063,6 @@ msgctxt "model:ir.action,name:act_inventory_form"
msgid "Inventories"
msgstr "Inventaris"
-msgctxt "model:ir.action,name:act_inventory_form_draft"
-msgid "Draft Inventories"
-msgstr "Inventaris borrador"
-
msgctxt "model:ir.action,name:act_location_form"
msgid "Locations"
msgstr "Ubicacions"
@@ -1091,18 +1079,6 @@ msgctxt "model:ir.action,name:act_move_form"
msgid "Moves"
msgstr "Moviments"
-msgctxt "model:ir.action,name:act_move_form_cust"
-msgid "Moves to Customers"
-msgstr "Moviments client"
-
-msgctxt "model:ir.action,name:act_move_form_supp"
-msgid "Moves from Suppliers"
-msgstr "Moviments proveïdor"
-
-msgctxt "model:ir.action,name:act_move_form_supp_proceed"
-msgid "Moves from Suppliers Waiting Arrival"
-msgstr "Moviments proveïdor esperant arribada"
-
msgctxt "model:ir.action,name:act_period_list"
msgid "Periods"
msgstr "PerÃodes"
@@ -1115,38 +1091,18 @@ msgctxt "model:ir.action,name:act_products_by_locations"
msgid "Products"
msgstr "Productes"
-msgctxt "model:ir.action,name:act_shipment_in_draft"
-msgid "Draft Supplier Shipment"
-msgstr "Albarans proveïdor borrador"
-
msgctxt "model:ir.action,name:act_shipment_in_form"
msgid "Supplier Shipments"
msgstr "Albarans proveïdors"
-msgctxt "model:ir.action,name:act_shipment_in_form_received"
-msgid "Received Supplier shipments"
-msgstr "Albarans proveïdors rebuts"
-
msgctxt "model:ir.action,name:act_shipment_in_return_form"
msgid "Supplier Return Shipments"
-msgstr "Albarans proveïdor devolució"
-
-msgctxt "model:ir.action,name:act_shipment_internal_assigned_form"
-msgid "Assigned Internal Shipments"
-msgstr "Albarans intern assignats"
-
-msgctxt "model:ir.action,name:act_shipment_internal_draft_form"
-msgid "Draft Internal Shipments"
-msgstr "Albarans intern borrador"
+msgstr "Albarans devolució proveïdor"
msgctxt "model:ir.action,name:act_shipment_internal_form"
msgid "Internal Shipments"
msgstr "Albarans intern"
-msgctxt "model:ir.action,name:act_shipment_internal_waiting_form"
-msgid "Internal Shipments Waiting Assignation"
-msgstr "Albarans intern esperant resposta"
-
msgctxt "model:ir.action,name:act_shipment_out_form"
msgid "Customer Shipments"
msgstr "Albarans client"
@@ -1159,25 +1115,13 @@ msgctxt "model:ir.action,name:act_shipment_out_form3"
msgid "Supplier Shipments"
msgstr "Albarans proveïdors"
-msgctxt "model:ir.action,name:act_shipment_out_form_assigned"
-msgid "Assigned Customer Shipments"
-msgstr "Albarans client assignats"
-
-msgctxt "model:ir.action,name:act_shipment_out_form_ready"
-msgid "Customer Shipments Ready for Shipping"
-msgstr "Albarans client llest per l'enviament"
-
-msgctxt "model:ir.action,name:act_shipment_out_form_waiting"
-msgid "Customer Shipments Waiting Assignation"
-msgstr "Albarans client esperant reserva"
-
msgctxt "model:ir.action,name:act_shipment_out_return_form"
msgid "Customer Return Shipments"
-msgstr "Albarans client devolució"
+msgstr "Albarans devolució client"
msgctxt "model:ir.action,name:act_stock_configuration_form"
msgid "Stock Configuration"
-msgstr "Configuració estoc"
+msgstr "Configuració d'estoc"
msgctxt "model:ir.action,name:create_shipment_out_return"
msgid "Create Return Shipment"
@@ -1227,6 +1171,129 @@ msgctxt "model:ir.action,name:wizard_shipment_out_assign"
msgid "Assign Shipment Out"
msgstr "Assignació d'albarà de sortida"
+msgctxt "model:ir.action.act_window.domain,name:act_inventory_form_domain_all"
+msgid "All"
+msgstr "Tots"
+
+msgctxt ""
+"model:ir.action.act_window.domain,name:act_inventory_form_domain_draft"
+msgid "Draft"
+msgstr "Esborrany"
+
+msgctxt "model:ir.action.act_window.domain,name:act_move_form_domain_all"
+msgid "All"
+msgstr "Tots"
+
+msgctxt ""
+"model:ir.action.act_window.domain,name:act_move_form_domain_from_supplier"
+msgid "From Suppliers"
+msgstr "De proveïdor"
+
+msgctxt ""
+"model:ir.action.act_window.domain,name:act_move_form_domain_from_supplier_waiting"
+msgid "From Suppliers Waiting"
+msgstr "En espera des de proveïdor"
+
+msgctxt ""
+"model:ir.action.act_window.domain,name:act_move_form_domain_to_customer"
+msgid "To Customers"
+msgstr "A client"
+
+msgctxt ""
+"model:ir.action.act_window.domain,name:act_shipment_in_form_domain_all"
+msgid "All"
+msgstr "Tots"
+
+msgctxt ""
+"model:ir.action.act_window.domain,name:act_shipment_in_form_domain_draft"
+msgid "Draft"
+msgstr "Esborrany"
+
+msgctxt ""
+"model:ir.action.act_window.domain,name:act_shipment_in_form_domain_received"
+msgid "Received"
+msgstr "Rebut"
+
+msgctxt ""
+"model:ir.action.act_window.domain,name:act_shipment_in_return_form_domain_all"
+msgid "All"
+msgstr "Tots"
+
+msgctxt ""
+"model:ir.action.act_window.domain,name:act_shipment_in_return_form_domain_assigned"
+msgid "Assigned"
+msgstr "Assignat"
+
+msgctxt ""
+"model:ir.action.act_window.domain,name:act_shipment_in_return_form_domain_draft"
+msgid "Draft"
+msgstr "Esborrany"
+
+msgctxt ""
+"model:ir.action.act_window.domain,name:act_shipment_in_return_form_domain_waiting"
+msgid "Waiting"
+msgstr "Esperant"
+
+msgctxt ""
+"model:ir.action.act_window.domain,name:act_shipment_internal_form_domain_all"
+msgid "All"
+msgstr "Tots"
+
+msgctxt ""
+"model:ir.action.act_window.domain,name:act_shipment_internal_form_domain_assigned"
+msgid "Assigned"
+msgstr "Assignat"
+
+msgctxt ""
+"model:ir.action.act_window.domain,name:act_shipment_internal_form_domain_draft"
+msgid "Draft"
+msgstr "Esborrany"
+
+msgctxt ""
+"model:ir.action.act_window.domain,name:act_shipment_internal_form_domain_waiting"
+msgid "Waiting"
+msgstr "Esperant"
+
+msgctxt ""
+"model:ir.action.act_window.domain,name:act_shipment_out_form_domain_all"
+msgid "All"
+msgstr "Tots"
+
+msgctxt ""
+"model:ir.action.act_window.domain,name:act_shipment_out_form_domain_assigned"
+msgid "Assigned"
+msgstr "Assignat"
+
+msgctxt ""
+"model:ir.action.act_window.domain,name:act_shipment_out_form_domain_draft"
+msgid "Draft"
+msgstr "Esborrany"
+
+msgctxt ""
+"model:ir.action.act_window.domain,name:act_shipment_out_form_domain_packed"
+msgid "Packed"
+msgstr "Empaquetat"
+
+msgctxt ""
+"model:ir.action.act_window.domain,name:act_shipment_out_form_domain_waiting"
+msgid "Waiting"
+msgstr "Esperant"
+
+msgctxt ""
+"model:ir.action.act_window.domain,name:act_shipment_out_return_form_domain_all"
+msgid "All"
+msgstr "Tots"
+
+msgctxt ""
+"model:ir.action.act_window.domain,name:act_shipment_out_return_form_domain_draft"
+msgid "Draft"
+msgstr "Esborrany"
+
+msgctxt ""
+"model:ir.action.act_window.domain,name:act_shipment_out_return_form_domain_received"
+msgid "Received"
+msgstr "Rebut"
+
msgctxt "model:ir.sequence,name:sequence_shipment_in"
msgid "Supplier Shipment"
msgstr "Albarà de proveïdor"
@@ -1245,7 +1312,7 @@ msgstr "Albarà client"
msgctxt "model:ir.sequence,name:sequence_shipment_out_return"
msgid "Customer Return Shipment"
-msgstr "Albarà client devolució"
+msgstr "Albarà devolució client"
msgctxt "model:ir.sequence.type,name:sequence_type_shipment_in"
msgid "Supplier Shipment"
@@ -1265,7 +1332,7 @@ msgstr "Albarà client"
msgctxt "model:ir.sequence.type,name:sequence_type_shipment_out_return"
msgid "Customer Return Shipment"
-msgstr "Albarà client devolució"
+msgstr "Albarà devolució client"
msgctxt "model:ir.ui.menu,name:menu_configuration"
msgid "Configuration"
@@ -1275,10 +1342,6 @@ msgctxt "model:ir.ui.menu,name:menu_inventory_form"
msgid "Inventories"
msgstr "Inventaris"
-msgctxt "model:ir.ui.menu,name:menu_inventory_form_draft"
-msgid "Draft Inventories"
-msgstr "Borrador"
-
msgctxt "model:ir.ui.menu,name:menu_location_form"
msgid "Locations"
msgstr "Ubicacions"
@@ -1291,18 +1354,6 @@ msgctxt "model:ir.ui.menu,name:menu_move_form"
msgid "Moves"
msgstr "Moviments"
-msgctxt "model:ir.ui.menu,name:menu_move_form_cust"
-msgid "Moves to Customers"
-msgstr "Clients"
-
-msgctxt "model:ir.ui.menu,name:menu_move_form_supp"
-msgid "Moves from Suppliers"
-msgstr "Proveïdors"
-
-msgctxt "model:ir.ui.menu,name:menu_move_form_supp_proceed"
-msgid "Moves from Suppliers Waiting Arrival"
-msgstr "Esperant arribada"
-
msgctxt "model:ir.ui.menu,name:menu_period_list"
msgid "Periods"
msgstr "PerÃodes"
@@ -1311,65 +1362,33 @@ msgctxt "model:ir.ui.menu,name:menu_reporting"
msgid "Reporting"
msgstr "Informes"
-msgctxt "model:ir.ui.menu,name:menu_shipment_in_draft"
-msgid "Draft Supplier Shipment"
-msgstr "Borrador"
-
msgctxt "model:ir.ui.menu,name:menu_shipment_in_form"
msgid "Supplier Shipments"
msgstr "Albarans proveïdors"
-msgctxt "model:ir.ui.menu,name:menu_shipment_in_received"
-msgid "Received Supplier shipments"
-msgstr "Rebuts"
-
msgctxt "model:ir.ui.menu,name:menu_shipment_in_return_form"
msgid "Supplier Return Shipments"
msgstr "Devolució"
-msgctxt "model:ir.ui.menu,name:menu_shipment_internal_assigned_form"
-msgid "Assigned Internal Shipments"
-msgstr "Reservats"
-
-msgctxt "model:ir.ui.menu,name:menu_shipment_internal_draft_form"
-msgid "Draft Internal Shipments"
-msgstr "Borrador"
-
msgctxt "model:ir.ui.menu,name:menu_shipment_internal_form"
msgid "Internal Shipments"
msgstr "Albarans intern"
-msgctxt "model:ir.ui.menu,name:menu_shipment_internal_waiting_form"
-msgid "Internal Shipments Waiting Assignation"
-msgstr "Esperant reserva"
-
-msgctxt "model:ir.ui.menu,name:menu_shipment_out_assigned"
-msgid "Assigned Customer Shipments"
-msgstr "Reservats"
-
msgctxt "model:ir.ui.menu,name:menu_shipment_out_form"
msgid "Customer Shipments"
msgstr "Albarans client"
-msgctxt "model:ir.ui.menu,name:menu_shipment_out_ready"
-msgid "Customer Shipments Ready for Shipping"
-msgstr "Llest per l'enviament"
-
msgctxt "model:ir.ui.menu,name:menu_shipment_out_return_form"
msgid "Customer Return Shipments"
msgstr "Devolució"
-msgctxt "model:ir.ui.menu,name:menu_shipment_out_waiting"
-msgid "Customer Shipments Waiting Assignation"
-msgstr "Esperant reserva"
-
msgctxt "model:ir.ui.menu,name:menu_stock"
msgid "Inventory & Stock"
msgstr "LogÃstica"
msgctxt "model:ir.ui.menu,name:menu_stock_configuration"
msgid "Stock Configuration"
-msgstr "Configuració estoc"
+msgstr "Estoc"
msgctxt "model:product.by_location.start,name:"
msgid "Product by Location"
@@ -1389,7 +1408,7 @@ msgstr "Forçar reserves en la logÃstica"
msgctxt "model:stock.configuration,name:"
msgid "Stock Configuration"
-msgstr "Configuració estoc"
+msgstr "Configuració d'estoc"
msgctxt "model:stock.inventory,name:"
msgid "Stock Inventory"
@@ -1485,7 +1504,7 @@ msgstr "Assignació d'albarà de sortida"
msgctxt "model:stock.shipment.out.return,name:"
msgid "Customer Return Shipment"
-msgstr "Albarà client devolució"
+msgstr "Albarà devolució client"
msgctxt "odt:stock.shipment.in.restocking_list:"
msgid "/"
@@ -1781,7 +1800,7 @@ msgstr "Producció"
msgctxt "selection:stock.location,type:"
msgid "Storage"
-msgstr "Magatzem"
+msgstr "Intern"
msgctxt "selection:stock.location,type:"
msgid "Supplier"
@@ -1919,10 +1938,6 @@ msgctxt "view:party.party:"
msgid "Stock"
msgstr "Existències"
-msgctxt "view:party.party:"
-msgid "_Stock"
-msgstr "_Existències"
-
msgctxt "view:product.by_location.start:"
msgid "Product by Location"
msgstr "Producte per ubicació"
@@ -1933,7 +1948,7 @@ msgstr "Productes"
msgctxt "view:stock.configuration:"
msgid "Stock Configuration"
-msgstr "Configuració estoc"
+msgstr "Configuració d'estoc"
msgctxt "view:stock.inventory.line:"
msgid "Inventory Line"
@@ -1948,10 +1963,6 @@ msgid "Add an inventory line for each missing products"
msgstr "Afegir una lÃnia d'inventari per cada producte que falta"
msgctxt "view:stock.inventory:"
-msgid "All generated moves will be cancelled!"
-msgstr "Es cancel·laran tots els moviments generats"
-
-msgctxt "view:stock.inventory:"
msgid "Cancel"
msgstr "Cancel·la"
@@ -1971,10 +1982,6 @@ msgctxt "view:stock.inventory:"
msgid "Inventory"
msgstr "Inventari"
-msgctxt "view:stock.inventory:"
-msgid "Re-Open"
-msgstr "Reobre"
-
msgctxt "view:stock.location:"
msgid "Location"
msgstr "Ubicació"
@@ -1987,14 +1994,6 @@ msgctxt "view:stock.location:"
msgid "Locations"
msgstr "Ubicacions"
-msgctxt "view:stock.location:"
-msgid "Product Stock"
-msgstr "Existències del producte"
-
-msgctxt "view:stock.move:"
-msgid "Cancel"
-msgstr "Cancel·la"
-
msgctxt "view:stock.move:"
msgid "Move"
msgstr "Moviment"
@@ -2003,14 +2002,6 @@ msgctxt "view:stock.move:"
msgid "Moves"
msgstr "Moviments"
-msgctxt "view:stock.move:"
-msgid "Set Done"
-msgstr "Marca com a finalitzat"
-
-msgctxt "view:stock.move:"
-msgid "Set Draft"
-msgstr "Marcar com a esborrany"
-
msgctxt "view:stock.period.cache:"
msgid "Period Cache"
msgstr "PerÃode precalculat"
@@ -2072,25 +2063,17 @@ msgid "Draft"
msgstr "Esborrany"
msgctxt "view:stock.shipment.in.return:"
-msgid "Reset to Draft"
-msgstr "Restablir a esborrany"
-
-msgctxt "view:stock.shipment.in.return:"
msgid "Supplier Return Shipment"
msgstr "Albarà devolució proveïdor"
msgctxt "view:stock.shipment.in.return:"
msgid "Supplier Return Shipments"
-msgstr "Albarans proveïdor devolució"
+msgstr "Albarans devolució proveïdor"
msgctxt "view:stock.shipment.in.return:"
msgid "Wait"
msgstr "En espera"
-msgctxt "view:stock.shipment.in.return:"
-msgid "Waiting"
-msgstr "En espera"
-
msgctxt "view:stock.shipment.in:"
msgid "Cancel"
msgstr "Cancel·la"
@@ -2100,10 +2083,6 @@ msgid "Done"
msgstr "Acabat"
msgctxt "view:stock.shipment.in:"
-msgid "Draft"
-msgstr "Esborrany"
-
-msgctxt "view:stock.shipment.in:"
msgid "Incoming Moves"
msgstr "Moviments d'entrada"
@@ -2112,20 +2091,12 @@ msgid "Inventory Moves"
msgstr "Moviments d'inventari"
msgctxt "view:stock.shipment.in:"
-msgid "Moves"
-msgstr "Moviments"
-
-msgctxt "view:stock.shipment.in:"
msgid "Receive"
msgstr "Rebut"
msgctxt "view:stock.shipment.in:"
-msgid "Received"
-msgstr "Rebut"
-
-msgctxt "view:stock.shipment.in:"
msgid "Reset to Draft"
-msgstr "Restablir a esborrany"
+msgstr "Restaura a esborrany"
msgctxt "view:stock.shipment.in:"
msgid "Supplier Shipment"
@@ -2160,10 +2131,6 @@ msgid "Draft"
msgstr "Esborrany"
msgctxt "view:stock.shipment.internal:"
-msgid "Force Assign"
-msgstr "Forçar reserva"
-
-msgctxt "view:stock.shipment.internal:"
msgid "Internal Shipment"
msgstr "Albarà intern"
@@ -2172,18 +2139,6 @@ msgid "Internal Shipments"
msgstr "Albarans interns"
msgctxt "view:stock.shipment.internal:"
-msgid "Reset to Draft"
-msgstr "Restablir a esborrany"
-
-msgctxt "view:stock.shipment.internal:"
-msgid "Set Done"
-msgstr "Marca com a finalitzat"
-
-msgctxt "view:stock.shipment.internal:"
-msgid "Set Waiting"
-msgstr "Marcar en espera"
-
-msgctxt "view:stock.shipment.internal:"
msgid "Waiting"
msgstr "En espera"
@@ -2201,11 +2156,11 @@ msgstr "Cancel·la"
msgctxt "view:stock.shipment.out.return:"
msgid "Customer Return Shipment"
-msgstr "Albarà client devolució"
+msgstr "Albarà devolució client"
msgctxt "view:stock.shipment.out.return:"
msgid "Customer Return Shipments"
-msgstr "Albarans client devolució"
+msgstr "Albarans devolució client"
msgctxt "view:stock.shipment.out.return:"
msgid "Done"
@@ -2224,17 +2179,9 @@ msgid "Inventory Moves"
msgstr "Moviments d'inventari"
msgctxt "view:stock.shipment.out.return:"
-msgid "Moves"
-msgstr "Moviments"
-
-msgctxt "view:stock.shipment.out.return:"
msgid "Received"
msgstr "Rebut"
-msgctxt "view:stock.shipment.out.return:"
-msgid "Reset to Draft"
-msgstr "Restablir a esborrany"
-
msgctxt "view:stock.shipment.out:"
msgid "Assign"
msgstr "Assigna"
@@ -2260,10 +2207,6 @@ msgid "Draft"
msgstr "Esborrany"
msgctxt "view:stock.shipment.out:"
-msgid "Force Assign"
-msgstr "Forçar reserva"
-
-msgctxt "view:stock.shipment.out:"
msgid "Inventory Moves"
msgstr "Moviments d'inventari"
@@ -2276,22 +2219,6 @@ msgid "Outgoing Moves"
msgstr "Moviments de sortida"
msgctxt "view:stock.shipment.out:"
-msgid "Reset to Draft"
-msgstr "Restablir a esborrany"
-
-msgctxt "view:stock.shipment.out:"
-msgid "Set Done"
-msgstr "Marca com a finalitzat"
-
-msgctxt "view:stock.shipment.out:"
-msgid "Set Waiting"
-msgstr "Marcar en espera"
-
-msgctxt "view:stock.shipment.out:"
-msgid "Unpack"
-msgstr "Desempaquetar"
-
-msgctxt "view:stock.shipment.out:"
msgid "Waiting"
msgstr "En espera"
diff --git a/locale/cs_CZ.po b/locale/cs_CZ.po
index 0f01ab1..fce392e 100644
--- a/locale/cs_CZ.po
+++ b/locale/cs_CZ.po
@@ -9,29 +9,25 @@ msgid ""
msgstr ""
msgctxt "error:stock.inventory.line:"
-msgid "Line quantity must be positive!"
+msgid "Line quantity must be positive."
msgstr ""
msgctxt "error:stock.inventory.line:"
-msgid "Product must be unique by inventory!"
+msgid "Product must be unique by inventory."
msgstr ""
msgctxt "error:stock.inventory:"
-msgid "Inventory \"%s\" must be cancelled before deletion!"
+msgid "Inventory \"%s\" must be cancelled before deletion."
msgstr ""
msgctxt "error:stock.location:"
-msgid ""
-"A location with existing moves cannot be changed to a type that does not "
-"support moves."
-msgstr ""
-
-msgctxt "error:stock.location:"
-msgid "Location \"%s\" must be a child of warehouse \"%s\"!"
+msgid "Location \"%(location)s\" must be a child of warehouse \"%(warehouse)s\"."
msgstr ""
msgctxt "error:stock.location:"
-msgid "You can not create recursive locations!"
+msgid ""
+"Location \"%s\" with existing moves cannot be changed to a type that does "
+"not support moves."
msgstr ""
msgctxt "error:stock.move:"
@@ -39,10 +35,6 @@ msgid "Internal move quantity must be positive"
msgstr ""
msgctxt "error:stock.move:"
-msgid "Move can be on only one Shipment"
-msgstr ""
-
-msgctxt "error:stock.move:"
msgid "Move quantity must be positive"
msgstr ""
@@ -51,62 +43,66 @@ msgid "Source and destination location must be different"
msgstr ""
msgctxt "error:stock.move:"
-msgid "You can not modify a move in the state: \"Assigned\", \"Done\" or \"Cancel\""
+msgid ""
+"You can not delete stock move \"%s\" because it is not in draft or cancelled"
+" state."
msgstr ""
msgctxt "error:stock.move:"
-msgid "You can not modify move in closed period!"
+msgid "You can not modify move \"%(move)s\" because period \"%(period)s\" is closed."
msgstr ""
msgctxt "error:stock.move:"
-msgid "You can not set state to assigned!"
+msgid ""
+"You can not modify stock move \"%s\"because it is in \"Assigned\", \"Done\" "
+"or \"Cancel\" state."
msgstr ""
msgctxt "error:stock.move:"
-msgid "You can not set state to done!"
+msgid "You can not set stock move \"%s\" to assigned state."
msgstr ""
msgctxt "error:stock.move:"
-msgid "You can not set state to draft!"
+msgid "You can not set stock move \"%s\" to done state."
msgstr ""
msgctxt "error:stock.move:"
-msgid "You can only delete draft or cancelled moves!"
+msgid "You can not set stock move \"%s\" to draft state."
msgstr ""
msgctxt "error:stock.period:"
-msgid "You can not close a period in the future or today!"
+msgid "You can not close a period in the future or today."
msgstr ""
msgctxt "error:stock.period:"
-msgid "You can not close a period when there is still assigned moves!"
+msgid "You can not close a period when there still are assigned moves."
msgstr ""
msgctxt "error:stock.shipment.in.return:"
-msgid "Supplier Return Shipment \"%s\" must be cancelled before deletion!"
+msgid "Supplier Return Shipment \"%s\" must be cancelled before deletion."
msgstr ""
msgctxt "error:stock.shipment.in:"
msgid ""
"Incoming Moves must have the warehouse input location as destination "
-"location!"
+"location."
msgstr ""
msgctxt "error:stock.shipment.in:"
msgid ""
-"Inventory Moves must have the warehouse input location as source location!"
+"Inventory Moves must have the warehouse input location as source location."
msgstr ""
msgctxt "error:stock.shipment.in:"
-msgid "Supplier Shipment \"%s\" must be cancelled before deletion!"
+msgid "Supplier Shipment \"%s\" must be cancelled before deletion."
msgstr ""
msgctxt "error:stock.shipment.internal:"
-msgid "Internal Shipment \"%s\" must be cancelled before deletion!"
+msgid "Internal Shipment \"%s\" must be cancelled before deletion."
msgstr ""
msgctxt "error:stock.shipment.out.return.create:"
-msgid "The shipment with code %s is not yet sent."
+msgid "The shipment with code \"%s\" is not yet sent."
msgstr ""
msgctxt "error:stock.shipment.out.return.create:"
@@ -114,11 +110,11 @@ msgid "You can not create return shipment"
msgstr ""
msgctxt "error:stock.shipment.out.return:"
-msgid "Customer Return Shipment \"%s\" must be cancelled before deletion!"
+msgid "Customer Return Shipment \"%s\" must be cancelled before deletion."
msgstr ""
msgctxt "error:stock.shipment.out:"
-msgid "Customer Shipment \"%s\" must be cancelled before deletion!"
+msgid "Customer Shipment \"%s\" must be cancelled before deletion."
msgstr ""
msgctxt "field:party.address,delivery:"
@@ -429,6 +425,10 @@ msgctxt "field:stock.move,internal_quantity:"
msgid "Internal Quantity"
msgstr ""
+msgctxt "field:stock.move,origin:"
+msgid "Origin"
+msgstr ""
+
msgctxt "field:stock.move,planned_date:"
msgid "Planned Date"
msgstr ""
@@ -449,24 +449,8 @@ msgctxt "field:stock.move,rec_name:"
msgid "Name"
msgstr ""
-msgctxt "field:stock.move,shipment_in:"
-msgid "Supplier Shipment"
-msgstr ""
-
-msgctxt "field:stock.move,shipment_in_return:"
-msgid "Supplier Return Shipment"
-msgstr ""
-
-msgctxt "field:stock.move,shipment_internal:"
-msgid "Internal Shipment"
-msgstr ""
-
-msgctxt "field:stock.move,shipment_out:"
-msgid "Customer Shipment"
-msgstr ""
-
-msgctxt "field:stock.move,shipment_out_return:"
-msgid "Customer Return Shipment"
+msgctxt "field:stock.move,shipment:"
+msgid "Shipment"
msgstr ""
msgctxt "field:stock.move,state:"
@@ -1051,10 +1035,6 @@ msgctxt "model:ir.action,name:act_inventory_form"
msgid "Inventories"
msgstr ""
-msgctxt "model:ir.action,name:act_inventory_form_draft"
-msgid "Draft Inventories"
-msgstr ""
-
msgctxt "model:ir.action,name:act_location_form"
msgid "Locations"
msgstr ""
@@ -1071,18 +1051,6 @@ msgctxt "model:ir.action,name:act_move_form"
msgid "Moves"
msgstr ""
-msgctxt "model:ir.action,name:act_move_form_cust"
-msgid "Moves to Customers"
-msgstr ""
-
-msgctxt "model:ir.action,name:act_move_form_supp"
-msgid "Moves from Suppliers"
-msgstr ""
-
-msgctxt "model:ir.action,name:act_move_form_supp_proceed"
-msgid "Moves from Suppliers Waiting Arrival"
-msgstr ""
-
msgctxt "model:ir.action,name:act_period_list"
msgid "Periods"
msgstr ""
@@ -1095,38 +1063,18 @@ msgctxt "model:ir.action,name:act_products_by_locations"
msgid "Products"
msgstr ""
-msgctxt "model:ir.action,name:act_shipment_in_draft"
-msgid "Draft Supplier Shipment"
-msgstr ""
-
msgctxt "model:ir.action,name:act_shipment_in_form"
msgid "Supplier Shipments"
msgstr ""
-msgctxt "model:ir.action,name:act_shipment_in_form_received"
-msgid "Received Supplier shipments"
-msgstr ""
-
msgctxt "model:ir.action,name:act_shipment_in_return_form"
msgid "Supplier Return Shipments"
msgstr ""
-msgctxt "model:ir.action,name:act_shipment_internal_assigned_form"
-msgid "Assigned Internal Shipments"
-msgstr ""
-
-msgctxt "model:ir.action,name:act_shipment_internal_draft_form"
-msgid "Draft Internal Shipments"
-msgstr ""
-
msgctxt "model:ir.action,name:act_shipment_internal_form"
msgid "Internal Shipments"
msgstr ""
-msgctxt "model:ir.action,name:act_shipment_internal_waiting_form"
-msgid "Internal Shipments Waiting Assignation"
-msgstr ""
-
msgctxt "model:ir.action,name:act_shipment_out_form"
msgid "Customer Shipments"
msgstr ""
@@ -1139,18 +1087,6 @@ msgctxt "model:ir.action,name:act_shipment_out_form3"
msgid "Supplier Shipments"
msgstr ""
-msgctxt "model:ir.action,name:act_shipment_out_form_assigned"
-msgid "Assigned Customer Shipments"
-msgstr ""
-
-msgctxt "model:ir.action,name:act_shipment_out_form_ready"
-msgid "Customer Shipments Ready for Shipping"
-msgstr ""
-
-msgctxt "model:ir.action,name:act_shipment_out_form_waiting"
-msgid "Customer Shipments Waiting Assignation"
-msgstr ""
-
msgctxt "model:ir.action,name:act_shipment_out_return_form"
msgid "Customer Return Shipments"
msgstr ""
@@ -1207,6 +1143,129 @@ msgctxt "model:ir.action,name:wizard_shipment_out_assign"
msgid "Assign Shipment Out"
msgstr ""
+msgctxt "model:ir.action.act_window.domain,name:act_inventory_form_domain_all"
+msgid "All"
+msgstr ""
+
+msgctxt ""
+"model:ir.action.act_window.domain,name:act_inventory_form_domain_draft"
+msgid "Draft"
+msgstr ""
+
+msgctxt "model:ir.action.act_window.domain,name:act_move_form_domain_all"
+msgid "All"
+msgstr ""
+
+msgctxt ""
+"model:ir.action.act_window.domain,name:act_move_form_domain_from_supplier"
+msgid "From Suppliers"
+msgstr ""
+
+msgctxt ""
+"model:ir.action.act_window.domain,name:act_move_form_domain_from_supplier_waiting"
+msgid "From Suppliers Waiting"
+msgstr ""
+
+msgctxt ""
+"model:ir.action.act_window.domain,name:act_move_form_domain_to_customer"
+msgid "To Customers"
+msgstr ""
+
+msgctxt ""
+"model:ir.action.act_window.domain,name:act_shipment_in_form_domain_all"
+msgid "All"
+msgstr ""
+
+msgctxt ""
+"model:ir.action.act_window.domain,name:act_shipment_in_form_domain_draft"
+msgid "Draft"
+msgstr ""
+
+msgctxt ""
+"model:ir.action.act_window.domain,name:act_shipment_in_form_domain_received"
+msgid "Received"
+msgstr ""
+
+msgctxt ""
+"model:ir.action.act_window.domain,name:act_shipment_in_return_form_domain_all"
+msgid "All"
+msgstr ""
+
+msgctxt ""
+"model:ir.action.act_window.domain,name:act_shipment_in_return_form_domain_assigned"
+msgid "Assigned"
+msgstr ""
+
+msgctxt ""
+"model:ir.action.act_window.domain,name:act_shipment_in_return_form_domain_draft"
+msgid "Draft"
+msgstr ""
+
+msgctxt ""
+"model:ir.action.act_window.domain,name:act_shipment_in_return_form_domain_waiting"
+msgid "Waiting"
+msgstr ""
+
+msgctxt ""
+"model:ir.action.act_window.domain,name:act_shipment_internal_form_domain_all"
+msgid "All"
+msgstr ""
+
+msgctxt ""
+"model:ir.action.act_window.domain,name:act_shipment_internal_form_domain_assigned"
+msgid "Assigned"
+msgstr ""
+
+msgctxt ""
+"model:ir.action.act_window.domain,name:act_shipment_internal_form_domain_draft"
+msgid "Draft"
+msgstr ""
+
+msgctxt ""
+"model:ir.action.act_window.domain,name:act_shipment_internal_form_domain_waiting"
+msgid "Waiting"
+msgstr ""
+
+msgctxt ""
+"model:ir.action.act_window.domain,name:act_shipment_out_form_domain_all"
+msgid "All"
+msgstr ""
+
+msgctxt ""
+"model:ir.action.act_window.domain,name:act_shipment_out_form_domain_assigned"
+msgid "Assigned"
+msgstr ""
+
+msgctxt ""
+"model:ir.action.act_window.domain,name:act_shipment_out_form_domain_draft"
+msgid "Draft"
+msgstr ""
+
+msgctxt ""
+"model:ir.action.act_window.domain,name:act_shipment_out_form_domain_packed"
+msgid "Packed"
+msgstr ""
+
+msgctxt ""
+"model:ir.action.act_window.domain,name:act_shipment_out_form_domain_waiting"
+msgid "Waiting"
+msgstr ""
+
+msgctxt ""
+"model:ir.action.act_window.domain,name:act_shipment_out_return_form_domain_all"
+msgid "All"
+msgstr ""
+
+msgctxt ""
+"model:ir.action.act_window.domain,name:act_shipment_out_return_form_domain_draft"
+msgid "Draft"
+msgstr ""
+
+msgctxt ""
+"model:ir.action.act_window.domain,name:act_shipment_out_return_form_domain_received"
+msgid "Received"
+msgstr ""
+
msgctxt "model:ir.sequence,name:sequence_shipment_in"
msgid "Supplier Shipment"
msgstr ""
@@ -1255,10 +1314,6 @@ msgctxt "model:ir.ui.menu,name:menu_inventory_form"
msgid "Inventories"
msgstr ""
-msgctxt "model:ir.ui.menu,name:menu_inventory_form_draft"
-msgid "Draft Inventories"
-msgstr ""
-
msgctxt "model:ir.ui.menu,name:menu_location_form"
msgid "Locations"
msgstr ""
@@ -1271,18 +1326,6 @@ msgctxt "model:ir.ui.menu,name:menu_move_form"
msgid "Moves"
msgstr ""
-msgctxt "model:ir.ui.menu,name:menu_move_form_cust"
-msgid "Moves to Customers"
-msgstr ""
-
-msgctxt "model:ir.ui.menu,name:menu_move_form_supp"
-msgid "Moves from Suppliers"
-msgstr ""
-
-msgctxt "model:ir.ui.menu,name:menu_move_form_supp_proceed"
-msgid "Moves from Suppliers Waiting Arrival"
-msgstr ""
-
msgctxt "model:ir.ui.menu,name:menu_period_list"
msgid "Periods"
msgstr ""
@@ -1291,58 +1334,26 @@ msgctxt "model:ir.ui.menu,name:menu_reporting"
msgid "Reporting"
msgstr ""
-msgctxt "model:ir.ui.menu,name:menu_shipment_in_draft"
-msgid "Draft Supplier Shipment"
-msgstr ""
-
msgctxt "model:ir.ui.menu,name:menu_shipment_in_form"
msgid "Supplier Shipments"
msgstr ""
-msgctxt "model:ir.ui.menu,name:menu_shipment_in_received"
-msgid "Received Supplier shipments"
-msgstr ""
-
msgctxt "model:ir.ui.menu,name:menu_shipment_in_return_form"
msgid "Supplier Return Shipments"
msgstr ""
-msgctxt "model:ir.ui.menu,name:menu_shipment_internal_assigned_form"
-msgid "Assigned Internal Shipments"
-msgstr ""
-
-msgctxt "model:ir.ui.menu,name:menu_shipment_internal_draft_form"
-msgid "Draft Internal Shipments"
-msgstr ""
-
msgctxt "model:ir.ui.menu,name:menu_shipment_internal_form"
msgid "Internal Shipments"
msgstr ""
-msgctxt "model:ir.ui.menu,name:menu_shipment_internal_waiting_form"
-msgid "Internal Shipments Waiting Assignation"
-msgstr ""
-
-msgctxt "model:ir.ui.menu,name:menu_shipment_out_assigned"
-msgid "Assigned Customer Shipments"
-msgstr ""
-
msgctxt "model:ir.ui.menu,name:menu_shipment_out_form"
msgid "Customer Shipments"
msgstr ""
-msgctxt "model:ir.ui.menu,name:menu_shipment_out_ready"
-msgid "Customer Shipments Ready for Shipping"
-msgstr ""
-
msgctxt "model:ir.ui.menu,name:menu_shipment_out_return_form"
msgid "Customer Return Shipments"
msgstr ""
-msgctxt "model:ir.ui.menu,name:menu_shipment_out_waiting"
-msgid "Customer Shipments Waiting Assignation"
-msgstr ""
-
msgctxt "model:ir.ui.menu,name:menu_stock"
msgid "Inventory & Stock"
msgstr ""
@@ -1955,10 +1966,6 @@ msgctxt "view:stock.location:"
msgid "Locations"
msgstr ""
-msgctxt "view:stock.location:"
-msgid "Product Stock"
-msgstr ""
-
msgctxt "view:stock.move:"
msgid "Move"
msgstr ""
@@ -2028,10 +2035,6 @@ msgid "Draft"
msgstr ""
msgctxt "view:stock.shipment.in.return:"
-msgid "Reset to Draft"
-msgstr ""
-
-msgctxt "view:stock.shipment.in.return:"
msgid "Supplier Return Shipment"
msgstr ""
@@ -2043,10 +2046,6 @@ msgctxt "view:stock.shipment.in.return:"
msgid "Wait"
msgstr ""
-msgctxt "view:stock.shipment.in.return:"
-msgid "Waiting"
-msgstr ""
-
msgctxt "view:stock.shipment.in:"
msgid "Cancel"
msgstr ""
@@ -2064,18 +2063,10 @@ msgid "Inventory Moves"
msgstr ""
msgctxt "view:stock.shipment.in:"
-msgid "Moves"
-msgstr ""
-
-msgctxt "view:stock.shipment.in:"
msgid "Receive"
msgstr ""
msgctxt "view:stock.shipment.in:"
-msgid "Received"
-msgstr ""
-
-msgctxt "view:stock.shipment.in:"
msgid "Reset to Draft"
msgstr ""
@@ -2120,10 +2111,6 @@ msgid "Internal Shipments"
msgstr ""
msgctxt "view:stock.shipment.internal:"
-msgid "Reset to Draft"
-msgstr ""
-
-msgctxt "view:stock.shipment.internal:"
msgid "Waiting"
msgstr ""
@@ -2164,17 +2151,9 @@ msgid "Inventory Moves"
msgstr ""
msgctxt "view:stock.shipment.out.return:"
-msgid "Moves"
-msgstr ""
-
-msgctxt "view:stock.shipment.out.return:"
msgid "Received"
msgstr ""
-msgctxt "view:stock.shipment.out.return:"
-msgid "Reset to Draft"
-msgstr ""
-
msgctxt "view:stock.shipment.out:"
msgid "Assign"
msgstr ""
@@ -2212,10 +2191,6 @@ msgid "Outgoing Moves"
msgstr ""
msgctxt "view:stock.shipment.out:"
-msgid "Reset to Draft"
-msgstr ""
-
-msgctxt "view:stock.shipment.out:"
msgid "Waiting"
msgstr ""
diff --git a/locale/de_DE.po b/locale/de_DE.po
index 11f66f2..c838d1c 100644
--- a/locale/de_DE.po
+++ b/locale/de_DE.po
@@ -11,45 +11,38 @@ msgstr ""
"Lagerbewegungen zugeordnet ist."
msgctxt "error:stock.inventory.line:"
-msgid "Line quantity must be positive!"
-msgstr "Anzahl der Position muss positiv sein!"
+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 in einem Lagerbestand nicht mehrfach vergeben werden!"
+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!"
+msgid "Inventory \"%s\" must be cancelled before deletion."
msgstr ""
-"Bestandskorrektur \"%s\" muss annulliert werden, bevor sie gelöscht werden "
+"Bestandsänderung \"%s\" muss annulliert werden, bevor sie gelöscht werden "
"kann."
msgctxt "error:stock.location:"
-msgid ""
-"A location with existing moves cannot be changed to a type that does not "
-"support moves."
+msgid "Location \"%(location)s\" must be a child of warehouse \"%(warehouse)s\"."
msgstr ""
-"Ein Lagerort mit zugordneten Bewegungen kann nicht zu einem Typ geändert "
-"werden, der keine Bewegungen unterstützt."
-
-msgctxt "error:stock.location:"
-msgid "Location \"%s\" must be a child of warehouse \"%s\"!"
-msgstr "Lagerort \"%s\" muss untergeordnet zu Warenlager \"%s\" sein!"
+"Lagerort \"%(location)s\" muss ein untergeordneter Lagerort von Warenlager "
+"\"%(warehouse)s\" sein."
msgctxt "error:stock.location:"
-msgid "You can not create recursive locations!"
-msgstr "Lagerorte können nicht rekursiv angelegt werden!"
+msgid ""
+"Location \"%s\" with existing moves cannot be changed to a type that does "
+"not support moves."
+msgstr ""
+"Lagerort \"%s\" weist Warenbewegungen auf und kann deshalb nicht zu einem "
+"Typ geändert werden, der keine Warenbewegungen unterstützt."
msgctxt "error:stock.move:"
msgid "Internal move quantity must be positive"
msgstr "Interne Anzahl von Bewegungen muss positiv sein!"
msgctxt "error:stock.move:"
-msgid "Move can be on only one Shipment"
-msgstr "Eine Bewegung kann nur auf einem Lieferposten erfolgen!"
-
-msgctxt "error:stock.move:"
msgid "Move quantity must be positive"
msgstr "Zu bewegende Anzahl muss positiv sein"
@@ -58,95 +51,102 @@ msgid "Source and destination location must be different"
msgstr "Herkunfts- und Bestimmungsort müssen unterschiedlich sein"
msgctxt "error:stock.move:"
-msgid "You can not modify a move in the state: \"Assigned\", \"Done\" or \"Cancel\""
+msgid ""
+"You can not delete stock move \"%s\" because it is not in draft or cancelled"
+" state."
msgstr ""
-"Eine Bewegung in Status \"Zugewiesen\", \"Erledigt\" oder \"Annulliert\" "
-"kann nicht geändert werden!"
+"Lagerbewegung \"%s\" kann nicht gelöscht werden, weil sie nicht in Status "
+"\"Entwurf\" oder \"Annulliert\" ist."
msgctxt "error:stock.move:"
-msgid "You can not modify move in closed period!"
+msgid "You can not modify move \"%(move)s\" because period \"%(period)s\" is closed."
msgstr ""
-"Eine Bewegung in einer geschlossenen Periode kann nicht geändert werden!"
+"Ãnderung von Buchungssatz \"%(move)s\" nicht möglich, weil Buchungsperiode "
+"\"%(period)s\" geschlossen ist."
msgctxt "error:stock.move:"
-msgid "You can not set state to assigned!"
-msgstr "Status kann nicht auf Zugewiesen gesetzt werden!"
+msgid ""
+"You can not modify stock move \"%s\"because it is in \"Assigned\", \"Done\" "
+"or \"Cancel\" state."
+msgstr ""
+"Ãnderung von Lagerbewegung \"%s\" nicht möglich, weil sie in Status "
+"\"Zugewiesen\", \"Erledigt\" oder \"Annulliert\" ist."
msgctxt "error:stock.move:"
-msgid "You can not set state to done!"
-msgstr "Status kann nicht auf Erledigt gesetzt werden!"
+msgid "You can not set stock move \"%s\" to assigned state."
+msgstr "Lagerbewegung \"%s\" kann nicht auf Status \"Zugewiesen\" gesetzt werden."
msgctxt "error:stock.move:"
-msgid "You can not set state to draft!"
-msgstr "Status \"Entwurf\" kann nicht gesetzt werden!"
+msgid "You can not set stock move \"%s\" to done state."
+msgstr "Lagerbewegung \"%s\" kann nicht auf Status \"Erledigt\" gesetzt werden."
msgctxt "error:stock.move:"
-msgid "You can only delete draft or cancelled moves!"
-msgstr ""
-"Nur Bewegungen mit Status \"Entwurf\" oder \"Annulliert\" können gelöscht "
-"werden!"
+msgid "You can not set stock move \"%s\" to draft state."
+msgstr "Lagerbewegung \"%s\" kann nicht auf Status \"Entwurf\" gesetzt werden."
msgctxt "error:stock.period:"
-msgid "You can not close a period in the future or today!"
+msgid "You can not close a period in the future or today."
msgstr ""
-"Eine Periode kann nicht am heutigen Tag (oder später) geschlossen werden!"
+"Eine Lagerperiode kann nur in der Vergangenheit (vor heute) geschlossen "
+"werden."
msgctxt "error:stock.period:"
-msgid "You can not close a period when there is still assigned moves!"
+msgid "You can not close a period when there still are assigned moves."
msgstr ""
-"Eine Periode, die noch zugewiesene Bewegungen enthält, kann nicht "
-"geschlossen werden!"
+"Eine Lagerperiode kann nicht geschlossen werden, so lange es noch "
+"zugewiesene Bewegungen gibt."
msgctxt "error:stock.shipment.in.return:"
-msgid "Supplier Return Shipment \"%s\" must be cancelled before deletion!"
+msgid "Supplier Return Shipment \"%s\" must be cancelled before deletion."
msgstr ""
-"Warenrückgabe \"%s\" muss annulliert werden, bevor sie gelöscht werden kann."
+"Lieferposten Rückgabe an Lieferant \"%s\" muss annulliert werden, bevor er "
+"gelöscht werden kann."
msgctxt "error:stock.shipment.in:"
msgid ""
"Incoming Moves must have the warehouse input location as destination "
-"location!"
+"location."
msgstr ""
-"Eingehende Bewegungen müssen den Eingangsbereich des Warenlagers als Zielort"
-" haben!"
+"Für eingehende Bewegungen muss der Wareneingangslagerort als "
+"Bestimmungslagerort eingetragen werden."
msgctxt "error:stock.shipment.in:"
msgid ""
-"Inventory Moves must have the warehouse input location as source location!"
+"Inventory Moves must have the warehouse input location as source location."
msgstr ""
-"Bestandsänderungen müssen den Eingangsbereich des Warenlagers als "
-"Herkunftsort haben!"
+"Für Bestandsänderungen muss der Wareneingangslagerort als Herkunftslagerort "
+"eingetragen werden."
msgctxt "error:stock.shipment.in:"
-msgid "Supplier Shipment \"%s\" must be cancelled before deletion!"
+msgid "Supplier Shipment \"%s\" must be cancelled before deletion."
msgstr ""
-"Lieferposten an Lieferant \"%s\" muss annulliert werden, bevor er gelöscht "
+"Lieferposten von Lieferant \"%s\" muss annulliert werden, bevor er gelöscht "
"werden kann."
msgctxt "error:stock.shipment.internal:"
-msgid "Internal Shipment \"%s\" must be cancelled before deletion!"
+msgid "Internal Shipment \"%s\" must be cancelled before deletion."
msgstr ""
-"Interner Lieferposten \"%s\" muss annulliert werden, bevor er gelöscht "
+"Der Interne Lieferposten \"%s\" muss annulliert werden, bevor er gelöscht "
"werden kann."
msgctxt "error:stock.shipment.out.return.create:"
-msgid "The shipment with code %s is not yet sent."
-msgstr "Der Lieferposten mit Code %s ist noch nicht erledigt."
+msgid "The shipment with code \"%s\" is not yet sent."
+msgstr "Der Lieferposten mit Code \"%s\" ist noch nicht versendet."
msgctxt "error:stock.shipment.out.return.create:"
msgid "You can not create return shipment"
-msgstr "Warenrücknahme nicht möglich!"
+msgstr "Erstellung einer Warenrücknahme nicht möglich."
msgctxt "error:stock.shipment.out.return:"
-msgid "Customer Return Shipment \"%s\" must be cancelled before deletion!"
+msgid "Customer Return Shipment \"%s\" must be cancelled before deletion."
msgstr ""
-"Warenrücknahme \"%s\" muss annulliert werden, bevor sie gelöscht werden "
-"kann."
+"Die Warenrücknahme Kunde \"%s\" muss annulliert werden, bevor sie gelöscht "
+"werden kann."
msgctxt "error:stock.shipment.out:"
-msgid "Customer Shipment \"%s\" must be cancelled before deletion!"
+msgid "Customer Shipment \"%s\" must be cancelled before deletion."
msgstr ""
-"Lieferposten an Kunde \"%s\" muss annulliert werden, bevor er gelöscht "
+"Der Lieferposten Kunde \"%s\" muss annulliert werden, bevor er gelöscht "
"werden kann."
msgctxt "field:party.address,delivery:"
@@ -457,6 +457,10 @@ msgctxt "field:stock.move,internal_quantity:"
msgid "Internal Quantity"
msgstr "Anzahl Intern"
+msgctxt "field:stock.move,origin:"
+msgid "Origin"
+msgstr "Herkunft"
+
msgctxt "field:stock.move,planned_date:"
msgid "Planned Date"
msgstr "Geplantes Datum"
@@ -477,25 +481,9 @@ msgctxt "field:stock.move,rec_name:"
msgid "Name"
msgstr "Name"
-msgctxt "field:stock.move,shipment_in:"
-msgid "Supplier Shipment"
-msgstr "Lieferposten von Lieferant"
-
-msgctxt "field:stock.move,shipment_in_return:"
-msgid "Supplier Return Shipment"
-msgstr "Warenrückgabe"
-
-msgctxt "field:stock.move,shipment_internal:"
-msgid "Internal Shipment"
-msgstr "Interner Lieferposten"
-
-msgctxt "field:stock.move,shipment_out:"
-msgid "Customer Shipment"
-msgstr "Lieferposten an Kunde"
-
-msgctxt "field:stock.move,shipment_out_return:"
-msgid "Customer Return Shipment"
-msgstr "Warenrücknahme"
+msgctxt "field:stock.move,shipment:"
+msgid "Shipment"
+msgstr "Lieferposten"
msgctxt "field:stock.move,state:"
msgid "State"
@@ -1059,7 +1047,7 @@ msgstr "Standardbestimmungsort für Sendungen zum Geschäftspartner"
msgctxt "help:party.party,supplier_location:"
msgid "The default source location when receiving products from the party."
-msgstr "Standardbestimmungsort für Sendungen vom Geschäftspartner"
+msgstr "Standardherkunftsort für Sendungen vom Geschäftspartner"
msgctxt "help:product.by_location.start,forecast_date:"
msgid ""
@@ -1085,38 +1073,22 @@ msgctxt "model:ir.action,name:act_inventory_form"
msgid "Inventories"
msgstr "Bestandskorrekturen"
-msgctxt "model:ir.action,name:act_inventory_form_draft"
-msgid "Draft Inventories"
-msgstr "Entwürfe Bestandskorrekturen"
-
msgctxt "model:ir.action,name:act_location_form"
msgid "Locations"
-msgstr "Lagerorte"
+msgstr "Orte"
msgctxt "model:ir.action,name:act_location_quantity_tree"
msgid "Locations"
-msgstr "Lagerorte"
+msgstr "Orte"
msgctxt "model:ir.action,name:act_location_tree"
msgid "Locations"
-msgstr "Lagerorte"
+msgstr "Orte"
msgctxt "model:ir.action,name:act_move_form"
msgid "Moves"
msgstr "Lagerbewegungen"
-msgctxt "model:ir.action,name:act_move_form_cust"
-msgid "Moves to Customers"
-msgstr "Bewegungen zu Kunden"
-
-msgctxt "model:ir.action,name:act_move_form_supp"
-msgid "Moves from Suppliers"
-msgstr "Bewegungen von Lieferanten"
-
-msgctxt "model:ir.action,name:act_move_form_supp_proceed"
-msgid "Moves from Suppliers Waiting Arrival"
-msgstr "Erwartete Bewegungen von Lieferanten"
-
msgctxt "model:ir.action,name:act_period_list"
msgid "Periods"
msgstr "Lagerperioden"
@@ -1129,61 +1101,29 @@ msgctxt "model:ir.action,name:act_products_by_locations"
msgid "Products"
msgstr "Artikel"
-msgctxt "model:ir.action,name:act_shipment_in_draft"
-msgid "Draft Supplier Shipment"
-msgstr "Entwürfe Lieferposten von Lieferanten"
-
msgctxt "model:ir.action,name:act_shipment_in_form"
msgid "Supplier Shipments"
msgstr "Lieferposten von Lieferanten"
-msgctxt "model:ir.action,name:act_shipment_in_form_received"
-msgid "Received Supplier shipments"
-msgstr "Erhaltene Lieferposten von Lieferanten"
-
msgctxt "model:ir.action,name:act_shipment_in_return_form"
msgid "Supplier Return Shipments"
msgstr "Warenrückgaben (an Lieferanten)"
-msgctxt "model:ir.action,name:act_shipment_internal_assigned_form"
-msgid "Assigned Internal Shipments"
-msgstr "Zugewiesene Interne Lieferposten"
-
-msgctxt "model:ir.action,name:act_shipment_internal_draft_form"
-msgid "Draft Internal Shipments"
-msgstr "Entwürfe Interne Lieferposten"
-
msgctxt "model:ir.action,name:act_shipment_internal_form"
msgid "Internal Shipments"
msgstr "Interne Lieferposten"
-msgctxt "model:ir.action,name:act_shipment_internal_waiting_form"
-msgid "Internal Shipments Waiting Assignation"
-msgstr "Wartende Interne Lieferposten"
-
msgctxt "model:ir.action,name:act_shipment_out_form"
msgid "Customer Shipments"
msgstr "Lieferposten an Kunden"
msgctxt "model:ir.action,name:act_shipment_out_form2"
msgid "Customer Shipments"
-msgstr "Lieferposten als Kunde"
+msgstr "Lieferposten an Kunden"
msgctxt "model:ir.action,name:act_shipment_out_form3"
msgid "Supplier Shipments"
-msgstr "Lieferposten als Lieferant"
-
-msgctxt "model:ir.action,name:act_shipment_out_form_assigned"
-msgid "Assigned Customer Shipments"
-msgstr "Zugewiesene Lieferposten an Kunden"
-
-msgctxt "model:ir.action,name:act_shipment_out_form_ready"
-msgid "Customer Shipments Ready for Shipping"
-msgstr "Versandbereite Lieferposten an Kunden"
-
-msgctxt "model:ir.action,name:act_shipment_out_form_waiting"
-msgid "Customer Shipments Waiting Assignation"
-msgstr "Wartende Lieferposten an Kunden"
+msgstr "Lieferposten von Lieferanten"
msgctxt "model:ir.action,name:act_shipment_out_return_form"
msgid "Customer Return Shipments"
@@ -1191,11 +1131,11 @@ msgstr "Warenrücknahmen (von Kunden)"
msgctxt "model:ir.action,name:act_stock_configuration_form"
msgid "Stock Configuration"
-msgstr "Einstellungen Lager"
+msgstr "Lager"
msgctxt "model:ir.action,name:create_shipment_out_return"
msgid "Create Return Shipment"
-msgstr "Warenrücknahme erstellen"
+msgstr "Lieferpostenrückgabe erstellen"
msgctxt "model:ir.action,name:report_shipment_in_restocking_list"
msgid "Restocking List"
@@ -1231,7 +1171,7 @@ msgstr "Artikel nach Lagerorten"
msgctxt "model:ir.action,name:wizard_shipment_in_return_assign"
msgid "Assign Purchase Return Shipment"
-msgstr "Zuweisung Lieferposten Warenrückgabe"
+msgstr "Rückgabe Lieferposten zuweisen"
msgctxt "model:ir.action,name:wizard_shipment_internal_assign"
msgid "Assign Shipment Internal"
@@ -1241,6 +1181,129 @@ msgctxt "model:ir.action,name:wizard_shipment_out_assign"
msgid "Assign Shipment Out"
msgstr "Zuweisung Lieferposten ausgehend"
+msgctxt "model:ir.action.act_window.domain,name:act_inventory_form_domain_all"
+msgid "All"
+msgstr "Alle"
+
+msgctxt ""
+"model:ir.action.act_window.domain,name:act_inventory_form_domain_draft"
+msgid "Draft"
+msgstr "Entwurf"
+
+msgctxt "model:ir.action.act_window.domain,name:act_move_form_domain_all"
+msgid "All"
+msgstr "Alle"
+
+msgctxt ""
+"model:ir.action.act_window.domain,name:act_move_form_domain_from_supplier"
+msgid "From Suppliers"
+msgstr "Von Lieferanten"
+
+msgctxt ""
+"model:ir.action.act_window.domain,name:act_move_form_domain_from_supplier_waiting"
+msgid "From Suppliers Waiting"
+msgstr "Von Lieferanten wartend"
+
+msgctxt ""
+"model:ir.action.act_window.domain,name:act_move_form_domain_to_customer"
+msgid "To Customers"
+msgstr "Zu Kunden"
+
+msgctxt ""
+"model:ir.action.act_window.domain,name:act_shipment_in_form_domain_all"
+msgid "All"
+msgstr "Alle"
+
+msgctxt ""
+"model:ir.action.act_window.domain,name:act_shipment_in_form_domain_draft"
+msgid "Draft"
+msgstr "Entwurf"
+
+msgctxt ""
+"model:ir.action.act_window.domain,name:act_shipment_in_form_domain_received"
+msgid "Received"
+msgstr "Erhalten"
+
+msgctxt ""
+"model:ir.action.act_window.domain,name:act_shipment_in_return_form_domain_all"
+msgid "All"
+msgstr "Alle"
+
+msgctxt ""
+"model:ir.action.act_window.domain,name:act_shipment_in_return_form_domain_assigned"
+msgid "Assigned"
+msgstr "Zugewiesen"
+
+msgctxt ""
+"model:ir.action.act_window.domain,name:act_shipment_in_return_form_domain_draft"
+msgid "Draft"
+msgstr "Entwurf"
+
+msgctxt ""
+"model:ir.action.act_window.domain,name:act_shipment_in_return_form_domain_waiting"
+msgid "Waiting"
+msgstr "Wartend"
+
+msgctxt ""
+"model:ir.action.act_window.domain,name:act_shipment_internal_form_domain_all"
+msgid "All"
+msgstr "Alle"
+
+msgctxt ""
+"model:ir.action.act_window.domain,name:act_shipment_internal_form_domain_assigned"
+msgid "Assigned"
+msgstr "Zugewiesen"
+
+msgctxt ""
+"model:ir.action.act_window.domain,name:act_shipment_internal_form_domain_draft"
+msgid "Draft"
+msgstr "Entwurf"
+
+msgctxt ""
+"model:ir.action.act_window.domain,name:act_shipment_internal_form_domain_waiting"
+msgid "Waiting"
+msgstr "Wartend"
+
+msgctxt ""
+"model:ir.action.act_window.domain,name:act_shipment_out_form_domain_all"
+msgid "All"
+msgstr "Alle"
+
+msgctxt ""
+"model:ir.action.act_window.domain,name:act_shipment_out_form_domain_assigned"
+msgid "Assigned"
+msgstr "Zugewiesen"
+
+msgctxt ""
+"model:ir.action.act_window.domain,name:act_shipment_out_form_domain_draft"
+msgid "Draft"
+msgstr "Entwurf"
+
+msgctxt ""
+"model:ir.action.act_window.domain,name:act_shipment_out_form_domain_packed"
+msgid "Packed"
+msgstr "Gepackt"
+
+msgctxt ""
+"model:ir.action.act_window.domain,name:act_shipment_out_form_domain_waiting"
+msgid "Waiting"
+msgstr "Wartend"
+
+msgctxt ""
+"model:ir.action.act_window.domain,name:act_shipment_out_return_form_domain_all"
+msgid "All"
+msgstr "Alle"
+
+msgctxt ""
+"model:ir.action.act_window.domain,name:act_shipment_out_return_form_domain_draft"
+msgid "Draft"
+msgstr "Entwurf"
+
+msgctxt ""
+"model:ir.action.act_window.domain,name:act_shipment_out_return_form_domain_received"
+msgid "Received"
+msgstr "Erhalten"
+
msgctxt "model:ir.sequence,name:sequence_shipment_in"
msgid "Supplier Shipment"
msgstr "Lieferposten Lieferant"
@@ -1289,10 +1352,6 @@ msgctxt "model:ir.ui.menu,name:menu_inventory_form"
msgid "Inventories"
msgstr "Bestandskorrektur"
-msgctxt "model:ir.ui.menu,name:menu_inventory_form_draft"
-msgid "Draft Inventories"
-msgstr "Entwürfe Bestandskorrekturen"
-
msgctxt "model:ir.ui.menu,name:menu_location_form"
msgid "Locations"
msgstr "Lagerorte"
@@ -1305,18 +1364,6 @@ msgctxt "model:ir.ui.menu,name:menu_move_form"
msgid "Moves"
msgstr "Bewegungen"
-msgctxt "model:ir.ui.menu,name:menu_move_form_cust"
-msgid "Moves to Customers"
-msgstr "Bewegungen zu Kunden"
-
-msgctxt "model:ir.ui.menu,name:menu_move_form_supp"
-msgid "Moves from Suppliers"
-msgstr "Bewegungen von Lieferanten"
-
-msgctxt "model:ir.ui.menu,name:menu_move_form_supp_proceed"
-msgid "Moves from Suppliers Waiting Arrival"
-msgstr "Erwartete Bewegungen von Lieferanten"
-
msgctxt "model:ir.ui.menu,name:menu_period_list"
msgid "Periods"
msgstr "Lagerperioden"
@@ -1325,65 +1372,33 @@ msgctxt "model:ir.ui.menu,name:menu_reporting"
msgid "Reporting"
msgstr "Auswertungen"
-msgctxt "model:ir.ui.menu,name:menu_shipment_in_draft"
-msgid "Draft Supplier Shipment"
-msgstr "Entwürfe Lieferposten von Lieferanten"
-
msgctxt "model:ir.ui.menu,name:menu_shipment_in_form"
msgid "Supplier Shipments"
msgstr "Lieferposten von Lieferanten"
-msgctxt "model:ir.ui.menu,name:menu_shipment_in_received"
-msgid "Received Supplier shipments"
-msgstr "Erhaltene Lieferposten von Lieferanten"
-
msgctxt "model:ir.ui.menu,name:menu_shipment_in_return_form"
msgid "Supplier Return Shipments"
msgstr "Warenrückgaben (an Lieferanten)"
-msgctxt "model:ir.ui.menu,name:menu_shipment_internal_assigned_form"
-msgid "Assigned Internal Shipments"
-msgstr "Zugewiesene Interne Lieferposten"
-
-msgctxt "model:ir.ui.menu,name:menu_shipment_internal_draft_form"
-msgid "Draft Internal Shipments"
-msgstr "Entwürfe Interne Lieferposten"
-
msgctxt "model:ir.ui.menu,name:menu_shipment_internal_form"
msgid "Internal Shipments"
msgstr "Interne Lieferposten"
-msgctxt "model:ir.ui.menu,name:menu_shipment_internal_waiting_form"
-msgid "Internal Shipments Waiting Assignation"
-msgstr "Wartende Interne Lieferposten"
-
-msgctxt "model:ir.ui.menu,name:menu_shipment_out_assigned"
-msgid "Assigned Customer Shipments"
-msgstr "Zugewiesene Lieferposten an Kunden"
-
msgctxt "model:ir.ui.menu,name:menu_shipment_out_form"
msgid "Customer Shipments"
msgstr "Lieferposten an Kunden"
-msgctxt "model:ir.ui.menu,name:menu_shipment_out_ready"
-msgid "Customer Shipments Ready for Shipping"
-msgstr "Versandbereite Lieferposten an Kunden"
-
msgctxt "model:ir.ui.menu,name:menu_shipment_out_return_form"
msgid "Customer Return Shipments"
msgstr "Warenrücknahmen (von Kunden)"
-msgctxt "model:ir.ui.menu,name:menu_shipment_out_waiting"
-msgid "Customer Shipments Waiting Assignation"
-msgstr "Wartende Lieferposten an Kunden"
-
msgctxt "model:ir.ui.menu,name:menu_stock"
msgid "Inventory & Stock"
msgstr "Lager"
msgctxt "model:ir.ui.menu,name:menu_stock_configuration"
msgid "Stock Configuration"
-msgstr "Einstellungen Lager"
+msgstr "Lager"
msgctxt "model:product.by_location.start,name:"
msgid "Product by Location"
@@ -1479,7 +1494,7 @@ msgstr "Warenrückgabe Lieferant"
msgctxt "model:stock.shipment.in.return.assign.failed,name:"
msgid "Assign Supplier Return Shipment"
-msgstr "Zuweisung Warenrückgabe"
+msgstr "Zuweisung Warenrückgabe Lieferant"
msgctxt "model:stock.shipment.internal,name:"
msgid "Internal Shipment"
@@ -1933,10 +1948,6 @@ msgctxt "view:party.party:"
msgid "Stock"
msgstr "Lager"
-msgctxt "view:party.party:"
-msgid "_Stock"
-msgstr "_Lager"
-
msgctxt "view:product.by_location.start:"
msgid "Product by Location"
msgstr "Artikel nach Lagerort"
@@ -1962,10 +1973,6 @@ msgid "Add an inventory line for each missing products"
msgstr "Positionen für Bestandskorrektur um fehlende Artikel ergänzen"
msgctxt "view:stock.inventory:"
-msgid "All generated moves will be cancelled!"
-msgstr "Sämtliche erzeugten Bewegungen werden rückgängig gemacht!"
-
-msgctxt "view:stock.inventory:"
msgid "Cancel"
msgstr "Annullieren"
@@ -1985,10 +1992,6 @@ msgctxt "view:stock.inventory:"
msgid "Inventory"
msgstr "Lagerbestand"
-msgctxt "view:stock.inventory:"
-msgid "Re-Open"
-msgstr "Wiedereröffnen"
-
msgctxt "view:stock.location:"
msgid "Location"
msgstr "Lagerort"
@@ -2001,14 +2004,6 @@ msgctxt "view:stock.location:"
msgid "Locations"
msgstr "Lagerorte"
-msgctxt "view:stock.location:"
-msgid "Product Stock"
-msgstr "Lagerbestand"
-
-msgctxt "view:stock.move:"
-msgid "Cancel"
-msgstr "Annullieren"
-
msgctxt "view:stock.move:"
msgid "Move"
msgstr "Bewegung"
@@ -2017,14 +2012,6 @@ msgctxt "view:stock.move:"
msgid "Moves"
msgstr "Bewegungen"
-msgctxt "view:stock.move:"
-msgid "Set Done"
-msgstr "Auf Erledigt setzen"
-
-msgctxt "view:stock.move:"
-msgid "Set Draft"
-msgstr "Auf Entwurf setzen"
-
msgctxt "view:stock.period.cache:"
msgid "Period Cache"
msgstr "Perioden Cache"
@@ -2086,10 +2073,6 @@ msgid "Draft"
msgstr "Entwurf"
msgctxt "view:stock.shipment.in.return:"
-msgid "Reset to Draft"
-msgstr "Auf Entwurf zurücksetzen"
-
-msgctxt "view:stock.shipment.in.return:"
msgid "Supplier Return Shipment"
msgstr "Warenrückgabe Lieferant"
@@ -2101,10 +2084,6 @@ msgctxt "view:stock.shipment.in.return:"
msgid "Wait"
msgstr "Warten"
-msgctxt "view:stock.shipment.in.return:"
-msgid "Waiting"
-msgstr "Wartend"
-
msgctxt "view:stock.shipment.in:"
msgid "Cancel"
msgstr "Annullieren"
@@ -2114,10 +2093,6 @@ msgid "Done"
msgstr "Erledigt"
msgctxt "view:stock.shipment.in:"
-msgid "Draft"
-msgstr "Entwurf"
-
-msgctxt "view:stock.shipment.in:"
msgid "Incoming Moves"
msgstr "Eingehende Bewegungen"
@@ -2126,18 +2101,10 @@ msgid "Inventory Moves"
msgstr "Bestandsänderungen"
msgctxt "view:stock.shipment.in:"
-msgid "Moves"
-msgstr "Bewegungen"
-
-msgctxt "view:stock.shipment.in:"
msgid "Receive"
msgstr "Einlagerung"
msgctxt "view:stock.shipment.in:"
-msgid "Received"
-msgstr "Erhalten"
-
-msgctxt "view:stock.shipment.in:"
msgid "Reset to Draft"
msgstr "Auf Entwurf zurücksetzen"
@@ -2174,10 +2141,6 @@ msgid "Draft"
msgstr "Entwurf"
msgctxt "view:stock.shipment.internal:"
-msgid "Force Assign"
-msgstr "Zuweisung erzwingen"
-
-msgctxt "view:stock.shipment.internal:"
msgid "Internal Shipment"
msgstr "Interner Lieferposten"
@@ -2186,18 +2149,6 @@ msgid "Internal Shipments"
msgstr "Interne Lieferposten"
msgctxt "view:stock.shipment.internal:"
-msgid "Reset to Draft"
-msgstr "Auf Entwurf zurücksetzen"
-
-msgctxt "view:stock.shipment.internal:"
-msgid "Set Done"
-msgstr "Auf Erledigt setzen"
-
-msgctxt "view:stock.shipment.internal:"
-msgid "Set Waiting"
-msgstr "Auf Wartend setzen"
-
-msgctxt "view:stock.shipment.internal:"
msgid "Waiting"
msgstr "Wartend"
@@ -2238,21 +2189,9 @@ msgid "Inventory Moves"
msgstr "Bestandsänderungen"
msgctxt "view:stock.shipment.out.return:"
-msgid "Moves"
-msgstr "Bewegungen"
-
-msgctxt "view:stock.shipment.out.return:"
msgid "Received"
msgstr "Erhalten"
-msgctxt "view:stock.shipment.out.return:"
-msgid "Reset to Draft"
-msgstr "Auf Entwurf zurücksetzen"
-
-msgctxt "view:stock.shipment.out:"
-msgid "Are you sure to force assignation?"
-msgstr "Zuweisung wirklich erzwingen?"
-
msgctxt "view:stock.shipment.out:"
msgid "Assign"
msgstr "Zuweisen"
@@ -2278,10 +2217,6 @@ msgid "Draft"
msgstr "Entwurf"
msgctxt "view:stock.shipment.out:"
-msgid "Force Assign"
-msgstr "Zuweisung erzwingen"
-
-msgctxt "view:stock.shipment.out:"
msgid "Inventory Moves"
msgstr "Bestandsänderungen"
@@ -2294,22 +2229,6 @@ msgid "Outgoing Moves"
msgstr "Ausgehende Bewegungen"
msgctxt "view:stock.shipment.out:"
-msgid "Reset to Draft"
-msgstr "Auf Entwurf zurücksetzen"
-
-msgctxt "view:stock.shipment.out:"
-msgid "Set Done"
-msgstr "Auf Erledigt setzen"
-
-msgctxt "view:stock.shipment.out:"
-msgid "Set Waiting"
-msgstr "Auf Wartend setzen"
-
-msgctxt "view:stock.shipment.out:"
-msgid "Unpack"
-msgstr "Entpackt"
-
-msgctxt "view:stock.shipment.out:"
msgid "Waiting"
msgstr "Wartend"
diff --git a/locale/es_AR.po b/locale/es_AR.po
index 5fefa74..c2dbd39 100644
--- a/locale/es_AR.po
+++ b/locale/es_AR.po
@@ -7,44 +7,38 @@ msgid ""
"You cannot change the default uom for a product which is associated to stock"
" moves."
msgstr ""
-"No puede cambiar la UdM predeterminada de un producto que está asociado con "
+"No puede cambiar la UdM por defecto de un producto que está asociado con "
"movimientos de existencias."
msgctxt "error:stock.inventory.line:"
-msgid "Line quantity must be positive!"
-msgstr "¡La cantidad de la lÃnea debe ser positiva!"
+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!"
+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 "¡Inventario \"%s\" debe ser cancelado antes de eliminar!"
+msgid "Inventory \"%s\" must be cancelled before deletion."
+msgstr "Debe cancelar el inventario «%s» antes de eliminar."
msgctxt "error:stock.location:"
-msgid ""
-"A location with existing moves cannot be changed to a type that does not "
-"support moves."
+msgid "Location \"%(location)s\" must be a child of warehouse \"%(warehouse)s\"."
msgstr ""
-"Una ubicación con movimientos no puede ser cambiado a un tipo que no soporte"
-" movimientos."
-
-msgctxt "error:stock.location:"
-msgid "Location \"%s\" must be a child of warehouse \"%s\"!"
-msgstr "¡La ubicación «%s» debe ser hijo del almacén «%s»!"
+"La ubicación «%(location)s» debe estar relacionada con almacén "
+"«%(warehouse)s»."
msgctxt "error:stock.location:"
-msgid "You can not create recursive locations!"
-msgstr "¡No puede crear ubicaciones recursivas!"
+msgid ""
+"Location \"%s\" with existing moves cannot be changed to a type that does "
+"not support moves."
+msgstr ""
+"No puede cambiar la ubicación «%s» con movimientos a otra ubicación que no "
+"soporte movimientos."
msgctxt "error:stock.move:"
msgid "Internal move quantity must be positive"
-msgstr "Cantidad interna del movimiento debe ser positiva"
-
-msgctxt "error:stock.move:"
-msgid "Move can be on only one Shipment"
-msgstr "Un movimiento solo puede hacerse con un envio."
+msgstr "La cantidad del movimiento interno debe ser positiva."
msgctxt "error:stock.move:"
msgid "Move quantity must be positive"
@@ -52,87 +46,95 @@ msgstr "La cantidad a mover tiene que ser positiva"
msgctxt "error:stock.move:"
msgid "Source and destination location must be different"
-msgstr "Los lugares origen y destino deben ser distintos"
+msgstr "Las ubicaciones origen y destino deben ser distintas."
msgctxt "error:stock.move:"
-msgid "You can not modify a move in the state: \"Assigned\", \"Done\" or \"Cancel\""
+msgid ""
+"You can not delete stock move \"%s\" because it is not in draft or cancelled"
+" state."
msgstr ""
-"¡No puede modificar un movimiento en estado: \"Asignado\", \"Terminado\" o "
-"\"Cancelado\""
+"No puede eliminar el movimiento de stock «%s» porque no está en estado "
+"borrador o cancelado."
msgctxt "error:stock.move:"
-msgid "You can not modify move in closed period!"
-msgstr "¡No puede modificar un movimiento en un perÃodo cerrado!"
+msgid "You can not modify move \"%(move)s\" because period \"%(period)s\" is closed."
+msgstr ""
+"No puede modificar el movimiento «%(move)s» porque el perÃodo «%(period)s» "
+"está cerrado."
msgctxt "error:stock.move:"
-msgid "You can not set state to assigned!"
-msgstr "¡No puede establecer el estado como asignado!"
+msgid ""
+"You can not modify stock move \"%s\"because it is in \"Assigned\", \"Done\" "
+"or \"Cancel\" state."
+msgstr ""
+"No puede modificar el movimiento de stock «%s» porque está en estado "
+"«Asignado», «Realizado» o «Cancelado»."
msgctxt "error:stock.move:"
-msgid "You can not set state to done!"
-msgstr "¡No puede establecer el estado como terminado!"
+msgid "You can not set stock move \"%s\" to assigned state."
+msgstr "No puede establecer el movimiento de stock «%s» a estado asignado."
msgctxt "error:stock.move:"
-msgid "You can not set state to draft!"
-msgstr "¡No puede establecer el estado como borrador!"
+msgid "You can not set stock move \"%s\" to done state."
+msgstr "No puede establecer el movimiento de stock «%s» a estado realizado."
msgctxt "error:stock.move:"
-msgid "You can only delete draft or cancelled moves!"
-msgstr "¡Solamente puede borrar movimientos en borrador o cancelados!"
+msgid "You can not set stock move \"%s\" to draft state."
+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 se puede cerrar un perÃodo en el futuro o hoy mismo!"
+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."
msgctxt "error:stock.period:"
-msgid "You can not close a period when there is still assigned moves!"
-msgstr "¡No se puede cerrar un perÃodo cuando existen movimientos asignados!"
+msgid "You can not close a period when there still are assigned moves."
+msgstr ""
+"No puede cerrar un perÃodo cuando todavÃa dispone de movimientos asignados."
msgctxt "error:stock.shipment.in.return:"
-msgid "Supplier Return Shipment \"%s\" must be cancelled before deletion!"
+msgid "Supplier Return Shipment \"%s\" must be cancelled before deletion."
msgstr ""
-"¡EnvÃo de devolución de proveedor \"%s\" debe ser cancelado antes de "
-"eliminar!"
+"Debe cancelar el envÃo de devolución a proveedor «%s» antes de eliminar."
msgctxt "error:stock.shipment.in:"
msgid ""
"Incoming Moves must have the warehouse input location as destination "
-"location!"
+"location."
msgstr ""
-"¡Los movimientos de entrada deben tener la ubicación del almacén de entrada "
-"como la ubicación de destino!"
+"Movimientos de entrada deben disponer de un almacén de entrada como "
+"ubicación de destino."
msgctxt "error:stock.shipment.in:"
msgid ""
-"Inventory Moves must have the warehouse input location as source location!"
+"Inventory Moves must have the warehouse input location as source location."
msgstr ""
-"¡Los movimientos de inventario deben tener la ubicación del almacén de "
-"entrada como la ubicación de origen!"
+"Los movimientos del inventario deben disponer de un almacén de entrada como "
+"ubicación inicial."
msgctxt "error:stock.shipment.in:"
-msgid "Supplier Shipment \"%s\" must be cancelled before deletion!"
-msgstr "¡EnvÃo de proveedor \"%s\" debe ser cancelado antes de eliminar!"
+msgid "Supplier Shipment \"%s\" must be cancelled before deletion."
+msgstr "Debe cancelar el envÃo de proveedor «%s» antes de eliminar."
msgctxt "error:stock.shipment.internal:"
-msgid "Internal Shipment \"%s\" must be cancelled before deletion!"
-msgstr "¡EnvÃo interno \"%s\" debe ser cancelado antes de eliminar!"
+msgid "Internal Shipment \"%s\" must be cancelled before deletion."
+msgstr "Debe cancelar el envÃo interno «%s» antes de eliminar."
msgctxt "error:stock.shipment.out.return.create:"
-msgid "The shipment with code %s is not yet sent."
-msgstr "El paquete con código %s no ha sido enviado aún."
+msgid "The shipment with code \"%s\" is not yet sent."
+msgstr "El envÃo 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"
msgctxt "error:stock.shipment.out.return:"
-msgid "Customer Return Shipment \"%s\" must be cancelled before deletion!"
+msgid "Customer Return Shipment \"%s\" must be cancelled before deletion."
msgstr ""
-"¡EnvÃo de devolución de cliente \"%s\" debe ser cancelado antes de eliminar!"
+"Debe cancelar el envÃo de devolución de cliente «%s» antes de eliminar."
msgctxt "error:stock.shipment.out:"
-msgid "Customer Shipment \"%s\" must be cancelled before deletion!"
-msgstr "¡EnvÃo de cliente \"%s\" debe ser cancelado antes de eliminar!"
+msgid "Customer Shipment \"%s\" must be cancelled before deletion."
+msgstr "Debe cancelar el envÃo de cliente «%s» antes de eliminar."
msgctxt "field:party.address,delivery:"
msgid "Delivery"
@@ -148,7 +150,7 @@ msgstr "Ubicación del proveedor"
msgctxt "field:product.by_location.start,forecast_date:"
msgid "At Date"
-msgstr "En la fecha"
+msgstr "A fecha"
msgctxt "field:product.by_location.start,id:"
msgid "ID"
@@ -192,7 +194,7 @@ msgstr "ID"
msgctxt "field:stock.configuration,rec_name:"
msgid "Name"
-msgstr "Nombre del campo"
+msgstr "Nombre"
msgctxt "field:stock.configuration,shipment_in_return_sequence:"
msgid "Supplier Return Shipment Sequence"
@@ -280,7 +282,7 @@ msgstr "Usuario creación"
msgctxt "field:stock.inventory.line,expected_quantity:"
msgid "Expected Quantity"
-msgstr "Cantidad esperada"
+msgstr "Cantidad estimada"
msgctxt "field:stock.inventory.line,id:"
msgid "ID"
@@ -308,7 +310,7 @@ msgstr "Nombre"
msgctxt "field:stock.inventory.line,unit_digits:"
msgid "Unit Digits"
-msgstr "DÃgitos de la unidad"
+msgstr "DÃgitos de unidad"
msgctxt "field:stock.inventory.line,uom:"
msgid "UOM"
@@ -392,7 +394,7 @@ msgstr "Derecha"
msgctxt "field:stock.location,storage_location:"
msgid "Storage"
-msgstr "Almacén"
+msgstr "Depósito"
msgctxt "field:stock.location,type:"
msgid "Location type"
@@ -442,6 +444,10 @@ msgctxt "field:stock.move,internal_quantity:"
msgid "Internal Quantity"
msgstr "Cantidad interna"
+msgctxt "field:stock.move,origin:"
+msgid "Origin"
+msgstr "Origen"
+
msgctxt "field:stock.move,planned_date:"
msgid "Planned Date"
msgstr "Fecha estimada"
@@ -462,25 +468,9 @@ msgctxt "field:stock.move,rec_name:"
msgid "Name"
msgstr "Nombre"
-msgctxt "field:stock.move,shipment_in:"
-msgid "Supplier Shipment"
-msgstr "EnvÃo del proveedor"
-
-msgctxt "field:stock.move,shipment_in_return:"
-msgid "Supplier Return Shipment"
-msgstr "Envio de devolución a proveedor"
-
-msgctxt "field:stock.move,shipment_internal:"
-msgid "Internal Shipment"
-msgstr "EnvÃo interno"
-
-msgctxt "field:stock.move,shipment_out:"
-msgid "Customer Shipment"
-msgstr "EnvÃo a cliente"
-
-msgctxt "field:stock.move,shipment_out_return:"
-msgid "Customer Return Shipment"
-msgstr "Envio de devolución de cliente"
+msgctxt "field:stock.move,shipment:"
+msgid "Shipment"
+msgstr "EnvÃo"
msgctxt "field:stock.move,state:"
msgid "State"
@@ -500,7 +490,7 @@ msgstr "Precio unitario"
msgctxt "field:stock.move,unit_price_required:"
msgid "Unit Price Required"
-msgstr "Requiere precio unitario"
+msgstr "Precio unitario requerido"
msgctxt "field:stock.move,uom:"
msgid "Uom"
@@ -516,7 +506,7 @@ msgstr "Usuario modificación"
msgctxt "field:stock.period,caches:"
msgid "Caches"
-msgstr "Cachés"
+msgstr "Precalculado"
msgctxt "field:stock.period,company:"
msgid "Company"
@@ -540,7 +530,7 @@ msgstr "ID"
msgctxt "field:stock.period,rec_name:"
msgid "Name"
-msgstr "Nombre del campo"
+msgstr "Nombre"
msgctxt "field:stock.period,state:"
msgid "State"
@@ -584,7 +574,7 @@ msgstr "Producto"
msgctxt "field:stock.period.cache,rec_name:"
msgid "Name"
-msgstr "Nombre del campo"
+msgstr "Nombre"
msgctxt "field:stock.period.cache,write_date:"
msgid "Write Date"
@@ -594,59 +584,49 @@ msgctxt "field:stock.period.cache,write_uid:"
msgid "Write User"
msgstr "Usuario modificación"
-#, fuzzy
msgctxt "field:stock.product_quantities_warehouse,create_date:"
msgid "Create Date"
-msgstr "Fecha de Creación"
+msgstr "Fecha creación"
-#, fuzzy
msgctxt "field:stock.product_quantities_warehouse,create_uid:"
msgid "Create User"
msgstr "Usuario creación"
-#, fuzzy
msgctxt "field:stock.product_quantities_warehouse,date:"
msgid "Date"
msgstr "Fecha"
-#, fuzzy
msgctxt "field:stock.product_quantities_warehouse,id:"
msgid "ID"
msgstr "ID"
-#, fuzzy
msgctxt "field:stock.product_quantities_warehouse,quantity:"
msgid "Quantity"
msgstr "Cantidad"
-#, fuzzy
msgctxt "field:stock.product_quantities_warehouse,rec_name:"
msgid "Name"
-msgstr "Nombre del campo"
+msgstr "Nombre"
-#, fuzzy
msgctxt "field:stock.product_quantities_warehouse,write_date:"
msgid "Write Date"
msgstr "Fecha modificación"
-#, fuzzy
msgctxt "field:stock.product_quantities_warehouse,write_uid:"
msgid "Write User"
msgstr "Usuario modificación"
-#, fuzzy
msgctxt "field:stock.product_quantities_warehouse.start,id:"
msgid "ID"
msgstr "ID"
-#, fuzzy
msgctxt "field:stock.product_quantities_warehouse.start,warehouse:"
msgid "Warehouse"
-msgstr "Depósito"
+msgstr "Almacén"
msgctxt "field:stock.products_by_locations.start,forecast_date:"
msgid "At Date"
-msgstr "En la fecha"
+msgstr "A fecha"
msgctxt "field:stock.products_by_locations.start,id:"
msgid "ID"
@@ -1051,12 +1031,12 @@ msgstr "Usuario modificación"
msgctxt "help:party.party,customer_location:"
msgid "The default destination location when sending products to the party."
msgstr ""
-"El lugar de destino predeterminado cuando se envian productos a la entidad."
+"El lugar de destino por defecto cuando se envÃan productos a la entidad."
msgctxt "help:party.party,supplier_location:"
msgid "The default source location when receiving products from the party."
msgstr ""
-"La ubicación de origen predeterminado cuando se reciben productos de la "
+"La ubicación de origen por defecto cuando se reciben productos de la "
"entidad."
msgctxt "help:product.by_location.start,forecast_date:"
@@ -1083,18 +1063,13 @@ msgctxt "model:ir.action,name:act_inventory_form"
msgid "Inventories"
msgstr "Inventarios"
-msgctxt "model:ir.action,name:act_inventory_form_draft"
-msgid "Draft Inventories"
-msgstr "Inventarios en borrador"
-
msgctxt "model:ir.action,name:act_location_form"
msgid "Locations"
msgstr "Editar ubicaciones"
-#, fuzzy
msgctxt "model:ir.action,name:act_location_quantity_tree"
msgid "Locations"
-msgstr "Existencias de producto"
+msgstr "Ubicaciones"
msgctxt "model:ir.action,name:act_location_tree"
msgid "Locations"
@@ -1104,102 +1079,57 @@ msgctxt "model:ir.action,name:act_move_form"
msgid "Moves"
msgstr "Movimientos"
-msgctxt "model:ir.action,name:act_move_form_cust"
-msgid "Moves to Customers"
-msgstr "Movimientos hacia clientes"
-
-msgctxt "model:ir.action,name:act_move_form_supp"
-msgid "Moves from Suppliers"
-msgstr "Movimientos de proveedores"
-
-msgctxt "model:ir.action,name:act_move_form_supp_proceed"
-msgid "Moves from Suppliers Waiting Arrival"
-msgstr "Movimientos de proveedores en espera de llegada"
-
msgctxt "model:ir.action,name:act_period_list"
msgid "Periods"
msgstr "PerÃodos"
msgctxt "model:ir.action,name:act_product_quantities_warehouse"
msgid "Product Quantities By Warehouse"
-msgstr ""
+msgstr "Unidades de producto por almacén"
-#, fuzzy
msgctxt "model:ir.action,name:act_products_by_locations"
msgid "Products"
-msgstr "Productos por Ubicaciones"
-
-msgctxt "model:ir.action,name:act_shipment_in_draft"
-msgid "Draft Supplier Shipment"
-msgstr "EnvÃo de proveedor en borrador"
+msgstr "Productos"
msgctxt "model:ir.action,name:act_shipment_in_form"
msgid "Supplier Shipments"
-msgstr "EnvÃos del proveedor"
-
-msgctxt "model:ir.action,name:act_shipment_in_form_received"
-msgid "Received Supplier shipments"
-msgstr "Paquetes recibidos de proveedores"
+msgstr "EnvÃos de proveedor"
msgctxt "model:ir.action,name:act_shipment_in_return_form"
msgid "Supplier Return Shipments"
-msgstr "Envios de devolución a proveedor"
-
-msgctxt "model:ir.action,name:act_shipment_internal_assigned_form"
-msgid "Assigned Internal Shipments"
-msgstr "EnvÃos internos asignados"
-
-msgctxt "model:ir.action,name:act_shipment_internal_draft_form"
-msgid "Draft Internal Shipments"
-msgstr "EnvÃos internos en borrador"
+msgstr "EnvÃos de devolución a proveedor"
msgctxt "model:ir.action,name:act_shipment_internal_form"
msgid "Internal Shipments"
msgstr "EnvÃos internos"
-msgctxt "model:ir.action,name:act_shipment_internal_waiting_form"
-msgid "Internal Shipments Waiting Assignation"
-msgstr "EnvÃos internos esperando asignación"
-
msgctxt "model:ir.action,name:act_shipment_out_form"
msgid "Customer Shipments"
msgstr "EnvÃos a cliente"
msgctxt "model:ir.action,name:act_shipment_out_form2"
msgid "Customer Shipments"
-msgstr "EnvÃos de cliente"
+msgstr "EnvÃos a cliente"
msgctxt "model:ir.action,name:act_shipment_out_form3"
msgid "Supplier Shipments"
-msgstr "Envios a proveedor"
-
-msgctxt "model:ir.action,name:act_shipment_out_form_assigned"
-msgid "Assigned Customer Shipments"
-msgstr "EnvÃos a clientes asignados"
-
-msgctxt "model:ir.action,name:act_shipment_out_form_ready"
-msgid "Customer Shipments Ready for Shipping"
-msgstr "EnvÃos a cliente listos para ser enviados"
-
-msgctxt "model:ir.action,name:act_shipment_out_form_waiting"
-msgid "Customer Shipments Waiting Assignation"
-msgstr "EnvÃos a cliente esperando asignación"
+msgstr "EnvÃos de proveedor"
msgctxt "model:ir.action,name:act_shipment_out_return_form"
msgid "Customer Return Shipments"
-msgstr "Envios de devoluciones de cliente"
+msgstr "EnvÃos de devoluciones de cliente"
msgctxt "model:ir.action,name:act_stock_configuration_form"
msgid "Stock Configuration"
-msgstr "Configuración de Stock"
+msgstr "Configuración de stock"
msgctxt "model:ir.action,name:create_shipment_out_return"
msgid "Create Return Shipment"
-msgstr "Crear envio de devolución"
+msgstr "Crear envÃo de devolución"
msgctxt "model:ir.action,name:report_shipment_in_restocking_list"
msgid "Restocking List"
-msgstr "Lista de renovación de inventario"
+msgstr "Lista reabastecimiento"
msgctxt "model:ir.action,name:report_shipment_internal"
msgid "Internal Shipment"
@@ -1207,7 +1137,7 @@ msgstr "EnvÃo interno"
msgctxt "model:ir.action,name:report_shipment_out_delivery_note"
msgid "Delivery Note"
-msgstr "Remito de envÃo"
+msgstr "Nota de envÃo"
msgctxt "model:ir.action,name:report_shipment_out_picking_list"
msgid "Picking List"
@@ -1215,24 +1145,23 @@ msgstr "Lista de selección"
msgctxt "model:ir.action,name:report_shipment_out_return_restocking_list"
msgid "Restocking List"
-msgstr "Lista de renovación de inventario"
+msgstr "Lista reabastecimiento"
-#, fuzzy
msgctxt "model:ir.action,name:wizard_product_by_location"
msgid "Product by Locations"
-msgstr "Producto por Ubicación"
+msgstr "Producto por ubicaciones"
msgctxt "model:ir.action,name:wizard_product_quantities_warehouse"
msgid "Product Quantities By Warehouse"
-msgstr ""
+msgstr "Unidades de producto por almacén"
msgctxt "model:ir.action,name:wizard_products_by_locations"
msgid "Products by Locations"
-msgstr "Productos por Ubicaciones"
+msgstr "Productos por ubicaciones"
msgctxt "model:ir.action,name:wizard_shipment_in_return_assign"
msgid "Assign Purchase Return Shipment"
-msgstr "Asignar envio de devolución de compra"
+msgstr "Asignar envÃo de devolución de compra"
msgctxt "model:ir.action,name:wizard_shipment_internal_assign"
msgid "Assign Shipment Internal"
@@ -1240,7 +1169,130 @@ msgstr "Asignar envÃo interno"
msgctxt "model:ir.action,name:wizard_shipment_out_assign"
msgid "Assign Shipment Out"
-msgstr "Asignación de salida de envÃo"
+msgstr "Asignación de envÃo de salida"
+
+msgctxt "model:ir.action.act_window.domain,name:act_inventory_form_domain_all"
+msgid "All"
+msgstr "Todo"
+
+msgctxt ""
+"model:ir.action.act_window.domain,name:act_inventory_form_domain_draft"
+msgid "Draft"
+msgstr "Borrador"
+
+msgctxt "model:ir.action.act_window.domain,name:act_move_form_domain_all"
+msgid "All"
+msgstr "Todo"
+
+msgctxt ""
+"model:ir.action.act_window.domain,name:act_move_form_domain_from_supplier"
+msgid "From Suppliers"
+msgstr "Desde proveedor"
+
+msgctxt ""
+"model:ir.action.act_window.domain,name:act_move_form_domain_from_supplier_waiting"
+msgid "From Suppliers Waiting"
+msgstr "En espera desde proveedor"
+
+msgctxt ""
+"model:ir.action.act_window.domain,name:act_move_form_domain_to_customer"
+msgid "To Customers"
+msgstr "Hacia clientes"
+
+msgctxt ""
+"model:ir.action.act_window.domain,name:act_shipment_in_form_domain_all"
+msgid "All"
+msgstr "Todo"
+
+msgctxt ""
+"model:ir.action.act_window.domain,name:act_shipment_in_form_domain_draft"
+msgid "Draft"
+msgstr "Borrador"
+
+msgctxt ""
+"model:ir.action.act_window.domain,name:act_shipment_in_form_domain_received"
+msgid "Received"
+msgstr "Recibido"
+
+msgctxt ""
+"model:ir.action.act_window.domain,name:act_shipment_in_return_form_domain_all"
+msgid "All"
+msgstr "Todo"
+
+msgctxt ""
+"model:ir.action.act_window.domain,name:act_shipment_in_return_form_domain_assigned"
+msgid "Assigned"
+msgstr "Asignado"
+
+msgctxt ""
+"model:ir.action.act_window.domain,name:act_shipment_in_return_form_domain_draft"
+msgid "Draft"
+msgstr "Borrador"
+
+msgctxt ""
+"model:ir.action.act_window.domain,name:act_shipment_in_return_form_domain_waiting"
+msgid "Waiting"
+msgstr "En espera"
+
+msgctxt ""
+"model:ir.action.act_window.domain,name:act_shipment_internal_form_domain_all"
+msgid "All"
+msgstr "Todo"
+
+msgctxt ""
+"model:ir.action.act_window.domain,name:act_shipment_internal_form_domain_assigned"
+msgid "Assigned"
+msgstr "Asignado"
+
+msgctxt ""
+"model:ir.action.act_window.domain,name:act_shipment_internal_form_domain_draft"
+msgid "Draft"
+msgstr "Borrador"
+
+msgctxt ""
+"model:ir.action.act_window.domain,name:act_shipment_internal_form_domain_waiting"
+msgid "Waiting"
+msgstr "En espera"
+
+msgctxt ""
+"model:ir.action.act_window.domain,name:act_shipment_out_form_domain_all"
+msgid "All"
+msgstr "Todo"
+
+msgctxt ""
+"model:ir.action.act_window.domain,name:act_shipment_out_form_domain_assigned"
+msgid "Assigned"
+msgstr "Asignado"
+
+msgctxt ""
+"model:ir.action.act_window.domain,name:act_shipment_out_form_domain_draft"
+msgid "Draft"
+msgstr "Borrador"
+
+msgctxt ""
+"model:ir.action.act_window.domain,name:act_shipment_out_form_domain_packed"
+msgid "Packed"
+msgstr "Empaquetado"
+
+msgctxt ""
+"model:ir.action.act_window.domain,name:act_shipment_out_form_domain_waiting"
+msgid "Waiting"
+msgstr "En espera"
+
+msgctxt ""
+"model:ir.action.act_window.domain,name:act_shipment_out_return_form_domain_all"
+msgid "All"
+msgstr "Todo"
+
+msgctxt ""
+"model:ir.action.act_window.domain,name:act_shipment_out_return_form_domain_draft"
+msgid "Draft"
+msgstr "Borrador"
+
+msgctxt ""
+"model:ir.action.act_window.domain,name:act_shipment_out_return_form_domain_received"
+msgid "Received"
+msgstr "Recibido"
msgctxt "model:ir.sequence,name:sequence_shipment_in"
msgid "Supplier Shipment"
@@ -1248,7 +1300,7 @@ msgstr "EnvÃo de proveedor"
msgctxt "model:ir.sequence,name:sequence_shipment_in_return"
msgid "Supplier Return Shipment"
-msgstr "Envio de devolución a proveedor"
+msgstr "EnvÃo de devolución a proveedor"
msgctxt "model:ir.sequence,name:sequence_shipment_internal"
msgid "Internal Shipment"
@@ -1260,7 +1312,7 @@ msgstr "EnvÃo a cliente"
msgctxt "model:ir.sequence,name:sequence_shipment_out_return"
msgid "Customer Return Shipment"
-msgstr "Envio de devolución de cliente"
+msgstr "EnvÃo de devolución de cliente"
msgctxt "model:ir.sequence.type,name:sequence_type_shipment_in"
msgid "Supplier Shipment"
@@ -1268,7 +1320,7 @@ msgstr "EnvÃo de proveedor"
msgctxt "model:ir.sequence.type,name:sequence_type_shipment_in_return"
msgid "Supplier Return Shipment"
-msgstr "Envio de devolución a proveedor"
+msgstr "EnvÃo de devolución a proveedor"
msgctxt "model:ir.sequence.type,name:sequence_type_shipment_internal"
msgid "Internal Shipment"
@@ -1280,7 +1332,7 @@ msgstr "EnvÃo a cliente"
msgctxt "model:ir.sequence.type,name:sequence_type_shipment_out_return"
msgid "Customer Return Shipment"
-msgstr "Envio de devolución de cliente"
+msgstr "EnvÃo de devolución de cliente"
msgctxt "model:ir.ui.menu,name:menu_configuration"
msgid "Configuration"
@@ -1290,13 +1342,9 @@ msgctxt "model:ir.ui.menu,name:menu_inventory_form"
msgid "Inventories"
msgstr "Inventarios"
-msgctxt "model:ir.ui.menu,name:menu_inventory_form_draft"
-msgid "Draft Inventories"
-msgstr "Inventarios en borrador"
-
msgctxt "model:ir.ui.menu,name:menu_location_form"
msgid "Locations"
-msgstr "Editar ubicaciones"
+msgstr "Ubicaciones"
msgctxt "model:ir.ui.menu,name:menu_location_tree"
msgid "Locations"
@@ -1306,18 +1354,6 @@ msgctxt "model:ir.ui.menu,name:menu_move_form"
msgid "Moves"
msgstr "Movimientos"
-msgctxt "model:ir.ui.menu,name:menu_move_form_cust"
-msgid "Moves to Customers"
-msgstr "Movimientos hacia clientes"
-
-msgctxt "model:ir.ui.menu,name:menu_move_form_supp"
-msgid "Moves from Suppliers"
-msgstr "Movimientos de proveedores"
-
-msgctxt "model:ir.ui.menu,name:menu_move_form_supp_proceed"
-msgid "Moves from Suppliers Waiting Arrival"
-msgstr "Movimientos de proveedores en espera de llegada"
-
msgctxt "model:ir.ui.menu,name:menu_period_list"
msgid "Periods"
msgstr "PerÃodos"
@@ -1326,69 +1362,37 @@ msgctxt "model:ir.ui.menu,name:menu_reporting"
msgid "Reporting"
msgstr "Informes"
-msgctxt "model:ir.ui.menu,name:menu_shipment_in_draft"
-msgid "Draft Supplier Shipment"
-msgstr "EnvÃo de proveedor en borrador"
-
msgctxt "model:ir.ui.menu,name:menu_shipment_in_form"
msgid "Supplier Shipments"
-msgstr "EnvÃos del proveedor"
-
-msgctxt "model:ir.ui.menu,name:menu_shipment_in_received"
-msgid "Received Supplier shipments"
-msgstr "Paquetes de proveedores recibidos"
+msgstr "EnvÃos de proveedor"
msgctxt "model:ir.ui.menu,name:menu_shipment_in_return_form"
msgid "Supplier Return Shipments"
-msgstr "Envios de devolución a proveedor"
-
-msgctxt "model:ir.ui.menu,name:menu_shipment_internal_assigned_form"
-msgid "Assigned Internal Shipments"
-msgstr "EnvÃos internos asignados"
-
-msgctxt "model:ir.ui.menu,name:menu_shipment_internal_draft_form"
-msgid "Draft Internal Shipments"
-msgstr "EnvÃos Internos en borrador"
+msgstr "EnvÃos de devolución a proveedor"
msgctxt "model:ir.ui.menu,name:menu_shipment_internal_form"
msgid "Internal Shipments"
msgstr "EnvÃos internos"
-msgctxt "model:ir.ui.menu,name:menu_shipment_internal_waiting_form"
-msgid "Internal Shipments Waiting Assignation"
-msgstr "EnvÃo internos esperando asignación"
-
-msgctxt "model:ir.ui.menu,name:menu_shipment_out_assigned"
-msgid "Assigned Customer Shipments"
-msgstr "EnvÃos a clientes asignados"
-
msgctxt "model:ir.ui.menu,name:menu_shipment_out_form"
msgid "Customer Shipments"
-msgstr "EnvÃos al cliente"
-
-msgctxt "model:ir.ui.menu,name:menu_shipment_out_ready"
-msgid "Customer Shipments Ready for Shipping"
-msgstr "EnvÃos al cliente listos para su envio"
+msgstr "EnvÃos a cliente"
msgctxt "model:ir.ui.menu,name:menu_shipment_out_return_form"
msgid "Customer Return Shipments"
-msgstr "Envio de devolución de cliente"
-
-msgctxt "model:ir.ui.menu,name:menu_shipment_out_waiting"
-msgid "Customer Shipments Waiting Assignation"
-msgstr "EnvÃos a cliente esperando asignación"
+msgstr "EnvÃos de devolución de cliente"
msgctxt "model:ir.ui.menu,name:menu_stock"
msgid "Inventory & Stock"
-msgstr "Gestión de Inventarios"
+msgstr "Inventarios"
msgctxt "model:ir.ui.menu,name:menu_stock_configuration"
msgid "Stock Configuration"
-msgstr "Configuración de Stock"
+msgstr "Stock"
msgctxt "model:product.by_location.start,name:"
msgid "Product by Location"
-msgstr "Producto por Ubicación"
+msgstr "Producto por ubicación"
msgctxt "model:res.group,name:group_stock"
msgid "Stock"
@@ -1404,7 +1408,7 @@ msgstr "Asignación forzada de existencias"
msgctxt "model:stock.configuration,name:"
msgid "Stock Configuration"
-msgstr "Configuración de Stock"
+msgstr "Configuración de stock"
msgctxt "model:stock.inventory,name:"
msgid "Stock Inventory"
@@ -1412,7 +1416,7 @@ msgstr "Inventario de existencia"
msgctxt "model:stock.inventory.line,name:"
msgid "Stock Inventory Line"
-msgstr "LÃnea de existencia en Inventario "
+msgstr "LÃnea inventario de existencia"
msgctxt "model:stock.location,name:"
msgid "Stock Location"
@@ -1452,24 +1456,23 @@ msgstr "Movimiento de existencias"
msgctxt "model:stock.period,name:"
msgid "Stock Period"
-msgstr "PerÃodo de stock"
+msgstr "PerÃodo de existencia"
-#, fuzzy
msgctxt "model:stock.period.cache,name:"
msgid "Stock Period Cache"
-msgstr "Caché de perÃodo de stock"
+msgstr "PerÃodo de existencia precalculado"
msgctxt "model:stock.product_quantities_warehouse,name:"
msgid "Product Quantities By Warehouse"
-msgstr ""
+msgstr "Unidades de producto por almacén"
msgctxt "model:stock.product_quantities_warehouse.start,name:"
msgid "Product Quantities By Warehouse"
-msgstr ""
+msgstr "Unidades de producto por almacén"
msgctxt "model:stock.products_by_locations.start,name:"
msgid "Products by Locations"
-msgstr "Productos por Ubicaciones"
+msgstr "Productos por ubicaciones"
msgctxt "model:stock.shipment.in,name:"
msgid "Supplier Shipment"
@@ -1477,11 +1480,11 @@ msgstr "EnvÃo de proveedor"
msgctxt "model:stock.shipment.in.return,name:"
msgid "Supplier Return Shipment"
-msgstr "Envio de devolución a proveedor"
+msgstr "EnvÃo de devolución a proveedor"
msgctxt "model:stock.shipment.in.return.assign.failed,name:"
msgid "Assign Supplier Return Shipment"
-msgstr "Asignar envio de devolución de proveedor"
+msgstr "Asignar envÃo de devolución de proveedor"
msgctxt "model:stock.shipment.internal,name:"
msgid "Internal Shipment"
@@ -1497,11 +1500,11 @@ msgstr "EnvÃo a cliente"
msgctxt "model:stock.shipment.out.assign.failed,name:"
msgid "Assign Shipment Out"
-msgstr "Asignación de salida de envÃo"
+msgstr "Asignación de envÃo de salida"
msgctxt "model:stock.shipment.out.return,name:"
msgid "Customer Return Shipment"
-msgstr "Envio de devolución de cliente"
+msgstr "EnvÃo de devolución de cliente"
msgctxt "odt:stock.shipment.in.restocking_list:"
msgid "/"
@@ -1525,7 +1528,7 @@ msgstr "Teléfono:"
msgctxt "odt:stock.shipment.in.restocking_list:"
msgid "Planned Date:"
-msgstr "Fecha planeada:"
+msgstr "Fecha estimada:"
msgctxt "odt:stock.shipment.in.restocking_list:"
msgid "Product"
@@ -1541,7 +1544,7 @@ msgstr "Referencia:"
msgctxt "odt:stock.shipment.in.restocking_list:"
msgid "Restocking List"
-msgstr "Lista de renovación de existencias"
+msgstr "Lista reabastecimiento"
msgctxt "odt:stock.shipment.in.restocking_list:"
msgid "Supplier:"
@@ -1629,7 +1632,7 @@ msgstr "Fecha:"
msgctxt "odt:stock.shipment.out.delivery_note:"
msgid "Delivery Note"
-msgstr "Remito de envio"
+msgstr "Nota de envÃo"
msgctxt "odt:stock.shipment.out.delivery_note:"
msgid "E-Mail:"
@@ -1753,7 +1756,7 @@ msgstr "Referencia:"
msgctxt "odt:stock.shipment.out.return.restocking_list:"
msgid "Restocking List"
-msgstr "Lista de renovación de existencias"
+msgstr "Lista reabastecimiento"
msgctxt "odt:stock.shipment.out.return.restocking_list:"
msgid "Supplier:"
@@ -1777,7 +1780,7 @@ msgstr "Cancelado"
msgctxt "selection:stock.inventory,state:"
msgid "Done"
-msgstr "Terminado"
+msgstr "Realizado"
msgctxt "selection:stock.inventory,state:"
msgid "Draft"
@@ -1797,7 +1800,7 @@ msgstr "Producción"
msgctxt "selection:stock.location,type:"
msgid "Storage"
-msgstr "Almacén"
+msgstr "Depósito"
msgctxt "selection:stock.location,type:"
msgid "Supplier"
@@ -1821,7 +1824,7 @@ msgstr "Cancelado"
msgctxt "selection:stock.move,state:"
msgid "Done"
-msgstr "Terminado"
+msgstr "Realizado"
msgctxt "selection:stock.move,state:"
msgid "Draft"
@@ -1841,7 +1844,7 @@ msgstr "Cancelado"
msgctxt "selection:stock.shipment.in,state:"
msgid "Done"
-msgstr "Terminado"
+msgstr "Realizado"
msgctxt "selection:stock.shipment.in,state:"
msgid "Draft"
@@ -1861,7 +1864,7 @@ msgstr "Cancelado"
msgctxt "selection:stock.shipment.in.return,state:"
msgid "Done"
-msgstr "Terminado"
+msgstr "Realizado"
msgctxt "selection:stock.shipment.in.return,state:"
msgid "Draft"
@@ -1881,7 +1884,7 @@ msgstr "Cancelado"
msgctxt "selection:stock.shipment.internal,state:"
msgid "Done"
-msgstr "Terminado"
+msgstr "Realizado"
msgctxt "selection:stock.shipment.internal,state:"
msgid "Draft"
@@ -1901,7 +1904,7 @@ msgstr "Cancelado"
msgctxt "selection:stock.shipment.out,state:"
msgid "Done"
-msgstr "Terminado"
+msgstr "Realizado"
msgctxt "selection:stock.shipment.out,state:"
msgid "Draft"
@@ -1921,7 +1924,7 @@ msgstr "Cancelado"
msgctxt "selection:stock.shipment.out.return,state:"
msgid "Done"
-msgstr "Terminado"
+msgstr "Realizado"
msgctxt "selection:stock.shipment.out.return,state:"
msgid "Draft"
@@ -1935,13 +1938,9 @@ msgctxt "view:party.party:"
msgid "Stock"
msgstr "Existencias"
-msgctxt "view:party.party:"
-msgid "_Stock"
-msgstr "_Existencias"
-
msgctxt "view:product.by_location.start:"
msgid "Product by Location"
-msgstr "Producto por Ubicación"
+msgstr "Producto por ubicación"
msgctxt "view:product.product:"
msgid "Products"
@@ -1949,7 +1948,7 @@ msgstr "Productos"
msgctxt "view:stock.configuration:"
msgid "Stock Configuration"
-msgstr "Configuración de Stock"
+msgstr "Configuración de stock"
msgctxt "view:stock.inventory.line:"
msgid "Inventory Line"
@@ -1964,10 +1963,6 @@ msgid "Add an inventory line for each missing products"
msgstr "Añadir una lÃnea de inventario por cada producto que falta"
msgctxt "view:stock.inventory:"
-msgid "All generated moves will be cancelled!"
-msgstr "¡Se cancelarán todos los movimientos generados!"
-
-msgctxt "view:stock.inventory:"
msgid "Cancel"
msgstr "Cancelar"
@@ -1987,30 +1982,18 @@ msgctxt "view:stock.inventory:"
msgid "Inventory"
msgstr "Inventario"
-msgctxt "view:stock.inventory:"
-msgid "Re-Open"
-msgstr "Reabrir"
-
msgctxt "view:stock.location:"
msgid "Location"
msgstr "Ubicación"
msgctxt "view:stock.location:"
msgid "Location Quantity"
-msgstr "Existencias en la ubicación"
+msgstr "Existencias en ubicación"
msgctxt "view:stock.location:"
msgid "Locations"
msgstr "Ubicaciones"
-msgctxt "view:stock.location:"
-msgid "Product Stock"
-msgstr "Existencias del producto"
-
-msgctxt "view:stock.move:"
-msgid "Cancel"
-msgstr "Cancelar"
-
msgctxt "view:stock.move:"
msgid "Move"
msgstr "Movimiento"
@@ -2019,21 +2002,13 @@ msgctxt "view:stock.move:"
msgid "Moves"
msgstr "Movimientos"
-msgctxt "view:stock.move:"
-msgid "Set Done"
-msgstr "Marcar como terminado"
-
-msgctxt "view:stock.move:"
-msgid "Set Draft"
-msgstr "Marcar como borrador"
-
msgctxt "view:stock.period.cache:"
msgid "Period Cache"
-msgstr "Caché de perÃodo"
+msgstr "PerÃodo precalculado"
msgctxt "view:stock.period.cache:"
msgid "Period Caches"
-msgstr "Cachés de periodo"
+msgstr "PerÃodo precalculado"
msgctxt "view:stock.period:"
msgid "Close"
@@ -2053,15 +2028,15 @@ msgstr "PerÃodos"
msgctxt "view:stock.product_quantities_warehouse.start:"
msgid "Product Quantities By Warehouse"
-msgstr ""
+msgstr "Unidades de producto por almacén"
msgctxt "view:stock.product_quantities_warehouse:"
msgid "Product Quantities By Warehouse"
-msgstr ""
+msgstr "Unidades de producto por almacén"
msgctxt "view:stock.products_by_locations.start:"
msgid "Products by Locations"
-msgstr "Productos por Ubicaciones"
+msgstr "Productos por ubicaciones"
msgctxt "view:stock.shipment.in.return.assign.failed:"
msgid "Unable to Assign"
@@ -2081,43 +2056,31 @@ msgstr "Cancelar"
msgctxt "view:stock.shipment.in.return:"
msgid "Done"
-msgstr "Terminado"
+msgstr "Realizado"
msgctxt "view:stock.shipment.in.return:"
msgid "Draft"
msgstr "Borrador"
msgctxt "view:stock.shipment.in.return:"
-msgid "Reset to Draft"
-msgstr "Restablecer a borrador"
-
-msgctxt "view:stock.shipment.in.return:"
msgid "Supplier Return Shipment"
-msgstr "Envio de devolución a proveedor"
+msgstr "EnvÃo de devolución a proveedor"
msgctxt "view:stock.shipment.in.return:"
msgid "Supplier Return Shipments"
-msgstr "Envios de devolución a proveedor"
+msgstr "EnvÃos de devolución a proveedor"
msgctxt "view:stock.shipment.in.return:"
msgid "Wait"
msgstr "Espera"
-msgctxt "view:stock.shipment.in.return:"
-msgid "Waiting"
-msgstr "En espera"
-
msgctxt "view:stock.shipment.in:"
msgid "Cancel"
msgstr "Cancelar"
msgctxt "view:stock.shipment.in:"
msgid "Done"
-msgstr "Terminado"
-
-msgctxt "view:stock.shipment.in:"
-msgid "Draft"
-msgstr "Borrador"
+msgstr "Realizado"
msgctxt "view:stock.shipment.in:"
msgid "Incoming Moves"
@@ -2128,18 +2091,10 @@ msgid "Inventory Moves"
msgstr "Movimientos de inventario"
msgctxt "view:stock.shipment.in:"
-msgid "Moves"
-msgstr "Movimientos"
-
-msgctxt "view:stock.shipment.in:"
msgid "Receive"
msgstr "Recibe"
msgctxt "view:stock.shipment.in:"
-msgid "Received"
-msgstr "Recibido"
-
-msgctxt "view:stock.shipment.in:"
msgid "Reset to Draft"
msgstr "Restablecer a borrador"
@@ -2169,17 +2124,13 @@ msgstr "Cancelar"
msgctxt "view:stock.shipment.internal:"
msgid "Done"
-msgstr "Terminado"
+msgstr "Realizado"
msgctxt "view:stock.shipment.internal:"
msgid "Draft"
msgstr "Borrador"
msgctxt "view:stock.shipment.internal:"
-msgid "Force Assign"
-msgstr "Forzar asignación"
-
-msgctxt "view:stock.shipment.internal:"
msgid "Internal Shipment"
msgstr "EnvÃo interno"
@@ -2188,18 +2139,6 @@ msgid "Internal Shipments"
msgstr "EnvÃos internos"
msgctxt "view:stock.shipment.internal:"
-msgid "Reset to Draft"
-msgstr "Restablecer a borrador"
-
-msgctxt "view:stock.shipment.internal:"
-msgid "Set Done"
-msgstr "Marcar como terminado"
-
-msgctxt "view:stock.shipment.internal:"
-msgid "Set Waiting"
-msgstr "Colocar en espera"
-
-msgctxt "view:stock.shipment.internal:"
msgid "Waiting"
msgstr "En espera"
@@ -2217,15 +2156,15 @@ msgstr "Cancelar"
msgctxt "view:stock.shipment.out.return:"
msgid "Customer Return Shipment"
-msgstr "Envio de devolución de cliente"
+msgstr "EnvÃo de devolución de cliente"
msgctxt "view:stock.shipment.out.return:"
msgid "Customer Return Shipments"
-msgstr "Envios de devolución de cliente"
+msgstr "EnvÃos de devolución de cliente"
msgctxt "view:stock.shipment.out.return:"
msgid "Done"
-msgstr "Terminado"
+msgstr "Realizado"
msgctxt "view:stock.shipment.out.return:"
msgid "Draft"
@@ -2240,17 +2179,9 @@ msgid "Inventory Moves"
msgstr "Movimientos de inventario"
msgctxt "view:stock.shipment.out.return:"
-msgid "Moves"
-msgstr "Movimientos"
-
-msgctxt "view:stock.shipment.out.return:"
msgid "Received"
msgstr "Recibido"
-msgctxt "view:stock.shipment.out.return:"
-msgid "Reset to Draft"
-msgstr "Restablecer a borrador"
-
msgctxt "view:stock.shipment.out:"
msgid "Assign"
msgstr "Asignar"
@@ -2265,21 +2196,17 @@ msgstr "EnvÃo a cliente"
msgctxt "view:stock.shipment.out:"
msgid "Customer Shipments"
-msgstr "EnvÃos a clientes"
+msgstr "EnvÃos a cliente"
msgctxt "view:stock.shipment.out:"
msgid "Done"
-msgstr "Terminado"
+msgstr "Realizado"
msgctxt "view:stock.shipment.out:"
msgid "Draft"
msgstr "Borrador"
msgctxt "view:stock.shipment.out:"
-msgid "Force Assign"
-msgstr "Forzar asignación"
-
-msgctxt "view:stock.shipment.out:"
msgid "Inventory Moves"
msgstr "Movimientos de inventario"
@@ -2292,22 +2219,6 @@ msgid "Outgoing Moves"
msgstr "Movimientos de salida"
msgctxt "view:stock.shipment.out:"
-msgid "Reset to Draft"
-msgstr "Restablecer a borrador"
-
-msgctxt "view:stock.shipment.out:"
-msgid "Set Done"
-msgstr "Marcar como terminado"
-
-msgctxt "view:stock.shipment.out:"
-msgid "Set Waiting"
-msgstr "Colocar en espera"
-
-msgctxt "view:stock.shipment.out:"
-msgid "Unpack"
-msgstr "Desempaquetar"
-
-msgctxt "view:stock.shipment.out:"
msgid "Waiting"
msgstr "En espera"
@@ -2319,12 +2230,10 @@ msgctxt "wizard_button:product.by_location,start,open:"
msgid "Open"
msgstr "Abrir"
-#, fuzzy
msgctxt "wizard_button:stock.product_quantities_warehouse,start,end:"
msgid "Cancel"
msgstr "Cancelar"
-#, fuzzy
msgctxt "wizard_button:stock.product_quantities_warehouse,start,open_:"
msgid "Open"
msgstr "Abrir"
diff --git a/locale/es_CO.po b/locale/es_CO.po
index f1ab631..bea695a 100644
--- a/locale/es_CO.po
+++ b/locale/es_CO.po
@@ -11,40 +11,34 @@ msgstr ""
"movimientos de existencias."
msgctxt "error:stock.inventory.line:"
-msgid "Line quantity must be positive!"
-msgstr "¡La cantidad de la lÃnea debe ser positiva!"
+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!"
+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 "¡Inventario \"%s\" debe ser cancelado antes de eliminar!"
+msgid "Inventory \"%s\" must be cancelled before deletion."
+msgstr "El inventario \"%s\" debe ser cancelado antes de ser eliminado."
msgctxt "error:stock.location:"
-msgid ""
-"A location with existing moves cannot be changed to a type that does not "
-"support moves."
+msgid "Location \"%(location)s\" must be a child of warehouse \"%(warehouse)s\"."
msgstr ""
-"Una locación con movimientos no puede ser cambiado a un tipo que no soporte "
-"movimientos."
-
-msgctxt "error:stock.location:"
-msgid "Location \"%s\" must be a child of warehouse \"%s\"!"
-msgstr "¡La locación «%s» debe ser hijo del almacén «%s»!"
+"La(s) bodega(s) \"%(locations)s\" deben ser hijas del almacén "
+"\"%(warehouse)s\"."
msgctxt "error:stock.location:"
-msgid "You can not create recursive locations!"
-msgstr "¡No puede crear locaciones recursivas!"
+msgid ""
+"Location \"%s\" with existing moves cannot be changed to a type that does "
+"not support moves."
+msgstr ""
+"Bodega(s) \"%s\" con movimientos realizados no pueden ser cambiadas a un "
+"tipo no soportado."
msgctxt "error:stock.move:"
msgid "Internal move quantity must be positive"
-msgstr "Cantidad interna del movimiento debe ser positiva"
-
-msgctxt "error:stock.move:"
-msgid "Move can be on only one Shipment"
-msgstr "Un movimiento solo puede hacerse con un envio."
+msgstr "La cantidad del movimiento interno debe ser positiva"
msgctxt "error:stock.move:"
msgid "Move quantity must be positive"
@@ -52,100 +46,108 @@ msgstr "La cantidad a mover tiene que ser positiva"
msgctxt "error:stock.move:"
msgid "Source and destination location must be different"
-msgstr "Las locaciones origen y destino deben ser distintas"
+msgstr "Las bodegas origen y destino deben ser distintas"
msgctxt "error:stock.move:"
-msgid "You can not modify a move in the state: \"Assigned\", \"Done\" or \"Cancel\""
+msgid ""
+"You can not delete stock move \"%s\" because it is not in draft or cancelled"
+" state."
msgstr ""
-"¡No puede modificar un movimiento en estado: \"Asignado\", \"Hecho\" o "
-"\"Cancelado\""
+"No puede borrar movimientos de inventarios \"%s\" porque no estan en estado "
+"borrador o cancelados."
msgctxt "error:stock.move:"
-msgid "You can not modify move in closed period!"
-msgstr "¡No puede modificar un movimiento en un perÃodo cerrado!"
+msgid "You can not modify move \"%(move)s\" because period \"%(period)s\" is closed."
+msgstr ""
+"Usted no puede modificar movimientos \"%(move)s\" porque el periodo "
+"\"%(period)s\" esta cerrado."
msgctxt "error:stock.move:"
-msgid "You can not set state to assigned!"
-msgstr "¡No puede establecer el estado como asignado!"
+msgid ""
+"You can not modify stock move \"%s\"because it is in \"Assigned\", \"Done\" "
+"or \"Cancel\" state."
+msgstr ""
+"Usted no puede modificar los movimientos de inventarios \"%s\" porque estan "
+"en estado \"Asignado\", \"Hecho\" o \"Cancelado\". "
msgctxt "error:stock.move:"
-msgid "You can not set state to done!"
-msgstr "¡No puede establecer el estado como hecho!"
+msgid "You can not set stock move \"%s\" to assigned state."
+msgstr "No puede establecer el movimiento de inventarios \"%s\" como asignado."
msgctxt "error:stock.move:"
-msgid "You can not set state to draft!"
-msgstr "¡No puede establecer el estado como borrador!"
+msgid "You can not set stock move \"%s\" to done state."
+msgstr "No puede establecer el movimiento de inventarios \"%s\" como hecho."
msgctxt "error:stock.move:"
-msgid "You can only delete draft or cancelled moves!"
-msgstr "¡Solamente puede eliminar movimientos en borrador o cancelados!"
+msgid "You can not set stock move \"%s\" to draft state."
+msgstr "No puede establecer el movimiento de inventarios \"%s\" como borrador."
msgctxt "error:stock.period:"
-msgid "You can not close a period in the future or today!"
-msgstr "¡No se puede cerrar un perÃodo en el futuro o hoy mismo!"
+msgid "You can not close a period in the future or today."
+msgstr "No se puede cerrar un perÃodo en el futuro o hoy mismo!"
msgctxt "error:stock.period:"
-msgid "You can not close a period when there is still assigned moves!"
-msgstr "¡No se puede cerrar un perÃodo cuando existen movimientos asignados!"
+msgid "You can not close a period when there still are assigned moves."
+msgstr "No se puede cerrar un perÃodo cuando existen movimientos asignados!"
msgctxt "error:stock.shipment.in.return:"
-msgid "Supplier Return Shipment \"%s\" must be cancelled before deletion!"
+msgid "Supplier Return Shipment \"%s\" must be cancelled before deletion."
msgstr ""
-"¡El envÃo de devolución a proveedor \"%s\" debe ser cancelado antes de "
-"eliminarse!"
+"El envÃo de devolución a proveedor \"%s\" debe ser cancelado antes de ser "
+"eliminado!"
msgctxt "error:stock.shipment.in:"
msgid ""
"Incoming Moves must have the warehouse input location as destination "
-"location!"
+"location."
msgstr ""
-"¡Los movimientos de entrada deben tener la locación del almacén de entrada "
-"como la locación de destino!"
+"¡Los movimientos de entrada deben tener el almacén de entrada como bodega "
+"destino."
msgctxt "error:stock.shipment.in:"
msgid ""
-"Inventory Moves must have the warehouse input location as source location!"
+"Inventory Moves must have the warehouse input location as source location."
msgstr ""
-"¡Los movimientos de inventario deben tener la locación del almacén de "
-"entrada como la locación de origen!"
+"¡Los movimientos de inventario deben tener el almacén de entrada como bodega"
+" de origen."
msgctxt "error:stock.shipment.in:"
-msgid "Supplier Shipment \"%s\" must be cancelled before deletion!"
-msgstr "¡EnvÃo de proveedor \"%s\" debe ser cancelado antes de eliminar!"
+msgid "Supplier Shipment \"%s\" must be cancelled before deletion."
+msgstr "El envÃo de proveedor \"%s\" debe ser cancelado antes de ser eliminado!"
msgctxt "error:stock.shipment.internal:"
-msgid "Internal Shipment \"%s\" must be cancelled before deletion!"
-msgstr "¡EnvÃo interno \"%s\" debe ser cancelado antes de eliminar!"
+msgid "Internal Shipment \"%s\" must be cancelled before deletion."
+msgstr "El envÃo interno \"%s\" debe ser cancelado antes de ser eliminado."
msgctxt "error:stock.shipment.out.return.create:"
-msgid "The shipment with code %s is not yet sent."
-msgstr "El paquete con código %s no ha sido enviado aún."
+msgid "The shipment with code \"%s\" is not yet sent."
+msgstr "El envÃo con código \"%s\" no se ha enviado todavÃa."
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 devoluciones"
msgctxt "error:stock.shipment.out.return:"
-msgid "Customer Return Shipment \"%s\" must be cancelled before deletion!"
+msgid "Customer Return Shipment \"%s\" must be cancelled before deletion."
msgstr ""
"¡El envÃo de devolución de cliente \"%s\" debe ser cancelado antes de "
"eliminarse!"
msgctxt "error:stock.shipment.out:"
-msgid "Customer Shipment \"%s\" must be cancelled before deletion!"
+msgid "Customer Shipment \"%s\" must be cancelled before deletion."
msgstr "¡El envÃo de cliente \"%s\" debe ser cancelado antes de eliminarse!"
msgctxt "field:party.address,delivery:"
msgid "Delivery"
-msgstr "EnvÃo"
+msgstr "Entrega"
msgctxt "field:party.party,customer_location:"
msgid "Customer Location"
-msgstr "Locación del Cliente"
+msgstr "Bodega del Cliente"
msgctxt "field:party.party,supplier_location:"
msgid "Supplier Location"
-msgstr "Locación del Proveedor"
+msgstr "Bodega del Proveedor"
msgctxt "field:product.by_location.start,forecast_date:"
msgid "At Date"
@@ -181,11 +183,11 @@ msgstr "Cantidad"
msgctxt "field:stock.configuration,create_date:"
msgid "Create Date"
-msgstr "Fecha creación"
+msgstr "Fecha de Creación"
msgctxt "field:stock.configuration,create_uid:"
msgid "Create User"
-msgstr "Usuario creación"
+msgstr "Creado por Usuario"
msgctxt "field:stock.configuration,id:"
msgid "ID"
@@ -197,31 +199,31 @@ 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 EnvÃo 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 EnvÃo de proveedor"
msgctxt "field:stock.configuration,shipment_internal_sequence:"
msgid "Internal Shipment Sequence"
-msgstr "Secuencia de envÃo interno"
+msgstr "Secuencia EnvÃo 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 Devolución de Cliente"
msgctxt "field:stock.configuration,shipment_out_sequence:"
msgid "Customer Shipment Sequence"
-msgstr "Secuencia de envÃo a cliente"
+msgstr "Secuencia EnvÃo a cliente"
msgctxt "field:stock.configuration,write_date:"
msgid "Write Date"
-msgstr "Fecha modificación"
+msgstr "Fecha de Modificación"
msgctxt "field:stock.configuration,write_uid:"
msgid "Write User"
-msgstr "Usuario modificación"
+msgstr "Modificado por Usuario"
msgctxt "field:stock.inventory,company:"
msgid "Company"
@@ -229,11 +231,11 @@ msgstr "Compañia"
msgctxt "field:stock.inventory,create_date:"
msgid "Create Date"
-msgstr "Fecha creación"
+msgstr "Fecha de Creación"
msgctxt "field:stock.inventory,create_uid:"
msgid "Create User"
-msgstr "Usuario creación"
+msgstr "Creado por Usuario"
msgctxt "field:stock.inventory,date:"
msgid "Date"
@@ -249,7 +251,7 @@ msgstr "LÃneas"
msgctxt "field:stock.inventory,location:"
msgid "Location"
-msgstr "Locación"
+msgstr "Bodega"
msgctxt "field:stock.inventory,lost_found:"
msgid "Lost and Found"
@@ -265,19 +267,19 @@ msgstr "Estado"
msgctxt "field:stock.inventory,write_date:"
msgid "Write Date"
-msgstr "Fecha modificación"
+msgstr "Fecha de Modificación"
msgctxt "field:stock.inventory,write_uid:"
msgid "Write User"
-msgstr "Usuario modificación"
+msgstr "Modificado por Usuario"
msgctxt "field:stock.inventory.line,create_date:"
msgid "Create Date"
-msgstr "Fecha creación"
+msgstr "Fecha de Creación"
msgctxt "field:stock.inventory.line,create_uid:"
msgid "Create User"
-msgstr "Usuario creación"
+msgstr "Creado por Usuario"
msgctxt "field:stock.inventory.line,expected_quantity:"
msgid "Expected Quantity"
@@ -309,7 +311,7 @@ msgstr "Nombre"
msgctxt "field:stock.inventory.line,unit_digits:"
msgid "Unit Digits"
-msgstr "DÃgitos de la Unidad"
+msgstr "Decimales de Unidad"
msgctxt "field:stock.inventory.line,uom:"
msgid "UOM"
@@ -317,11 +319,11 @@ msgstr "UdM"
msgctxt "field:stock.inventory.line,write_date:"
msgid "Write Date"
-msgstr "Fecha modificación"
+msgstr "Fecha de Modificación"
msgctxt "field:stock.inventory.line,write_uid:"
msgid "Write User"
-msgstr "Usuario modificación"
+msgstr "Modificado por Usuario"
msgctxt "field:stock.location,active:"
msgid "Active"
@@ -345,11 +347,11 @@ msgstr "Costo"
msgctxt "field:stock.location,create_date:"
msgid "Create Date"
-msgstr "Fecha creación"
+msgstr "Fecha de Creación"
msgctxt "field:stock.location,create_uid:"
msgid "Create User"
-msgstr "Usuario creación"
+msgstr "Creado por Usuario"
msgctxt "field:stock.location,forecast_quantity:"
msgid "Forecast Quantity"
@@ -397,15 +399,15 @@ msgstr "Almacén"
msgctxt "field:stock.location,type:"
msgid "Location type"
-msgstr "Tipo de Locación"
+msgstr "Tipo de Bodega"
msgctxt "field:stock.location,write_date:"
msgid "Write Date"
-msgstr "Fecha modificación"
+msgstr "Fecha de Modificación"
msgctxt "field:stock.location,write_uid:"
msgid "Write User"
-msgstr "Usuario modificación"
+msgstr "Modificado por Usuario"
msgctxt "field:stock.move,company:"
msgid "Company"
@@ -417,11 +419,11 @@ msgstr "Precio de Costo"
msgctxt "field:stock.move,create_date:"
msgid "Create Date"
-msgstr "Fecha creación"
+msgstr "Fecha de Creación"
msgctxt "field:stock.move,create_uid:"
msgid "Create User"
-msgstr "Usuario creación"
+msgstr "Creado por Usuario"
msgctxt "field:stock.move,currency:"
msgid "Currency"
@@ -429,11 +431,11 @@ msgstr "Moneda"
msgctxt "field:stock.move,effective_date:"
msgid "Effective Date"
-msgstr "Fecha efectiva"
+msgstr "Fecha Efectiva"
msgctxt "field:stock.move,from_location:"
msgid "From Location"
-msgstr "Desde Locación"
+msgstr "Desde Bodega"
msgctxt "field:stock.move,id:"
msgid "ID"
@@ -443,6 +445,10 @@ msgctxt "field:stock.move,internal_quantity:"
msgid "Internal Quantity"
msgstr "Cantidad Interna"
+msgctxt "field:stock.move,origin:"
+msgid "Origin"
+msgstr "Origen"
+
msgctxt "field:stock.move,planned_date:"
msgid "Planned Date"
msgstr "Fecha Planeada"
@@ -463,25 +469,9 @@ msgctxt "field:stock.move,rec_name:"
msgid "Name"
msgstr "Nombre"
-msgctxt "field:stock.move,shipment_in:"
-msgid "Supplier Shipment"
-msgstr "EnvÃo del Proveedor"
-
-msgctxt "field:stock.move,shipment_in_return:"
-msgid "Supplier Return Shipment"
-msgstr "Envio de Devolución a Proveedor"
-
-msgctxt "field:stock.move,shipment_internal:"
-msgid "Internal Shipment"
-msgstr "EnvÃo Interno"
-
-msgctxt "field:stock.move,shipment_out:"
-msgid "Customer Shipment"
-msgstr "EnvÃo a Cliente"
-
-msgctxt "field:stock.move,shipment_out_return:"
-msgid "Customer Return Shipment"
-msgstr "Envio de Devolución de Cliente"
+msgctxt "field:stock.move,shipment:"
+msgid "Shipment"
+msgstr "EnvÃo"
msgctxt "field:stock.move,state:"
msgid "State"
@@ -489,7 +479,7 @@ msgstr "Estado"
msgctxt "field:stock.move,to_location:"
msgid "To Location"
-msgstr "A Locación"
+msgstr "A Bodega"
msgctxt "field:stock.move,unit_digits:"
msgid "Unit Digits"
@@ -501,7 +491,7 @@ msgstr "Precio Unitario"
msgctxt "field:stock.move,unit_price_required:"
msgid "Unit Price Required"
-msgstr "Requiere precio unitario"
+msgstr "Requiere Precio Unitario"
msgctxt "field:stock.move,uom:"
msgid "Uom"
@@ -509,11 +499,11 @@ msgstr "UdM"
msgctxt "field:stock.move,write_date:"
msgid "Write Date"
-msgstr "Fecha modificación"
+msgstr "Fecha de Modificación"
msgctxt "field:stock.move,write_uid:"
msgid "Write User"
-msgstr "Usuario modificación"
+msgstr "Modificado por Usuario"
msgctxt "field:stock.period,caches:"
msgid "Caches"
@@ -525,11 +515,11 @@ msgstr "Compañia"
msgctxt "field:stock.period,create_date:"
msgid "Create Date"
-msgstr "Fecha creación"
+msgstr "Fecha de Creación"
msgctxt "field:stock.period,create_uid:"
msgid "Create User"
-msgstr "Usuario creación"
+msgstr "Creado por Usuario"
msgctxt "field:stock.period,date:"
msgid "Date"
@@ -549,19 +539,19 @@ msgstr "Estado"
msgctxt "field:stock.period,write_date:"
msgid "Write Date"
-msgstr "Fecha modificación"
+msgstr "Fecha de Modificación"
msgctxt "field:stock.period,write_uid:"
msgid "Write User"
-msgstr "Usuario modificación"
+msgstr "Modificado por Usuario"
msgctxt "field:stock.period.cache,create_date:"
msgid "Create Date"
-msgstr "Fecha creación"
+msgstr "Fecha de Creación"
msgctxt "field:stock.period.cache,create_uid:"
msgid "Create User"
-msgstr "Usuario creación"
+msgstr "Creado por Usuario"
msgctxt "field:stock.period.cache,id:"
msgid "ID"
@@ -573,7 +563,7 @@ msgstr "Cantidad Interna"
msgctxt "field:stock.period.cache,location:"
msgid "Location"
-msgstr "Locación"
+msgstr "Bodega"
msgctxt "field:stock.period.cache,period:"
msgid "Period"
@@ -589,11 +579,11 @@ msgstr "Nombre"
msgctxt "field:stock.period.cache,write_date:"
msgid "Write Date"
-msgstr "Fecha modificación"
+msgstr "Fecha de Modificación"
msgctxt "field:stock.period.cache,write_uid:"
msgid "Write User"
-msgstr "Usuario modificación"
+msgstr "Modificado por Usuario"
msgctxt "field:stock.product_quantities_warehouse,create_date:"
msgid "Create Date"
@@ -601,7 +591,7 @@ msgstr "Fecha de Creación"
msgctxt "field:stock.product_quantities_warehouse,create_uid:"
msgid "Create User"
-msgstr "Usuario creación"
+msgstr "Creado por Usuario"
msgctxt "field:stock.product_quantities_warehouse,date:"
msgid "Date"
@@ -621,11 +611,11 @@ msgstr "Nombre"
msgctxt "field:stock.product_quantities_warehouse,write_date:"
msgid "Write Date"
-msgstr "Fecha modificación"
+msgstr "Fecha de Modificación"
msgctxt "field:stock.product_quantities_warehouse,write_uid:"
msgid "Write User"
-msgstr "Usuario modificación"
+msgstr "Modificado por Usuario"
msgctxt "field:stock.product_quantities_warehouse.start,id:"
msgid "ID"
@@ -657,15 +647,15 @@ msgstr "Dirección de Contacto"
msgctxt "field:stock.shipment.in,create_date:"
msgid "Create Date"
-msgstr "Fecha creación"
+msgstr "Fecha de Creación"
msgctxt "field:stock.shipment.in,create_uid:"
msgid "Create User"
-msgstr "Usuario creación"
+msgstr "Creado por Usuario"
msgctxt "field:stock.shipment.in,effective_date:"
msgid "Effective Date"
-msgstr "Fecha efectiva"
+msgstr "Fecha Efectiva"
msgctxt "field:stock.shipment.in,id:"
msgid "ID"
@@ -705,7 +695,7 @@ msgstr "Proveedor"
msgctxt "field:stock.shipment.in,supplier_location:"
msgid "Supplier Location"
-msgstr "Locación del Proveedor"
+msgstr "Bodega del Proveedor"
msgctxt "field:stock.shipment.in,warehouse:"
msgid "Warehouse"
@@ -721,11 +711,11 @@ msgstr "Depósito de Almacenamiento"
msgctxt "field:stock.shipment.in,write_date:"
msgid "Write Date"
-msgstr "Fecha modificación"
+msgstr "Fecha de Modificación"
msgctxt "field:stock.shipment.in,write_uid:"
msgid "Write User"
-msgstr "Usuario modificación"
+msgstr "Modificado por Usuario"
msgctxt "field:stock.shipment.in.return,code:"
msgid "Code"
@@ -733,23 +723,23 @@ msgstr "Código"
msgctxt "field:stock.shipment.in.return,company:"
msgid "Company"
-msgstr "Empresa"
+msgstr "Compañia"
msgctxt "field:stock.shipment.in.return,create_date:"
msgid "Create Date"
-msgstr "Fecha creación"
+msgstr "Fecha de Creación"
msgctxt "field:stock.shipment.in.return,create_uid:"
msgid "Create User"
-msgstr "Usuario creación"
+msgstr "Creado por Usuario"
msgctxt "field:stock.shipment.in.return,effective_date:"
msgid "Effective Date"
-msgstr "Fecha efectiva"
+msgstr "Fecha Efectiva"
msgctxt "field:stock.shipment.in.return,from_location:"
msgid "From Location"
-msgstr "Desde locación"
+msgstr "Desde Bodega"
msgctxt "field:stock.shipment.in.return,id:"
msgid "ID"
@@ -777,15 +767,15 @@ msgstr "Estado"
msgctxt "field:stock.shipment.in.return,to_location:"
msgid "To Location"
-msgstr "A Locación"
+msgstr "A Bodega"
msgctxt "field:stock.shipment.in.return,write_date:"
msgid "Write Date"
-msgstr "Fecha modificación"
+msgstr "Fecha de Modificación"
msgctxt "field:stock.shipment.in.return,write_uid:"
msgid "Write User"
-msgstr "Usuario modificación"
+msgstr "Modificado por Usuario"
msgctxt "field:stock.shipment.in.return.assign.failed,id:"
msgid "ID"
@@ -805,19 +795,19 @@ msgstr "Compañia"
msgctxt "field:stock.shipment.internal,create_date:"
msgid "Create Date"
-msgstr "Fecha creación"
+msgstr "Fecha de Creación"
msgctxt "field:stock.shipment.internal,create_uid:"
msgid "Create User"
-msgstr "Usuario creación"
+msgstr "Creado por Usuario"
msgctxt "field:stock.shipment.internal,effective_date:"
msgid "Effective Date"
-msgstr "Fecha efectiva"
+msgstr "Fecha Efectiva"
msgctxt "field:stock.shipment.internal,from_location:"
msgid "From Location"
-msgstr "Desde locación"
+msgstr "Desde Bodega"
msgctxt "field:stock.shipment.internal,id:"
msgid "ID"
@@ -845,15 +835,15 @@ msgstr "Estado"
msgctxt "field:stock.shipment.internal,to_location:"
msgid "To Location"
-msgstr "A Locación"
+msgstr "A Bodega"
msgctxt "field:stock.shipment.internal,write_date:"
msgid "Write Date"
-msgstr "Fecha modificación"
+msgstr "Fecha de Modificación"
msgctxt "field:stock.shipment.internal,write_uid:"
msgid "Write User"
-msgstr "Usuario modificación"
+msgstr "Modificado por Usuario"
msgctxt "field:stock.shipment.internal.assign.failed,id:"
msgid "ID"
@@ -873,11 +863,11 @@ msgstr "Compañia"
msgctxt "field:stock.shipment.out,create_date:"
msgid "Create Date"
-msgstr "Fecha creación"
+msgstr "Fecha de Creación"
msgctxt "field:stock.shipment.out,create_uid:"
msgid "Create User"
-msgstr "Usuario creación"
+msgstr "Creado por Usuario"
msgctxt "field:stock.shipment.out,customer:"
msgid "Customer"
@@ -885,15 +875,15 @@ msgstr "Cliente"
msgctxt "field:stock.shipment.out,customer_location:"
msgid "Customer Location"
-msgstr "Locación del cliente"
+msgstr "Bodega del Cliente"
msgctxt "field:stock.shipment.out,delivery_address:"
msgid "Delivery Address"
-msgstr "Dirección de envÃo"
+msgstr "Dirección de EnvÃo"
msgctxt "field:stock.shipment.out,effective_date:"
msgid "Effective Date"
-msgstr "Fecha efectiva"
+msgstr "Fecha Efectiva"
msgctxt "field:stock.shipment.out,id:"
msgid "ID"
@@ -909,7 +899,7 @@ msgstr "Movimientos"
msgctxt "field:stock.shipment.out,outgoing_moves:"
msgid "Outgoing Moves"
-msgstr "Movimientos de salida"
+msgstr "Movimientos de Salida"
msgctxt "field:stock.shipment.out,planned_date:"
msgid "Planned Date"
@@ -933,19 +923,19 @@ msgstr "Almacén"
msgctxt "field:stock.shipment.out,warehouse_output:"
msgid "Warehouse Output"
-msgstr "Almacén de salida"
+msgstr "Almacén de Salida"
msgctxt "field:stock.shipment.out,warehouse_storage:"
msgid "Warehouse Storage"
-msgstr "Depósito de almacenamiento"
+msgstr "Depósito de Almacenamiento"
msgctxt "field:stock.shipment.out,write_date:"
msgid "Write Date"
-msgstr "Fecha modificación"
+msgstr "Fecha de Modificación"
msgctxt "field:stock.shipment.out,write_uid:"
msgid "Write User"
-msgstr "Usuario modificación"
+msgstr "Modificado por Usuario"
msgctxt "field:stock.shipment.out.assign.failed,id:"
msgid "ID"
@@ -965,11 +955,11 @@ msgstr "Compañia"
msgctxt "field:stock.shipment.out.return,create_date:"
msgid "Create Date"
-msgstr "Fecha creación"
+msgstr "Fecha de Creación"
msgctxt "field:stock.shipment.out.return,create_uid:"
msgid "Create User"
-msgstr "Usuario creación"
+msgstr "Creado por Usuario"
msgctxt "field:stock.shipment.out.return,customer:"
msgid "Customer"
@@ -977,15 +967,15 @@ msgstr "Cliente"
msgctxt "field:stock.shipment.out.return,customer_location:"
msgid "Customer Location"
-msgstr "Locación del Cliente"
+msgstr "Bodega del Cliente"
msgctxt "field:stock.shipment.out.return,delivery_address:"
msgid "Delivery Address"
-msgstr "Dirección de envÃo"
+msgstr "Dirección de EnvÃo"
msgctxt "field:stock.shipment.out.return,effective_date:"
msgid "Effective Date"
-msgstr "Fecha efectiva"
+msgstr "Fecha Efectiva"
msgctxt "field:stock.shipment.out.return,id:"
msgid "ID"
@@ -993,7 +983,7 @@ msgstr "ID"
msgctxt "field:stock.shipment.out.return,incoming_moves:"
msgid "Incoming Moves"
-msgstr "Movimientos de entrada"
+msgstr "Movimientos de Entrada"
msgctxt "field:stock.shipment.out.return,inventory_moves:"
msgid "Inventory Moves"
@@ -1025,30 +1015,28 @@ msgstr "Almacén"
msgctxt "field:stock.shipment.out.return,warehouse_input:"
msgid "Warehouse Input"
-msgstr "Almacén de entrada"
+msgstr "Almacén de Entrada"
msgctxt "field:stock.shipment.out.return,warehouse_storage:"
msgid "Warehouse Storage"
-msgstr "Depósito de almacenamiento"
+msgstr "Depósito de Almacenamiento"
msgctxt "field:stock.shipment.out.return,write_date:"
msgid "Write Date"
-msgstr "Fecha modificación"
+msgstr "Fecha de Modificación"
msgctxt "field:stock.shipment.out.return,write_uid:"
msgid "Write User"
-msgstr "Usuario modificación"
+msgstr "Modificado por Usuario"
msgctxt "help:party.party,customer_location:"
msgid "The default destination location when sending products to the party."
-msgstr ""
-"La locación de destino predeterminada cuando se envian productos al tercero."
+msgstr "La bodega destino por defecto cuando se envian productos al tercero."
msgctxt "help:party.party,supplier_location:"
msgid "The default source location when receiving products from the party."
msgstr ""
-"La locación de origen predeterminada cuando se reciben productos del "
-"tercero."
+"La bodega de origen por defecto cuando se reciben productos del tercero."
msgctxt "help:product.by_location.start,forecast_date:"
msgid ""
@@ -1074,38 +1062,22 @@ msgctxt "model:ir.action,name:act_inventory_form"
msgid "Inventories"
msgstr "Inventarios"
-msgctxt "model:ir.action,name:act_inventory_form_draft"
-msgid "Draft Inventories"
-msgstr "Inventarios en Borrador"
-
msgctxt "model:ir.action,name:act_location_form"
msgid "Locations"
-msgstr "Editar Locaciones"
+msgstr "Editar Bodegas"
msgctxt "model:ir.action,name:act_location_quantity_tree"
msgid "Locations"
-msgstr "Locaciones"
+msgstr "Consultar Bodegas"
msgctxt "model:ir.action,name:act_location_tree"
msgid "Locations"
-msgstr "Locaciones"
+msgstr "Bodegas"
msgctxt "model:ir.action,name:act_move_form"
msgid "Moves"
msgstr "Movimientos"
-msgctxt "model:ir.action,name:act_move_form_cust"
-msgid "Moves to Customers"
-msgstr "Movimientos hacia Clientes"
-
-msgctxt "model:ir.action,name:act_move_form_supp"
-msgid "Moves from Suppliers"
-msgstr "Movimientos de Proveedores"
-
-msgctxt "model:ir.action,name:act_move_form_supp_proceed"
-msgid "Moves from Suppliers Waiting Arrival"
-msgstr "Movimientos de proveedores en espera de llegada"
-
msgctxt "model:ir.action,name:act_period_list"
msgid "Periods"
msgstr "PerÃodos"
@@ -1116,40 +1088,20 @@ msgstr "Cantidades de Producto por Almacén"
msgctxt "model:ir.action,name:act_products_by_locations"
msgid "Products"
-msgstr "Productos por Locaciones"
-
-msgctxt "model:ir.action,name:act_shipment_in_draft"
-msgid "Draft Supplier Shipment"
-msgstr "EnvÃo de Proveedor en Borrador"
+msgstr "Productos"
msgctxt "model:ir.action,name:act_shipment_in_form"
msgid "Supplier Shipments"
msgstr "EnvÃos del Proveedor"
-msgctxt "model:ir.action,name:act_shipment_in_form_received"
-msgid "Received Supplier shipments"
-msgstr "Envios Recibidos de Proveedores"
-
msgctxt "model:ir.action,name:act_shipment_in_return_form"
msgid "Supplier Return Shipments"
-msgstr "Envios de Devolución a Proveedor"
-
-msgctxt "model:ir.action,name:act_shipment_internal_assigned_form"
-msgid "Assigned Internal Shipments"
-msgstr "EnvÃos Internos Asignados"
-
-msgctxt "model:ir.action,name:act_shipment_internal_draft_form"
-msgid "Draft Internal Shipments"
-msgstr "EnvÃos Internos en Borrador"
+msgstr "Devoluciones a Proveedores"
msgctxt "model:ir.action,name:act_shipment_internal_form"
msgid "Internal Shipments"
msgstr "EnvÃos Internos"
-msgctxt "model:ir.action,name:act_shipment_internal_waiting_form"
-msgid "Internal Shipments Waiting Assignation"
-msgstr "EnvÃos Internos Esperando Asignación"
-
msgctxt "model:ir.action,name:act_shipment_out_form"
msgid "Customer Shipments"
msgstr "EnvÃos a Clientes"
@@ -1160,23 +1112,11 @@ msgstr "EnvÃos a Clientes"
msgctxt "model:ir.action,name:act_shipment_out_form3"
msgid "Supplier Shipments"
-msgstr "Envios de Proveedor"
-
-msgctxt "model:ir.action,name:act_shipment_out_form_assigned"
-msgid "Assigned Customer Shipments"
-msgstr "EnvÃos a Clientes Asignados"
-
-msgctxt "model:ir.action,name:act_shipment_out_form_ready"
-msgid "Customer Shipments Ready for Shipping"
-msgstr "EnvÃos a Cliente Listos para Despacho"
-
-msgctxt "model:ir.action,name:act_shipment_out_form_waiting"
-msgid "Customer Shipments Waiting Assignation"
-msgstr "EnvÃos a Cliente Esperando Asignación"
+msgstr "EnvÃos de Proveedor"
msgctxt "model:ir.action,name:act_shipment_out_return_form"
msgid "Customer Return Shipments"
-msgstr "Envios de Devoluciones de Cliente"
+msgstr "Devoluciones a Clientes"
msgctxt "model:ir.action,name:act_stock_configuration_form"
msgid "Stock Configuration"
@@ -1184,7 +1124,7 @@ msgstr "Configuración Inventarios"
msgctxt "model:ir.action,name:create_shipment_out_return"
msgid "Create Return Shipment"
-msgstr "Crear Envio de Devolución"
+msgstr "Crear Devolución"
msgctxt "model:ir.action,name:report_shipment_in_restocking_list"
msgid "Restocking List"
@@ -1208,7 +1148,7 @@ msgstr "Lista de renovación de inventario"
msgctxt "model:ir.action,name:wizard_product_by_location"
msgid "Product by Locations"
-msgstr "Producto por Locación"
+msgstr "Producto por Bodegas"
msgctxt "model:ir.action,name:wizard_product_quantities_warehouse"
msgid "Product Quantities By Warehouse"
@@ -1216,11 +1156,11 @@ msgstr "Cantidades de Producto por Almacén"
msgctxt "model:ir.action,name:wizard_products_by_locations"
msgid "Products by Locations"
-msgstr "Productos por Locaciones"
+msgstr "Productos por Bodegas"
msgctxt "model:ir.action,name:wizard_shipment_in_return_assign"
msgid "Assign Purchase Return Shipment"
-msgstr "Asignar Envio de Devolución de Compra"
+msgstr "Asignar EnvÃo de Devolución de Compra"
msgctxt "model:ir.action,name:wizard_shipment_internal_assign"
msgid "Assign Shipment Internal"
@@ -1230,13 +1170,136 @@ msgctxt "model:ir.action,name:wizard_shipment_out_assign"
msgid "Assign Shipment Out"
msgstr "Asignación de Salida de EnvÃo"
+msgctxt "model:ir.action.act_window.domain,name:act_inventory_form_domain_all"
+msgid "All"
+msgstr "Todo"
+
+msgctxt ""
+"model:ir.action.act_window.domain,name:act_inventory_form_domain_draft"
+msgid "Draft"
+msgstr "Borrador"
+
+msgctxt "model:ir.action.act_window.domain,name:act_move_form_domain_all"
+msgid "All"
+msgstr "Todo"
+
+msgctxt ""
+"model:ir.action.act_window.domain,name:act_move_form_domain_from_supplier"
+msgid "From Suppliers"
+msgstr "Desde Proveedores"
+
+msgctxt ""
+"model:ir.action.act_window.domain,name:act_move_form_domain_from_supplier_waiting"
+msgid "From Suppliers Waiting"
+msgstr "Desde Proveedores en Espera"
+
+msgctxt ""
+"model:ir.action.act_window.domain,name:act_move_form_domain_to_customer"
+msgid "To Customers"
+msgstr "A Clientes"
+
+msgctxt ""
+"model:ir.action.act_window.domain,name:act_shipment_in_form_domain_all"
+msgid "All"
+msgstr "Todo"
+
+msgctxt ""
+"model:ir.action.act_window.domain,name:act_shipment_in_form_domain_draft"
+msgid "Draft"
+msgstr "Borrador"
+
+msgctxt ""
+"model:ir.action.act_window.domain,name:act_shipment_in_form_domain_received"
+msgid "Received"
+msgstr "Recibido"
+
+msgctxt ""
+"model:ir.action.act_window.domain,name:act_shipment_in_return_form_domain_all"
+msgid "All"
+msgstr "Todo"
+
+msgctxt ""
+"model:ir.action.act_window.domain,name:act_shipment_in_return_form_domain_assigned"
+msgid "Assigned"
+msgstr "Asignado"
+
+msgctxt ""
+"model:ir.action.act_window.domain,name:act_shipment_in_return_form_domain_draft"
+msgid "Draft"
+msgstr "Borrador"
+
+msgctxt ""
+"model:ir.action.act_window.domain,name:act_shipment_in_return_form_domain_waiting"
+msgid "Waiting"
+msgstr "Esperando"
+
+msgctxt ""
+"model:ir.action.act_window.domain,name:act_shipment_internal_form_domain_all"
+msgid "All"
+msgstr "Todo"
+
+msgctxt ""
+"model:ir.action.act_window.domain,name:act_shipment_internal_form_domain_assigned"
+msgid "Assigned"
+msgstr "Asignado"
+
+msgctxt ""
+"model:ir.action.act_window.domain,name:act_shipment_internal_form_domain_draft"
+msgid "Draft"
+msgstr "Borrador"
+
+msgctxt ""
+"model:ir.action.act_window.domain,name:act_shipment_internal_form_domain_waiting"
+msgid "Waiting"
+msgstr "Esperando"
+
+msgctxt ""
+"model:ir.action.act_window.domain,name:act_shipment_out_form_domain_all"
+msgid "All"
+msgstr "Todo"
+
+msgctxt ""
+"model:ir.action.act_window.domain,name:act_shipment_out_form_domain_assigned"
+msgid "Assigned"
+msgstr "Asignado"
+
+msgctxt ""
+"model:ir.action.act_window.domain,name:act_shipment_out_form_domain_draft"
+msgid "Draft"
+msgstr "Borrador"
+
+msgctxt ""
+"model:ir.action.act_window.domain,name:act_shipment_out_form_domain_packed"
+msgid "Packed"
+msgstr "Empacado"
+
+msgctxt ""
+"model:ir.action.act_window.domain,name:act_shipment_out_form_domain_waiting"
+msgid "Waiting"
+msgstr "Esperando"
+
+msgctxt ""
+"model:ir.action.act_window.domain,name:act_shipment_out_return_form_domain_all"
+msgid "All"
+msgstr "Todo"
+
+msgctxt ""
+"model:ir.action.act_window.domain,name:act_shipment_out_return_form_domain_draft"
+msgid "Draft"
+msgstr "Borrador"
+
+msgctxt ""
+"model:ir.action.act_window.domain,name:act_shipment_out_return_form_domain_received"
+msgid "Received"
+msgstr "Recibido"
+
msgctxt "model:ir.sequence,name:sequence_shipment_in"
msgid "Supplier Shipment"
msgstr "EnvÃo de Proveedor"
msgctxt "model:ir.sequence,name:sequence_shipment_in_return"
msgid "Supplier Return Shipment"
-msgstr "Envio de Devolución a Proveedor"
+msgstr "EnvÃo de Devolución a Proveedor"
msgctxt "model:ir.sequence,name:sequence_shipment_internal"
msgid "Internal Shipment"
@@ -1248,7 +1311,7 @@ msgstr "EnvÃo a Cliente"
msgctxt "model:ir.sequence,name:sequence_shipment_out_return"
msgid "Customer Return Shipment"
-msgstr "Envio de Devolución de Cliente"
+msgstr "EnvÃo de Devolución de Cliente"
msgctxt "model:ir.sequence.type,name:sequence_type_shipment_in"
msgid "Supplier Shipment"
@@ -1256,7 +1319,7 @@ msgstr "EnvÃo de Proveedor"
msgctxt "model:ir.sequence.type,name:sequence_type_shipment_in_return"
msgid "Supplier Return Shipment"
-msgstr "Envio de Devolución a Proveedor"
+msgstr "EnvÃo de Devolución a Proveedor"
msgctxt "model:ir.sequence.type,name:sequence_type_shipment_internal"
msgid "Internal Shipment"
@@ -1268,7 +1331,7 @@ msgstr "EnvÃo a Cliente"
msgctxt "model:ir.sequence.type,name:sequence_type_shipment_out_return"
msgid "Customer Return Shipment"
-msgstr "Envio de Devolución de Cliente"
+msgstr "EnvÃo de Devolución de Cliente"
msgctxt "model:ir.ui.menu,name:menu_configuration"
msgid "Configuration"
@@ -1278,34 +1341,18 @@ msgctxt "model:ir.ui.menu,name:menu_inventory_form"
msgid "Inventories"
msgstr "Inventarios"
-msgctxt "model:ir.ui.menu,name:menu_inventory_form_draft"
-msgid "Draft Inventories"
-msgstr "Inventarios en Borrador"
-
msgctxt "model:ir.ui.menu,name:menu_location_form"
msgid "Locations"
-msgstr "Editar Locaciones"
+msgstr "Editar Bodegas"
msgctxt "model:ir.ui.menu,name:menu_location_tree"
msgid "Locations"
-msgstr "Locaciones"
+msgstr "Consultar Bodegas"
msgctxt "model:ir.ui.menu,name:menu_move_form"
msgid "Moves"
msgstr "Movimientos"
-msgctxt "model:ir.ui.menu,name:menu_move_form_cust"
-msgid "Moves to Customers"
-msgstr "Movimientos hacia Clientes"
-
-msgctxt "model:ir.ui.menu,name:menu_move_form_supp"
-msgid "Moves from Suppliers"
-msgstr "Movimientos desde Proveedores"
-
-msgctxt "model:ir.ui.menu,name:menu_move_form_supp_proceed"
-msgid "Moves from Suppliers Waiting Arrival"
-msgstr "Movimientos de Proveedores en Espera de Llegada"
-
msgctxt "model:ir.ui.menu,name:menu_period_list"
msgid "Periods"
msgstr "PerÃodos"
@@ -1314,57 +1361,25 @@ msgctxt "model:ir.ui.menu,name:menu_reporting"
msgid "Reporting"
msgstr "Informes"
-msgctxt "model:ir.ui.menu,name:menu_shipment_in_draft"
-msgid "Draft Supplier Shipment"
-msgstr "EnvÃo de Proveedor en Borrador"
-
msgctxt "model:ir.ui.menu,name:menu_shipment_in_form"
msgid "Supplier Shipments"
msgstr "EnvÃos del Proveedor"
-msgctxt "model:ir.ui.menu,name:menu_shipment_in_received"
-msgid "Received Supplier shipments"
-msgstr "EnvÃos de Proveedores Recibidos"
-
msgctxt "model:ir.ui.menu,name:menu_shipment_in_return_form"
msgid "Supplier Return Shipments"
-msgstr "EnvÃos de Devolución a Proveedor"
-
-msgctxt "model:ir.ui.menu,name:menu_shipment_internal_assigned_form"
-msgid "Assigned Internal Shipments"
-msgstr "EnvÃos Internos Asignados"
-
-msgctxt "model:ir.ui.menu,name:menu_shipment_internal_draft_form"
-msgid "Draft Internal Shipments"
-msgstr "EnvÃos Internos en Borrador"
+msgstr "Devoluciones a Proveedores"
msgctxt "model:ir.ui.menu,name:menu_shipment_internal_form"
msgid "Internal Shipments"
msgstr "EnvÃos Internos"
-msgctxt "model:ir.ui.menu,name:menu_shipment_internal_waiting_form"
-msgid "Internal Shipments Waiting Assignation"
-msgstr "EnvÃos Internos Esperando Asignación"
-
-msgctxt "model:ir.ui.menu,name:menu_shipment_out_assigned"
-msgid "Assigned Customer Shipments"
-msgstr "EnvÃos a Clientes Asignados"
-
msgctxt "model:ir.ui.menu,name:menu_shipment_out_form"
msgid "Customer Shipments"
msgstr "EnvÃos al Cliente"
-msgctxt "model:ir.ui.menu,name:menu_shipment_out_ready"
-msgid "Customer Shipments Ready for Shipping"
-msgstr "EnvÃos a Clientes Listos para Despacho"
-
msgctxt "model:ir.ui.menu,name:menu_shipment_out_return_form"
msgid "Customer Return Shipments"
-msgstr "EnvÃos de Devolución de Cliente"
-
-msgctxt "model:ir.ui.menu,name:menu_shipment_out_waiting"
-msgid "Customer Shipments Waiting Assignation"
-msgstr "EnvÃos a Cliente Esperando Asignación"
+msgstr "Devoluciones de Clientes"
msgctxt "model:ir.ui.menu,name:menu_stock"
msgid "Inventory & Stock"
@@ -1376,7 +1391,7 @@ msgstr "Configuración de Inventarios"
msgctxt "model:product.by_location.start,name:"
msgid "Product by Location"
-msgstr "Producto por Locación"
+msgstr "Producto por Bodega"
msgctxt "model:res.group,name:group_stock"
msgid "Stock"
@@ -1396,7 +1411,7 @@ msgstr "Configuración de Stock"
msgctxt "model:stock.inventory,name:"
msgid "Stock Inventory"
-msgstr "Inventario de Existencia"
+msgstr "Inventario de Existencias"
msgctxt "model:stock.inventory.line,name:"
msgid "Stock Inventory Line"
@@ -1404,7 +1419,7 @@ msgstr "LÃnea de Existencia en Inventario "
msgctxt "model:stock.location,name:"
msgid "Stock Location"
-msgstr "Locación de Existencia"
+msgstr "Bodega de Existencia"
msgctxt "model:stock.location,name:location_customer"
msgid "Customer"
@@ -1432,7 +1447,7 @@ msgstr "Proveedor"
msgctxt "model:stock.location,name:location_warehouse"
msgid "Warehouse"
-msgstr "Almacén"
+msgstr "Deposito Principal"
msgctxt "model:stock.move,name:"
msgid "Stock Move"
@@ -1442,10 +1457,9 @@ msgctxt "model:stock.period,name:"
msgid "Stock Period"
msgstr "PerÃodo de Stock"
-#, fuzzy
msgctxt "model:stock.period.cache,name:"
msgid "Stock Period Cache"
-msgstr "Caché de perÃodo de stock"
+msgstr "Caché de perÃodo de Inventarios"
msgctxt "model:stock.product_quantities_warehouse,name:"
msgid "Product Quantities By Warehouse"
@@ -1457,7 +1471,7 @@ msgstr "Cantidades de Producto por Almacén"
msgctxt "model:stock.products_by_locations.start,name:"
msgid "Products by Locations"
-msgstr "Productos por Locaciones"
+msgstr "Productos por Bodegas"
msgctxt "model:stock.shipment.in,name:"
msgid "Supplier Shipment"
@@ -1465,7 +1479,7 @@ msgstr "EnvÃo de Proveedor"
msgctxt "model:stock.shipment.in.return,name:"
msgid "Supplier Return Shipment"
-msgstr "Envio de Devolución a Proveedor"
+msgstr "EnvÃo de Devolución a Proveedor"
msgctxt "model:stock.shipment.in.return.assign.failed,name:"
msgid "Assign Supplier Return Shipment"
@@ -1489,7 +1503,7 @@ msgstr "Asignación de Salida de EnvÃo"
msgctxt "model:stock.shipment.out.return,name:"
msgid "Customer Return Shipment"
-msgstr "Envio de Devolución de Cliente"
+msgstr "EnvÃo de Devolución de Cliente"
msgctxt "odt:stock.shipment.in.restocking_list:"
msgid "/"
@@ -1505,7 +1519,7 @@ msgstr "Correo electrónico:"
msgctxt "odt:stock.shipment.in.restocking_list:"
msgid "From Location"
-msgstr "Desde locación"
+msgstr "Desde Bodega"
msgctxt "odt:stock.shipment.in.restocking_list:"
msgid "Phone:"
@@ -1537,7 +1551,7 @@ msgstr "Proveedor:"
msgctxt "odt:stock.shipment.in.restocking_list:"
msgid "To Location"
-msgstr "A Locación"
+msgstr "A Bodega"
msgctxt "odt:stock.shipment.in.restocking_list:"
msgid "VAT Number:"
@@ -1561,11 +1575,11 @@ msgstr "Correo electrónico:"
msgctxt "odt:stock.shipment.internal.report:"
msgid "From Location"
-msgstr "Desde Locación"
+msgstr "Desde Bodega"
msgctxt "odt:stock.shipment.internal.report:"
msgid "From Location:"
-msgstr "Desde Locación:"
+msgstr "Desde Bodega:"
msgctxt "odt:stock.shipment.internal.report:"
msgid "Internal Shipment"
@@ -1593,11 +1607,11 @@ msgstr "Referencia:"
msgctxt "odt:stock.shipment.internal.report:"
msgid "To Location"
-msgstr "A locación"
+msgstr "A Bodega"
msgctxt "odt:stock.shipment.internal.report:"
msgid "To Location:"
-msgstr "A locación:"
+msgstr "A Bodega:"
msgctxt "odt:stock.shipment.internal.report:"
msgid "VAT Number:"
@@ -1609,7 +1623,7 @@ msgstr "/"
msgctxt "odt:stock.shipment.out.delivery_note:"
msgid "Customer Code:"
-msgstr "Código de cliente:"
+msgstr "Código de Cliente:"
msgctxt "odt:stock.shipment.out.delivery_note:"
msgid "Date:"
@@ -1617,7 +1631,7 @@ msgstr "Fecha:"
msgctxt "odt:stock.shipment.out.delivery_note:"
msgid "Delivery Note"
-msgstr "Remito de envio"
+msgstr "Nota de Entrega"
msgctxt "odt:stock.shipment.out.delivery_note:"
msgid "E-Mail:"
@@ -1641,7 +1655,7 @@ msgstr "Referencia:"
msgctxt "odt:stock.shipment.out.delivery_note:"
msgid "Shipment Number:"
-msgstr "Número de envÃo:"
+msgstr "Número de EnvÃo:"
msgctxt "odt:stock.shipment.out.delivery_note:"
msgid "VAT Number:"
@@ -1665,7 +1679,7 @@ msgstr "Correo electrónico:"
msgctxt "odt:stock.shipment.out.picking_list:"
msgid "From Location"
-msgstr "Desde locación"
+msgstr "Desde Bodega"
msgctxt "odt:stock.shipment.out.picking_list:"
msgid "Phone:"
@@ -1693,7 +1707,7 @@ msgstr "Referencia:"
msgctxt "odt:stock.shipment.out.picking_list:"
msgid "To Location"
-msgstr "A locación"
+msgstr "A Bodega"
msgctxt "odt:stock.shipment.out.picking_list:"
msgid "VAT Number:"
@@ -1717,7 +1731,7 @@ msgstr "Correo electrónico:"
msgctxt "odt:stock.shipment.out.return.restocking_list:"
msgid "From Location"
-msgstr "De Locación"
+msgstr "Desde Bodega"
msgctxt "odt:stock.shipment.out.return.restocking_list:"
msgid "Phone:"
@@ -1749,7 +1763,7 @@ msgstr "Proveedor:"
msgctxt "odt:stock.shipment.out.return.restocking_list:"
msgid "To Location"
-msgstr "A Locación"
+msgstr "A Bodega"
msgctxt "odt:stock.shipment.out.return.restocking_list:"
msgid "VAT Number:"
@@ -1797,7 +1811,7 @@ msgstr "Vista"
msgctxt "selection:stock.location,type:"
msgid "Warehouse"
-msgstr "Almacén"
+msgstr "Depósito"
msgctxt "selection:stock.move,state:"
msgid "Assigned"
@@ -1857,7 +1871,7 @@ msgstr "Borrador"
msgctxt "selection:stock.shipment.in.return,state:"
msgid "Waiting"
-msgstr "En espera"
+msgstr "Esperando"
msgctxt "selection:stock.shipment.internal,state:"
msgid "Assigned"
@@ -1877,7 +1891,7 @@ msgstr "Borrador"
msgctxt "selection:stock.shipment.internal,state:"
msgid "Waiting"
-msgstr "En espera"
+msgstr "Esperando"
msgctxt "selection:stock.shipment.out,state:"
msgid "Assigned"
@@ -1897,11 +1911,11 @@ msgstr "Borrador"
msgctxt "selection:stock.shipment.out,state:"
msgid "Packed"
-msgstr "Empaquetado"
+msgstr "Empacado"
msgctxt "selection:stock.shipment.out,state:"
msgid "Waiting"
-msgstr "En espera"
+msgstr "Esperando"
msgctxt "selection:stock.shipment.out.return,state:"
msgid "Canceled"
@@ -1923,13 +1937,9 @@ msgctxt "view:party.party:"
msgid "Stock"
msgstr "Existencias"
-msgctxt "view:party.party:"
-msgid "_Stock"
-msgstr "_Existencias"
-
msgctxt "view:product.by_location.start:"
msgid "Product by Location"
-msgstr "Producto por Locación"
+msgstr "Producto por Bodega"
msgctxt "view:product.product:"
msgid "Products"
@@ -1952,10 +1962,6 @@ msgid "Add an inventory line for each missing products"
msgstr "Añadir una lÃnea de inventario por cada producto que falta"
msgctxt "view:stock.inventory:"
-msgid "All generated moves will be cancelled!"
-msgstr "¡Se cancelarán todos los movimientos generados!"
-
-msgctxt "view:stock.inventory:"
msgid "Cancel"
msgstr "Cancelar"
@@ -1975,29 +1981,17 @@ msgctxt "view:stock.inventory:"
msgid "Inventory"
msgstr "Inventario"
-msgctxt "view:stock.inventory:"
-msgid "Re-Open"
-msgstr "Reabrir"
-
msgctxt "view:stock.location:"
msgid "Location"
-msgstr "Locación"
+msgstr "Bodega"
msgctxt "view:stock.location:"
msgid "Location Quantity"
-msgstr "Cantidad en la Locación"
+msgstr "Cantidad en Bodega"
msgctxt "view:stock.location:"
msgid "Locations"
-msgstr "Locaciones"
-
-msgctxt "view:stock.location:"
-msgid "Product Stock"
-msgstr "Existencias del Producto"
-
-msgctxt "view:stock.move:"
-msgid "Cancel"
-msgstr "Cancelar"
+msgstr "Consultas Bodegas"
msgctxt "view:stock.move:"
msgid "Move"
@@ -2007,14 +2001,6 @@ msgctxt "view:stock.move:"
msgid "Moves"
msgstr "Movimientos"
-msgctxt "view:stock.move:"
-msgid "Set Done"
-msgstr "Marcar como Hecho"
-
-msgctxt "view:stock.move:"
-msgid "Set Draft"
-msgstr "Marcar como Borrador"
-
msgctxt "view:stock.period.cache:"
msgid "Period Cache"
msgstr "Caché de perÃodo"
@@ -2049,7 +2035,7 @@ msgstr "Cantidades de Producto por Almacén"
msgctxt "view:stock.products_by_locations.start:"
msgid "Products by Locations"
-msgstr "Productos por Locaciones"
+msgstr "Productos por Bodegas"
msgctxt "view:stock.shipment.in.return.assign.failed:"
msgid "Unable to Assign"
@@ -2076,25 +2062,17 @@ msgid "Draft"
msgstr "Borrador"
msgctxt "view:stock.shipment.in.return:"
-msgid "Reset to Draft"
-msgstr "Restablecer a Borrador"
-
-msgctxt "view:stock.shipment.in.return:"
msgid "Supplier Return Shipment"
-msgstr "Envio de Devolución a Proveedor"
+msgstr "Devolución a Proveedor"
msgctxt "view:stock.shipment.in.return:"
msgid "Supplier Return Shipments"
-msgstr "Envios de Devolución a Proveedor"
+msgstr "Devoluciones a Proveedores"
msgctxt "view:stock.shipment.in.return:"
msgid "Wait"
msgstr "Espera"
-msgctxt "view:stock.shipment.in.return:"
-msgid "Waiting"
-msgstr "En espera"
-
msgctxt "view:stock.shipment.in:"
msgid "Cancel"
msgstr "Cancelar"
@@ -2104,10 +2082,6 @@ msgid "Done"
msgstr "Hecho"
msgctxt "view:stock.shipment.in:"
-msgid "Draft"
-msgstr "Borrador"
-
-msgctxt "view:stock.shipment.in:"
msgid "Incoming Moves"
msgstr "Movimientos de Entrada"
@@ -2116,18 +2090,10 @@ msgid "Inventory Moves"
msgstr "Movimientos de Inventario"
msgctxt "view:stock.shipment.in:"
-msgid "Moves"
-msgstr "Movimientos"
-
-msgctxt "view:stock.shipment.in:"
msgid "Receive"
msgstr "Recibe"
msgctxt "view:stock.shipment.in:"
-msgid "Received"
-msgstr "Recibido"
-
-msgctxt "view:stock.shipment.in:"
msgid "Reset to Draft"
msgstr "Restablecer a Borrador"
@@ -2164,10 +2130,6 @@ msgid "Draft"
msgstr "Borrador"
msgctxt "view:stock.shipment.internal:"
-msgid "Force Assign"
-msgstr "Forzar Asignación"
-
-msgctxt "view:stock.shipment.internal:"
msgid "Internal Shipment"
msgstr "EnvÃo Interno"
@@ -2176,18 +2138,6 @@ msgid "Internal Shipments"
msgstr "EnvÃos Internos"
msgctxt "view:stock.shipment.internal:"
-msgid "Reset to Draft"
-msgstr "Restablecer a Borrador"
-
-msgctxt "view:stock.shipment.internal:"
-msgid "Set Done"
-msgstr "Marcar como Hecho"
-
-msgctxt "view:stock.shipment.internal:"
-msgid "Set Waiting"
-msgstr "Marcar en Espera"
-
-msgctxt "view:stock.shipment.internal:"
msgid "Waiting"
msgstr "Esperando"
@@ -2205,11 +2155,11 @@ msgstr "Cancelar"
msgctxt "view:stock.shipment.out.return:"
msgid "Customer Return Shipment"
-msgstr "Envio de Devolución de Cliente"
+msgstr "Devolución de Cliente"
msgctxt "view:stock.shipment.out.return:"
msgid "Customer Return Shipments"
-msgstr "Envios de Devolución de Cliente"
+msgstr "Devoluciones de Clientes"
msgctxt "view:stock.shipment.out.return:"
msgid "Done"
@@ -2228,17 +2178,9 @@ msgid "Inventory Moves"
msgstr "Movimientos de Inventario"
msgctxt "view:stock.shipment.out.return:"
-msgid "Moves"
-msgstr "Movimientos"
-
-msgctxt "view:stock.shipment.out.return:"
msgid "Received"
msgstr "Recibido"
-msgctxt "view:stock.shipment.out.return:"
-msgid "Reset to Draft"
-msgstr "Restablecer a Borrador"
-
msgctxt "view:stock.shipment.out:"
msgid "Assign"
msgstr "Asignar"
@@ -2264,10 +2206,6 @@ msgid "Draft"
msgstr "Borrador"
msgctxt "view:stock.shipment.out:"
-msgid "Force Assign"
-msgstr "Forzar Asignación"
-
-msgctxt "view:stock.shipment.out:"
msgid "Inventory Moves"
msgstr "Movimientos de inventario"
@@ -2280,22 +2218,6 @@ msgid "Outgoing Moves"
msgstr "Movimientos de Salida"
msgctxt "view:stock.shipment.out:"
-msgid "Reset to Draft"
-msgstr "Restablecer a Borrador"
-
-msgctxt "view:stock.shipment.out:"
-msgid "Set Done"
-msgstr "Marcar como Hecho"
-
-msgctxt "view:stock.shipment.out:"
-msgid "Set Waiting"
-msgstr "Marcar en Espera"
-
-msgctxt "view:stock.shipment.out:"
-msgid "Unpack"
-msgstr "Desempacar"
-
-msgctxt "view:stock.shipment.out:"
msgid "Waiting"
msgstr "Esperando"
diff --git a/locale/es_ES.po b/locale/es_ES.po
index 69ffca7..64b2f81 100644
--- a/locale/es_ES.po
+++ b/locale/es_ES.po
@@ -11,126 +11,126 @@ msgstr ""
"movimientos de stock."
msgctxt "error:stock.inventory.line:"
-msgid "Line quantity must be positive!"
+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."
+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 la ubicación \"%s\" antes de eliminarla."
+msgid "Inventory \"%s\" must be cancelled before deletion."
+msgstr "Debe cancelar el inventario \"%s\" antes de borrar."
msgctxt "error:stock.location:"
-msgid ""
-"A location with existing moves cannot be changed to a type that does not "
-"support moves."
-msgstr ""
-"Una ubicación con movimientos no puede ser cambiada a un tipo que no soporte"
-" movimientos."
-
-msgctxt "error:stock.location:"
-msgid "Location \"%s\" must be a child of warehouse \"%s\"!"
-msgstr "La ubicación \"%s\" debe ser hija del almacén \"%s\"."
+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\"."
msgctxt "error:stock.location:"
-msgid "You can not create recursive locations!"
-msgstr "No puede crear ubicaciones recursivas."
+msgid ""
+"Location \"%s\" with existing moves cannot be changed to a type that does "
+"not support moves."
+msgstr ""
+"No puede cambiar la ubicación \"%s\" con movimientos a otra ubicación que no"
+" soporte movimientos."
msgctxt "error:stock.move:"
msgid "Internal move quantity must be positive"
msgstr "La cantidad del movimiento interno debe ser positiva."
msgctxt "error:stock.move:"
-msgid "Move can be on only one Shipment"
-msgstr "Un movimiento sólo puede estar en un único albarán."
-
-msgctxt "error:stock.move:"
msgid "Move quantity must be positive"
msgstr "La cantidad a mover tiene que ser positiva."
msgctxt "error:stock.move:"
msgid "Source and destination location must be different"
-msgstr "Las ubicaciones origen y destino deben ser distintas."
+msgstr "Las ubicaciones orÃgen y destino deben ser distintas."
msgctxt "error:stock.move:"
-msgid "You can not modify a move in the state: \"Assigned\", \"Done\" or \"Cancel\""
+msgid ""
+"You can not delete stock move \"%s\" because it is not in draft or cancelled"
+" state."
msgstr ""
-"No puede modificar un movimiento en estado: \"Reservado\", \"Realizado\" o "
-"\"Cancelado\"."
+"No puede borrar el movimiento de stock \"%s\" porque no está en estado "
+"borrador o cancelado."
msgctxt "error:stock.move:"
-msgid "You can not modify move in closed period!"
-msgstr "No puede modificar un movimiento en un perÃodo cerrado."
+msgid "You can not modify move \"%(move)s\" because period \"%(period)s\" is closed."
+msgstr ""
+"No puede modificar el movimiento \"%(move)s\" porque el perÃodo "
+"\"%(period)s\" está cerrado."
msgctxt "error:stock.move:"
-msgid "You can not set state to assigned!"
-msgstr "No puede establecer el estado como reservado."
+msgid ""
+"You can not modify stock move \"%s\"because it is in \"Assigned\", \"Done\" "
+"or \"Cancel\" state."
+msgstr ""
+"No puede modificar el movimiento de stock \"%s\" porque está en estado "
+"\"Asignado\", \"Realizado\" o \"Cancelado\"."
msgctxt "error:stock.move:"
-msgid "You can not set state to done!"
-msgstr "No puede establecer el estado como realizado."
+msgid "You can not set stock move \"%s\" to assigned state."
+msgstr "No puede establecer el movimiento de stock \"%s\" a estado asignado."
msgctxt "error:stock.move:"
-msgid "You can not set state to draft!"
-msgstr "No puede establecer el estado como borrador."
+msgid "You can not set stock move \"%s\" to done state."
+msgstr "No puede establecer el movimiento de stock \"%s\" a estado realizado."
msgctxt "error:stock.move:"
-msgid "You can only delete draft or cancelled moves!"
-msgstr "Sólo puede eliminar movimientos borrador o cancelados."
+msgid "You can not set stock move \"%s\" to draft state."
+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 en fecha futura o de hoy."
+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."
msgctxt "error:stock.period:"
-msgid "You can not close a period when there is still assigned moves!"
-msgstr "No puede cerrar un perÃodo cuando tiene movimientos reservados."
+msgid "You can not close a period when there still are assigned moves."
+msgstr ""
+"No puede cerrar un perÃodo cuando todavÃa dispone de movimientos asignados."
msgctxt "error:stock.shipment.in.return:"
-msgid "Supplier Return Shipment \"%s\" must be cancelled before deletion!"
-msgstr ""
-"Debe cancelar el abarán devolución de proveedor \"%s\" antes de eliminarlo."
+msgid "Supplier Return Shipment \"%s\" must be cancelled before deletion."
+msgstr "Debe cancelar el albarán devolución proveedor\"%s\" antes de borrar."
msgctxt "error:stock.shipment.in:"
msgid ""
"Incoming Moves must have the warehouse input location as destination "
-"location!"
+"location."
msgstr ""
-"Los movimientos de entrada deben tener la ubicación de entrada del almacén "
-"como la ubicación de destino."
+"Movimientos de entrada debe disponer de un almacén de entrada como ubicación"
+" destino."
msgctxt "error:stock.shipment.in:"
msgid ""
-"Inventory Moves must have the warehouse input location as source location!"
+"Inventory Moves must have the warehouse input location as source location."
msgstr ""
-"Los movimientos internos deben tener la ubicación de entrada del almacén "
-"como la ubicación de origen."
+"Los movimientos del inventario deben disponer de un almacén de entrada como "
+"ubicación incial."
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 eliminarlo."
+msgid "Supplier Shipment \"%s\" must be cancelled before deletion."
+msgstr "Debe cancelar el albarán de proveedor \"%s\" antes de borrar."
msgctxt "error:stock.shipment.internal:"
-msgid "Internal Shipment \"%s\" must be cancelled before deletion!"
-msgstr "Debe cancelar el albarán interno \"%s\" antes de eliminarlo."
+msgid "Internal Shipment \"%s\" must be cancelled before deletion."
+msgstr "Debe cancelar el albarán interno \"%s\" antes de borrar."
msgctxt "error:stock.shipment.out.return.create:"
-msgid "The shipment with code %s is not yet sent."
-msgstr "El albarán con código %s aún no ha sido enviado."
+msgid "The shipment with code \"%s\" is not yet sent."
+msgstr "El albarán 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 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 abarán devolución de cliente \"%s\" antes de eliminarlo."
+msgid "Customer Return Shipment \"%s\" must be cancelled before deletion."
+msgstr "Debe cancelar el albarán devolución de cliente \"%s\" antes de borrar."
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 eliminarlo."
+msgid "Customer Shipment \"%s\" must be cancelled before deletion."
+msgstr "Debe cancelar el albarán de cliente \"%s\" antes de borrar."
msgctxt "field:party.address,delivery:"
msgid "Delivery"
@@ -194,23 +194,23 @@ msgstr "Nombre"
msgctxt "field:stock.configuration,shipment_in_return_sequence:"
msgid "Supplier Return Shipment Sequence"
-msgstr "Secuencia albarán devolución proveedor"
+msgstr "Secuencia de albarán devolución proveedor"
msgctxt "field:stock.configuration,shipment_in_sequence:"
msgid "Supplier Shipment Sequence"
-msgstr "Secuencia albarán proveedor"
+msgstr "Secuencia de albarán proveedor"
msgctxt "field:stock.configuration,shipment_internal_sequence:"
msgid "Internal Shipment Sequence"
-msgstr "Secuencia albarán interno"
+msgstr "Secuencia de albarán interno"
msgctxt "field:stock.configuration,shipment_out_return_sequence:"
msgid "Customer Return Shipment Sequence"
-msgstr "Secuencia albarán devolución cliente"
+msgstr "Secuencia de albarán devolución cliente"
msgctxt "field:stock.configuration,shipment_out_sequence:"
msgid "Customer Shipment Sequence"
-msgstr "Secuencia albarán cliente"
+msgstr "Secuencia de albarán cliente"
msgctxt "field:stock.configuration,write_date:"
msgid "Write Date"
@@ -440,6 +440,10 @@ msgctxt "field:stock.move,internal_quantity:"
msgid "Internal Quantity"
msgstr "Cantidad interna"
+msgctxt "field:stock.move,origin:"
+msgid "Origin"
+msgstr "Origen"
+
msgctxt "field:stock.move,planned_date:"
msgid "Planned Date"
msgstr "Fecha estimada"
@@ -460,25 +464,9 @@ msgctxt "field:stock.move,rec_name:"
msgid "Name"
msgstr "Nombre"
-msgctxt "field:stock.move,shipment_in:"
-msgid "Supplier Shipment"
-msgstr "Albarán proveedor"
-
-msgctxt "field:stock.move,shipment_in_return:"
-msgid "Supplier Return Shipment"
-msgstr "Albarán devolución proveedor"
-
-msgctxt "field:stock.move,shipment_internal:"
-msgid "Internal Shipment"
-msgstr "Albarán interno"
-
-msgctxt "field:stock.move,shipment_out:"
-msgid "Customer Shipment"
-msgstr "Albarán cliente"
-
-msgctxt "field:stock.move,shipment_out_return:"
-msgid "Customer Return Shipment"
-msgstr "Albarán devolución cliente"
+msgctxt "field:stock.move,shipment:"
+msgid "Shipment"
+msgstr "EnvÃo"
msgctxt "field:stock.move,state:"
msgid "State"
@@ -1070,41 +1058,25 @@ msgctxt "model:ir.action,name:act_inventory_form"
msgid "Inventories"
msgstr "Inventarios"
-msgctxt "model:ir.action,name:act_inventory_form_draft"
-msgid "Draft Inventories"
-msgstr "Inventarios borrador"
-
msgctxt "model:ir.action,name:act_location_form"
msgid "Locations"
-msgstr "Editar ubicaciones"
+msgstr "Configuración de ubicaciones"
msgctxt "model:ir.action,name:act_location_quantity_tree"
msgid "Locations"
-msgstr "Ubicaciones"
+msgstr "Configuración de ubicaciones"
msgctxt "model:ir.action,name:act_location_tree"
msgid "Locations"
-msgstr "Ubicaciones"
+msgstr "Configuración de ubicaciones"
msgctxt "model:ir.action,name:act_move_form"
msgid "Moves"
msgstr "Movimientos"
-msgctxt "model:ir.action,name:act_move_form_cust"
-msgid "Moves to Customers"
-msgstr "Movimientos clientes"
-
-msgctxt "model:ir.action,name:act_move_form_supp"
-msgid "Moves from Suppliers"
-msgstr "Movimientos proveedores"
-
-msgctxt "model:ir.action,name:act_move_form_supp_proceed"
-msgid "Moves from Suppliers Waiting Arrival"
-msgstr "Movimientos proveedor esperando llegada"
-
msgctxt "model:ir.action,name:act_period_list"
msgid "Periods"
-msgstr "PerÃodos"
+msgstr "Configuración de perÃodos"
msgctxt "model:ir.action,name:act_product_quantities_warehouse"
msgid "Product Quantities By Warehouse"
@@ -1114,38 +1086,18 @@ msgctxt "model:ir.action,name:act_products_by_locations"
msgid "Products"
msgstr "Productos"
-msgctxt "model:ir.action,name:act_shipment_in_draft"
-msgid "Draft Supplier Shipment"
-msgstr "Albaranes proveedor borrador"
-
msgctxt "model:ir.action,name:act_shipment_in_form"
msgid "Supplier Shipments"
msgstr "Albaranes proveedor"
-msgctxt "model:ir.action,name:act_shipment_in_form_received"
-msgid "Received Supplier shipments"
-msgstr "Albaranes proveedor recibidos"
-
msgctxt "model:ir.action,name:act_shipment_in_return_form"
msgid "Supplier Return Shipments"
-msgstr "Albaranes proveedor devolución"
-
-msgctxt "model:ir.action,name:act_shipment_internal_assigned_form"
-msgid "Assigned Internal Shipments"
-msgstr "Albaranes internos reservados"
-
-msgctxt "model:ir.action,name:act_shipment_internal_draft_form"
-msgid "Draft Internal Shipments"
-msgstr "Albaranes internos borrador"
+msgstr "Albaranes devolución proveedor"
msgctxt "model:ir.action,name:act_shipment_internal_form"
msgid "Internal Shipments"
msgstr "Albaranes internos"
-msgctxt "model:ir.action,name:act_shipment_internal_waiting_form"
-msgid "Internal Shipments Waiting Assignation"
-msgstr "Albaranes internos esperando reserva"
-
msgctxt "model:ir.action,name:act_shipment_out_form"
msgid "Customer Shipments"
msgstr "Albaranes cliente"
@@ -1158,18 +1110,6 @@ msgctxt "model:ir.action,name:act_shipment_out_form3"
msgid "Supplier Shipments"
msgstr "Albaranes proveedor"
-msgctxt "model:ir.action,name:act_shipment_out_form_assigned"
-msgid "Assigned Customer Shipments"
-msgstr "Albaranes clientes reservados"
-
-msgctxt "model:ir.action,name:act_shipment_out_form_ready"
-msgid "Customer Shipments Ready for Shipping"
-msgstr "Albaranes cliente listos para envÃo"
-
-msgctxt "model:ir.action,name:act_shipment_out_form_waiting"
-msgid "Customer Shipments Waiting Assignation"
-msgstr "Albaranes cliente esperando reserva"
-
msgctxt "model:ir.action,name:act_shipment_out_return_form"
msgid "Customer Return Shipments"
msgstr "Albaranes cliente devolución"
@@ -1226,6 +1166,129 @@ msgctxt "model:ir.action,name:wizard_shipment_out_assign"
msgid "Assign Shipment Out"
msgstr "Reservar albarán de salida"
+msgctxt "model:ir.action.act_window.domain,name:act_inventory_form_domain_all"
+msgid "All"
+msgstr "Todos"
+
+msgctxt ""
+"model:ir.action.act_window.domain,name:act_inventory_form_domain_draft"
+msgid "Draft"
+msgstr "Borrador"
+
+msgctxt "model:ir.action.act_window.domain,name:act_move_form_domain_all"
+msgid "All"
+msgstr "Todos"
+
+msgctxt ""
+"model:ir.action.act_window.domain,name:act_move_form_domain_from_supplier"
+msgid "From Suppliers"
+msgstr "Desde proveedor"
+
+msgctxt ""
+"model:ir.action.act_window.domain,name:act_move_form_domain_from_supplier_waiting"
+msgid "From Suppliers Waiting"
+msgstr "En espera desde proveedor"
+
+msgctxt ""
+"model:ir.action.act_window.domain,name:act_move_form_domain_to_customer"
+msgid "To Customers"
+msgstr "Hacia clientes"
+
+msgctxt ""
+"model:ir.action.act_window.domain,name:act_shipment_in_form_domain_all"
+msgid "All"
+msgstr "Todo"
+
+msgctxt ""
+"model:ir.action.act_window.domain,name:act_shipment_in_form_domain_draft"
+msgid "Draft"
+msgstr "Borrador"
+
+msgctxt ""
+"model:ir.action.act_window.domain,name:act_shipment_in_form_domain_received"
+msgid "Received"
+msgstr "Recibido"
+
+msgctxt ""
+"model:ir.action.act_window.domain,name:act_shipment_in_return_form_domain_all"
+msgid "All"
+msgstr "Todos"
+
+msgctxt ""
+"model:ir.action.act_window.domain,name:act_shipment_in_return_form_domain_assigned"
+msgid "Assigned"
+msgstr "Reservado"
+
+msgctxt ""
+"model:ir.action.act_window.domain,name:act_shipment_in_return_form_domain_draft"
+msgid "Draft"
+msgstr "Borrador"
+
+msgctxt ""
+"model:ir.action.act_window.domain,name:act_shipment_in_return_form_domain_waiting"
+msgid "Waiting"
+msgstr "En espera"
+
+msgctxt ""
+"model:ir.action.act_window.domain,name:act_shipment_internal_form_domain_all"
+msgid "All"
+msgstr "Todo"
+
+msgctxt ""
+"model:ir.action.act_window.domain,name:act_shipment_internal_form_domain_assigned"
+msgid "Assigned"
+msgstr "Reservado"
+
+msgctxt ""
+"model:ir.action.act_window.domain,name:act_shipment_internal_form_domain_draft"
+msgid "Draft"
+msgstr "Borrador"
+
+msgctxt ""
+"model:ir.action.act_window.domain,name:act_shipment_internal_form_domain_waiting"
+msgid "Waiting"
+msgstr "En espera"
+
+msgctxt ""
+"model:ir.action.act_window.domain,name:act_shipment_out_form_domain_all"
+msgid "All"
+msgstr "Todos"
+
+msgctxt ""
+"model:ir.action.act_window.domain,name:act_shipment_out_form_domain_assigned"
+msgid "Assigned"
+msgstr "Reservado"
+
+msgctxt ""
+"model:ir.action.act_window.domain,name:act_shipment_out_form_domain_draft"
+msgid "Draft"
+msgstr "Borrador"
+
+msgctxt ""
+"model:ir.action.act_window.domain,name:act_shipment_out_form_domain_packed"
+msgid "Packed"
+msgstr "Empaquetado"
+
+msgctxt ""
+"model:ir.action.act_window.domain,name:act_shipment_out_form_domain_waiting"
+msgid "Waiting"
+msgstr "En espera"
+
+msgctxt ""
+"model:ir.action.act_window.domain,name:act_shipment_out_return_form_domain_all"
+msgid "All"
+msgstr "Todos"
+
+msgctxt ""
+"model:ir.action.act_window.domain,name:act_shipment_out_return_form_domain_draft"
+msgid "Draft"
+msgstr "Borrador"
+
+msgctxt ""
+"model:ir.action.act_window.domain,name:act_shipment_out_return_form_domain_received"
+msgid "Received"
+msgstr "Recibido"
+
msgctxt "model:ir.sequence,name:sequence_shipment_in"
msgid "Supplier Shipment"
msgstr "Albarán de proveedor"
@@ -1244,7 +1307,7 @@ msgstr "Albarán cliente"
msgctxt "model:ir.sequence,name:sequence_shipment_out_return"
msgid "Customer Return Shipment"
-msgstr "Albarán devolución de cliente"
+msgstr "Albarán devolución cliente"
msgctxt "model:ir.sequence.type,name:sequence_type_shipment_in"
msgid "Supplier Shipment"
@@ -1274,10 +1337,6 @@ msgctxt "model:ir.ui.menu,name:menu_inventory_form"
msgid "Inventories"
msgstr "Inventarios"
-msgctxt "model:ir.ui.menu,name:menu_inventory_form_draft"
-msgid "Draft Inventories"
-msgstr "Borrador"
-
msgctxt "model:ir.ui.menu,name:menu_location_form"
msgid "Locations"
msgstr "Ubicaciones"
@@ -1290,18 +1349,6 @@ msgctxt "model:ir.ui.menu,name:menu_move_form"
msgid "Moves"
msgstr "Movimientos"
-msgctxt "model:ir.ui.menu,name:menu_move_form_cust"
-msgid "Moves to Customers"
-msgstr "Clientes"
-
-msgctxt "model:ir.ui.menu,name:menu_move_form_supp"
-msgid "Moves from Suppliers"
-msgstr "Proveedores"
-
-msgctxt "model:ir.ui.menu,name:menu_move_form_supp_proceed"
-msgid "Moves from Suppliers Waiting Arrival"
-msgstr "Esperando llegada"
-
msgctxt "model:ir.ui.menu,name:menu_period_list"
msgid "Periods"
msgstr "PerÃodos"
@@ -1310,58 +1357,26 @@ msgctxt "model:ir.ui.menu,name:menu_reporting"
msgid "Reporting"
msgstr "Informes"
-msgctxt "model:ir.ui.menu,name:menu_shipment_in_draft"
-msgid "Draft Supplier Shipment"
-msgstr "Borrador"
-
msgctxt "model:ir.ui.menu,name:menu_shipment_in_form"
msgid "Supplier Shipments"
msgstr "Albaranes proveedor"
-msgctxt "model:ir.ui.menu,name:menu_shipment_in_received"
-msgid "Received Supplier shipments"
-msgstr "Recibidos"
-
msgctxt "model:ir.ui.menu,name:menu_shipment_in_return_form"
msgid "Supplier Return Shipments"
msgstr "Devolución"
-msgctxt "model:ir.ui.menu,name:menu_shipment_internal_assigned_form"
-msgid "Assigned Internal Shipments"
-msgstr "Reservados"
-
-msgctxt "model:ir.ui.menu,name:menu_shipment_internal_draft_form"
-msgid "Draft Internal Shipments"
-msgstr "Borrador"
-
msgctxt "model:ir.ui.menu,name:menu_shipment_internal_form"
msgid "Internal Shipments"
msgstr "Albaranes internos"
-msgctxt "model:ir.ui.menu,name:menu_shipment_internal_waiting_form"
-msgid "Internal Shipments Waiting Assignation"
-msgstr "Esperando reserva"
-
-msgctxt "model:ir.ui.menu,name:menu_shipment_out_assigned"
-msgid "Assigned Customer Shipments"
-msgstr "Reservados"
-
msgctxt "model:ir.ui.menu,name:menu_shipment_out_form"
msgid "Customer Shipments"
msgstr "Albaranes cliente"
-msgctxt "model:ir.ui.menu,name:menu_shipment_out_ready"
-msgid "Customer Shipments Ready for Shipping"
-msgstr "Listos para envÃo"
-
msgctxt "model:ir.ui.menu,name:menu_shipment_out_return_form"
msgid "Customer Return Shipments"
msgstr "Devolución"
-msgctxt "model:ir.ui.menu,name:menu_shipment_out_waiting"
-msgid "Customer Shipments Waiting Assignation"
-msgstr "Esperando reserva"
-
msgctxt "model:ir.ui.menu,name:menu_stock"
msgid "Inventory & Stock"
msgstr "LogÃstica"
@@ -1464,7 +1479,7 @@ msgstr "Albarán devolución proveedor"
msgctxt "model:stock.shipment.in.return.assign.failed,name:"
msgid "Assign Supplier Return Shipment"
-msgstr "Reservar albaranes de devolución de proveedor"
+msgstr "Reservar albaranes devolución de proveedor"
msgctxt "model:stock.shipment.internal,name:"
msgid "Internal Shipment"
@@ -1918,10 +1933,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 "Productos por ubicación"
@@ -1947,10 +1958,6 @@ msgid "Add an inventory line for each missing products"
msgstr "Añadir una lÃnea de inventario por cada producto que falta"
msgctxt "view:stock.inventory:"
-msgid "All generated moves will be cancelled!"
-msgstr "Se cancelarán todos los movimientos generados"
-
-msgctxt "view:stock.inventory:"
msgid "Cancel"
msgstr "Cancelar"
@@ -1970,10 +1977,6 @@ msgctxt "view:stock.inventory:"
msgid "Inventory"
msgstr "Inventario"
-msgctxt "view:stock.inventory:"
-msgid "Re-Open"
-msgstr "Reabrir"
-
msgctxt "view:stock.location:"
msgid "Location"
msgstr "Ubicación"
@@ -1986,14 +1989,6 @@ msgctxt "view:stock.location:"
msgid "Locations"
msgstr "Ubicaciones"
-msgctxt "view:stock.location:"
-msgid "Product Stock"
-msgstr "Stock del producto"
-
-msgctxt "view:stock.move:"
-msgid "Cancel"
-msgstr "Cancelar"
-
msgctxt "view:stock.move:"
msgid "Move"
msgstr "Movimiento"
@@ -2002,14 +1997,6 @@ msgctxt "view:stock.move:"
msgid "Moves"
msgstr "Movimientos"
-msgctxt "view:stock.move:"
-msgid "Set Done"
-msgstr "Marcar como realizado"
-
-msgctxt "view:stock.move:"
-msgid "Set Draft"
-msgstr "Marcar como borrador"
-
msgctxt "view:stock.period.cache:"
msgid "Period Cache"
msgstr "PerÃodo precalculado"
@@ -2071,25 +2058,17 @@ msgid "Draft"
msgstr "Borrador"
msgctxt "view:stock.shipment.in.return:"
-msgid "Reset to Draft"
-msgstr "Restablecer a borrador"
-
-msgctxt "view:stock.shipment.in.return:"
msgid "Supplier Return Shipment"
msgstr "Albarán devolución proveedor"
msgctxt "view:stock.shipment.in.return:"
msgid "Supplier Return Shipments"
-msgstr "Albaranes proveedor devolución"
+msgstr "Albaranes devolución proveedor"
msgctxt "view:stock.shipment.in.return:"
msgid "Wait"
msgstr "Esperando"
-msgctxt "view:stock.shipment.in.return:"
-msgid "Waiting"
-msgstr "En espera"
-
msgctxt "view:stock.shipment.in:"
msgid "Cancel"
msgstr "Cancelar"
@@ -2099,10 +2078,6 @@ msgid "Done"
msgstr "Realizado"
msgctxt "view:stock.shipment.in:"
-msgid "Draft"
-msgstr "Borrador"
-
-msgctxt "view:stock.shipment.in:"
msgid "Incoming Moves"
msgstr "Movimientos de entrada"
@@ -2111,20 +2086,12 @@ msgid "Inventory Moves"
msgstr "Movimientos internos"
msgctxt "view:stock.shipment.in:"
-msgid "Moves"
-msgstr "Movimientos"
-
-msgctxt "view:stock.shipment.in:"
msgid "Receive"
msgstr "Recibir"
msgctxt "view:stock.shipment.in:"
-msgid "Received"
-msgstr "Recibido"
-
-msgctxt "view:stock.shipment.in:"
msgid "Reset to Draft"
-msgstr "Restablecer a borrador"
+msgstr "Restaurar a borrador"
msgctxt "view:stock.shipment.in:"
msgid "Supplier Shipment"
@@ -2159,10 +2126,6 @@ msgid "Draft"
msgstr "Borrador"
msgctxt "view:stock.shipment.internal:"
-msgid "Force Assign"
-msgstr "Forzar reserva"
-
-msgctxt "view:stock.shipment.internal:"
msgid "Internal Shipment"
msgstr "Albarán interno"
@@ -2171,18 +2134,6 @@ msgid "Internal Shipments"
msgstr "Albaranes internos"
msgctxt "view:stock.shipment.internal:"
-msgid "Reset to Draft"
-msgstr "Restablecer a borrador"
-
-msgctxt "view:stock.shipment.internal:"
-msgid "Set Done"
-msgstr "Marcar como realizado"
-
-msgctxt "view:stock.shipment.internal:"
-msgid "Set Waiting"
-msgstr "Marcar como espera"
-
-msgctxt "view:stock.shipment.internal:"
msgid "Waiting"
msgstr "En espera"
@@ -2204,7 +2155,7 @@ msgstr "Albarán devolución cliente"
msgctxt "view:stock.shipment.out.return:"
msgid "Customer Return Shipments"
-msgstr "Albaranes cliente devolución"
+msgstr "Albaranes devolución cliente"
msgctxt "view:stock.shipment.out.return:"
msgid "Done"
@@ -2223,17 +2174,9 @@ msgid "Inventory Moves"
msgstr "Movimientos internos"
msgctxt "view:stock.shipment.out.return:"
-msgid "Moves"
-msgstr "Movimientos"
-
-msgctxt "view:stock.shipment.out.return:"
msgid "Received"
msgstr "Recibido"
-msgctxt "view:stock.shipment.out.return:"
-msgid "Reset to Draft"
-msgstr "Restablecer a borrador"
-
msgctxt "view:stock.shipment.out:"
msgid "Assign"
msgstr "Reservar"
@@ -2259,10 +2202,6 @@ msgid "Draft"
msgstr "Borrador"
msgctxt "view:stock.shipment.out:"
-msgid "Force Assign"
-msgstr "Forzar reserva"
-
-msgctxt "view:stock.shipment.out:"
msgid "Inventory Moves"
msgstr "Movimientos internos"
@@ -2275,22 +2214,6 @@ msgid "Outgoing Moves"
msgstr "Movimientos de salida"
msgctxt "view:stock.shipment.out:"
-msgid "Reset to Draft"
-msgstr "Restablecer a borrador"
-
-msgctxt "view:stock.shipment.out:"
-msgid "Set Done"
-msgstr "Marcar como realizado"
-
-msgctxt "view:stock.shipment.out:"
-msgid "Set Waiting"
-msgstr "Marcar como espera"
-
-msgctxt "view:stock.shipment.out:"
-msgid "Unpack"
-msgstr "Desempaquetar"
-
-msgctxt "view:stock.shipment.out:"
msgid "Waiting"
msgstr "En espera"
diff --git a/locale/fr_FR.po b/locale/fr_FR.po
index 8424c53..d5b92ed 100644
--- a/locale/fr_FR.po
+++ b/locale/fr_FR.po
@@ -19,56 +19,30 @@ msgstr ""
"l'objet de mouvements de stock"
msgctxt "error:stock.inventory.line:"
-msgid "Line quantity must be positive!"
-msgstr "Les quantités sur les lignes doivent être positives!"
+msgid "Line quantity must be positive."
+msgstr "La quantité de la ligne doit être positive."
msgctxt "error:stock.inventory.line:"
-msgid "Line quantity must be positive!"
-msgstr "Les quantités sur les lignes doivent être positives!"
-
-msgctxt "error:stock.inventory.line:"
-msgid "Product must be unique by inventory!"
-msgstr "Chaque produit ne peut apparaître qu'une seule fois par inventaire"
-
-msgctxt "error:stock.inventory.line:"
-msgid "Product must be unique by inventory!"
-msgstr "Chaque produit ne peut apparaître qu'une seule fois par inventaire"
+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 suppression"
+msgid "Inventory \"%s\" must be cancelled before deletion."
+msgstr "l'inventaire \"%s\" doit être annulé avant sa suppression"
msgctxt "error:stock.location:"
-msgid ""
-"A location with existing moves cannot be changed to a type that does not "
-"support moves."
+msgid "Location \"%(location)s\" must be a child of warehouse \"%(warehouse)s\"."
msgstr ""
-"Un emplacement avec des mouvements ne peut pas être changé en un type qui ne"
-" supporte pas les mouvements."
+"La location \"%(location)s\" doit être une sous-location de l'entrepôt "
+"\"%(warehouse)s\"."
msgctxt "error:stock.location:"
msgid ""
-"A location with existing moves cannot be changed to a type that does not "
-"support moves."
+"Location \"%s\" with existing moves cannot be changed to a type that does "
+"not support moves."
msgstr ""
-"Un emplacement avec des mouvements ne peut pas être changé en un type qui ne"
-" supporte pas les mouvements."
-
-msgctxt "error:stock.location:"
-msgid "Location \"%s\" must be a child of warehouse \"%s\"!"
-msgstr "L'emplacement \"%s\" doit être un sous-emplacement de l'entrepôt \"%s\" !"
-
-msgctxt "error:stock.location:"
-msgid "Location \"%s\" must be a child of warehouse \"%s\"!"
-msgstr "L'emplacement \"%s\" doit être un sous-emplacement de l'entrepôt \"%s\" !"
-
-msgctxt "error:stock.location:"
-msgid "You can not create recursive locations!"
-msgstr "Vous ne pouvez pas créer des emplacements récursifs !"
-
-msgctxt "error:stock.location:"
-msgid "You can not create recursive locations!"
-msgstr "Vous ne pouvez pas créer des emplacements récursifs !"
+"La location \"%s\" est liée à des mouvements. Son type ne peut être un type "
+"qui ne supporte pas les mouvements."
msgctxt "error:stock.move:"
msgid "Internal move quantity must be positive"
@@ -79,14 +53,6 @@ msgid "Internal move quantity must be positive"
msgstr "La quantité interne doit être positive"
msgctxt "error:stock.move:"
-msgid "Move can be on only one Shipment"
-msgstr "Un mouvement ne peut être que sur une seule expédition"
-
-msgctxt "error:stock.move:"
-msgid "Move can be on only one Shipment"
-msgstr "Un mouvement ne peut être que sur une seule expédition"
-
-msgctxt "error:stock.move:"
msgid "Move quantity must be positive"
msgstr "La quantité sur le mouvement doit être positive."
@@ -103,135 +69,85 @@ msgid "Source and destination location must be different"
msgstr "Les emplacements d'origine et de destination doivent être distincts"
msgctxt "error:stock.move:"
-msgid "You can not modify a move in the state: \"Assigned\", \"Done\" or \"Cancel\""
+msgid ""
+"You can not delete stock move \"%s\" because it is not in draft or cancelled"
+" state."
msgstr ""
-"Vous ne pouvez modifier un mouvement dans un des états : \"Assigné\", "
-"\"Terminé\" ou \"Annulé\""
+"Vous ne pouvez supprimer le mouvement de stock \"%s\" car il n'est pas dans "
+"l'état brouillon ou annulé."
msgctxt "error:stock.move:"
-msgid "You can not modify a move in the state: \"Assigned\", \"Done\" or \"Cancel\""
+msgid "You can not modify move \"%(move)s\" because period \"%(period)s\" is closed."
msgstr ""
-"Vous ne pouvez modifier un mouvement dans un des états : \"Assigné\", "
-"\"Terminé\" ou \"Annulé\""
-
-msgctxt "error:stock.move:"
-msgid "You can not modify move in closed period!"
-msgstr "Vous ne pouvez modifier un mouvement d'une période fermée !"
-
-msgctxt "error:stock.move:"
-msgid "You can not modify move in closed period!"
-msgstr "Vous ne pouvez modifier un mouvement d'une période fermée !"
-
-msgctxt "error:stock.move:"
-msgid "You can not set state to assigned!"
-msgstr "Vous ne pouvez pas mettre l'état à assigné !"
-
-msgctxt "error:stock.move:"
-msgid "You can not set state to assigned!"
-msgstr "Vous ne pouvez pas mettre l'état à assigné !"
+"Vous ne pouvez modifier le mouvement \"%(move)s\" car la période "
+"\"%(period)s\" est fermée."
msgctxt "error:stock.move:"
-msgid "You can not set state to done!"
-msgstr "Vous ne pouvez pas mettre l'état à fait !"
+msgid ""
+"You can not modify stock move \"%s\"because it is in \"Assigned\", \"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é\"."
msgctxt "error:stock.move:"
-msgid "You can not set state to done!"
-msgstr "Vous ne pouvez pas mettre l'état à fait !"
+msgid "You can not set stock move \"%s\" to assigned state."
+msgstr "Vous ne pouvez passer dans l'état assigné le mouvement de stock \"%s\"."
msgctxt "error:stock.move:"
-msgid "You can not set state to draft!"
-msgstr "Vous ne pouvez pas mettre l'état à brouillon !"
+msgid "You can not set stock move \"%s\" to done state."
+msgstr "Vous ne pouvez passer dans l'état \"Fait\" le mouvement \"%s\"."
msgctxt "error:stock.move:"
-msgid "You can not set state to draft!"
-msgstr "Vous ne pouvez pas mettre l'état à brouillon !"
-
-msgctxt "error:stock.move:"
-msgid "You can only delete draft or cancelled moves!"
-msgstr ""
-"Vous ne pouvez supprimer que des mouvements qui sont annulés ou à l'état de "
-"brouillon !"
-
-msgctxt "error:stock.move:"
-msgid "You can only delete draft or cancelled moves!"
-msgstr ""
-"Vous ne pouvez supprimer que des mouvements qui sont annulés ou à l'état de "
-"brouillon !"
-
-msgctxt "error:stock.period:"
-msgid "You can not close a period in the future or today!"
-msgstr ""
-"Vous ne pouvez fermer une période qui se termine aujourd'hui ou dans le "
-"futur !"
+msgid "You can not set stock move \"%s\" to draft state."
+msgstr "Vous ne pouvez remettre en brouilon le mouvement \"%s\"."
msgctxt "error:stock.period:"
-msgid "You can not close a period in the future or today!"
+msgid "You can not close a period in the future or today."
msgstr ""
-"Vous ne pouvez fermer une période qui se termine aujourd'hui ou dans le "
-"futur !"
+"Vous ne pouvez fermer une période dans le futur ou à la date d'aujourd'hui."
msgctxt "error:stock.period:"
-msgid "You can not close a period when there is still assigned moves!"
+msgid "You can not close a period when there still are assigned moves."
msgstr ""
-"Vous ne pouvez fermer une période alors que des mouvements sont toujours "
-"assignés !"
-
-msgctxt "error:stock.period:"
-msgid "You can not close a period when there is still assigned moves!"
-msgstr ""
-"Vous ne pouvez fermer une période alors que des mouvements sont toujours "
-"assignés !"
+"Vous ne pouvez pas fermer une période quand il y a encore des mouvement "
+"assignés."
msgctxt "error:stock.shipment.in.return:"
-msgid "Supplier Return Shipment \"%s\" must be cancelled before deletion!"
-msgstr ""
-"Le retour d'expédition fournisseur \"%s\" doit être annulé avant suppression"
-
-msgctxt "error:stock.shipment.in:"
-msgid ""
-"Incoming Moves must have the warehouse input location as destination "
-"location!"
+msgid "Supplier Return Shipment \"%s\" must be cancelled before deletion."
msgstr ""
-"Les mouvements d'entrée doivent avoir l'emplacement d'entrée de l'entrepôt "
-"comme destination !"
+"Le retour d'expédition fournisseur \"%s\" doit être annulé pour pouvoir être"
+" supprimé."
msgctxt "error:stock.shipment.in:"
msgid ""
"Incoming Moves must have the warehouse input location as destination "
-"location!"
+"location."
msgstr ""
-"Les mouvements d'entrée doivent avoir l'emplacement d'entrée de l'entrepôt "
-"comme destination !"
+"Les mouvement d'entrées doivent avoir comme destination la location d'entrée"
+" de l'entrepôt."
msgctxt "error:stock.shipment.in:"
msgid ""
-"Inventory Moves must have the warehouse input location as source location!"
+"Inventory Moves must have the warehouse input location as source location."
msgstr ""
-"Les mouvements d'inventaire doivent avoir l'emplacement d'entrée de "
-"l'entrepôt comme source !"
+"Les mouvements d'inventaire doivent avoir la location d'entrée de l'entrepôt"
+" comme source."
msgctxt "error:stock.shipment.in:"
-msgid ""
-"Inventory Moves must have the warehouse input location as source location!"
+msgid "Supplier Shipment \"%s\" must be cancelled before deletion."
msgstr ""
-"Les mouvements d'inventaire doivent avoir l'emplacement d'entrée de "
-"l'entrepôt comme source !"
-
-msgctxt "error:stock.shipment.in:"
-msgid "Supplier Shipment \"%s\" must be cancelled before deletion!"
-msgstr "L'expédition fournisseur \"%s\" doit être annulée avant suppression"
+"L'expédition fournisseur \"%s\" doit être annulée pour pouvoir être "
+"supprimée."
msgctxt "error:stock.shipment.internal:"
-msgid "Internal Shipment \"%s\" must be cancelled before deletion!"
-msgstr "L'expédition interne \"%s\" doit être annulée avant suppression"
-
-msgctxt "error:stock.shipment.out.return.create:"
-msgid "The shipment with code %s is not yet sent."
-msgstr "L'emballage avec le code %s n'est pas encore envoyé."
+msgid "Internal Shipment \"%s\" must be cancelled before deletion."
+msgstr ""
+"L'expédition interne \"%s\" doit être annulée pour pouvoir être supprimée."
msgctxt "error:stock.shipment.out.return.create:"
-msgid "The shipment with code %s is not yet sent."
-msgstr "L'emballage avec le code %s n'est pas encore envoyé."
+msgid "The shipment with code \"%s\" is not yet sent."
+msgstr "L'expédition \"%s\" n'est pas encore envoyée."
msgctxt "error:stock.shipment.out.return.create:"
msgid "You can not create return shipment"
@@ -242,12 +158,16 @@ 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 "L'expédition de retour client \"%s\" doit être annulée avant suppression"
+msgid "Customer Return Shipment \"%s\" must be cancelled before deletion."
+msgstr ""
+"Le retour d'expédition client \"%s\" doit être annulé avant de pouvoir être "
+"supprimé."
msgctxt "error:stock.shipment.out:"
-msgid "Customer Shipment \"%s\" must be cancelled before deletion!"
-msgstr "L'expédition cliente \"%s\" doit être annulée avant suppression"
+msgid "Customer Shipment \"%s\" must be cancelled before deletion."
+msgstr ""
+"L'expédition cliente \"%s\" doit être annulés avant de pouvoir être "
+"supprimée."
msgctxt "field:party.address,delivery:"
msgid "Delivery"
@@ -557,6 +477,10 @@ msgctxt "field:stock.move,internal_quantity:"
msgid "Internal Quantity"
msgstr "Quantité interne"
+msgctxt "field:stock.move,origin:"
+msgid "Origin"
+msgstr "Origine"
+
msgctxt "field:stock.move,planned_date:"
msgid "Planned Date"
msgstr "Date planifiée"
@@ -577,25 +501,9 @@ msgctxt "field:stock.move,rec_name:"
msgid "Name"
msgstr "Nom"
-msgctxt "field:stock.move,shipment_in:"
-msgid "Supplier Shipment"
-msgstr "Expédition fournisseur"
-
-msgctxt "field:stock.move,shipment_in_return:"
-msgid "Supplier Return Shipment"
-msgstr "Retour expédition fournisseur"
-
-msgctxt "field:stock.move,shipment_internal:"
-msgid "Internal Shipment"
-msgstr "Expédition interne"
-
-msgctxt "field:stock.move,shipment_out:"
-msgid "Customer Shipment"
-msgstr "Expédition client"
-
-msgctxt "field:stock.move,shipment_out_return:"
-msgid "Customer Return Shipment"
-msgstr "Retour d'expédition client"
+msgctxt "field:stock.move,shipment:"
+msgid "Shipment"
+msgstr "Expédition"
msgctxt "field:stock.move,state:"
msgid "State"
@@ -1183,10 +1091,6 @@ msgctxt "model:ir.action,name:act_inventory_form"
msgid "Inventories"
msgstr "Inventaires"
-msgctxt "model:ir.action,name:act_inventory_form_draft"
-msgid "Draft Inventories"
-msgstr "Inventaires brouillons"
-
msgctxt "model:ir.action,name:act_location_form"
msgid "Locations"
msgstr "Ãditer les emplacements"
@@ -1203,18 +1107,6 @@ msgctxt "model:ir.action,name:act_move_form"
msgid "Moves"
msgstr "Mouvements"
-msgctxt "model:ir.action,name:act_move_form_cust"
-msgid "Moves to Customers"
-msgstr "Mouvements clients"
-
-msgctxt "model:ir.action,name:act_move_form_supp"
-msgid "Moves from Suppliers"
-msgstr "Mouvements fournisseurs"
-
-msgctxt "model:ir.action,name:act_move_form_supp_proceed"
-msgid "Moves from Suppliers Waiting Arrival"
-msgstr "Mouvement fournisseur en attente de réception"
-
msgctxt "model:ir.action,name:act_period_list"
msgid "Periods"
msgstr "Périodes"
@@ -1227,38 +1119,18 @@ msgctxt "model:ir.action,name:act_products_by_locations"
msgid "Products"
msgstr "Produits par emplacements"
-msgctxt "model:ir.action,name:act_shipment_in_draft"
-msgid "Draft Supplier Shipment"
-msgstr "Expédition fournisseur brouillon"
-
msgctxt "model:ir.action,name:act_shipment_in_form"
msgid "Supplier Shipments"
msgstr "Expéditions fournisseur"
-msgctxt "model:ir.action,name:act_shipment_in_form_received"
-msgid "Received Supplier shipments"
-msgstr "Expéditions fournisseur reçues"
-
msgctxt "model:ir.action,name:act_shipment_in_return_form"
msgid "Supplier Return Shipments"
msgstr "Retours d'expédition fournisseur"
-msgctxt "model:ir.action,name:act_shipment_internal_assigned_form"
-msgid "Assigned Internal Shipments"
-msgstr "Expédition internes assignées"
-
-msgctxt "model:ir.action,name:act_shipment_internal_draft_form"
-msgid "Draft Internal Shipments"
-msgstr "Expéditions internes brouillon"
-
msgctxt "model:ir.action,name:act_shipment_internal_form"
msgid "Internal Shipments"
msgstr "Expédition interne"
-msgctxt "model:ir.action,name:act_shipment_internal_waiting_form"
-msgid "Internal Shipments Waiting Assignation"
-msgstr "Expéditions internes en attente d'assignation"
-
msgctxt "model:ir.action,name:act_shipment_out_form"
msgid "Customer Shipments"
msgstr "Expéditions client"
@@ -1271,18 +1143,6 @@ msgctxt "model:ir.action,name:act_shipment_out_form3"
msgid "Supplier Shipments"
msgstr "Expéditions fournisseur"
-msgctxt "model:ir.action,name:act_shipment_out_form_assigned"
-msgid "Assigned Customer Shipments"
-msgstr "Expéditions client assignées"
-
-msgctxt "model:ir.action,name:act_shipment_out_form_ready"
-msgid "Customer Shipments Ready for Shipping"
-msgstr "Expéditions client prêtes à livrer"
-
-msgctxt "model:ir.action,name:act_shipment_out_form_waiting"
-msgid "Customer Shipments Waiting Assignation"
-msgstr "Expéditions client en attente d'assignation"
-
msgctxt "model:ir.action,name:act_shipment_out_return_form"
msgid "Customer Return Shipments"
msgstr "Retours d'expédition client"
@@ -1339,6 +1199,129 @@ msgctxt "model:ir.action,name:wizard_shipment_out_assign"
msgid "Assign Shipment Out"
msgstr "Assigner l'expédition de sortie"
+msgctxt "model:ir.action.act_window.domain,name:act_inventory_form_domain_all"
+msgid "All"
+msgstr "Tous"
+
+msgctxt ""
+"model:ir.action.act_window.domain,name:act_inventory_form_domain_draft"
+msgid "Draft"
+msgstr "Brouillon"
+
+msgctxt "model:ir.action.act_window.domain,name:act_move_form_domain_all"
+msgid "All"
+msgstr "Tous"
+
+msgctxt ""
+"model:ir.action.act_window.domain,name:act_move_form_domain_from_supplier"
+msgid "From Suppliers"
+msgstr "Depuis les fournisseurs"
+
+msgctxt ""
+"model:ir.action.act_window.domain,name:act_move_form_domain_from_supplier_waiting"
+msgid "From Suppliers Waiting"
+msgstr "En attente depuis les fournisseurs"
+
+msgctxt ""
+"model:ir.action.act_window.domain,name:act_move_form_domain_to_customer"
+msgid "To Customers"
+msgstr "Vers les clients"
+
+msgctxt ""
+"model:ir.action.act_window.domain,name:act_shipment_in_form_domain_all"
+msgid "All"
+msgstr "Toutes"
+
+msgctxt ""
+"model:ir.action.act_window.domain,name:act_shipment_in_form_domain_draft"
+msgid "Draft"
+msgstr "Brouillon"
+
+msgctxt ""
+"model:ir.action.act_window.domain,name:act_shipment_in_form_domain_received"
+msgid "Received"
+msgstr "Reçu"
+
+msgctxt ""
+"model:ir.action.act_window.domain,name:act_shipment_in_return_form_domain_all"
+msgid "All"
+msgstr "Toutes"
+
+msgctxt ""
+"model:ir.action.act_window.domain,name:act_shipment_in_return_form_domain_assigned"
+msgid "Assigned"
+msgstr "Assigné"
+
+msgctxt ""
+"model:ir.action.act_window.domain,name:act_shipment_in_return_form_domain_draft"
+msgid "Draft"
+msgstr "Brouillon"
+
+msgctxt ""
+"model:ir.action.act_window.domain,name:act_shipment_in_return_form_domain_waiting"
+msgid "Waiting"
+msgstr "En attente"
+
+msgctxt ""
+"model:ir.action.act_window.domain,name:act_shipment_internal_form_domain_all"
+msgid "All"
+msgstr "Toutes"
+
+msgctxt ""
+"model:ir.action.act_window.domain,name:act_shipment_internal_form_domain_assigned"
+msgid "Assigned"
+msgstr "Assigné"
+
+msgctxt ""
+"model:ir.action.act_window.domain,name:act_shipment_internal_form_domain_draft"
+msgid "Draft"
+msgstr "Brouillon"
+
+msgctxt ""
+"model:ir.action.act_window.domain,name:act_shipment_internal_form_domain_waiting"
+msgid "Waiting"
+msgstr "En attente"
+
+msgctxt ""
+"model:ir.action.act_window.domain,name:act_shipment_out_form_domain_all"
+msgid "All"
+msgstr "Toutes"
+
+msgctxt ""
+"model:ir.action.act_window.domain,name:act_shipment_out_form_domain_assigned"
+msgid "Assigned"
+msgstr "Assigné"
+
+msgctxt ""
+"model:ir.action.act_window.domain,name:act_shipment_out_form_domain_draft"
+msgid "Draft"
+msgstr "Brouillon"
+
+msgctxt ""
+"model:ir.action.act_window.domain,name:act_shipment_out_form_domain_packed"
+msgid "Packed"
+msgstr "Emballé"
+
+msgctxt ""
+"model:ir.action.act_window.domain,name:act_shipment_out_form_domain_waiting"
+msgid "Waiting"
+msgstr "En attente"
+
+msgctxt ""
+"model:ir.action.act_window.domain,name:act_shipment_out_return_form_domain_all"
+msgid "All"
+msgstr "Tous"
+
+msgctxt ""
+"model:ir.action.act_window.domain,name:act_shipment_out_return_form_domain_draft"
+msgid "Draft"
+msgstr "Brouillon"
+
+msgctxt ""
+"model:ir.action.act_window.domain,name:act_shipment_out_return_form_domain_received"
+msgid "Received"
+msgstr "Reçu"
+
msgctxt "model:ir.sequence,name:sequence_shipment_in"
msgid "Supplier Shipment"
msgstr "Expédition fournisseur"
@@ -1387,10 +1370,6 @@ msgctxt "model:ir.ui.menu,name:menu_inventory_form"
msgid "Inventories"
msgstr "Inventaires"
-msgctxt "model:ir.ui.menu,name:menu_inventory_form_draft"
-msgid "Draft Inventories"
-msgstr "Inventaires brouillons"
-
msgctxt "model:ir.ui.menu,name:menu_location_form"
msgid "Locations"
msgstr "Ãditer les emplacements"
@@ -1403,18 +1382,6 @@ msgctxt "model:ir.ui.menu,name:menu_move_form"
msgid "Moves"
msgstr "Mouvements"
-msgctxt "model:ir.ui.menu,name:menu_move_form_cust"
-msgid "Moves to Customers"
-msgstr "Mouvements clients"
-
-msgctxt "model:ir.ui.menu,name:menu_move_form_supp"
-msgid "Moves from Suppliers"
-msgstr "Mouvements fournisseurs"
-
-msgctxt "model:ir.ui.menu,name:menu_move_form_supp_proceed"
-msgid "Moves from Suppliers Waiting Arrival"
-msgstr "Mouvements fournisseur en attente de réception"
-
msgctxt "model:ir.ui.menu,name:menu_period_list"
msgid "Periods"
msgstr "Périodes"
@@ -1423,58 +1390,26 @@ msgctxt "model:ir.ui.menu,name:menu_reporting"
msgid "Reporting"
msgstr "Rapports"
-msgctxt "model:ir.ui.menu,name:menu_shipment_in_draft"
-msgid "Draft Supplier Shipment"
-msgstr "Expédition fournisseur brouillon"
-
msgctxt "model:ir.ui.menu,name:menu_shipment_in_form"
msgid "Supplier Shipments"
msgstr "Expéditions fournisseur"
-msgctxt "model:ir.ui.menu,name:menu_shipment_in_received"
-msgid "Received Supplier shipments"
-msgstr "Expéditions fournisseur reçues"
-
msgctxt "model:ir.ui.menu,name:menu_shipment_in_return_form"
msgid "Supplier Return Shipments"
msgstr "Retours d'expédition fournisseur"
-msgctxt "model:ir.ui.menu,name:menu_shipment_internal_assigned_form"
-msgid "Assigned Internal Shipments"
-msgstr "Expéditions internes assignées"
-
-msgctxt "model:ir.ui.menu,name:menu_shipment_internal_draft_form"
-msgid "Draft Internal Shipments"
-msgstr "Expéditions internes brouillons"
-
msgctxt "model:ir.ui.menu,name:menu_shipment_internal_form"
msgid "Internal Shipments"
msgstr "Expéditions internes"
-msgctxt "model:ir.ui.menu,name:menu_shipment_internal_waiting_form"
-msgid "Internal Shipments Waiting Assignation"
-msgstr "Expéditions internes en attente d'assignation"
-
-msgctxt "model:ir.ui.menu,name:menu_shipment_out_assigned"
-msgid "Assigned Customer Shipments"
-msgstr "Expéditions client assignées"
-
msgctxt "model:ir.ui.menu,name:menu_shipment_out_form"
msgid "Customer Shipments"
msgstr "Expéditions client"
-msgctxt "model:ir.ui.menu,name:menu_shipment_out_ready"
-msgid "Customer Shipments Ready for Shipping"
-msgstr "Expéditions client prêtes pour la livraison"
-
msgctxt "model:ir.ui.menu,name:menu_shipment_out_return_form"
msgid "Customer Return Shipments"
msgstr "Retours d'expédition client"
-msgctxt "model:ir.ui.menu,name:menu_shipment_out_waiting"
-msgid "Customer Shipments Waiting Assignation"
-msgstr "Expéditions client en attente d'assignation"
-
msgctxt "model:ir.ui.menu,name:menu_stock"
msgid "Inventory & Stock"
msgstr "Stocks & inventaires"
@@ -2467,10 +2402,6 @@ msgctxt "view:party.party:"
msgid "Stock"
msgstr "Stock"
-msgctxt "view:party.party:"
-msgid "_Stock"
-msgstr "_Stocks"
-
msgctxt "view:product.by_location.start:"
msgid "Product by Location"
msgstr "Produits par emplacement"
@@ -2516,10 +2447,6 @@ msgid "Add an inventory line for each missing products"
msgstr "Ajouter une ligne d'inventaire pour chaque produit manquant"
msgctxt "view:stock.inventory:"
-msgid "All generated moves will be cancelled!"
-msgstr "Tous les mouvements générés vont être annulés"
-
-msgctxt "view:stock.inventory:"
msgid "Cancel"
msgstr "Annuler"
@@ -2559,10 +2486,6 @@ msgctxt "view:stock.inventory:"
msgid "Inventory"
msgstr "Inventaire"
-msgctxt "view:stock.inventory:"
-msgid "Re-Open"
-msgstr "Ré-Ouvrir"
-
msgctxt "view:stock.location:"
msgid "Location"
msgstr "Emplacement"
@@ -2583,10 +2506,6 @@ msgctxt "view:stock.location:"
msgid "Locations"
msgstr "Emplacements"
-msgctxt "view:stock.location:"
-msgid "Product Stock"
-msgstr "Quantités en stock"
-
msgctxt "view:stock.move:"
msgid "Move"
msgstr "Mouvement"
@@ -2704,10 +2623,6 @@ msgid "Draft"
msgstr "Brouillon"
msgctxt "view:stock.shipment.in.return:"
-msgid "Reset to Draft"
-msgstr "Remettre en brouillon"
-
-msgctxt "view:stock.shipment.in.return:"
msgid "Supplier Return Shipment"
msgstr "Retour d'expédition fournisseur"
@@ -2727,10 +2642,6 @@ msgctxt "view:stock.shipment.in.return:"
msgid "Wait"
msgstr "Attente"
-msgctxt "view:stock.shipment.in.return:"
-msgid "Waiting"
-msgstr "En attente"
-
msgctxt "view:stock.shipment.in:"
msgid "Cancel"
msgstr "Annuler"
@@ -2748,10 +2659,6 @@ msgid "Done"
msgstr "Fait"
msgctxt "view:stock.shipment.in:"
-msgid "Draft"
-msgstr "Brouillon"
-
-msgctxt "view:stock.shipment.in:"
msgid "Incoming Moves"
msgstr "Mouvements en entrée"
@@ -2768,18 +2675,10 @@ msgid "Inventory Moves"
msgstr "Mouvements internes"
msgctxt "view:stock.shipment.in:"
-msgid "Moves"
-msgstr "Mouvements"
-
-msgctxt "view:stock.shipment.in:"
msgid "Receive"
msgstr "Réception"
msgctxt "view:stock.shipment.in:"
-msgid "Received"
-msgstr "Réception"
-
-msgctxt "view:stock.shipment.in:"
msgid "Reset to Draft"
msgstr "Remettre en brouillon"
@@ -2844,10 +2743,6 @@ msgid "Draft"
msgstr "Brouillon"
msgctxt "view:stock.shipment.internal:"
-msgid "Force Assign"
-msgstr "Forcer l'assignation"
-
-msgctxt "view:stock.shipment.internal:"
msgid "Internal Shipment"
msgstr "Expédition interne"
@@ -2864,10 +2759,6 @@ msgid "Internal Shipments"
msgstr "Expéditions internes"
msgctxt "view:stock.shipment.internal:"
-msgid "Reset to Draft"
-msgstr "Remettre en brouillon"
-
-msgctxt "view:stock.shipment.internal:"
msgid "Waiting"
msgstr "En attente"
@@ -2936,10 +2827,6 @@ msgid "Inventory Moves"
msgstr "Mouvements internes"
msgctxt "view:stock.shipment.out.return:"
-msgid "Moves"
-msgstr "Mouvements"
-
-msgctxt "view:stock.shipment.out.return:"
msgid "Received"
msgstr "Reçu"
@@ -2947,14 +2834,6 @@ msgctxt "view:stock.shipment.out.return:"
msgid "Received"
msgstr "Reçu"
-msgctxt "view:stock.shipment.out.return:"
-msgid "Reset to Draft"
-msgstr "Remettre en brouillon"
-
-msgctxt "view:stock.shipment.out:"
-msgid "Are you sure to force assignation?"
-msgstr "Ãtes-vous sûr de forcer l'assignation ?"
-
msgctxt "view:stock.shipment.out:"
msgid "Assign"
msgstr "Assigner"
@@ -3004,10 +2883,6 @@ msgid "Draft"
msgstr "Brouillon"
msgctxt "view:stock.shipment.out:"
-msgid "Force Assign"
-msgstr "Forcer l'assignation"
-
-msgctxt "view:stock.shipment.out:"
msgid "Inventory Moves"
msgstr "Mouvements internes"
@@ -3032,14 +2907,6 @@ msgid "Outgoing Moves"
msgstr "Mouvements en sortie"
msgctxt "view:stock.shipment.out:"
-msgid "Reset to Draft"
-msgstr "Remettre en brouillon"
-
-msgctxt "view:stock.shipment.out:"
-msgid "Unpack"
-msgstr "Déballer"
-
-msgctxt "view:stock.shipment.out:"
msgid "Waiting"
msgstr "En attente"
diff --git a/locale/nl_NL.po b/locale/nl_NL.po
index 39c443f..79691de 100644
--- a/locale/nl_NL.po
+++ b/locale/nl_NL.po
@@ -9,29 +9,25 @@ msgid ""
msgstr ""
msgctxt "error:stock.inventory.line:"
-msgid "Line quantity must be positive!"
+msgid "Line quantity must be positive."
msgstr ""
msgctxt "error:stock.inventory.line:"
-msgid "Product must be unique by inventory!"
+msgid "Product must be unique by inventory."
msgstr ""
msgctxt "error:stock.inventory:"
-msgid "Inventory \"%s\" must be cancelled before deletion!"
+msgid "Inventory \"%s\" must be cancelled before deletion."
msgstr ""
msgctxt "error:stock.location:"
-msgid ""
-"A location with existing moves cannot be changed to a type that does not "
-"support moves."
-msgstr ""
-
-msgctxt "error:stock.location:"
-msgid "Location \"%s\" must be a child of warehouse \"%s\"!"
+msgid "Location \"%(location)s\" must be a child of warehouse \"%(warehouse)s\"."
msgstr ""
msgctxt "error:stock.location:"
-msgid "You can not create recursive locations!"
+msgid ""
+"Location \"%s\" with existing moves cannot be changed to a type that does "
+"not support moves."
msgstr ""
msgctxt "error:stock.move:"
@@ -39,10 +35,6 @@ msgid "Internal move quantity must be positive"
msgstr ""
msgctxt "error:stock.move:"
-msgid "Move can be on only one Shipment"
-msgstr ""
-
-msgctxt "error:stock.move:"
msgid "Move quantity must be positive"
msgstr ""
@@ -51,62 +43,66 @@ msgid "Source and destination location must be different"
msgstr ""
msgctxt "error:stock.move:"
-msgid "You can not modify a move in the state: \"Assigned\", \"Done\" or \"Cancel\""
+msgid ""
+"You can not delete stock move \"%s\" because it is not in draft or cancelled"
+" state."
msgstr ""
msgctxt "error:stock.move:"
-msgid "You can not modify move in closed period!"
+msgid "You can not modify move \"%(move)s\" because period \"%(period)s\" is closed."
msgstr ""
msgctxt "error:stock.move:"
-msgid "You can not set state to assigned!"
+msgid ""
+"You can not modify stock move \"%s\"because it is in \"Assigned\", \"Done\" "
+"or \"Cancel\" state."
msgstr ""
msgctxt "error:stock.move:"
-msgid "You can not set state to done!"
+msgid "You can not set stock move \"%s\" to assigned state."
msgstr ""
msgctxt "error:stock.move:"
-msgid "You can not set state to draft!"
+msgid "You can not set stock move \"%s\" to done state."
msgstr ""
msgctxt "error:stock.move:"
-msgid "You can only delete draft or cancelled moves!"
+msgid "You can not set stock move \"%s\" to draft state."
msgstr ""
msgctxt "error:stock.period:"
-msgid "You can not close a period in the future or today!"
+msgid "You can not close a period in the future or today."
msgstr ""
msgctxt "error:stock.period:"
-msgid "You can not close a period when there is still assigned moves!"
+msgid "You can not close a period when there still are assigned moves."
msgstr ""
msgctxt "error:stock.shipment.in.return:"
-msgid "Supplier Return Shipment \"%s\" must be cancelled before deletion!"
+msgid "Supplier Return Shipment \"%s\" must be cancelled before deletion."
msgstr ""
msgctxt "error:stock.shipment.in:"
msgid ""
"Incoming Moves must have the warehouse input location as destination "
-"location!"
+"location."
msgstr ""
msgctxt "error:stock.shipment.in:"
msgid ""
-"Inventory Moves must have the warehouse input location as source location!"
+"Inventory Moves must have the warehouse input location as source location."
msgstr ""
msgctxt "error:stock.shipment.in:"
-msgid "Supplier Shipment \"%s\" must be cancelled before deletion!"
+msgid "Supplier Shipment \"%s\" must be cancelled before deletion."
msgstr ""
msgctxt "error:stock.shipment.internal:"
-msgid "Internal Shipment \"%s\" must be cancelled before deletion!"
+msgid "Internal Shipment \"%s\" must be cancelled before deletion."
msgstr ""
msgctxt "error:stock.shipment.out.return.create:"
-msgid "The shipment with code %s is not yet sent."
+msgid "The shipment with code \"%s\" is not yet sent."
msgstr ""
msgctxt "error:stock.shipment.out.return.create:"
@@ -114,11 +110,11 @@ msgid "You can not create return shipment"
msgstr ""
msgctxt "error:stock.shipment.out.return:"
-msgid "Customer Return Shipment \"%s\" must be cancelled before deletion!"
+msgid "Customer Return Shipment \"%s\" must be cancelled before deletion."
msgstr ""
msgctxt "error:stock.shipment.out:"
-msgid "Customer Shipment \"%s\" must be cancelled before deletion!"
+msgid "Customer Shipment \"%s\" must be cancelled before deletion."
msgstr ""
msgctxt "field:party.address,delivery:"
@@ -456,6 +452,10 @@ msgctxt "field:stock.move,internal_quantity:"
msgid "Internal Quantity"
msgstr ""
+msgctxt "field:stock.move,origin:"
+msgid "Origin"
+msgstr ""
+
msgctxt "field:stock.move,planned_date:"
msgid "Planned Date"
msgstr ""
@@ -479,24 +479,8 @@ msgctxt "field:stock.move,rec_name:"
msgid "Name"
msgstr "Naam bijlage"
-msgctxt "field:stock.move,shipment_in:"
-msgid "Supplier Shipment"
-msgstr ""
-
-msgctxt "field:stock.move,shipment_in_return:"
-msgid "Supplier Return Shipment"
-msgstr ""
-
-msgctxt "field:stock.move,shipment_internal:"
-msgid "Internal Shipment"
-msgstr ""
-
-msgctxt "field:stock.move,shipment_out:"
-msgid "Customer Shipment"
-msgstr ""
-
-msgctxt "field:stock.move,shipment_out_return:"
-msgid "Customer Return Shipment"
+msgctxt "field:stock.move,shipment:"
+msgid "Shipment"
msgstr ""
#, fuzzy
@@ -1138,10 +1122,6 @@ msgctxt "model:ir.action,name:act_inventory_form"
msgid "Inventories"
msgstr ""
-msgctxt "model:ir.action,name:act_inventory_form_draft"
-msgid "Draft Inventories"
-msgstr ""
-
msgctxt "model:ir.action,name:act_location_form"
msgid "Locations"
msgstr ""
@@ -1159,18 +1139,6 @@ msgctxt "model:ir.action,name:act_move_form"
msgid "Moves"
msgstr "Boekingen"
-msgctxt "model:ir.action,name:act_move_form_cust"
-msgid "Moves to Customers"
-msgstr ""
-
-msgctxt "model:ir.action,name:act_move_form_supp"
-msgid "Moves from Suppliers"
-msgstr ""
-
-msgctxt "model:ir.action,name:act_move_form_supp_proceed"
-msgid "Moves from Suppliers Waiting Arrival"
-msgstr ""
-
#, fuzzy
msgctxt "model:ir.action,name:act_period_list"
msgid "Periods"
@@ -1185,38 +1153,18 @@ msgctxt "model:ir.action,name:act_products_by_locations"
msgid "Products"
msgstr "Producten"
-msgctxt "model:ir.action,name:act_shipment_in_draft"
-msgid "Draft Supplier Shipment"
-msgstr ""
-
msgctxt "model:ir.action,name:act_shipment_in_form"
msgid "Supplier Shipments"
msgstr ""
-msgctxt "model:ir.action,name:act_shipment_in_form_received"
-msgid "Received Supplier shipments"
-msgstr ""
-
msgctxt "model:ir.action,name:act_shipment_in_return_form"
msgid "Supplier Return Shipments"
msgstr ""
-msgctxt "model:ir.action,name:act_shipment_internal_assigned_form"
-msgid "Assigned Internal Shipments"
-msgstr ""
-
-msgctxt "model:ir.action,name:act_shipment_internal_draft_form"
-msgid "Draft Internal Shipments"
-msgstr ""
-
msgctxt "model:ir.action,name:act_shipment_internal_form"
msgid "Internal Shipments"
msgstr ""
-msgctxt "model:ir.action,name:act_shipment_internal_waiting_form"
-msgid "Internal Shipments Waiting Assignation"
-msgstr ""
-
msgctxt "model:ir.action,name:act_shipment_out_form"
msgid "Customer Shipments"
msgstr ""
@@ -1229,18 +1177,6 @@ msgctxt "model:ir.action,name:act_shipment_out_form3"
msgid "Supplier Shipments"
msgstr ""
-msgctxt "model:ir.action,name:act_shipment_out_form_assigned"
-msgid "Assigned Customer Shipments"
-msgstr ""
-
-msgctxt "model:ir.action,name:act_shipment_out_form_ready"
-msgid "Customer Shipments Ready for Shipping"
-msgstr ""
-
-msgctxt "model:ir.action,name:act_shipment_out_form_waiting"
-msgid "Customer Shipments Waiting Assignation"
-msgstr ""
-
msgctxt "model:ir.action,name:act_shipment_out_return_form"
msgid "Customer Return Shipments"
msgstr ""
@@ -1297,6 +1233,138 @@ msgctxt "model:ir.action,name:wizard_shipment_out_assign"
msgid "Assign Shipment Out"
msgstr ""
+msgctxt "model:ir.action.act_window.domain,name:act_inventory_form_domain_all"
+msgid "All"
+msgstr ""
+
+#, fuzzy
+msgctxt ""
+"model:ir.action.act_window.domain,name:act_inventory_form_domain_draft"
+msgid "Draft"
+msgstr "Concept"
+
+msgctxt "model:ir.action.act_window.domain,name:act_move_form_domain_all"
+msgid "All"
+msgstr ""
+
+msgctxt ""
+"model:ir.action.act_window.domain,name:act_move_form_domain_from_supplier"
+msgid "From Suppliers"
+msgstr ""
+
+msgctxt ""
+"model:ir.action.act_window.domain,name:act_move_form_domain_from_supplier_waiting"
+msgid "From Suppliers Waiting"
+msgstr ""
+
+msgctxt ""
+"model:ir.action.act_window.domain,name:act_move_form_domain_to_customer"
+msgid "To Customers"
+msgstr ""
+
+msgctxt ""
+"model:ir.action.act_window.domain,name:act_shipment_in_form_domain_all"
+msgid "All"
+msgstr ""
+
+#, fuzzy
+msgctxt ""
+"model:ir.action.act_window.domain,name:act_shipment_in_form_domain_draft"
+msgid "Draft"
+msgstr "Concept"
+
+msgctxt ""
+"model:ir.action.act_window.domain,name:act_shipment_in_form_domain_received"
+msgid "Received"
+msgstr ""
+
+msgctxt ""
+"model:ir.action.act_window.domain,name:act_shipment_in_return_form_domain_all"
+msgid "All"
+msgstr ""
+
+msgctxt ""
+"model:ir.action.act_window.domain,name:act_shipment_in_return_form_domain_assigned"
+msgid "Assigned"
+msgstr ""
+
+#, fuzzy
+msgctxt ""
+"model:ir.action.act_window.domain,name:act_shipment_in_return_form_domain_draft"
+msgid "Draft"
+msgstr "Concept"
+
+#, fuzzy
+msgctxt ""
+"model:ir.action.act_window.domain,name:act_shipment_in_return_form_domain_waiting"
+msgid "Waiting"
+msgstr "In afwachting"
+
+msgctxt ""
+"model:ir.action.act_window.domain,name:act_shipment_internal_form_domain_all"
+msgid "All"
+msgstr ""
+
+msgctxt ""
+"model:ir.action.act_window.domain,name:act_shipment_internal_form_domain_assigned"
+msgid "Assigned"
+msgstr ""
+
+#, fuzzy
+msgctxt ""
+"model:ir.action.act_window.domain,name:act_shipment_internal_form_domain_draft"
+msgid "Draft"
+msgstr "Concept"
+
+#, fuzzy
+msgctxt ""
+"model:ir.action.act_window.domain,name:act_shipment_internal_form_domain_waiting"
+msgid "Waiting"
+msgstr "In afwachting"
+
+msgctxt ""
+"model:ir.action.act_window.domain,name:act_shipment_out_form_domain_all"
+msgid "All"
+msgstr ""
+
+msgctxt ""
+"model:ir.action.act_window.domain,name:act_shipment_out_form_domain_assigned"
+msgid "Assigned"
+msgstr ""
+
+#, fuzzy
+msgctxt ""
+"model:ir.action.act_window.domain,name:act_shipment_out_form_domain_draft"
+msgid "Draft"
+msgstr "Concept"
+
+msgctxt ""
+"model:ir.action.act_window.domain,name:act_shipment_out_form_domain_packed"
+msgid "Packed"
+msgstr ""
+
+#, fuzzy
+msgctxt ""
+"model:ir.action.act_window.domain,name:act_shipment_out_form_domain_waiting"
+msgid "Waiting"
+msgstr "In afwachting"
+
+msgctxt ""
+"model:ir.action.act_window.domain,name:act_shipment_out_return_form_domain_all"
+msgid "All"
+msgstr ""
+
+#, fuzzy
+msgctxt ""
+"model:ir.action.act_window.domain,name:act_shipment_out_return_form_domain_draft"
+msgid "Draft"
+msgstr "Concept"
+
+msgctxt ""
+"model:ir.action.act_window.domain,name:act_shipment_out_return_form_domain_received"
+msgid "Received"
+msgstr ""
+
msgctxt "model:ir.sequence,name:sequence_shipment_in"
msgid "Supplier Shipment"
msgstr ""
@@ -1346,10 +1414,6 @@ msgctxt "model:ir.ui.menu,name:menu_inventory_form"
msgid "Inventories"
msgstr ""
-msgctxt "model:ir.ui.menu,name:menu_inventory_form_draft"
-msgid "Draft Inventories"
-msgstr ""
-
msgctxt "model:ir.ui.menu,name:menu_location_form"
msgid "Locations"
msgstr ""
@@ -1363,18 +1427,6 @@ msgctxt "model:ir.ui.menu,name:menu_move_form"
msgid "Moves"
msgstr "Boekingen"
-msgctxt "model:ir.ui.menu,name:menu_move_form_cust"
-msgid "Moves to Customers"
-msgstr ""
-
-msgctxt "model:ir.ui.menu,name:menu_move_form_supp"
-msgid "Moves from Suppliers"
-msgstr ""
-
-msgctxt "model:ir.ui.menu,name:menu_move_form_supp_proceed"
-msgid "Moves from Suppliers Waiting Arrival"
-msgstr ""
-
#, fuzzy
msgctxt "model:ir.ui.menu,name:menu_period_list"
msgid "Periods"
@@ -1385,58 +1437,26 @@ msgctxt "model:ir.ui.menu,name:menu_reporting"
msgid "Reporting"
msgstr "Rapportage"
-msgctxt "model:ir.ui.menu,name:menu_shipment_in_draft"
-msgid "Draft Supplier Shipment"
-msgstr ""
-
msgctxt "model:ir.ui.menu,name:menu_shipment_in_form"
msgid "Supplier Shipments"
msgstr ""
-msgctxt "model:ir.ui.menu,name:menu_shipment_in_received"
-msgid "Received Supplier shipments"
-msgstr ""
-
msgctxt "model:ir.ui.menu,name:menu_shipment_in_return_form"
msgid "Supplier Return Shipments"
msgstr ""
-msgctxt "model:ir.ui.menu,name:menu_shipment_internal_assigned_form"
-msgid "Assigned Internal Shipments"
-msgstr ""
-
-msgctxt "model:ir.ui.menu,name:menu_shipment_internal_draft_form"
-msgid "Draft Internal Shipments"
-msgstr ""
-
msgctxt "model:ir.ui.menu,name:menu_shipment_internal_form"
msgid "Internal Shipments"
msgstr ""
-msgctxt "model:ir.ui.menu,name:menu_shipment_internal_waiting_form"
-msgid "Internal Shipments Waiting Assignation"
-msgstr ""
-
-msgctxt "model:ir.ui.menu,name:menu_shipment_out_assigned"
-msgid "Assigned Customer Shipments"
-msgstr ""
-
msgctxt "model:ir.ui.menu,name:menu_shipment_out_form"
msgid "Customer Shipments"
msgstr ""
-msgctxt "model:ir.ui.menu,name:menu_shipment_out_ready"
-msgid "Customer Shipments Ready for Shipping"
-msgstr ""
-
msgctxt "model:ir.ui.menu,name:menu_shipment_out_return_form"
msgid "Customer Return Shipments"
msgstr ""
-msgctxt "model:ir.ui.menu,name:menu_shipment_out_waiting"
-msgid "Customer Shipments Waiting Assignation"
-msgstr ""
-
msgctxt "model:ir.ui.menu,name:menu_stock"
msgid "Inventory & Stock"
msgstr ""
@@ -2117,10 +2137,6 @@ msgctxt "view:stock.location:"
msgid "Locations"
msgstr ""
-msgctxt "view:stock.location:"
-msgid "Product Stock"
-msgstr ""
-
#, fuzzy
msgctxt "view:stock.move:"
msgid "Move"
@@ -2198,11 +2214,6 @@ msgctxt "view:stock.shipment.in.return:"
msgid "Draft"
msgstr "Concept"
-#, fuzzy
-msgctxt "view:stock.shipment.in.return:"
-msgid "Reset to Draft"
-msgstr "Terug naar concept"
-
msgctxt "view:stock.shipment.in.return:"
msgid "Supplier Return Shipment"
msgstr ""
@@ -2216,11 +2227,6 @@ msgid "Wait"
msgstr ""
#, fuzzy
-msgctxt "view:stock.shipment.in.return:"
-msgid "Waiting"
-msgstr "In afwachting"
-
-#, fuzzy
msgctxt "view:stock.shipment.in:"
msgid "Cancel"
msgstr "Annuleren"
@@ -2238,19 +2244,10 @@ msgctxt "view:stock.shipment.in:"
msgid "Inventory Moves"
msgstr ""
-#, fuzzy
-msgctxt "view:stock.shipment.in:"
-msgid "Moves"
-msgstr "Boekingen"
-
msgctxt "view:stock.shipment.in:"
msgid "Receive"
msgstr ""
-msgctxt "view:stock.shipment.in:"
-msgid "Received"
-msgstr ""
-
#, fuzzy
msgctxt "view:stock.shipment.in:"
msgid "Reset to Draft"
@@ -2301,11 +2298,6 @@ msgstr ""
#, fuzzy
msgctxt "view:stock.shipment.internal:"
-msgid "Reset to Draft"
-msgstr "Terug naar concept"
-
-#, fuzzy
-msgctxt "view:stock.shipment.internal:"
msgid "Waiting"
msgstr "In afwachting"
@@ -2348,20 +2340,10 @@ msgctxt "view:stock.shipment.out.return:"
msgid "Inventory Moves"
msgstr ""
-#, fuzzy
-msgctxt "view:stock.shipment.out.return:"
-msgid "Moves"
-msgstr "Boekingen"
-
msgctxt "view:stock.shipment.out.return:"
msgid "Received"
msgstr ""
-#, fuzzy
-msgctxt "view:stock.shipment.out.return:"
-msgid "Reset to Draft"
-msgstr "Terug naar concept"
-
msgctxt "view:stock.shipment.out:"
msgid "Assign"
msgstr ""
@@ -2403,11 +2385,6 @@ msgstr ""
#, fuzzy
msgctxt "view:stock.shipment.out:"
-msgid "Reset to Draft"
-msgstr "Terug naar concept"
-
-#, fuzzy
-msgctxt "view:stock.shipment.out:"
msgid "Waiting"
msgstr "In afwachting"
diff --git a/locale/ru_RU.po b/locale/ru_RU.po
index cefc00f..ba0c4b5 100644
--- a/locale/ru_RU.po
+++ b/locale/ru_RU.po
@@ -11,38 +11,34 @@ msgstr ""
"ÑвÑзан Ñо Ñкладом пеÑемеÑениÑ."
msgctxt "error:stock.inventory.line:"
-msgid "Line quantity must be positive!"
-msgstr "Ðол-во должно бÑÑÑ Ð¿Ð¾Ð»Ð¾Ð¶Ð¸ÑелÑнÑм"
+msgid "Line quantity must be positive."
+msgstr "ÐолиÑеÑÑво в ÑÑÑоке должно бÑÑÑ Ð¿Ð¾Ð»Ð¾Ð¶Ð¸ÑелÑнÑм."
msgctxt "error:stock.inventory.line:"
-msgid "Product must be unique by inventory!"
-msgstr "ТÐЦ должен бÑÑÑ ÑникалÑнÑм по инвенÑаÑизаÑии!"
+msgid "Product must be unique by inventory."
+msgstr "ÐÑодÑкÑÑ Ð´Ð¾Ð»Ð¶Ð½Ñ Ð±ÑÑÑ ÑникалÑÐ½Ñ Ð² инвенÑаÑизаÑии."
msgctxt "error:stock.inventory:"
-msgid "Inventory \"%s\" must be cancelled before deletion!"
-msgstr ""
+msgid "Inventory \"%s\" must be cancelled before deletion."
+msgstr "ÐнвенÑаÑизаÑÐ¸Ñ \"%s\" должна бÑÑÑ Ð¾Ñменена пеÑед Ñдалением."
msgctxt "error:stock.location:"
-msgid ""
-"A location with existing moves cannot be changed to a type that does not "
-"support moves."
+msgid "Location \"%(location)s\" must be a child of warehouse \"%(warehouse)s\"."
msgstr ""
+"ÐеÑÑоположение \"%(location)s\" должно бÑÑÑ Ð² ÑоÑÑаве ÑоваÑного Ñклада "
+"\"%(warehouse)s\"."
msgctxt "error:stock.location:"
-msgid "Location \"%s\" must be a child of warehouse \"%s\"!"
-msgstr "ÐеÑÑо \"%s\" должно бÑÑÑ Ð½Ð° Ñкладе \"%s\"!"
-
-msgctxt "error:stock.location:"
-msgid "You can not create recursive locations!"
-msgstr "ÐÑ Ð½Ðµ можеÑе ÑоздаваÑÑ ÑекÑÑÑивнÑе меÑÑа!"
-
-msgctxt "error:stock.move:"
-msgid "Internal move quantity must be positive"
+msgid ""
+"Location \"%s\" with existing moves cannot be changed to a type that does "
+"not support moves."
msgstr ""
+"ÐеÑÑоположение \"%s\" Ñ ÑÑÑеÑÑвÑÑÑими пеÑемеÑениÑми не Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¾ "
+"на Ñип коÑоÑÑй не поддеÑÐ¶Ð¸Ð²Ð°ÐµÑ Ð¿ÐµÑемеÑениÑ."
msgctxt "error:stock.move:"
-msgid "Move can be on only one Shipment"
-msgstr "ÐеÑемеÑение Ð¼Ð¾Ð¶ÐµÑ Ð¸Ð¼ÐµÑÑ ÑолÑко Ð¾Ð´Ð½Ñ Ð¾ÑгÑÑзкÑ"
+msgid "Internal move quantity must be positive"
+msgstr "ÐнÑÑÑеннее пеÑемеÑение должно бÑÑÑ Ð¿Ð¾Ð»Ð¾Ð¶Ð¸ÑелÑнÑм ÑиÑлом"
msgctxt "error:stock.move:"
msgid "Move quantity must be positive"
@@ -50,78 +46,92 @@ msgstr "Ðол-во должно бÑÑÑ Ð¿Ð¾Ð»Ð¾Ð¶Ð¸ÑелÑнÑм"
msgctxt "error:stock.move:"
msgid "Source and destination location must be different"
-msgstr "ÐÑÑоÑник и меÑÑо назнаÑÐµÐ½Ð¸Ñ Ð´Ð¾Ð»Ð¶Ð½Ñ Ð±ÑÑÑ ÑазнÑми"
+msgstr "ÐÑÑ
одное и пÑинимаÑÑее меÑÑÐ¾Ð¿Ð¾Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ Ð´Ð¾Ð»Ð¶Ð½Ñ Ð±ÑÑÑ ÑазнÑми"
msgctxt "error:stock.move:"
-msgid "You can not modify a move in the state: \"Assigned\", \"Done\" or \"Cancel\""
+msgid ""
+"You can not delete stock move \"%s\" because it is not in draft or cancelled"
+" state."
msgstr ""
+"ÐÑ Ð½Ðµ можеÑе ÑдалиÑÑ Ð¿ÐµÑемеÑение \"%s\" Ñак как оно не в ÑоÑÑоÑнии "
+"\"ЧеÑновик\" или \"ÐÑменено\"."
msgctxt "error:stock.move:"
-msgid "You can not modify move in closed period!"
+msgid "You can not modify move \"%(move)s\" because period \"%(period)s\" is closed."
msgstr ""
+"ÐÑ Ð½Ðµ можеÑе измениÑÑ Ð¿ÐµÑемеÑение \"%(move)s\" Ñак как пеÑиод \"%(period)s\""
+" Ñже закÑÑÑ."
msgctxt "error:stock.move:"
-msgid "You can not set state to assigned!"
-msgstr "ÐÑ Ð½Ðµ можеÑе ÑÑÑановиÑÑ ÑоÑÑоÑние 'пеÑедан'!"
+msgid ""
+"You can not modify stock move \"%s\"because it is in \"Assigned\", \"Done\" "
+"or \"Cancel\" state."
+msgstr ""
+"ÐÑ Ð½Ðµ можеÑе измениÑÑ Ð¿ÑÐ¾Ð²Ð¾Ð´ÐºÑ \"%s\" Ñак как она наÑ
одиÑÑÑ Ð² ÑоÑÑоÑнии "
+"\"ÐеÑедана\", \"ÐÑполнена\" или \"ÐÑменена\"."
msgctxt "error:stock.move:"
-msgid "You can not set state to done!"
-msgstr "ÐÑ Ð½Ðµ можеÑе ÑÑÑановиÑÑ ÑоÑÑоÑние 'гоÑово'!"
+msgid "You can not set stock move \"%s\" to assigned state."
+msgstr "ÐÑ Ð½Ðµ можеÑе пеÑевеÑÑи в ÑоÑÑоÑние \"ÐеÑеданнÑй\" пеÑемеÑение \"%s\"."
msgctxt "error:stock.move:"
-msgid "You can not set state to draft!"
-msgstr "ÐÑ Ð½Ðµ можеÑе ÑÑÑановиÑÑ ÑоÑÑоÑние 'ÑеÑновик'!"
+msgid "You can not set stock move \"%s\" to done state."
+msgstr "ÐÑ Ð½Ðµ можеÑе пеÑевеÑÑи пеÑемеÑение \"%s\" в ÑоÑÑоÑние \"вÑполнено\"."
msgctxt "error:stock.move:"
-msgid "You can only delete draft or cancelled moves!"
-msgstr "ÐÑ Ð¼Ð¾Ð¶ÐµÑе ÑдалÑÑÑ ÑолÑко оÑмененнÑе пеÑемеÑÐµÐ½Ð¸Ñ Ð¸ ÑеÑновики"
+msgid "You can not set stock move \"%s\" to draft state."
+msgstr "ÐÑ Ð½Ðµ можеÑе пеÑевеÑÑи пеÑемеÑение \"%s\" в ÑоÑÑоÑние \"ЧеÑновик\"."
msgctxt "error:stock.period:"
-msgid "You can not close a period in the future or today!"
-msgstr ""
+msgid "You can not close a period in the future or today."
+msgstr "ÐÑ Ð½Ðµ можеÑе закÑÑÑÑ Ð¿ÐµÑиод бÑдÑÑей или ÑегоднÑÑней даÑой."
msgctxt "error:stock.period:"
-msgid "You can not close a period when there is still assigned moves!"
-msgstr ""
+msgid "You can not close a period when there still are assigned moves."
+msgstr "ÐÑ Ð½Ðµ можеÑе закÑÑÑÑ Ð¿ÐµÑиод в коÑоÑом оÑÑалиÑÑ Ð½Ð°Ð·Ð½Ð°ÑеннÑе пÑоводки."
msgctxt "error:stock.shipment.in.return:"
-msgid "Supplier Return Shipment \"%s\" must be cancelled before deletion!"
-msgstr ""
+msgid "Supplier Return Shipment \"%s\" must be cancelled before deletion."
+msgstr "ÐозвÑÐ°Ñ Ð¿Ð¾ÑÑавÑÐ¸ÐºÑ \"%s\" должен бÑÑÑ Ð¾Ñменен пеÑед Ñдалением."
msgctxt "error:stock.shipment.in:"
msgid ""
"Incoming Moves must have the warehouse input location as destination "
-"location!"
-msgstr "РпоÑÑÑплениÑÑ
должен бÑÑÑ Ñказан меÑÑом назнаÑÐµÐ½Ð¸Ñ ÑоваÑнÑй Ñклад"
+"location."
+msgstr ""
+"ÐÑ
одÑÑие поÑÑÑÐ¿Ð»ÐµÐ½Ð¸Ñ Ð´Ð¾Ð»Ð¶Ð½Ñ Ð¸Ð¼ÐµÑÑ Ð²Ñ
одÑÑее меÑÑоположение на Ñкладе в "
+"каÑеÑÑве меÑÑÐ¾Ð¿Ð¾Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ Ð½Ð°Ð·Ð½Ð°ÑениÑ."
msgctxt "error:stock.shipment.in:"
msgid ""
-"Inventory Moves must have the warehouse input location as source location!"
+"Inventory Moves must have the warehouse input location as source location."
msgstr ""
+"У пеÑемеÑений инвенÑаÑизаÑии иÑÑоÑник меÑÑÐ¾Ð¿Ð¾Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ Ð´Ð¾Ð»Ð¶ÐµÐ½ бÑÑÑ Ð²Ñ
одÑÑим "
+"меÑÑоположением ÑоваÑного Ñклада."
msgctxt "error:stock.shipment.in:"
-msgid "Supplier Shipment \"%s\" must be cancelled before deletion!"
-msgstr ""
+msgid "Supplier Shipment \"%s\" must be cancelled before deletion."
+msgstr "ÐÑиÑ
од Ð¾Ñ Ð¿Ð¾ÑÑавÑика \"%s\" должен бÑÑÑ Ð¾Ñменен пеÑед Ñдалением."
msgctxt "error:stock.shipment.internal:"
-msgid "Internal Shipment \"%s\" must be cancelled before deletion!"
-msgstr ""
+msgid "Internal Shipment \"%s\" must be cancelled before deletion."
+msgstr "ÐнÑÑÑенее пеÑемеÑение \"%s\" должно бÑÑÑ Ð¾Ñменено пеÑед Ñдалением."
msgctxt "error:stock.shipment.out.return.create:"
-msgid "The shipment with code %s is not yet sent."
-msgstr "ÐÑгÑÑзка Ñ ÐºÐ¾Ð´Ð¾Ð¼ %s еÑе не оÑпÑавлена."
+msgid "The shipment with code \"%s\" is not yet sent."
+msgstr "ÐоÑÑавка Ñ ÐºÐ¾Ð´Ð¾Ð¼ \"%s\" еÑÑ Ð½Ðµ оÑпÑавлена."
msgctxt "error:stock.shipment.out.return.create:"
msgid "You can not create return shipment"
msgstr "ÐÑ Ð½Ðµ можеÑе ÑоздаÑÑ Ð²Ð¾Ð·Ð²ÑаÑ"
msgctxt "error:stock.shipment.out.return:"
-msgid "Customer Return Shipment \"%s\" must be cancelled before deletion!"
-msgstr ""
+msgid "Customer Return Shipment \"%s\" must be cancelled before deletion."
+msgstr "ÐозвÑÐ°Ñ Ð¾Ñ Ð·Ð°ÐºÐ°Ð·Ñика \"%s\" должен бÑÑÑ Ð¾Ñменен пеÑед Ñдалением."
msgctxt "error:stock.shipment.out:"
-msgid "Customer Shipment \"%s\" must be cancelled before deletion!"
-msgstr ""
+msgid "Customer Shipment \"%s\" must be cancelled before deletion."
+msgstr "ÐÑгÑÑзка заказÑÐ¸ÐºÑ \"%s\" должна бÑÑÑ Ð¾Ñменена пеÑед Ñдалением."
msgctxt "field:party.address,delivery:"
msgid "Delivery"
@@ -129,27 +139,27 @@ msgstr "ÐоÑÑавка"
msgctxt "field:party.party,customer_location:"
msgid "Customer Location"
-msgstr "ÐеÑÑо Ñ
ÑÐ°Ð½ÐµÐ½Ð¸Ñ Ð·Ð°ÐºÐ°Ð·Ñика"
+msgstr "ÐеÑÑоположение заказÑика"
msgctxt "field:party.party,supplier_location:"
msgid "Supplier Location"
-msgstr "ÐеÑÑо Ñ
ÑÐ°Ð½ÐµÐ½Ð¸Ñ Ð¿Ð¾ÑÑавÑика"
+msgstr "ÐеÑÑоположение поÑÑавÑика"
msgctxt "field:product.by_location.start,forecast_date:"
msgid "At Date"
-msgstr ""
+msgstr "Ðа даÑÑ"
msgctxt "field:product.by_location.start,id:"
msgid "ID"
-msgstr ""
+msgstr "ID"
msgctxt "field:product.product,cost_value:"
msgid "Cost Value"
-msgstr ""
+msgstr "Цена"
msgctxt "field:product.product,forecast_quantity:"
msgid "Forecast Quantity"
-msgstr "ÐÑогноз ÐолиÑеÑÑво"
+msgstr "ÐÑогноз колиÑеÑÑва"
msgctxt "field:product.product,quantity:"
msgid "Quantity"
@@ -157,11 +167,11 @@ msgstr "Ðол-во"
msgctxt "field:product.template,cost_value:"
msgid "Cost Value"
-msgstr ""
+msgstr "Цена"
msgctxt "field:product.template,forecast_quantity:"
msgid "Forecast Quantity"
-msgstr "ÐÑогноз ÐолиÑеÑÑво"
+msgstr "ÐÑогноз колиÑеÑÑва"
msgctxt "field:product.template,quantity:"
msgid "Quantity"
@@ -169,15 +179,15 @@ msgstr "Ðол-во"
msgctxt "field:stock.configuration,create_date:"
msgid "Create Date"
-msgstr ""
+msgstr "ÐаÑа ÑозданиÑ"
msgctxt "field:stock.configuration,create_uid:"
msgid "Create User"
-msgstr ""
+msgstr "Создано полÑзоваÑелем"
msgctxt "field:stock.configuration,id:"
msgid "ID"
-msgstr ""
+msgstr "ID"
msgctxt "field:stock.configuration,rec_name:"
msgid "Name"
@@ -185,43 +195,43 @@ msgstr "Ðаименование"
msgctxt "field:stock.configuration,shipment_in_return_sequence:"
msgid "Supplier Return Shipment Sequence"
-msgstr "ÐозвÑÐ°Ñ Ð¿Ð¾ÑÑавÑÐ¸ÐºÑ Ð¿Ð¾ÑледоваÑелÑноÑÑÑ"
+msgstr "ÐÑмеÑаÑÐ¸Ñ Ð²Ð¾Ð·Ð²ÑаÑов поÑÑавÑикÑ"
msgctxt "field:stock.configuration,shipment_in_sequence:"
msgid "Supplier Shipment Sequence"
-msgstr "ÐÑиÑ
од Ð¾Ñ Ð¿Ð¾ÑÑавÑика поÑледоваÑелÑноÑÑÑ"
+msgstr "ÐÑмеÑаÑÐ¸Ñ Ð¿ÑиÑ
одов Ð¾Ñ Ð¿Ð¾ÑÑавÑика"
msgctxt "field:stock.configuration,shipment_internal_sequence:"
msgid "Internal Shipment Sequence"
-msgstr "ÐнÑÑÑенние пеÑемеÑение поÑледоваÑелÑноÑÑÑ"
+msgstr "ÐÑмеÑаÑÐ¸Ñ Ð²Ð½ÑÑÑеннего пеÑемеÑениÑ"
msgctxt "field:stock.configuration,shipment_out_return_sequence:"
msgid "Customer Return Shipment Sequence"
-msgstr "ÐозвÑÐ°Ñ Ð¾Ñ Ð·Ð°ÐºÐ°Ð·Ñика поÑледоваÑелÑноÑÑÑ"
+msgstr "ÐÑмеÑаÑÐ¸Ñ Ð²Ð¾Ð·Ð²ÑаÑов Ð¾Ñ Ð·Ð°ÐºÐ°Ð·Ñика"
msgctxt "field:stock.configuration,shipment_out_sequence:"
msgid "Customer Shipment Sequence"
-msgstr "ÐÑгÑÑзка заказÑÐ¸ÐºÑ Ð¿Ð¾ÑледоваÑелÑноÑÑÑ"
+msgstr "ÐÑмеÑаÑÐ¸Ñ Ð¾ÑгÑÑзки заказÑикÑ"
msgctxt "field:stock.configuration,write_date:"
msgid "Write Date"
-msgstr ""
+msgstr "ÐаÑа изменениÑ"
msgctxt "field:stock.configuration,write_uid:"
msgid "Write User"
-msgstr ""
+msgstr "Ðзменено полÑзоваÑелем"
msgctxt "field:stock.inventory,company:"
msgid "Company"
-msgstr "ÐомпаниÑ"
+msgstr "ÐÑганизаÑиÑ"
msgctxt "field:stock.inventory,create_date:"
msgid "Create Date"
-msgstr ""
+msgstr "ÐаÑа ÑозданиÑ"
msgctxt "field:stock.inventory,create_uid:"
msgid "Create User"
-msgstr ""
+msgstr "Создано полÑзоваÑелем"
msgctxt "field:stock.inventory,date:"
msgid "Date"
@@ -229,7 +239,7 @@ msgstr "ÐаÑа"
msgctxt "field:stock.inventory,id:"
msgid "ID"
-msgstr ""
+msgstr "ID"
msgctxt "field:stock.inventory,lines:"
msgid "Lines"
@@ -237,11 +247,11 @@ msgstr "СÑÑоки"
msgctxt "field:stock.inventory,location:"
msgid "Location"
-msgstr "ÐеÑÑо"
+msgstr "ÐеÑÑоположение"
msgctxt "field:stock.inventory,lost_found:"
msgid "Lost and Found"
-msgstr "УÑÑаÑеннÑй и обÑеÑеннÑй"
+msgstr "УÑÑаÑÐµÐ½Ð½Ð°Ñ Ð¸ обÑеÑеннаÑ"
msgctxt "field:stock.inventory,rec_name:"
msgid "Name"
@@ -253,19 +263,19 @@ msgstr "СоÑÑоÑние"
msgctxt "field:stock.inventory,write_date:"
msgid "Write Date"
-msgstr ""
+msgstr "ÐаÑа изменениÑ"
msgctxt "field:stock.inventory,write_uid:"
msgid "Write User"
-msgstr ""
+msgstr "Ðзменено полÑзоваÑелем"
msgctxt "field:stock.inventory.line,create_date:"
msgid "Create Date"
-msgstr ""
+msgstr "ÐаÑа ÑозданиÑ"
msgctxt "field:stock.inventory.line,create_uid:"
msgid "Create User"
-msgstr ""
+msgstr "Создано полÑзоваÑелем"
msgctxt "field:stock.inventory.line,expected_quantity:"
msgid "Expected Quantity"
@@ -273,7 +283,7 @@ msgstr "Ðжидаемое колиÑеÑÑво"
msgctxt "field:stock.inventory.line,id:"
msgid "ID"
-msgstr ""
+msgstr "ID"
msgctxt "field:stock.inventory.line,inventory:"
msgid "Inventory"
@@ -285,7 +295,7 @@ msgstr "ÐеÑемеÑение"
msgctxt "field:stock.inventory.line,product:"
msgid "Product"
-msgstr "ТÐЦ"
+msgstr "ÐÑодÑкÑ"
msgctxt "field:stock.inventory.line,quantity:"
msgid "Quantity"
@@ -297,7 +307,7 @@ msgstr "Ðаименование"
msgctxt "field:stock.inventory.line,unit_digits:"
msgid "Unit Digits"
-msgstr "ÐÑÑппа ÑиÑÑ"
+msgstr "Ðол-во ÑиÑÑ Ð¿Ð¾Ñле запÑÑой"
msgctxt "field:stock.inventory.line,uom:"
msgid "UOM"
@@ -305,15 +315,15 @@ msgstr "Ðд.изм."
msgctxt "field:stock.inventory.line,write_date:"
msgid "Write Date"
-msgstr ""
+msgstr "ÐаÑа изменениÑ"
msgctxt "field:stock.inventory.line,write_uid:"
msgid "Write User"
-msgstr ""
+msgstr "Ðзменено полÑзоваÑелем"
msgctxt "field:stock.location,active:"
msgid "Active"
-msgstr "ÐейÑÑвиÑелÑннÑй"
+msgstr "ÐейÑÑвÑÑÑий"
msgctxt "field:stock.location,address:"
msgid "Address"
@@ -329,23 +339,23 @@ msgstr "Ðод локаÑии"
msgctxt "field:stock.location,cost_value:"
msgid "Cost Value"
-msgstr ""
+msgstr "Цена"
msgctxt "field:stock.location,create_date:"
msgid "Create Date"
-msgstr ""
+msgstr "ÐаÑа ÑозданиÑ"
msgctxt "field:stock.location,create_uid:"
msgid "Create User"
-msgstr ""
+msgstr "Создано полÑзоваÑелем"
msgctxt "field:stock.location,forecast_quantity:"
msgid "Forecast Quantity"
-msgstr "ÐÑогноз ÐолиÑеÑÑво"
+msgstr "ÐÑогноз колиÑеÑÑва"
msgctxt "field:stock.location,id:"
msgid "ID"
-msgstr ""
+msgstr "ID"
msgctxt "field:stock.location,input_location:"
msgid "Input"
@@ -365,7 +375,7 @@ msgstr "ÐÑÑ
одÑÑий"
msgctxt "field:stock.location,parent:"
msgid "Parent"
-msgstr "ÐÑновной"
+msgstr "ÐÑедок"
msgctxt "field:stock.location,quantity:"
msgid "Quantity"
@@ -385,19 +395,19 @@ msgstr "Ð¥ÑанилиÑе"
msgctxt "field:stock.location,type:"
msgid "Location type"
-msgstr "Тип ÑаÑположение"
+msgstr "Тип меÑÑоположениÑ"
msgctxt "field:stock.location,write_date:"
msgid "Write Date"
-msgstr ""
+msgstr "ÐаÑа изменениÑ"
msgctxt "field:stock.location,write_uid:"
msgid "Write User"
-msgstr ""
+msgstr "Ðзменено полÑзоваÑелем"
msgctxt "field:stock.move,company:"
msgid "Company"
-msgstr "ÐомпаниÑ"
+msgstr "ÐÑганизаÑиÑ"
msgctxt "field:stock.move,cost_price:"
msgid "Cost Price"
@@ -405,11 +415,11 @@ msgstr "СебеÑÑоимоÑÑÑ"
msgctxt "field:stock.move,create_date:"
msgid "Create Date"
-msgstr ""
+msgstr "ÐаÑа ÑозданиÑ"
msgctxt "field:stock.move,create_uid:"
msgid "Create User"
-msgstr ""
+msgstr "Создано полÑзоваÑелем"
msgctxt "field:stock.move,currency:"
msgid "Currency"
@@ -421,15 +431,19 @@ msgstr "УÑеÑÐ½Ð°Ñ Ð´Ð°Ñа"
msgctxt "field:stock.move,from_location:"
msgid "From Location"
-msgstr "Ðз меÑÑа"
+msgstr "Ðз меÑÑоположениÑ"
msgctxt "field:stock.move,id:"
msgid "ID"
-msgstr ""
+msgstr "ID"
msgctxt "field:stock.move,internal_quantity:"
msgid "Internal Quantity"
-msgstr ""
+msgstr "ÐнÑÑÑеннее колиÑеÑÑво"
+
+msgctxt "field:stock.move,origin:"
+msgid "Origin"
+msgstr "ÐеÑвоиÑÑоÑник"
msgctxt "field:stock.move,planned_date:"
msgid "Planned Date"
@@ -437,11 +451,11 @@ msgstr "ÐÐ»Ð°Ð½Ð¾Ð²Ð°Ñ Ð´Ð°Ñа"
msgctxt "field:stock.move,product:"
msgid "Product"
-msgstr "ТÐЦ"
+msgstr "ÐÑодÑкÑ"
msgctxt "field:stock.move,product_uom_category:"
msgid "Product Uom Category"
-msgstr ""
+msgstr "ÐаÑегоÑÐ¸Ñ ÐµÐ´. измеÑÐµÐ½Ð¸Ñ Ð¿ÑодÑкÑии"
msgctxt "field:stock.move,quantity:"
msgid "Quantity"
@@ -451,25 +465,9 @@ msgctxt "field:stock.move,rec_name:"
msgid "Name"
msgstr "Ðаименование"
-msgctxt "field:stock.move,shipment_in:"
-msgid "Supplier Shipment"
-msgstr "ÐÑиÑ
од Ð¾Ñ Ð¿Ð¾ÑÑавÑика"
-
-msgctxt "field:stock.move,shipment_in_return:"
-msgid "Supplier Return Shipment"
-msgstr "ÐозвÑÐ°Ñ Ð¿Ð¾ÑÑавÑикÑ"
-
-msgctxt "field:stock.move,shipment_internal:"
-msgid "Internal Shipment"
-msgstr "ÐнÑÑÑеннее пеÑемеÑение"
-
-msgctxt "field:stock.move,shipment_out:"
-msgid "Customer Shipment"
-msgstr "ÐÑгÑÑзка заказÑикÑ"
-
-msgctxt "field:stock.move,shipment_out_return:"
-msgid "Customer Return Shipment"
-msgstr "ÐозвÑÐ°Ñ Ð¾Ñ Ð·Ð°ÐºÐ°Ð·Ñика"
+msgctxt "field:stock.move,shipment:"
+msgid "Shipment"
+msgstr "ÐоÑÑавка"
msgctxt "field:stock.move,state:"
msgid "State"
@@ -477,11 +475,11 @@ msgstr "СоÑÑоÑние"
msgctxt "field:stock.move,to_location:"
msgid "To Location"
-msgstr "РмеÑÑо"
+msgstr "РмеÑÑоположение"
msgctxt "field:stock.move,unit_digits:"
msgid "Unit Digits"
-msgstr "ÐÑÑппа ÑиÑÑ"
+msgstr "Ðол-во ÑиÑÑ Ð¿Ð¾Ñле запÑÑой"
msgctxt "field:stock.move,unit_price:"
msgid "Unit Price"
@@ -497,159 +495,147 @@ msgstr "Ðд.изм."
msgctxt "field:stock.move,write_date:"
msgid "Write Date"
-msgstr ""
+msgstr "ÐаÑа изменениÑ"
msgctxt "field:stock.move,write_uid:"
msgid "Write User"
-msgstr ""
+msgstr "Ðзменено полÑзоваÑелем"
msgctxt "field:stock.period,caches:"
msgid "Caches"
-msgstr ""
+msgstr "ÐапаÑÑ"
-#, fuzzy
msgctxt "field:stock.period,company:"
msgid "Company"
-msgstr "УÑеÑ.оÑг."
+msgstr "ÐÑганизаÑиÑ"
msgctxt "field:stock.period,create_date:"
msgid "Create Date"
-msgstr ""
+msgstr "ÐаÑа ÑозданиÑ"
msgctxt "field:stock.period,create_uid:"
msgid "Create User"
-msgstr ""
+msgstr "Создано полÑзоваÑелем"
-#, fuzzy
msgctxt "field:stock.period,date:"
msgid "Date"
msgstr "ÐаÑа"
msgctxt "field:stock.period,id:"
msgid "ID"
-msgstr ""
+msgstr "ID"
-#, fuzzy
msgctxt "field:stock.period,rec_name:"
msgid "Name"
msgstr "Ðаименование"
-#, fuzzy
msgctxt "field:stock.period,state:"
msgid "State"
-msgstr "СÑаÑÑÑ"
+msgstr "СоÑÑоÑние"
msgctxt "field:stock.period,write_date:"
msgid "Write Date"
-msgstr ""
+msgstr "ÐаÑа изменениÑ"
msgctxt "field:stock.period,write_uid:"
msgid "Write User"
-msgstr ""
+msgstr "Ðзменено полÑзоваÑелем"
msgctxt "field:stock.period.cache,create_date:"
msgid "Create Date"
-msgstr ""
+msgstr "ÐаÑа ÑозданиÑ"
msgctxt "field:stock.period.cache,create_uid:"
msgid "Create User"
-msgstr ""
+msgstr "Создано полÑзоваÑелем"
msgctxt "field:stock.period.cache,id:"
msgid "ID"
-msgstr ""
+msgstr "ID"
msgctxt "field:stock.period.cache,internal_quantity:"
msgid "Internal Quantity"
-msgstr ""
+msgstr "ÐнÑÑÑеннее колиÑеÑÑво"
-#, fuzzy
msgctxt "field:stock.period.cache,location:"
msgid "Location"
msgstr "ÐеÑÑоположение"
msgctxt "field:stock.period.cache,period:"
msgid "Period"
-msgstr ""
+msgstr "ÐеÑиод"
-#, fuzzy
msgctxt "field:stock.period.cache,product:"
msgid "Product"
-msgstr "ТоваÑно маÑеÑиалÑнÑе ÑенноÑÑи (ТÐЦ)"
+msgstr "ÐÑодÑкÑ"
-#, fuzzy
msgctxt "field:stock.period.cache,rec_name:"
msgid "Name"
msgstr "Ðаименование"
msgctxt "field:stock.period.cache,write_date:"
msgid "Write Date"
-msgstr ""
+msgstr "ÐаÑа изменениÑ"
msgctxt "field:stock.period.cache,write_uid:"
msgid "Write User"
-msgstr ""
+msgstr "Ðзменено полÑзоваÑелем"
msgctxt "field:stock.product_quantities_warehouse,create_date:"
msgid "Create Date"
-msgstr ""
+msgstr "ÐаÑа ÑозданиÑ"
msgctxt "field:stock.product_quantities_warehouse,create_uid:"
msgid "Create User"
-msgstr ""
+msgstr "Создано полÑзоваÑелем"
-#, fuzzy
msgctxt "field:stock.product_quantities_warehouse,date:"
msgid "Date"
msgstr "ÐаÑа"
msgctxt "field:stock.product_quantities_warehouse,id:"
msgid "ID"
-msgstr ""
+msgstr "ID"
-#, fuzzy
msgctxt "field:stock.product_quantities_warehouse,quantity:"
msgid "Quantity"
msgstr "Ðол-во"
-#, fuzzy
msgctxt "field:stock.product_quantities_warehouse,rec_name:"
msgid "Name"
msgstr "Ðаименование"
msgctxt "field:stock.product_quantities_warehouse,write_date:"
msgid "Write Date"
-msgstr ""
+msgstr "ÐаÑа изменениÑ"
msgctxt "field:stock.product_quantities_warehouse,write_uid:"
msgid "Write User"
-msgstr ""
+msgstr "Ðзменено полÑзоваÑелем"
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 "ТоваÑнÑй Ñклад"
msgctxt "field:stock.products_by_locations.start,forecast_date:"
msgid "At Date"
-msgstr ""
+msgstr "Ðа даÑÑ"
msgctxt "field:stock.products_by_locations.start,id:"
msgid "ID"
-msgstr ""
+msgstr "ID"
msgctxt "field:stock.shipment.in,code:"
msgid "Code"
msgstr "Ðод оÑгÑÑзки"
-#, fuzzy
msgctxt "field:stock.shipment.in,company:"
msgid "Company"
-msgstr "УÑеÑ.оÑг."
+msgstr "ÐÑганизаÑиÑ"
msgctxt "field:stock.shipment.in,contact_address:"
msgid "Contact Address"
@@ -657,11 +643,11 @@ msgstr "ÐонÑакÑнÑй адÑеÑ"
msgctxt "field:stock.shipment.in,create_date:"
msgid "Create Date"
-msgstr ""
+msgstr "ÐаÑа ÑозданиÑ"
msgctxt "field:stock.shipment.in,create_uid:"
msgid "Create User"
-msgstr ""
+msgstr "Создано полÑзоваÑелем"
msgctxt "field:stock.shipment.in,effective_date:"
msgid "Effective Date"
@@ -669,7 +655,7 @@ msgstr "УÑеÑÐ½Ð°Ñ Ð´Ð°Ñа"
msgctxt "field:stock.shipment.in,id:"
msgid "ID"
-msgstr ""
+msgstr "ID"
msgctxt "field:stock.shipment.in,incoming_moves:"
msgid "Incoming Moves"
@@ -703,10 +689,9 @@ msgctxt "field:stock.shipment.in,supplier:"
msgid "Supplier"
msgstr "ÐоÑÑавÑик"
-#, fuzzy
msgctxt "field:stock.shipment.in,supplier_location:"
msgid "Supplier Location"
-msgstr "ÐеÑÑо Ñ
ÑÐ°Ð½ÐµÐ½Ð¸Ñ Ð¿Ð¾ÑÑавÑика"
+msgstr "ÐеÑÑоположение поÑÑавÑика"
msgctxt "field:stock.shipment.in,warehouse:"
msgid "Warehouse"
@@ -714,36 +699,35 @@ msgstr "ТоваÑнÑй Ñклад"
msgctxt "field:stock.shipment.in,warehouse_input:"
msgid "Warehouse Input"
-msgstr ""
+msgstr "ÐÑ
од ÑоваÑного Ñклада"
msgctxt "field:stock.shipment.in,warehouse_storage:"
msgid "Warehouse Storage"
-msgstr ""
+msgstr "Ð¥ÑанилиÑе ÑоваÑного Ñклада"
msgctxt "field:stock.shipment.in,write_date:"
msgid "Write Date"
-msgstr ""
+msgstr "ÐаÑа изменениÑ"
msgctxt "field:stock.shipment.in,write_uid:"
msgid "Write User"
-msgstr ""
+msgstr "Ðзменено полÑзоваÑелем"
msgctxt "field:stock.shipment.in.return,code:"
msgid "Code"
msgstr "Ðод возвÑаÑа оÑгÑÑзки"
-#, fuzzy
msgctxt "field:stock.shipment.in.return,company:"
msgid "Company"
-msgstr "УÑеÑ.оÑг."
+msgstr "ÐÑганизаÑиÑ"
msgctxt "field:stock.shipment.in.return,create_date:"
msgid "Create Date"
-msgstr ""
+msgstr "ÐаÑа ÑозданиÑ"
msgctxt "field:stock.shipment.in.return,create_uid:"
msgid "Create User"
-msgstr ""
+msgstr "Создано полÑзоваÑелем"
msgctxt "field:stock.shipment.in.return,effective_date:"
msgid "Effective Date"
@@ -751,11 +735,11 @@ msgstr "УÑеÑÐ½Ð°Ñ Ð´Ð°Ñа"
msgctxt "field:stock.shipment.in.return,from_location:"
msgid "From Location"
-msgstr "Ðз меÑÑа"
+msgstr "Ðз меÑÑоположениÑ"
msgctxt "field:stock.shipment.in.return,id:"
msgid "ID"
-msgstr ""
+msgstr "ID"
msgctxt "field:stock.shipment.in.return,moves:"
msgid "Moves"
@@ -779,21 +763,20 @@ msgstr "СоÑÑоÑние"
msgctxt "field:stock.shipment.in.return,to_location:"
msgid "To Location"
-msgstr "РмеÑÑо"
+msgstr "РмеÑÑоположение"
msgctxt "field:stock.shipment.in.return,write_date:"
msgid "Write Date"
-msgstr ""
+msgstr "ÐаÑа изменениÑ"
msgctxt "field:stock.shipment.in.return,write_uid:"
msgid "Write User"
-msgstr ""
+msgstr "Ðзменено полÑзоваÑелем"
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 "ÐеÑемеÑениÑ"
@@ -802,18 +785,17 @@ msgctxt "field:stock.shipment.internal,code:"
msgid "Code"
msgstr "Ðод внÑÑÑенней оÑгÑÑзки"
-#, fuzzy
msgctxt "field:stock.shipment.internal,company:"
msgid "Company"
-msgstr "УÑеÑ.оÑг."
+msgstr "ÐÑганизаÑиÑ"
msgctxt "field:stock.shipment.internal,create_date:"
msgid "Create Date"
-msgstr ""
+msgstr "ÐаÑа ÑозданиÑ"
msgctxt "field:stock.shipment.internal,create_uid:"
msgid "Create User"
-msgstr ""
+msgstr "Создано полÑзоваÑелем"
msgctxt "field:stock.shipment.internal,effective_date:"
msgid "Effective Date"
@@ -821,11 +803,11 @@ msgstr "УÑеÑÐ½Ð°Ñ Ð´Ð°Ñа"
msgctxt "field:stock.shipment.internal,from_location:"
msgid "From Location"
-msgstr "Ðз меÑÑа"
+msgstr "Ðз меÑÑоположениÑ"
msgctxt "field:stock.shipment.internal,id:"
msgid "ID"
-msgstr ""
+msgstr "ID"
msgctxt "field:stock.shipment.internal,moves:"
msgid "Moves"
@@ -849,21 +831,20 @@ msgstr "СоÑÑоÑние"
msgctxt "field:stock.shipment.internal,to_location:"
msgid "To Location"
-msgstr "РмеÑÑо"
+msgstr "РмеÑÑоположение"
msgctxt "field:stock.shipment.internal,write_date:"
msgid "Write Date"
-msgstr ""
+msgstr "ÐаÑа изменениÑ"
msgctxt "field:stock.shipment.internal,write_uid:"
msgid "Write User"
-msgstr ""
+msgstr "Ðзменено полÑзоваÑелем"
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 "ÐеÑемеÑениÑ"
@@ -872,27 +853,25 @@ msgctxt "field:stock.shipment.out,code:"
msgid "Code"
msgstr "Ðод иÑÑ
одÑÑей оÑгÑÑзки"
-#, fuzzy
msgctxt "field:stock.shipment.out,company:"
msgid "Company"
-msgstr "УÑеÑ.оÑг."
+msgstr "ÐÑганизаÑиÑ"
msgctxt "field:stock.shipment.out,create_date:"
msgid "Create Date"
-msgstr ""
+msgstr "ÐаÑа ÑозданиÑ"
msgctxt "field:stock.shipment.out,create_uid:"
msgid "Create User"
-msgstr ""
+msgstr "Создано полÑзоваÑелем"
msgctxt "field:stock.shipment.out,customer:"
msgid "Customer"
msgstr "ÐаказÑик"
-#, fuzzy
msgctxt "field:stock.shipment.out,customer_location:"
msgid "Customer Location"
-msgstr "ÐеÑÑо Ñ
ÑÐ°Ð½ÐµÐ½Ð¸Ñ Ð·Ð°ÐºÐ°Ð·Ñика"
+msgstr "ÐеÑÑоположение заказÑика"
msgctxt "field:stock.shipment.out,delivery_address:"
msgid "Delivery Address"
@@ -904,7 +883,7 @@ msgstr "УÑеÑÐ½Ð°Ñ Ð´Ð°Ñа"
msgctxt "field:stock.shipment.out,id:"
msgid "ID"
-msgstr ""
+msgstr "ID"
msgctxt "field:stock.shipment.out,inventory_moves:"
msgid "Inventory Moves"
@@ -940,25 +919,24 @@ msgstr "ТоваÑнÑй Ñклад"
msgctxt "field:stock.shipment.out,warehouse_output:"
msgid "Warehouse Output"
-msgstr ""
+msgstr "ÐÑÑ
од ÑоваÑного Ñклада"
msgctxt "field:stock.shipment.out,warehouse_storage:"
msgid "Warehouse Storage"
-msgstr ""
+msgstr "Ð¥ÑанилиÑе ÑоваÑного Ñклада"
msgctxt "field:stock.shipment.out,write_date:"
msgid "Write Date"
-msgstr ""
+msgstr "ÐаÑа изменениÑ"
msgctxt "field:stock.shipment.out,write_uid:"
msgid "Write User"
-msgstr ""
+msgstr "Ðзменено полÑзоваÑелем"
msgctxt "field:stock.shipment.out.assign.failed,id:"
msgid "ID"
-msgstr ""
+msgstr "ID"
-#, fuzzy
msgctxt "field:stock.shipment.out.assign.failed,inventory_moves:"
msgid "Inventory Moves"
msgstr "УÑÐµÑ Ð¿ÐµÑемеÑений"
@@ -967,27 +945,25 @@ msgctxt "field:stock.shipment.out.return,code:"
msgid "Code"
msgstr "Ðод возвÑаÑа оÑгÑÑзки"
-#, fuzzy
msgctxt "field:stock.shipment.out.return,company:"
msgid "Company"
-msgstr "УÑеÑ.оÑг."
+msgstr "ÐÑганизаÑиÑ"
msgctxt "field:stock.shipment.out.return,create_date:"
msgid "Create Date"
-msgstr ""
+msgstr "ÐаÑа ÑозданиÑ"
msgctxt "field:stock.shipment.out.return,create_uid:"
msgid "Create User"
-msgstr ""
+msgstr "Создано полÑзоваÑелем"
msgctxt "field:stock.shipment.out.return,customer:"
msgid "Customer"
msgstr "ÐаказÑик"
-#, fuzzy
msgctxt "field:stock.shipment.out.return,customer_location:"
msgid "Customer Location"
-msgstr "ÐеÑÑо Ñ
ÑÐ°Ð½ÐµÐ½Ð¸Ñ Ð·Ð°ÐºÐ°Ð·Ñика"
+msgstr "ÐеÑÑоположение заказÑика"
msgctxt "field:stock.shipment.out.return,delivery_address:"
msgid "Delivery Address"
@@ -999,7 +975,7 @@ msgstr "УÑеÑÐ½Ð°Ñ Ð´Ð°Ñа"
msgctxt "field:stock.shipment.out.return,id:"
msgid "ID"
-msgstr ""
+msgstr "ID"
msgctxt "field:stock.shipment.out.return,incoming_moves:"
msgid "Incoming Moves"
@@ -1035,23 +1011,24 @@ msgstr "ТоваÑнÑй Ñклад"
msgctxt "field:stock.shipment.out.return,warehouse_input:"
msgid "Warehouse Input"
-msgstr ""
+msgstr "ÐÑ
од ÑоваÑного Ñклада"
msgctxt "field:stock.shipment.out.return,warehouse_storage:"
msgid "Warehouse Storage"
-msgstr ""
+msgstr "Ð¥ÑанилиÑе ÑоваÑного Ñклада"
msgctxt "field:stock.shipment.out.return,write_date:"
msgid "Write Date"
-msgstr ""
+msgstr "ÐаÑа изменениÑ"
msgctxt "field:stock.shipment.out.return,write_uid:"
msgid "Write User"
-msgstr ""
+msgstr "Ðзменено полÑзоваÑелем"
msgctxt "help:party.party,customer_location:"
msgid "The default destination location when sending products to the party."
-msgstr "ÐеÑÑо назнаÑÐµÐ½Ð¸Ñ Ð¿Ð¾ ÑмолÑÐ°Ð½Ð¸Ñ Ð¿Ñи оÑпÑавке пÑодÑкÑии конÑÑагенÑÑ."
+msgstr ""
+"ÐеÑÑоположение назнаÑÐµÐ½Ð¸Ñ Ð¿Ð¾ ÑмолÑÐ°Ð½Ð¸Ñ Ð¿Ñи оÑпÑавке пÑодÑкÑии конÑÑагенÑÑ."
msgctxt "help:party.party,supplier_location:"
msgid "The default source location when receiving products from the party."
@@ -1063,6 +1040,9 @@ msgid ""
"* An empty value is an infinite date in the future.\n"
"* A date in the past will provide historical values."
msgstr ""
+"ÐозволÑÐµÑ ÑаÑÑиÑаÑÑ Ð¾Ð¶Ð¸Ð´Ð°ÐµÐ¼Ð¾Ðµ кол-во на Ñкладе на ÑÑÑ Ð´Ð°ÑÑ.\n"
+"* ÐÑÑÑое знаÑение - беÑконеÑÐ½Ð°Ñ Ð´Ð°Ñа в бÑдÑÑем\n"
+"* ÐаÑа в пÑоÑлом - бÑвÑие знаÑениÑ"
msgctxt "help:stock.products_by_locations.start,forecast_date:"
msgid ""
@@ -1070,91 +1050,54 @@ msgid ""
"* An empty value is an infinite date in the future.\n"
"* A date in the past will provide historical values."
msgstr ""
+"ÐозволÑÐµÑ ÑаÑÑиÑаÑÑ Ð¾Ð¶Ð¸Ð´Ð°ÐµÐ¼Ð¾Ðµ кол-во на Ñкладе на ÑÑÑ Ð´Ð°ÑÑ.\n"
+"* ÐÑÑÑое знаÑение - беÑконеÑÐ½Ð°Ñ Ð´Ð°Ñа в бÑдÑÑем\n"
+"* ÐаÑа в пÑоÑлом - бÑвÑие знаÑениÑ"
msgctxt "model:ir.action,name:act_inventory_form"
msgid "Inventories"
msgstr "ÐнвенÑаÑизаÑиÑ"
-#, fuzzy
-msgctxt "model:ir.action,name:act_inventory_form_draft"
-msgid "Draft Inventories"
-msgstr "ЧеÑновики инвенÑаÑизаÑий"
-
-#, fuzzy
msgctxt "model:ir.action,name:act_location_form"
msgid "Locations"
-msgstr "ÐзмениÑÑ Ð¼ÐµÑÑа Ñ
ÑанениÑ"
+msgstr "ÐеÑÑоположениÑ"
-#, fuzzy
msgctxt "model:ir.action,name:act_location_quantity_tree"
msgid "Locations"
-msgstr "Ð¥ÑанилиÑе ТÐЦ"
+msgstr "ÐеÑÑоположениÑ"
msgctxt "model:ir.action,name:act_location_tree"
msgid "Locations"
-msgstr "ÐеÑÑа"
+msgstr "ÐеÑÑоположениÑ"
msgctxt "model:ir.action,name:act_move_form"
msgid "Moves"
msgstr "ÐеÑемеÑениÑ"
-msgctxt "model:ir.action,name:act_move_form_cust"
-msgid "Moves to Customers"
-msgstr "ÐÑгÑÑзка заказÑикам"
-
-msgctxt "model:ir.action,name:act_move_form_supp"
-msgid "Moves from Suppliers"
-msgstr "ÐоÑÑавки Ð¾Ñ Ð¿Ð¾ÑÑавÑиков"
-
-msgctxt "model:ir.action,name:act_move_form_supp_proceed"
-msgid "Moves from Suppliers Waiting Arrival"
-msgstr "ÐжидаÑÑийÑÑ Ð¿ÑиÑ
од Ð¾Ñ Ð¿Ð¾ÑÑавÑика"
-
msgctxt "model:ir.action,name:act_period_list"
msgid "Periods"
-msgstr ""
+msgstr "ÐеÑиодÑ"
msgctxt "model:ir.action,name:act_product_quantities_warehouse"
msgid "Product Quantities By Warehouse"
-msgstr ""
+msgstr "Ðол-во пÑодÑкÑии по Ñкладам"
-#, fuzzy
msgctxt "model:ir.action,name:act_products_by_locations"
msgid "Products"
-msgstr "ТÐЦ"
-
-msgctxt "model:ir.action,name:act_shipment_in_draft"
-msgid "Draft Supplier Shipment"
-msgstr ""
+msgstr "ÐÑодÑкÑиÑ"
msgctxt "model:ir.action,name:act_shipment_in_form"
msgid "Supplier Shipments"
msgstr "ÐÑиÑ
од Ð¾Ñ Ð¿Ð¾ÑÑавÑиков"
-msgctxt "model:ir.action,name:act_shipment_in_form_received"
-msgid "Received Supplier shipments"
-msgstr "ÐоÑÑÑÐ¿Ð»ÐµÐ½Ð¸Ñ Ð¾Ñ Ð¿Ð¾ÑÑавÑика"
-
msgctxt "model:ir.action,name:act_shipment_in_return_form"
msgid "Supplier Return Shipments"
msgstr "ÐозвÑаÑÑ Ð¿Ð¾ÑÑавÑикÑ"
-msgctxt "model:ir.action,name:act_shipment_internal_assigned_form"
-msgid "Assigned Internal Shipments"
-msgstr "ÐÑполненнÑе внÑÑÑенние пеÑемеÑениÑ"
-
-msgctxt "model:ir.action,name:act_shipment_internal_draft_form"
-msgid "Draft Internal Shipments"
-msgstr "ЧеÑновик внÑÑÑенниÑ
пеÑемеÑений"
-
msgctxt "model:ir.action,name:act_shipment_internal_form"
msgid "Internal Shipments"
msgstr "ÐнÑÑÑенние пеÑемеÑениÑ"
-msgctxt "model:ir.action,name:act_shipment_internal_waiting_form"
-msgid "Internal Shipments Waiting Assignation"
-msgstr "ÐнÑÑÑенние пеÑемеÑÐµÐ½Ð¸Ñ Ð² ожидании"
-
msgctxt "model:ir.action,name:act_shipment_out_form"
msgid "Customer Shipments"
msgstr "ÐÑгÑÑзки заказÑикÑ"
@@ -1167,30 +1110,17 @@ msgctxt "model:ir.action,name:act_shipment_out_form3"
msgid "Supplier Shipments"
msgstr "ÐÑиÑ
од Ð¾Ñ Ð¿Ð¾ÑÑавÑиков"
-msgctxt "model:ir.action,name:act_shipment_out_form_assigned"
-msgid "Assigned Customer Shipments"
-msgstr "ÐÑÑÐ·Ñ Ð¿ÐµÑеданнÑе заказÑикÑ"
-
-msgctxt "model:ir.action,name:act_shipment_out_form_ready"
-msgid "Customer Shipments Ready for Shipping"
-msgstr "ÐÑÑз заказÑика гоÑовÑй к оÑгÑÑзке"
-
-msgctxt "model:ir.action,name:act_shipment_out_form_waiting"
-msgid "Customer Shipments Waiting Assignation"
-msgstr "ÐлиенÑÑкий гÑÑз ожидаÑÑий назнаÑениÑ"
-
msgctxt "model:ir.action,name:act_shipment_out_return_form"
msgid "Customer Return Shipments"
msgstr "ÐозвÑаÑÑ Ð¾Ñ Ð·Ð°ÐºÐ°Ð·Ñика"
-#, fuzzy
msgctxt "model:ir.action,name:act_stock_configuration_form"
msgid "Stock Configuration"
msgstr "ÐонÑигÑÑаÑÐ¸Ñ Ñклада"
msgctxt "model:ir.action,name:create_shipment_out_return"
msgid "Create Return Shipment"
-msgstr "Создание обÑаÑной оÑпÑавки"
+msgstr "СоздаÑÑ Ð¾Ð±ÑаÑнÑÑ Ð¾ÑпÑавкÑ"
msgctxt "model:ir.action,name:report_shipment_in_restocking_list"
msgid "Restocking List"
@@ -1202,7 +1132,7 @@ msgstr "ÐнÑÑÑеннее пеÑемеÑение"
msgctxt "model:ir.action,name:report_shipment_out_delivery_note"
msgid "Delivery Note"
-msgstr "Ðакладной"
+msgstr "ÐакладнаÑ"
msgctxt "model:ir.action,name:report_shipment_out_picking_list"
msgid "Picking List"
@@ -1214,19 +1144,19 @@ msgstr "СпиÑок пополнениÑ"
msgctxt "model:ir.action,name:wizard_product_by_location"
msgid "Product by Locations"
-msgstr ""
+msgstr "ÐÑодÑкÑÐ¸Ñ Ð¿Ð¾ меÑÑоположениÑм"
msgctxt "model:ir.action,name:wizard_product_quantities_warehouse"
msgid "Product Quantities By Warehouse"
-msgstr ""
+msgstr "Ðол-во пÑодÑкÑии по Ñкладам"
msgctxt "model:ir.action,name:wizard_products_by_locations"
msgid "Products by Locations"
-msgstr ""
+msgstr "ÐÑодÑкÑÐ¸Ñ Ð¿Ð¾ меÑÑоположениÑм"
msgctxt "model:ir.action,name:wizard_shipment_in_return_assign"
msgid "Assign Purchase Return Shipment"
-msgstr ""
+msgstr "ÐозвÑÐ°Ñ Ð³ÑÑза заказÑиком"
msgctxt "model:ir.action,name:wizard_shipment_internal_assign"
msgid "Assign Shipment Internal"
@@ -1236,6 +1166,129 @@ msgctxt "model:ir.action,name:wizard_shipment_out_assign"
msgid "Assign Shipment Out"
msgstr "ÐнеÑнее назнаÑение гÑÑза"
+msgctxt "model:ir.action.act_window.domain,name:act_inventory_form_domain_all"
+msgid "All"
+msgstr "ÐÑе"
+
+msgctxt ""
+"model:ir.action.act_window.domain,name:act_inventory_form_domain_draft"
+msgid "Draft"
+msgstr "ЧеÑновик"
+
+msgctxt "model:ir.action.act_window.domain,name:act_move_form_domain_all"
+msgid "All"
+msgstr "ÐÑе"
+
+msgctxt ""
+"model:ir.action.act_window.domain,name:act_move_form_domain_from_supplier"
+msgid "From Suppliers"
+msgstr "ÐÑ Ð¿Ð¾ÑÑавÑиков"
+
+msgctxt ""
+"model:ir.action.act_window.domain,name:act_move_form_domain_from_supplier_waiting"
+msgid "From Suppliers Waiting"
+msgstr "ÐжидаемÑе Ð¾Ñ Ð¿Ð¾ÑÑавÑиков"
+
+msgctxt ""
+"model:ir.action.act_window.domain,name:act_move_form_domain_to_customer"
+msgid "To Customers"
+msgstr "ÐÐ»Ñ Ð·Ð°ÐºÐ°Ð·Ñиков"
+
+msgctxt ""
+"model:ir.action.act_window.domain,name:act_shipment_in_form_domain_all"
+msgid "All"
+msgstr "ÐÑе"
+
+msgctxt ""
+"model:ir.action.act_window.domain,name:act_shipment_in_form_domain_draft"
+msgid "Draft"
+msgstr "ЧеÑновик"
+
+msgctxt ""
+"model:ir.action.act_window.domain,name:act_shipment_in_form_domain_received"
+msgid "Received"
+msgstr "ÐоÑÑÑпило"
+
+msgctxt ""
+"model:ir.action.act_window.domain,name:act_shipment_in_return_form_domain_all"
+msgid "All"
+msgstr "ÐÑе"
+
+msgctxt ""
+"model:ir.action.act_window.domain,name:act_shipment_in_return_form_domain_assigned"
+msgid "Assigned"
+msgstr "ÐеÑеданнÑй"
+
+msgctxt ""
+"model:ir.action.act_window.domain,name:act_shipment_in_return_form_domain_draft"
+msgid "Draft"
+msgstr "ЧеÑновик"
+
+msgctxt ""
+"model:ir.action.act_window.domain,name:act_shipment_in_return_form_domain_waiting"
+msgid "Waiting"
+msgstr "Ðжидание"
+
+msgctxt ""
+"model:ir.action.act_window.domain,name:act_shipment_internal_form_domain_all"
+msgid "All"
+msgstr "ÐÑе"
+
+msgctxt ""
+"model:ir.action.act_window.domain,name:act_shipment_internal_form_domain_assigned"
+msgid "Assigned"
+msgstr "ÐеÑеданнÑй"
+
+msgctxt ""
+"model:ir.action.act_window.domain,name:act_shipment_internal_form_domain_draft"
+msgid "Draft"
+msgstr "ЧеÑновик"
+
+msgctxt ""
+"model:ir.action.act_window.domain,name:act_shipment_internal_form_domain_waiting"
+msgid "Waiting"
+msgstr "Ðжидание"
+
+msgctxt ""
+"model:ir.action.act_window.domain,name:act_shipment_out_form_domain_all"
+msgid "All"
+msgstr "ÐÑе"
+
+msgctxt ""
+"model:ir.action.act_window.domain,name:act_shipment_out_form_domain_assigned"
+msgid "Assigned"
+msgstr "ÐеÑеданнÑй"
+
+msgctxt ""
+"model:ir.action.act_window.domain,name:act_shipment_out_form_domain_draft"
+msgid "Draft"
+msgstr "ЧеÑновик"
+
+msgctxt ""
+"model:ir.action.act_window.domain,name:act_shipment_out_form_domain_packed"
+msgid "Packed"
+msgstr "УпакованнÑй"
+
+msgctxt ""
+"model:ir.action.act_window.domain,name:act_shipment_out_form_domain_waiting"
+msgid "Waiting"
+msgstr "Ðжидание"
+
+msgctxt ""
+"model:ir.action.act_window.domain,name:act_shipment_out_return_form_domain_all"
+msgid "All"
+msgstr "ÐÑе"
+
+msgctxt ""
+"model:ir.action.act_window.domain,name:act_shipment_out_return_form_domain_draft"
+msgid "Draft"
+msgstr "ЧеÑновик"
+
+msgctxt ""
+"model:ir.action.act_window.domain,name:act_shipment_out_return_form_domain_received"
+msgid "Received"
+msgstr "ÐоÑÑÑпило"
+
msgctxt "model:ir.sequence,name:sequence_shipment_in"
msgid "Supplier Shipment"
msgstr "ÐÑиÑ
од Ð¾Ñ Ð¿Ð¾ÑÑавÑика"
@@ -1284,99 +1337,49 @@ msgctxt "model:ir.ui.menu,name:menu_inventory_form"
msgid "Inventories"
msgstr "ÐнвенÑаÑизаÑии"
-msgctxt "model:ir.ui.menu,name:menu_inventory_form_draft"
-msgid "Draft Inventories"
-msgstr "ЧеÑновики инвенÑаÑизаÑий"
-
-#, fuzzy
msgctxt "model:ir.ui.menu,name:menu_location_form"
msgid "Locations"
-msgstr "ÐзмениÑÑ Ð¼ÐµÑÑа Ñ
ÑанениÑ"
+msgstr "ÐзмениÑÑ Ð¼ÐµÑÑоположениÑ"
msgctxt "model:ir.ui.menu,name:menu_location_tree"
msgid "Locations"
-msgstr "ÐеÑÑа Ñ
ÑанениÑ"
+msgstr "ÐеÑÑоположениÑ"
msgctxt "model:ir.ui.menu,name:menu_move_form"
msgid "Moves"
msgstr "ÐеÑемеÑениÑ"
-msgctxt "model:ir.ui.menu,name:menu_move_form_cust"
-msgid "Moves to Customers"
-msgstr "ÐÑгÑÑзки заказÑикам"
-
-msgctxt "model:ir.ui.menu,name:menu_move_form_supp"
-msgid "Moves from Suppliers"
-msgstr "ÐоÑÑавки Ð¾Ñ Ð¿Ð¾ÑÑавÑиков"
-
-msgctxt "model:ir.ui.menu,name:menu_move_form_supp_proceed"
-msgid "Moves from Suppliers Waiting Arrival"
-msgstr "ÐжидаÑÑийÑÑ Ð¿ÑиÑ
од Ð¾Ñ Ð¿Ð¾ÑÑавÑика"
-
msgctxt "model:ir.ui.menu,name:menu_period_list"
msgid "Periods"
-msgstr ""
+msgstr "ÐеÑиодÑ"
msgctxt "model:ir.ui.menu,name:menu_reporting"
msgid "Reporting"
msgstr "ÐÑÑеÑноÑÑÑ"
-msgctxt "model:ir.ui.menu,name:menu_shipment_in_draft"
-msgid "Draft Supplier Shipment"
-msgstr ""
-
msgctxt "model:ir.ui.menu,name:menu_shipment_in_form"
msgid "Supplier Shipments"
msgstr "ÐÑиÑ
од Ð¾Ñ Ð¿Ð¾ÑÑавÑиков"
-msgctxt "model:ir.ui.menu,name:menu_shipment_in_received"
-msgid "Received Supplier shipments"
-msgstr "ÐоÑÑÑÐ¿Ð»ÐµÐ½Ð¸Ñ Ð¾Ñ Ð¿Ð¾ÑÑавÑика"
-
msgctxt "model:ir.ui.menu,name:menu_shipment_in_return_form"
msgid "Supplier Return Shipments"
msgstr "ÐозвÑаÑÑ Ð¿Ð¾ÑÑавÑикÑ"
-msgctxt "model:ir.ui.menu,name:menu_shipment_internal_assigned_form"
-msgid "Assigned Internal Shipments"
-msgstr "ÐÑполненнÑе внÑÑÑенние пеÑемеÑениÑ"
-
-msgctxt "model:ir.ui.menu,name:menu_shipment_internal_draft_form"
-msgid "Draft Internal Shipments"
-msgstr "ЧеÑновик внÑÑÑенниÑ
пеÑемеÑений"
-
msgctxt "model:ir.ui.menu,name:menu_shipment_internal_form"
msgid "Internal Shipments"
msgstr "ÐнÑÑÑенние пеÑемеÑениÑ"
-msgctxt "model:ir.ui.menu,name:menu_shipment_internal_waiting_form"
-msgid "Internal Shipments Waiting Assignation"
-msgstr "ÐнÑÑÑенние пеÑемеÑÐµÐ½Ð¸Ñ Ð² ожидании"
-
-msgctxt "model:ir.ui.menu,name:menu_shipment_out_assigned"
-msgid "Assigned Customer Shipments"
-msgstr "ÐодÑвеÑжденнÑе оÑгÑÑзки заказÑикам"
-
msgctxt "model:ir.ui.menu,name:menu_shipment_out_form"
msgid "Customer Shipments"
msgstr "ÐÑгÑÑзки заказÑикам"
-msgctxt "model:ir.ui.menu,name:menu_shipment_out_ready"
-msgid "Customer Shipments Ready for Shipping"
-msgstr "ÐÑгÑÑзки заказÑикам гоÑовÑе к оÑпÑавке"
-
msgctxt "model:ir.ui.menu,name:menu_shipment_out_return_form"
msgid "Customer Return Shipments"
msgstr "ÐозвÑаÑÑ Ð¾Ñ Ð·Ð°ÐºÐ°Ð·Ñика"
-msgctxt "model:ir.ui.menu,name:menu_shipment_out_waiting"
-msgid "Customer Shipments Waiting Assignation"
-msgstr "ÐÑгÑÑзки заказÑикам в ожидании"
-
-#, fuzzy
msgctxt "model:ir.ui.menu,name:menu_stock"
msgid "Inventory & Stock"
-msgstr "УпÑавление Ñкладами"
+msgstr "УÑÐµÑ Ð¸ Склад"
msgctxt "model:ir.ui.menu,name:menu_stock_configuration"
msgid "Stock Configuration"
@@ -1384,7 +1387,7 @@ msgstr "ÐонÑигÑÑаÑÐ¸Ñ Ñклада"
msgctxt "model:product.by_location.start,name:"
msgid "Product by Location"
-msgstr ""
+msgstr "ÐÑодÑкÑÐ¸Ñ Ð¿Ð¾ меÑÑоположениÑ"
msgctxt "model:res.group,name:group_stock"
msgid "Stock"
@@ -1392,7 +1395,7 @@ msgstr "Ð¥ÑанилиÑе"
msgctxt "model:res.group,name:group_stock_admin"
msgid "Stock Administration"
-msgstr "Ð¥ÑанилиÑе ÐдминиÑÑÑиÑование"
+msgstr "ÐдминиÑÑÑиÑование Ñклада"
msgctxt "model:res.group,name:group_stock_force_assignment"
msgid "Stock Force Assignment"
@@ -1412,7 +1415,7 @@ msgstr "Ð¥ÑанилиÑе ÑÑÑока опиÑи"
msgctxt "model:stock.location,name:"
msgid "Stock Location"
-msgstr "ÐеÑÑонаÑ
ождение Ñ
ÑанилиÑа"
+msgstr "Склад ÐеÑÑоположение"
msgctxt "model:stock.location,name:location_customer"
msgid "Customer"
@@ -1424,7 +1427,7 @@ msgstr "Ðона поÑÑавки"
msgctxt "model:stock.location,name:location_lost_found"
msgid "Lost and Found"
-msgstr "УÑÑаÑеннÑй и обÑеÑеннÑй"
+msgstr "УÑÑаÑÐµÐ½Ð½Ð°Ñ Ð¸ обÑеÑеннаÑ"
msgctxt "model:stock.location,name:location_output"
msgid "Output Zone"
@@ -1448,23 +1451,23 @@ msgstr "Ð¥ÑанилиÑе пеÑемеÑение ÑоваÑа"
msgctxt "model:stock.period,name:"
msgid "Stock Period"
-msgstr ""
+msgstr "ÐеÑÐ¸Ð¾Ð´Ñ Ñ
ÑанениÑ"
msgctxt "model:stock.period.cache,name:"
msgid "Stock Period Cache"
-msgstr ""
+msgstr "СкладÑкие запаÑÑ Ð¿Ð¾ пеÑиодÑ"
msgctxt "model:stock.product_quantities_warehouse,name:"
msgid "Product Quantities By Warehouse"
-msgstr ""
+msgstr "Ðол-во пÑодÑкÑии по Ñкладам"
msgctxt "model:stock.product_quantities_warehouse.start,name:"
msgid "Product Quantities By Warehouse"
-msgstr ""
+msgstr "Ðол-во пÑодÑкÑии по Ñкладам"
msgctxt "model:stock.products_by_locations.start,name:"
msgid "Products by Locations"
-msgstr ""
+msgstr "ÐÑодÑкÑÐ¸Ñ Ð¿Ð¾ меÑÑоположениÑм"
msgctxt "model:stock.shipment.in,name:"
msgid "Supplier Shipment"
@@ -1476,13 +1479,12 @@ msgstr "ÐозвÑÐ°Ñ Ð¿Ð¾ÑÑавÑикÑ"
msgctxt "model:stock.shipment.in.return.assign.failed,name:"
msgid "Assign Supplier Return Shipment"
-msgstr ""
+msgstr "ÐозвÑÐ°Ñ Ð³ÑÑза поÑÑавÑикÑ"
msgctxt "model:stock.shipment.internal,name:"
msgid "Internal Shipment"
msgstr "ÐнÑÑÑеннее пеÑемеÑение"
-#, fuzzy
msgctxt "model:stock.shipment.internal.assign.failed,name:"
msgid "Assign Shipment Internal"
msgstr "ÐнÑÑÑенние назнаÑение поÑÑавки "
@@ -1491,7 +1493,6 @@ msgctxt "model:stock.shipment.out,name:"
msgid "Customer Shipment"
msgstr "ÐÑгÑÑзка заказÑикÑ"
-#, fuzzy
msgctxt "model:stock.shipment.out.assign.failed,name:"
msgid "Assign Shipment Out"
msgstr "ÐнеÑнее назнаÑение гÑÑза"
@@ -1502,305 +1503,271 @@ msgstr "ÐозвÑÐ°Ñ Ð¾Ñ Ð·Ð°ÐºÐ°Ð·Ñика"
msgctxt "odt:stock.shipment.in.restocking_list:"
msgid "/"
-msgstr ""
+msgstr "/"
msgctxt "odt:stock.shipment.in.restocking_list:"
msgid "Code:"
-msgstr ""
+msgstr "Ðод:"
-#, fuzzy
msgctxt "odt:stock.shipment.in.restocking_list:"
msgid "E-Mail:"
-msgstr "E-Mail:"
+msgstr "Ðл.поÑÑа:"
-#, fuzzy
msgctxt "odt:stock.shipment.in.restocking_list:"
msgid "From Location"
-msgstr "Ðз меÑÑа"
+msgstr "Ðз меÑÑоположениÑ"
-#, fuzzy
msgctxt "odt:stock.shipment.in.restocking_list:"
msgid "Phone:"
msgstr "ТелеÑон:"
msgctxt "odt:stock.shipment.in.restocking_list:"
msgid "Planned Date:"
-msgstr ""
+msgstr "ÐÐ»Ð°Ð½Ð¾Ð²Ð°Ñ Ð´Ð°Ñа:"
-#, fuzzy
msgctxt "odt:stock.shipment.in.restocking_list:"
msgid "Product"
-msgstr "ТоваÑно маÑеÑиалÑнÑе ÑенноÑÑи (ТÐЦ)"
+msgstr "ÐÑодÑкÑ"
-#, fuzzy
msgctxt "odt:stock.shipment.in.restocking_list:"
msgid "Quantity"
msgstr "Ðол-во"
msgctxt "odt:stock.shipment.in.restocking_list:"
msgid "Reference:"
-msgstr ""
+msgstr "СÑÑлка:"
-#, fuzzy
msgctxt "odt:stock.shipment.in.restocking_list:"
msgid "Restocking List"
msgstr "СпиÑок пополнениÑ"
msgctxt "odt:stock.shipment.in.restocking_list:"
msgid "Supplier:"
-msgstr ""
+msgstr "ÐоÑÑавÑик:"
-#, fuzzy
msgctxt "odt:stock.shipment.in.restocking_list:"
msgid "To Location"
-msgstr "РмеÑÑо"
+msgstr "РмеÑÑоположение"
msgctxt "odt:stock.shipment.in.restocking_list:"
msgid "VAT Number:"
-msgstr ""
+msgstr "ÐÐÐ:"
msgctxt "odt:stock.shipment.in.restocking_list:"
msgid "Warehouse:"
-msgstr ""
+msgstr "ТоваÑнÑй Ñклад:"
msgctxt "odt:stock.shipment.internal.report:"
msgid "/"
-msgstr ""
+msgstr "/"
msgctxt "odt:stock.shipment.internal.report:"
msgid "Code:"
-msgstr ""
+msgstr "Ðод:"
-#, fuzzy
msgctxt "odt:stock.shipment.internal.report:"
msgid "E-Mail:"
-msgstr "E-Mail:"
+msgstr "Ðл.поÑÑа:"
-#, fuzzy
msgctxt "odt:stock.shipment.internal.report:"
msgid "From Location"
-msgstr "Ðз меÑÑа"
+msgstr "Ðз меÑÑоположениÑ"
msgctxt "odt:stock.shipment.internal.report:"
msgid "From Location:"
-msgstr ""
+msgstr "Ðз меÑÑоположениÑ:"
-#, fuzzy
msgctxt "odt:stock.shipment.internal.report:"
msgid "Internal Shipment"
msgstr "ÐнÑÑÑеннее пеÑемеÑение"
-#, fuzzy
msgctxt "odt:stock.shipment.internal.report:"
msgid "Phone:"
msgstr "ТелеÑон:"
msgctxt "odt:stock.shipment.internal.report:"
msgid "Planned Date:"
-msgstr ""
+msgstr "ÐÐ»Ð°Ð½Ð¾Ð²Ð°Ñ Ð´Ð°Ñа:"
-#, fuzzy
msgctxt "odt:stock.shipment.internal.report:"
msgid "Product"
-msgstr "ТоваÑно маÑеÑиалÑнÑе ÑенноÑÑи (ТÐЦ)"
+msgstr "ÐÑодÑкÑ"
-#, fuzzy
msgctxt "odt:stock.shipment.internal.report:"
msgid "Quantity"
msgstr "Ðол-во"
msgctxt "odt:stock.shipment.internal.report:"
msgid "Reference:"
-msgstr ""
+msgstr "СÑÑлка:"
-#, fuzzy
msgctxt "odt:stock.shipment.internal.report:"
msgid "To Location"
-msgstr "РмеÑÑо"
+msgstr "РмеÑÑоположение"
msgctxt "odt:stock.shipment.internal.report:"
msgid "To Location:"
-msgstr ""
+msgstr "РмеÑÑоположение:"
msgctxt "odt:stock.shipment.internal.report:"
msgid "VAT Number:"
-msgstr ""
+msgstr "ÐÐÐ:"
msgctxt "odt:stock.shipment.out.delivery_note:"
msgid "/"
-msgstr ""
+msgstr "/"
msgctxt "odt:stock.shipment.out.delivery_note:"
msgid "Customer Code:"
-msgstr ""
+msgstr "Ðод заказÑика:"
-#, fuzzy
msgctxt "odt:stock.shipment.out.delivery_note:"
msgid "Date:"
msgstr "ÐаÑа:"
-#, fuzzy
msgctxt "odt:stock.shipment.out.delivery_note:"
msgid "Delivery Note"
-msgstr "Ðакладной"
+msgstr "ÐакладнаÑ"
-#, fuzzy
msgctxt "odt:stock.shipment.out.delivery_note:"
msgid "E-Mail:"
-msgstr "E-Mail:"
+msgstr "Ðл.поÑÑа:"
-#, fuzzy
msgctxt "odt:stock.shipment.out.delivery_note:"
msgid "Phone:"
msgstr "ТелеÑон:"
-#, fuzzy
msgctxt "odt:stock.shipment.out.delivery_note:"
msgid "Product"
-msgstr "ТоваÑно маÑеÑиалÑнÑе ÑенноÑÑи (ТÐЦ)"
+msgstr "ÐÑодÑкÑ"
-#, fuzzy
msgctxt "odt:stock.shipment.out.delivery_note:"
msgid "Quantity"
msgstr "Ðол-во"
msgctxt "odt:stock.shipment.out.delivery_note:"
msgid "Reference:"
-msgstr ""
+msgstr "СÑÑлка:"
msgctxt "odt:stock.shipment.out.delivery_note:"
msgid "Shipment Number:"
-msgstr ""
+msgstr "ÐÐ¾Ð¼ÐµÑ Ð´Ð¾ÑÑавки:"
msgctxt "odt:stock.shipment.out.delivery_note:"
msgid "VAT Number:"
-msgstr ""
+msgstr "ÐÐÐ:"
msgctxt "odt:stock.shipment.out.picking_list:"
msgid "/"
-msgstr ""
+msgstr "/"
msgctxt "odt:stock.shipment.out.picking_list:"
msgid "Code:"
-msgstr ""
+msgstr "Ðод:"
msgctxt "odt:stock.shipment.out.picking_list:"
msgid "Customer:"
-msgstr ""
+msgstr "ÐаказÑик:"
-#, fuzzy
msgctxt "odt:stock.shipment.out.picking_list:"
msgid "E-Mail:"
-msgstr "E-Mail:"
+msgstr "Ðл.поÑÑа:"
-#, fuzzy
msgctxt "odt:stock.shipment.out.picking_list:"
msgid "From Location"
-msgstr "Ðз меÑÑа"
+msgstr "Ðз меÑÑоположениÑ"
-#, fuzzy
msgctxt "odt:stock.shipment.out.picking_list:"
msgid "Phone:"
msgstr "ТелеÑон:"
-#, fuzzy
msgctxt "odt:stock.shipment.out.picking_list:"
msgid "Picking List"
-msgstr "Ð¡Ð±Ð¾Ñ Ð¡Ð¿Ð¸Ñок"
+msgstr "СпиÑок вÑбоÑа"
msgctxt "odt:stock.shipment.out.picking_list:"
msgid "Planned Date:"
-msgstr ""
+msgstr "ÐÐ»Ð°Ð½Ð¾Ð²Ð°Ñ Ð´Ð°Ñа:"
-#, fuzzy
msgctxt "odt:stock.shipment.out.picking_list:"
msgid "Product"
-msgstr "ТоваÑно маÑеÑиалÑнÑе ÑенноÑÑи (ТÐЦ)"
+msgstr "ÐÑодÑкÑ"
-#, fuzzy
msgctxt "odt:stock.shipment.out.picking_list:"
msgid "Quantity"
msgstr "Ðол-во"
msgctxt "odt:stock.shipment.out.picking_list:"
msgid "Reference:"
-msgstr ""
+msgstr "СÑÑлка:"
-#, fuzzy
msgctxt "odt:stock.shipment.out.picking_list:"
msgid "To Location"
-msgstr "РмеÑÑо"
+msgstr "РмеÑÑоположение"
msgctxt "odt:stock.shipment.out.picking_list:"
msgid "VAT Number:"
-msgstr ""
+msgstr "ÐÐÐ:"
msgctxt "odt:stock.shipment.out.picking_list:"
msgid "Warehouse:"
-msgstr ""
+msgstr "ТоваÑнÑй Ñклад:"
msgctxt "odt:stock.shipment.out.return.restocking_list:"
msgid "/"
-msgstr ""
+msgstr "/"
msgctxt "odt:stock.shipment.out.return.restocking_list:"
msgid "Code:"
-msgstr ""
+msgstr "Ðод:"
-#, fuzzy
msgctxt "odt:stock.shipment.out.return.restocking_list:"
msgid "E-Mail:"
-msgstr "E-Mail:"
+msgstr "Ðл.поÑÑа:"
-#, fuzzy
msgctxt "odt:stock.shipment.out.return.restocking_list:"
msgid "From Location"
-msgstr "Ðз меÑÑа"
+msgstr "Ðз меÑÑоположениÑ"
-#, fuzzy
msgctxt "odt:stock.shipment.out.return.restocking_list:"
msgid "Phone:"
msgstr "ТелеÑон:"
msgctxt "odt:stock.shipment.out.return.restocking_list:"
msgid "Planned Date:"
-msgstr ""
+msgstr "ÐÐ»Ð°Ð½Ð¾Ð²Ð°Ñ Ð´Ð°Ñа:"
-#, fuzzy
msgctxt "odt:stock.shipment.out.return.restocking_list:"
msgid "Product"
-msgstr "ТоваÑно маÑеÑиалÑнÑе ÑенноÑÑи (ТÐЦ)"
+msgstr "ÐÑодÑкÑ"
-#, fuzzy
msgctxt "odt:stock.shipment.out.return.restocking_list:"
msgid "Quantity"
msgstr "Ðол-во"
msgctxt "odt:stock.shipment.out.return.restocking_list:"
msgid "Reference:"
-msgstr ""
+msgstr "СÑÑлка:"
-#, fuzzy
msgctxt "odt:stock.shipment.out.return.restocking_list:"
msgid "Restocking List"
msgstr "СпиÑок пополнениÑ"
msgctxt "odt:stock.shipment.out.return.restocking_list:"
msgid "Supplier:"
-msgstr ""
+msgstr "ÐоÑÑавÑик:"
-#, fuzzy
msgctxt "odt:stock.shipment.out.return.restocking_list:"
msgid "To Location"
-msgstr "РмеÑÑо"
+msgstr "РмеÑÑоположение"
msgctxt "odt:stock.shipment.out.return.restocking_list:"
msgid "VAT Number:"
-msgstr ""
+msgstr "ÐÐÐ:"
msgctxt "odt:stock.shipment.out.return.restocking_list:"
msgid "Warehouse:"
-msgstr ""
+msgstr "ТоваÑнÑй Ñклад:"
msgctxt "selection:stock.inventory,state:"
msgid "Canceled"
@@ -1820,7 +1787,7 @@ msgstr "ÐаказÑик"
msgctxt "selection:stock.location,type:"
msgid "Lost and Found"
-msgstr "УÑÑаÑеннÑй и обÑеÑеннÑй"
+msgstr "УÑÑаÑÐµÐ½Ð½Ð°Ñ Ð¸ обÑеÑеннаÑ"
msgctxt "selection:stock.location,type:"
msgid "Production"
@@ -1858,12 +1825,10 @@ msgctxt "selection:stock.move,state:"
msgid "Draft"
msgstr "ЧеÑновик"
-#, fuzzy
msgctxt "selection:stock.period,state:"
msgid "Closed"
msgstr "ÐакÑÑÑо"
-#, fuzzy
msgctxt "selection:stock.period,state:"
msgid "Draft"
msgstr "ЧеÑновик"
@@ -1970,11 +1935,11 @@ msgstr "Ð¥ÑанилиÑе"
msgctxt "view:product.by_location.start:"
msgid "Product by Location"
-msgstr ""
+msgstr "ÐÑодÑкÑÐ¸Ñ Ð¿Ð¾ меÑÑоположениÑ"
msgctxt "view:product.product:"
msgid "Products"
-msgstr "ТÐЦ"
+msgstr "ÐÑодÑкÑиÑ"
msgctxt "view:stock.configuration:"
msgid "Stock Configuration"
@@ -2002,7 +1967,7 @@ msgstr "ÐÐ¾Ð»Ð½Ð°Ñ Ð¸Ð½Ð²ÐµÐ½ÑаÑизаÑиÑ"
msgctxt "view:stock.inventory:"
msgid "Confirm"
-msgstr "ÐодÑвеÑждаÑÑ"
+msgstr "ÐодÑвеÑдиÑÑ"
msgctxt "view:stock.inventory:"
msgid "Inventories"
@@ -2014,19 +1979,15 @@ msgstr "ÐнвенÑаÑизаÑиÑ"
msgctxt "view:stock.location:"
msgid "Location"
-msgstr "ÐеÑÑо"
+msgstr "ÐеÑÑоположение"
msgctxt "view:stock.location:"
msgid "Location Quantity"
-msgstr ""
+msgstr "ÐолиÑеÑÑво в меÑÑоположении"
msgctxt "view:stock.location:"
msgid "Locations"
-msgstr "ÐеÑÑа Ñ
ÑанениÑ"
-
-msgctxt "view:stock.location:"
-msgid "Product Stock"
-msgstr "Ð¥ÑанилиÑе ТÐЦ"
+msgstr "ÐеÑÑоположениÑ"
msgctxt "view:stock.move:"
msgid "Move"
@@ -2038,49 +1999,47 @@ msgstr "ÐеÑемеÑениÑ"
msgctxt "view:stock.period.cache:"
msgid "Period Cache"
-msgstr ""
+msgstr "ÐÐ°Ð¿Ð°Ñ Ð¿Ð¾ пеÑиодÑ"
msgctxt "view:stock.period.cache:"
msgid "Period Caches"
-msgstr ""
+msgstr "ÐапаÑÑ Ð¿Ð¾ пеÑиодÑ"
-#, fuzzy
msgctxt "view:stock.period:"
msgid "Close"
msgstr "ÐакÑÑÑÑ"
-#, fuzzy
msgctxt "view:stock.period:"
msgid "Draft"
msgstr "ЧеÑновик"
msgctxt "view:stock.period:"
msgid "Period"
-msgstr ""
+msgstr "ÐеÑиод"
msgctxt "view:stock.period:"
msgid "Periods"
-msgstr ""
+msgstr "ÐеÑиодÑ"
msgctxt "view:stock.product_quantities_warehouse.start:"
msgid "Product Quantities By Warehouse"
-msgstr ""
+msgstr "Ðол-во пÑодÑкÑии по Ñкладам"
msgctxt "view:stock.product_quantities_warehouse:"
msgid "Product Quantities By Warehouse"
-msgstr ""
+msgstr "Ðол-во пÑодÑкÑии по Ñкладам"
msgctxt "view:stock.products_by_locations.start:"
msgid "Products by Locations"
-msgstr ""
+msgstr "ÐÑодÑкÑÐ¸Ñ Ð¿Ð¾ меÑÑоположениÑм"
msgctxt "view:stock.shipment.in.return.assign.failed:"
msgid "Unable to Assign"
-msgstr ""
+msgstr "Ðе ÑдалоÑÑ Ð½Ð°Ð·Ð½Ð°ÑиÑÑ"
msgctxt "view:stock.shipment.in.return.assign.failed:"
msgid "Unable to assign those products:"
-msgstr ""
+msgstr "Ðе ÑдалоÑÑ Ð½Ð°Ð·Ð½Ð°ÑиÑÑ ÑÑи пÑодÑкÑÑ:"
msgctxt "view:stock.shipment.in.return:"
msgid "Assign"
@@ -2099,10 +2058,6 @@ msgid "Draft"
msgstr "ЧеÑновик"
msgctxt "view:stock.shipment.in.return:"
-msgid "Reset to Draft"
-msgstr "СбÑÐ¾Ñ Ð² ÑеÑновик"
-
-msgctxt "view:stock.shipment.in.return:"
msgid "Supplier Return Shipment"
msgstr "ÐозвÑÐ°Ñ Ð¿Ð¾ÑÑавÑикÑ"
@@ -2112,11 +2067,7 @@ msgstr "ÐозвÑаÑÑ Ð¿Ð¾ÑÑавÑикÑ"
msgctxt "view:stock.shipment.in.return:"
msgid "Wait"
-msgstr ""
-
-msgctxt "view:stock.shipment.in.return:"
-msgid "Waiting"
-msgstr "Ðжидание"
+msgstr "ÐжидаÑÑ"
msgctxt "view:stock.shipment.in:"
msgid "Cancel"
@@ -2135,16 +2086,8 @@ msgid "Inventory Moves"
msgstr "УÑÐµÑ Ð¿ÐµÑемеÑений"
msgctxt "view:stock.shipment.in:"
-msgid "Moves"
-msgstr "ÐеÑемеÑениÑ"
-
-msgctxt "view:stock.shipment.in:"
msgid "Receive"
-msgstr ""
-
-msgctxt "view:stock.shipment.in:"
-msgid "Received"
-msgstr "ÐоÑÑÑпило"
+msgstr "ÐоÑÑÑпление"
msgctxt "view:stock.shipment.in:"
msgid "Reset to Draft"
@@ -2160,11 +2103,11 @@ msgstr "ÐÑиÑ
од Ð¾Ñ Ð¿Ð¾ÑÑавÑиков"
msgctxt "view:stock.shipment.internal.assign.failed:"
msgid "Unable to Assign"
-msgstr ""
+msgstr "Ðе ÑдалоÑÑ Ð½Ð°Ð·Ð½Ð°ÑиÑÑ"
msgctxt "view:stock.shipment.internal.assign.failed:"
msgid "Unable to assign those products:"
-msgstr ""
+msgstr "Ðе ÑдалоÑÑ Ð½Ð°Ð·Ð½Ð°ÑиÑÑ ÑÑи пÑодÑкÑÑ:"
msgctxt "view:stock.shipment.internal:"
msgid "Assign"
@@ -2191,20 +2134,16 @@ msgid "Internal Shipments"
msgstr "ÐнÑÑÑенние пеÑемеÑениÑ"
msgctxt "view:stock.shipment.internal:"
-msgid "Reset to Draft"
-msgstr "СбÑÐ¾Ñ Ð² ÑеÑновик"
-
-msgctxt "view:stock.shipment.internal:"
msgid "Waiting"
msgstr "Ðжидание"
msgctxt "view:stock.shipment.out.assign.failed:"
msgid "Unable to Assign"
-msgstr ""
+msgstr "Ðе ÑдалоÑÑ Ð½Ð°Ð·Ð½Ð°ÑиÑÑ"
msgctxt "view:stock.shipment.out.assign.failed:"
msgid "Unable to assign those products:"
-msgstr ""
+msgstr "Ðе ÑдалоÑÑ Ð½Ð°Ð·Ð½Ð°ÑиÑÑ ÑÑи пÑодÑкÑÑ:"
msgctxt "view:stock.shipment.out.return:"
msgid "Cancel"
@@ -2222,7 +2161,6 @@ msgctxt "view:stock.shipment.out.return:"
msgid "Done"
msgstr "ÐÑполнено"
-#, fuzzy
msgctxt "view:stock.shipment.out.return:"
msgid "Draft"
msgstr "ЧеÑновик"
@@ -2236,17 +2174,9 @@ msgid "Inventory Moves"
msgstr "УÑÐµÑ Ð¿ÐµÑемеÑений"
msgctxt "view:stock.shipment.out.return:"
-msgid "Moves"
-msgstr "ÐеÑемеÑениÑ"
-
-msgctxt "view:stock.shipment.out.return:"
msgid "Received"
msgstr "ÐоÑÑÑпило"
-msgctxt "view:stock.shipment.out.return:"
-msgid "Reset to Draft"
-msgstr "СбÑÐ¾Ñ Ð² ÑеÑновики"
-
msgctxt "view:stock.shipment.out:"
msgid "Assign"
msgstr "ÐазнаÑение"
@@ -2284,66 +2214,53 @@ msgid "Outgoing Moves"
msgstr "ÐнеÑнее пеÑемеÑение"
msgctxt "view:stock.shipment.out:"
-msgid "Reset to Draft"
-msgstr "СбÑÐ¾Ñ Ð² ÑеÑновик"
-
-msgctxt "view:stock.shipment.out:"
msgid "Waiting"
msgstr "Ðжидание"
-#, fuzzy
msgctxt "wizard_button:product.by_location,start,end:"
msgid "Cancel"
msgstr "ÐÑмениÑÑ"
-#, fuzzy
msgctxt "wizard_button:product.by_location,start,open:"
msgid "Open"
msgstr "ÐÑкÑÑÑÑ"
-#, fuzzy
msgctxt "wizard_button:stock.product_quantities_warehouse,start,end:"
msgid "Cancel"
msgstr "ÐÑмениÑÑ"
-#, fuzzy
msgctxt "wizard_button:stock.product_quantities_warehouse,start,open_:"
msgid "Open"
msgstr "ÐÑкÑÑÑÑ"
-#, fuzzy
msgctxt "wizard_button:stock.products_by_locations,start,end:"
msgid "Cancel"
msgstr "ÐÑмениÑÑ"
-#, fuzzy
msgctxt "wizard_button:stock.products_by_locations,start,open:"
msgid "Open"
msgstr "ÐÑкÑÑÑÑ"
-#, fuzzy
msgctxt "wizard_button:stock.shipment.in.return.assign,failed,end:"
msgid "Ok"
-msgstr "Ðа"
+msgstr "Ðк"
msgctxt "wizard_button:stock.shipment.in.return.assign,failed,force:"
msgid "Force Assign"
-msgstr ""
+msgstr "ÐÑинÑдиÑелÑно назнаÑиÑÑ"
-#, fuzzy
msgctxt "wizard_button:stock.shipment.internal.assign,failed,end:"
msgid "Ok"
-msgstr "Ðа"
+msgstr "Ðк"
msgctxt "wizard_button:stock.shipment.internal.assign,failed,force:"
msgid "Force Assign"
-msgstr ""
+msgstr "ÐÑинÑдиÑелÑно назнаÑиÑÑ"
-#, fuzzy
msgctxt "wizard_button:stock.shipment.out.assign,failed,end:"
msgid "Ok"
-msgstr "Ðа"
+msgstr "Ðк"
msgctxt "wizard_button:stock.shipment.out.assign,failed,force:"
msgid "Force Assign"
-msgstr ""
+msgstr "ÐÑинÑдиÑелÑно назнаÑиÑÑ"
diff --git a/location.py b/location.py
index d6146dd..13cc197 100644
--- a/location.py
+++ b/location.py
@@ -95,17 +95,11 @@ class Location(ModelSQL, ModelView):
def __setup__(cls):
super(Location, cls).__setup__()
cls._order.insert(0, ('name', 'ASC'))
- cls._constraints += [
- ('check_recursion', 'recursive_locations'),
- ('check_type_for_moves', 'invalid_type_for_moves'),
- ]
cls._error_messages.update({
- 'recursive_locations': \
- 'You can not create recursive locations!',
- 'invalid_type_for_moves': 'A location with existing moves ' \
- 'cannot be changed to a type that does not support moves.',
- 'child_of_warehouse': 'Location "%s" must be a child of ' \
- 'warehouse "%s"!',
+ 'invalid_type_for_moves': ('Location "%s" with existing 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
@@ -116,6 +110,13 @@ class Location(ModelSQL, ModelView):
table = TableHandler(cursor, cls, module_name)
table.index_action(['left', 'right'], 'add')
+ @classmethod
+ def validate(cls, locations):
+ super(Location, cls).validate(locations)
+ cls.check_recursion(locations)
+ for location in locations:
+ location.check_type_for_moves()
+
def check_type_for_moves(self):
""" Check locations with moves have types compatible with moves. """
invalid_move_types = ['warehouse', 'view']
@@ -125,8 +126,7 @@ class Location(ModelSQL, ModelView):
('to_location', '=', self.id),
('from_location', '=', self.id),
])):
- return False
- return True
+ self.raise_user_error('invalid_type_for_moves', (self.rec_name,))
@staticmethod
def default_active():
@@ -235,10 +235,10 @@ class Location(ModelSQL, ModelView):
to_update.clear()
@classmethod
- def create(cls, vals):
- location = super(Location, cls).create(vals)
- cls._set_warehouse_parent([location])
- return location
+ def create(cls, vlist):
+ locations = super(Location, cls).create(vlist)
+ cls._set_warehouse_parent(locations)
+ return locations
@classmethod
def write(cls, locations, vals):
@@ -265,8 +265,10 @@ class Location(ModelSQL, ModelView):
('parent', 'child_of', warehouse.id),
]))
if location not in childs:
- cls.raise_user_error('child_of_warehouse',
- (location.name, warehouse.name))
+ cls.raise_user_error('child_of_warehouse', {
+ 'location': location.rec_name,
+ 'warehouse': warehouse.rec_name,
+ })
@classmethod
def copy(cls, locations, default=None):
@@ -335,10 +337,10 @@ class ProductsByLocationsStart(ModelView):
'Products by Locations'
__name__ = 'stock.products_by_locations.start'
forecast_date = fields.Date(
- 'At Date', help='Allow to compute expected '\
- 'stock quantities for this date.\n'\
- '* An empty value is an infinite date in the future.\n'\
- '* A date in the past will provide historical values.')
+ 'At Date', help=('Allow to compute expected '
+ 'stock quantities for this date.\n'
+ '* An empty value is an infinite date in the future.\n'
+ '* A date in the past will provide historical values.'))
@staticmethod
def default_forecast_date():
diff --git a/location.xml b/location.xml
index f67398f..41d2f3e 100644
--- a/location.xml
+++ b/location.xml
@@ -6,67 +6,20 @@ this repository contains the full copyright notices and license terms. -->
<record model="ir.ui.view" id="location_view_form">
<field name="model">stock.location</field>
<field name="type">form</field>
- <field name="arch" type="xml">
- <![CDATA[
- <form string="Location">
- <label name="name"/>
- <field name="name"/>
- <label name="code"/>
- <field name="code"/>
- <label name="parent"/>
- <field name="parent"/>
- <label name="active"/>
- <field name="active"/>
- <label name="type"/>
- <field name="type"/>
- <newline/>
- <label name="address"/>
- <field name="address"/>
- <newline/>
- <label name="input_location"/>
- <field name="input_location"/>
- <newline/>
- <label name="output_location"/>
- <field name="output_location"/>
- <newline/>
- <label name="storage_location"/>
- <field name="storage_location"/>
- </form>
- ]]>
- </field>
+ <field name="name">location_form</field>
</record>
<record model="ir.ui.view" id="location_view_tree">
<field name="model">stock.location</field>
<field name="type">tree</field>
<field name="priority" eval="20"/>
<field name="field_childs">childs</field>
- <field name="arch" type="xml">
- <![CDATA[
- <tree string="Locations" keyword_open="1">
- <field name="name"/>
- <field name="code"/>
- <field name="type"/>
- <field name="active" tree_invisible="1"/>
- <field name="parent" tree_invisible="1"/>
- <field name="childs" tree_invisible="1"/>
- </tree>
- ]]>
- </field>
+ <field name="name">location_tree</field>
</record>
<record model="ir.ui.view" id="location_view_list">
<field name="model">stock.location</field>
<field name="type">tree</field>
<field name="priority" eval="10"/>
- <field name="arch" type="xml">
- <![CDATA[
- <tree string="Locations">
- <field name="name"/>
- <field name="code"/>
- <field name="type"/>
- <field name="active" tree_invisible="1"/>
- </tree>
- ]]>
- </field>
+ <field name="name">location_list</field>
</record>
<record model="ir.action.act_window" id="act_location_tree">
@@ -153,35 +106,13 @@ this repository contains the full copyright notices and license terms. -->
<record model="ir.ui.view" id="party_view_form">
<field name="model">party.party</field>
<field name="inherit" ref="party.party_view_form"/>
- <field name="arch" type="xml">
- <![CDATA[
- <data>
- <xpath
- expr="/form/notebook/page[@id="accounting"]"
- position="after">
- <page string="Stock" id="stock">
- <label name="customer_location"/>
- <field name="customer_location"/>
- <label name="supplier_location"/>
- <field name="supplier_location"/>
- </page>
- </xpath>
- </data>
- ]]>
- </field>
+ <field name="name">party_form</field>
</record>
<record model="ir.ui.view" id="products_by_locations_start_view_form">
<field name="model">stock.products_by_locations.start</field>
<field name="type">form</field>
- <field name="arch" type="xml">
- <![CDATA[
- <form string="Products by Locations">
- <label name="forecast_date"/>
- <field name="forecast_date"/>
- </form>
- ]]>
- </field>
+ <field name="name">products_by_locations_start_form</field>
</record>
</data>
diff --git a/move.py b/move.py
index 199ad19..1c2cc91 100644
--- a/move.py
+++ b/move.py
@@ -1,8 +1,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.
from decimal import Decimal
-from functools import reduce
-from trytond.model import ModelView, ModelSQL, fields
+from functools import reduce, partial
+from trytond.model import Workflow, ModelView, ModelSQL, fields
from trytond.backend import TableHandler
from trytond.pyson import In, Eval, Not, Equal, If, Get, Bool
from trytond.transaction import Transaction
@@ -16,7 +16,7 @@ STATES = {
DEPENDS = ['state']
-class Move(ModelSQL, ModelView):
+class Move(Workflow, ModelSQL, ModelView):
"Stock Move"
__name__ = 'stock.move'
_order_name = 'product'
@@ -50,30 +50,17 @@ class Move(ModelSQL, ModelView):
to_location = fields.Many2One("stock.location", "To Location", select=True,
required=True, states=STATES, depends=DEPENDS,
domain=[('type', 'not in', ('warehouse', 'view'))])
- shipment_in = fields.Many2One('stock.shipment.in', 'Supplier Shipment',
- domain=[('company', '=', Eval('company'))], depends=['company'],
- readonly=True, select=True, ondelete='CASCADE')
- shipment_out = fields.Many2One('stock.shipment.out', 'Customer Shipment',
- domain=[('company', '=', Eval('company'))], depends=['company'],
- readonly=True, select=True, ondelete='CASCADE')
- shipment_out_return = fields.Many2One('stock.shipment.out.return',
- 'Customer Return Shipment', readonly=True, select=True,
- domain=[('company', '=', Eval('company'))], depends=['company'],
- ondelete='CASCADE')
- shipment_in_return = fields.Many2One('stock.shipment.in.return',
- 'Supplier Return Shipment', readonly=True, select=True,
- domain=[('company', '=', Eval('company'))], depends=['company'],
- ondelete='CASCADE')
- shipment_internal = fields.Many2One('stock.shipment.internal',
- 'Internal Shipment', readonly=True, select=True, ondelete='CASCADE',
- domain=[('company', '=', Eval('company'))], depends=['company'])
+ shipment = fields.Reference('Shipment', selection='get_shipment',
+ readonly=True, select=True)
+ origin = fields.Reference('Origin', selection='get_origin', select=True,
+ states={
+ 'readonly': Eval('state') != 'draft',
+ },
+ depends=['state'])
planned_date = fields.Date("Planned Date", states={
'readonly': (In(Eval('state'), ['cancel', 'assigned', 'done'])
- | Eval('shipment_in') | Eval('shipment_out')
- | Eval('shipment_in_return') | Eval('shipment_out_return')
- | Eval('shipment_internal'))
- }, depends=['state', 'shipment_in', 'shipment_out',
- 'shipment_in_return', 'shipment_out_return', 'shipment_internal'],
+ | Eval('shipment'))
+ }, depends=['state', 'shipment'],
select=True)
effective_date = fields.Date("Effective Date", readonly=True, select=True)
state = fields.Selection([
@@ -122,33 +109,43 @@ class Move(ModelSQL, ModelView):
('check_from_to_locations',
'CHECK(from_location != to_location)',
'Source and destination location must be different'),
- ('check_shipment',
- 'CHECK((COALESCE(shipment_in, 0) / COALESCE(shipment_in, 1) ' \
- '+ COALESCE(shipment_out, 0) / ' \
- 'COALESCE(shipment_out, 1) ' \
- '+ COALESCE(shipment_internal, 0) / ' \
- 'COALESCE(shipment_internal, 1) ' \
- '+ COALESCE(shipment_in_return, 0) / ' \
- 'COALESCE(shipment_in_return, 1) ' \
- '+ COALESCE(shipment_out_return, 0) / ' \
- 'COALESCE(shipment_out_return, 1)) ' \
- '<= 1)',
- 'Move can be on only one Shipment'),
- ]
- cls._constraints += [
- ('check_period_closed', 'period_closed'),
- ]
+ ]
cls._order[0] = ('id', 'DESC')
cls._error_messages.update({
- 'set_state_draft': 'You can not set state to draft!',
- 'set_state_assigned': 'You can not set state to assigned!',
- 'set_state_done': 'You can not set state to done!',
- 'del_draft_cancel': 'You can only delete draft ' \
- 'or cancelled moves!',
- 'period_closed': 'You can not modify move in closed period!',
- 'modify_assigned_done_cancel': ('You can not modify a move '
- 'in the state: "Assigned", "Done" or "Cancel"'),
+ 'set_state_draft': ('You can not set stock move "%s" to draft '
+ 'state.'),
+ 'set_state_assigned': ('You can not set stock move "%s" to '
+ 'assigned state.'),
+ 'set_state_done': 'You can not set stock move "%s" to done state.',
+ 'del_draft_cancel': ('You can not delete stock move "%s" because '
+ '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.'),
})
+ cls._transitions |= set((
+ ('draft', 'assigned'),
+ ('draft', 'done'),
+ ('draft', 'cancel'),
+ ('assigned', 'draft'),
+ ('assigned', 'done'),
+ ('assigned', 'cancel'),
+ ))
+ cls._buttons.update({
+ 'cancel': {
+ 'invisible': ~Eval('state').in_(['draft', 'assigned']),
+ },
+ 'draft': {
+ 'invisible': ~Eval('state').in_(['assigned']),
+ },
+ 'assign': {
+ 'invisible': ~Eval('state').in_(['assigned']),
+ },
+ 'do': {
+ 'invisible': ~Eval('state').in_(['draft', 'assigned']),
+ },
+ })
@classmethod
def __register__(cls, module_name):
@@ -180,9 +177,10 @@ class Move(ModelSQL, ModelView):
for move in moves:
internal_quantity = cls._get_internal_quantity(
move.quantity, move.uom, move.product)
- cls.write([move], {
- 'internal_quantity': internal_quantity,
- })
+ cursor.execute(
+ 'UPDATE "' + cls._table + '" '
+ 'SET internal_quantity = %s '
+ 'WHERE id = %s', (internal_quantity, move.id))
table = TableHandler(cursor, cls, module_name)
table.not_null_action('internal_quantity', action='add')
@@ -190,6 +188,22 @@ class Move(ModelSQL, ModelView):
table = TableHandler(cursor, cls, module_name)
table.drop_constraint('check_packing_in_out')
+ # Migration from 2.6: merge all shipments
+ table.drop_constraint('check_shipment')
+ shipments = {
+ 'shipment_in': 'stock.shipment.in',
+ 'shipment_out': 'stock.shipment.out',
+ 'shipment_out_return': 'stock.shipment.out.return',
+ 'shipment_in_return': 'stock.shipment.in.return',
+ 'shipment_internal': 'stock.shipment.internal',
+ }
+ 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')
+ table.drop_column(column)
+
# Add index on create_date
table.index_action('create_date', action='add')
@@ -281,8 +295,51 @@ class Move(ModelSQL, ModelView):
if (self.to_location
and self.to_location.type == 'customer'):
return True
+ if (self.from_location and self.to_location
+ and self.from_location.type == 'storage'
+ and self.to_location.type == 'supplier'):
+ return True
return False
+ @staticmethod
+ def _get_shipment():
+ 'Return list of Model names for shipment Reference'
+ return [
+ 'stock.shipment.in',
+ 'stock.shipment.out',
+ 'stock.shipment.out.return',
+ 'stock.shipment.in.return',
+ 'stock.shipment.internal',
+ ]
+
+ @classmethod
+ def get_shipment(cls):
+ Model = Pool().get('ir.model')
+ models = cls._get_shipment()
+ models = Model.search([
+ ('model', 'in', models),
+ ])
+ return [(None, '')] + [(m.model, m.name) for m in models]
+
+ @staticmethod
+ def _get_origin():
+ 'Return list of Model names for origin Reference'
+ return []
+
+ @classmethod
+ def get_origin(cls):
+ Model = Pool().get('ir.model')
+ models = cls._get_origin()
+ models = Model.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)
+
@classmethod
def check_period_closed(cls, moves):
Period = Pool().get('stock.period')
@@ -295,8 +352,10 @@ class Move(ModelSQL, ModelView):
date = (move.effective_date if move.effective_date
else move.planned_date)
if date and date < period.date:
- return False
- return True
+ cls.raise_user_error('period_closed', {
+ 'move': move.rec_name,
+ 'period': period.rec_name,
+ })
def get_rec_name(self, name):
return ("%s%s %s"
@@ -306,13 +365,10 @@ class Move(ModelSQL, ModelView):
def search_rec_name(cls, name, clause):
return [('product',) + clause[1:]]
- @classmethod
- def _update_product_cost_price(cls, product_id, quantity, uom, unit_price,
- currency, company, date):
+ def _update_product_cost_price(self, direction):
"""
Update the cost price on the given product.
- The quantity must be positive if incoming and negative if outgoing.
- The date is for the currency rate calculation.
+ The direction must be "in" if incoming and "out" if outgoing.
"""
pool = Pool()
Uom = pool.get('product.uom')
@@ -320,24 +376,21 @@ class Move(ModelSQL, ModelView):
ProductTemplate = pool.get('product.template')
Location = pool.get('stock.location')
Currency = pool.get('currency.currency')
- Company = pool.get('company.company')
Date = pool.get('ir.date')
- if isinstance(uom, (int, long)):
- uom = Uom(uom)
- if isinstance(currency, (int, long)):
- currency = Currency(currency)
- if isinstance(company, (int, long)):
- company = Company(company)
-
+ if direction == 'in':
+ quantity = self.quantity
+ elif direction == 'out':
+ quantity = -self.quantity
context = {}
- context['locations'] = Location.search([
+ locations = Location.search([
('type', '=', 'storage'),
])
+ context['locations'] = [l.id for l in locations]
context['stock_date_end'] = Date.today()
with Transaction().set_context(context):
- product = Product(product_id)
- qty = Uom.compute_qty(uom, quantity, product.default_uom)
+ product = Product(self.product.id)
+ qty = Uom.compute_qty(self.uom, quantity, product.default_uom)
qty = Decimal(str(qty))
if hasattr(Product, 'cost_price'):
@@ -346,11 +399,12 @@ class Move(ModelSQL, ModelView):
product_qty = product.template.quantity
product_qty = Decimal(str(product_qty))
# convert wrt currency
- with Transaction().set_context(date=date):
- unit_price = Currency.compute(currency, unit_price,
- company.currency, round=False)
+ with Transaction().set_context(date=self.effective_date):
+ unit_price = Currency.compute(self.currency, self.unit_price,
+ self.company.currency, round=False)
# convert wrt to the uom
- unit_price = Uom.compute_price(uom, unit_price, product.default_uom)
+ unit_price = Uom.compute_price(self.uom, unit_price,
+ product.default_uom)
if product_qty + qty != Decimal('0.0'):
new_cost_price = (
(product.cost_price * product_qty) + (unit_price * qty)
@@ -360,13 +414,15 @@ class Move(ModelSQL, ModelView):
if hasattr(Product, 'cost_price'):
digits = Product.cost_price.digits
+ write = partial(Product.write, [product])
else:
digits = ProductTemplate.cost_price.digits
+ write = partial(ProductTemplate.write, [product.template])
new_cost_price = new_cost_price.quantize(
Decimal(str(10.0 ** -digits[1])))
with Transaction().set_user(0, set_context=True):
- Product.write([product], {
+ write({
'cost_price': new_cost_price,
})
@@ -378,138 +434,116 @@ class Move(ModelSQL, ModelView):
return internal_quantity
@classmethod
- def create(cls, vals):
+ @ModelView.button
+ @Workflow.transition('draft')
+ def draft(cls, moves):
+ pass
+
+ @classmethod
+ @ModelView.button
+ @Workflow.transition('assigned')
+ def assign(cls, moves):
pool = Pool()
- Location = pool.get('stock.location')
- Product = pool.get('product.product')
- Uom = pool.get('product.uom')
Date = pool.get('ir.date')
today = Date.today()
- vals = vals.copy()
- effective_date = vals.get('effective_date') or today
-
- product = Product(vals['product'])
- if vals.get('state') == 'done':
- vals['effective_date'] = effective_date
- currency_id = vals.get('currency', cls.default_currency())
- company_id = vals.get('company', cls.default_company())
- from_location = Location(vals['from_location'])
- to_location = Location(vals['to_location'])
- if (from_location.type in ('supplier', 'production')
- and to_location.type == 'storage'
- and product.cost_price_method == 'average'):
- cls._update_product_cost_price(vals['product'],
- vals['quantity'], vals['uom'], vals['unit_price'],
- currency_id, company_id, effective_date)
- if (to_location.type == 'supplier'
- and from_location.type == 'storage'
- and product.cost_price_method == 'average'):
- cls._update_product_cost_price(vals['product'],
- -vals['quantity'], vals['uom'], vals['unit_price'],
- currency_id, company_id, effective_date)
- if not vals.get('cost_price'):
- # Re-read product to get the updated cost_price
- product = Product(vals['product'])
- vals['cost_price'] = product.cost_price
-
- elif vals.get('state') == 'assigned':
- vals['effective_date'] = effective_date
-
- uom = Uom(vals['uom'])
- internal_quantity = cls._get_internal_quantity(vals['quantity'],
- uom, product)
- vals['internal_quantity'] = internal_quantity
- return super(Move, cls).create(vals)
+ for move in moves:
+ if not move.effective_date:
+ move.effective_date = today
+ move.save()
@classmethod
- def write(cls, moves, vals):
- Date = Pool().get('ir.date')
+ @ModelView.button
+ @Workflow.transition('done')
+ def do(cls, moves):
+ pool = Pool()
+ Date = pool.get('ir.date')
today = Date.today()
- effective_date = vals.get('effective_date') or today
+ for move in moves:
+ if not move.effective_date:
+ move.effective_date = today
+ if (move.from_location.type in ('supplier', 'production')
+ and move.to_location.type == 'storage'
+ and move.product.cost_price_method == 'average'):
+ move._update_product_cost_price('in')
+ elif (move.to_location.type == 'supplier'
+ and move.from_location.type == 'storage'
+ and move.product.cost_price_method == 'average'):
+ move._update_product_cost_price('out')
+ if not move.cost_price:
+ move.cost_price = move.product.cost_price
+ move.save()
- if 'state' in vals:
- for move in moves:
- if vals['state'] == 'cancel':
- vals['effective_date'] = None
- if (move.from_location.type in ('supplier', 'production')
- and move.to_location.type == 'storage'
- and move.state != 'cancel'
- and move.product.cost_price_method == 'average'):
- cls._update_product_cost_price(move.product.id,
- -move.quantity, move.uom, move.unit_price,
- move.currency, move.company, today)
- if (move.to_location.type == 'supplier'
- and move.from_location.type == 'storage'
- and move.state != 'cancel'
- and move.product.cost_price_method == 'average'):
- cls._update_product_cost_price(move.product.id,
- move.quantity, move.uom, move.unit_price,
- move.currency, move.company, today)
-
- elif vals['state'] == 'draft':
- if move.state == 'done':
- cls.raise_user_error('set_state_draft')
- elif vals['state'] == 'assigned':
- if move.state in ('cancel', 'done'):
- cls.raise_user_error('set_state_assigned')
- vals['effective_date'] = effective_date
- elif vals['state'] == 'done':
- if move.state in ('cancel'):
- cls.raise_user_error('set_state_done')
- vals['effective_date'] = effective_date
-
- if (move.from_location.type in ('supplier', 'production')
- and move.to_location.type == 'storage'
- and move.state != 'done'
- and move.product.cost_price_method == 'average'):
- cls._update_product_cost_price(move.product.id,
- move.quantity, move.uom, move.unit_price,
- move.currency, move.company, effective_date)
- if (move.to_location.type == 'supplier'
- and move.from_location.type == 'storage'
- and move.state != 'done'
- and move.product.cost_price_method == 'average'):
- cls._update_product_cost_price(move.product.id,
- -move.quantity, move.uom, move.unit_price,
- move.currency, move.company, effective_date)
+ @classmethod
+ @ModelView.button
+ @Workflow.transition('cancel')
+ def cancel(cls, moves):
+ pool = Pool()
+ Date = pool.get('ir.date')
+
+ today = Date.today()
+ for move in moves:
+ move.effective_date = today
+ if (move.from_location.type in ('supplier', 'production')
+ and move.to_location.type == 'storage'
+ and move.product.cost_price_method == 'average'):
+ move._update_product_cost_price('out')
+ elif (move.to_location.type == 'supplier'
+ and move.from_location.type == 'storage'
+ and move.product.cost_price_method == 'average'):
+ move._update_product_cost_price('in')
+ move.effective_date = None
+ move.save()
+ @classmethod
+ def create(cls, vlist):
+ pool = Pool()
+ Product = pool.get('product.product')
+ Uom = pool.get('product.uom')
+
+ vlist = [x.copy() for x in vlist]
+ for vals in vlist:
+ assert vals.get('state', 'draft') == 'draft'
+
+ product = Product(vals['product'])
+ uom = Uom(vals['uom'])
+ internal_quantity = cls._get_internal_quantity(vals['quantity'],
+ uom, product)
+ vals['internal_quantity'] = internal_quantity
+ return super(Move, cls).create(vlist)
+
+ @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):
for move in moves:
if move.state in ('assigned', 'done', 'cancel'):
- cls.raise_user_error('modify_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'), False):
+ ('planned_date', 'effective_date', 'state'), False):
for move in moves:
if move.state in ('done', 'cancel'):
- cls.raise_user_error('modify_assigned_done_cancel')
+ cls.raise_user_error('modify_assigned_done_cancel',
+ (move.rec_name,))
super(Move, cls).write(moves, vals)
- if vals.get('state', '') == 'done':
- for move in moves:
- if not move.cost_price:
- cls.write([move], {
- 'cost_price': move.product.cost_price,
- })
-
for move in moves:
internal_quantity = cls._get_internal_quantity(move.quantity,
move.uom, move.product)
if internal_quantity != move.internal_quantity:
- # Use super to avoid infinite loop
- super(Move, cls).write([move], {
+ cls.write([move], {
'internal_quantity': internal_quantity,
})
@classmethod
def delete(cls, moves):
for move in moves:
- if move.state not in ('draft', 'cancel'):
- cls.raise_user_error('del_draft_cancel')
+ if move.state not in ('draft', 'cancel'):
+ cls.raise_user_error('del_draft_cancel', (move.rec_name,))
super(Move, cls).delete(moves)
def pick_product(self, location_quantities):
@@ -595,13 +629,13 @@ class Move(ModelSQL, ModelView):
values = {
'from_location': from_location.id,
'quantity': qty,
- 'state': 'assigned',
}
if first:
cls.write([move], values)
+ cls.assign([move])
first = False
else:
- cls.copy([move], default=values)
+ cls.assign(cls.copy([move], default=values))
qty_default_uom = Uom.compute_qty(move.uom, qty,
move.product.default_uom, round=False)
diff --git a/move.xml b/move.xml
index 789b4cb..11d7ecd 100644
--- a/move.xml
+++ b/move.xml
@@ -6,73 +6,20 @@ this repository contains the full copyright notices and license terms. -->
<record model="ir.ui.view" id="move_view_form">
<field name="model">stock.move</field>
<field name="type">form</field>
- <field name="arch" type="xml">
- <![CDATA[
- <form string="Move" col="4">
- <label name="from_location"/>
- <field name="from_location"/>
- <label name="to_location"/>
- <field name="to_location"/>
- <label name="product"/>
- <field name="product"/>
- <label name="company"/>
- <field name="company"/>
- <label name="quantity"/>
- <field name="quantity"/>
- <label name="uom"/>
- <field name="uom"/>
- <label name="unit_price"/>
- <field name="unit_price"/>
- <label name="currency"/>
- <field name="currency"/>
- <label name="planned_date"/>
- <field name="planned_date"/>
- <label name="effective_date"/>
- <field name="effective_date"/>
- <separator colspan="4" id="separator"/>
- <label name="state"/>
- <field name="state"/>
- <field name="unit_price_required" invisible="1" colspan="4"/>
- <field name="unit_digits" invisible="1" colspan="4"/>
- </form>
- ]]>
- </field>
+ <field name="name">move_form</field>
</record>
<record model="ir.ui.view" id="move_view_tree">
<field name="model">stock.move</field>
<field name="type">tree</field>
<field name="priority" eval="10"/>
- <field name="arch" type="xml">
- <![CDATA[
- <tree string="Moves">
- <field name="product"/>
- <field name="from_location"/>
- <field name="to_location"/>
- <field name="quantity"/>
- <field name="uom"/>
- <field name="planned_date"/>
- <field name="state"/>
- <field name="unit_digits" tree_invisible="1"/>
- <field name="create_date" tree_invisible="1"/>
- </tree>
- ]]>
- </field>
+ <field name="name">move_tree</field>
</record>
<record model="ir.ui.view" id="move_view_tree_simple">
<field name="model">stock.move</field>
<field name="type">tree</field>
<field name="priority" eval="20"/>
- <field name="arch" type="xml">
- <![CDATA[
- <tree string="Moves">
- <field name="product"/>
- <field name="quantity"/>
- <field name="uom" expand="1"/>
- <field name="unit_digits" tree_invisible="1"/>
- </tree>
- ]]>
- </field>
+ <field name="name">move_tree_simple</field>
</record>
<record model="ir.action.act_window" id="act_move_form">
@@ -90,85 +37,44 @@ this repository contains the full copyright notices and license terms. -->
<field name="view" ref="move_view_form"/>
<field name="act_window" ref="act_move_form"/>
</record>
- <menuitem parent="menu_stock" sequence="40"
- action="act_move_form" id="menu_move_form"/>
- <record model="ir.ui.menu-res.group"
- id="menu_move_form_group_stock">
- <field name="menu" ref="menu_move_form"/>
- <field name="group" ref="group_stock_admin"/>
+ <record model="ir.action.act_window.domain" id="act_move_form_domain_all">
+ <field name="name">All</field>
+ <field name="sequence" eval="10"/>
+ <field name="domain"></field>
+ <field name="act_window" ref="act_move_form"/>
</record>
-
-
- <record model="ir.action.act_window" id="act_move_form_supp">
- <field name="name">Moves from Suppliers</field>
- <field name="res_model">stock.move</field>
+ <record model="ir.action.act_window.domain" id="act_move_form_domain_from_supplier">
+ <field name="name">From Suppliers</field>
+ <field name="sequence" eval="20"/>
<field name="domain">[('from_location.type', '=', 'supplier')]</field>
- <field name="search_value">[('create_date', '>=', DateTime(hour=0, minute=0, second=0, microsecond=0, delta_years=-1))]</field>
- </record>
- <record model="ir.action.act_window.view" id="act_move_form_supp_view1">
- <field name="sequence" eval="1"/>
- <field name="view" ref="move_view_tree"/>
- <field name="act_window" ref="act_move_form_supp"/>
- </record>
- <record model="ir.action.act_window.view"
- id="act_move_form_supp_view2">
- <field name="sequence" eval="2"/>
- <field name="view" ref="move_view_form"/>
- <field name="act_window" ref="act_move_form_supp"/>
- </record>
- <menuitem parent="menu_move_form" sequence="1"
- action="act_move_form_supp" id="menu_move_form_supp"/>
-
- <record model="ir.action.act_window" id="act_move_form_supp_proceed">
- <field name="name">Moves from Suppliers Waiting Arrival</field>
- <field name="res_model">stock.move</field>
- <field name="domain">[('from_location.type', '=', 'supplier'), ('state', '=', 'draft'), ('shipment_in', '=', False)]</field>
- </record>
- <record model="ir.action.act_window.view"
- id="act_move_form_supp_proceed_view1">
- <field name="sequence" eval="1"/>
- <field name="view" ref="move_view_tree"/>
- <field name="act_window" ref="act_move_form_supp_proceed"/>
+ <field name="act_window" ref="act_move_form"/>
</record>
- <record model="ir.action.act_window.view"
- id="act_move_form_supp_proceed_view2">
- <field name="sequence" eval="2"/>
- <field name="view" ref="move_view_form"/>
- <field name="act_window" ref="act_move_form_supp_proceed"/>
+ <record model="ir.action.act_window.domain" id="act_move_form_domain_from_supplier_waiting">
+ <field name="name">From Suppliers Waiting</field>
+ <field name="sequence" eval="30"/>
+ <field name="domain">[('from_location.type', '=', 'supplier'), ('state', '=', 'draft'), ('shipment', '=', None)]</field>
+ <field name="act_window" ref="act_move_form"/>
</record>
- <menuitem parent="menu_move_form_supp" sequence="1"
- action="act_move_form_supp_proceed"
- id="menu_move_form_supp_proceed"/>
-
- <record model="ir.action.act_window" id="act_move_form_cust">
- <field name="name">Moves to Customers</field>
- <field name="res_model">stock.move</field>
+ <record model="ir.action.act_window.domain" id="act_move_form_domain_to_customer">
+ <field name="name">To Customers</field>
+ <field name="sequence" eval="40"/>
<field name="domain">[('to_location.type', '=', 'customer')]</field>
- <field name="search_value">[('create_date', '>=', DateTime(hour=0, minute=0, second=0, microsecond=0, delta_years=-1))]</field>
- </record>
- <record model="ir.action.act_window.view"
- id="act_move_form_cust_view1">
- <field name="sequence" eval="1"/>
- <field name="view" ref="move_view_tree"/>
- <field name="act_window" ref="act_move_form_cust"/>
+ <field name="act_window" ref="act_move_form"/>
</record>
- <record model="ir.action.act_window.view"
- id="act_move_form_cust_view2">
- <field name="sequence" eval="2"/>
- <field name="view" ref="move_view_form"/>
- <field name="act_window" ref="act_move_form_cust"/>
+ <menuitem parent="menu_stock" sequence="40"
+ action="act_move_form" id="menu_move_form"/>
+ <record model="ir.ui.menu-res.group"
+ id="menu_move_form_group_stock">
+ <field name="menu" ref="menu_move_form"/>
+ <field name="group" ref="group_stock_admin"/>
</record>
- <menuitem parent="menu_move_form" sequence="3"
- action="act_move_form_cust" id="menu_move_form_cust"/>
<record model="ir.rule.group" id="rule_group_move">
<field name="model" search="[('model', '=', 'stock.move')]"/>
<field name="global_p" eval="True"/>
</record>
<record model="ir.rule" id="rule_move">
- <field name="field" search="[('name', '=', 'company'), ('model.model', '=', 'stock.move')]"/>
- <field name="operator">=</field>
- <field name="operand">User/Current Company</field>
+ <field name="domain">[('company', '=', user.company.id if user.company else None)]</field>
<field name="rule_group" ref="rule_group_move"/>
</record>
diff --git a/period.py b/period.py
index 0178dda..d7981f2 100644
--- a/period.py
+++ b/period.py
@@ -19,8 +19,8 @@ class Period(ModelSQL, ModelView):
company = fields.Many2One('company.company', 'Company', required=True,
domain=[
('id', If(In('company', Eval('context', {})), '=', '!='),
- Get(Eval('context', {}), 'company', 0)),
- ])
+ Get(Eval('context', {}), 'company', 0)),
+ ])
caches = fields.One2Many('stock.period.cache', 'period', 'Caches')
state = fields.Selection([
('draft', 'Draft'),
@@ -31,11 +31,11 @@ class Period(ModelSQL, ModelView):
def __setup__(cls):
super(Period, cls).__setup__()
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 '
- 'there is still assigned moves!'),
- })
+ '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 '
+ 'there still are assigned moves.'),
+ })
cls._buttons.update({
'draft': {
'invisible': Eval('state') == 'draft',
@@ -45,6 +45,10 @@ class Period(ModelSQL, ModelView):
},
})
+ @staticmethod
+ def default_state():
+ return 'draft'
+
@classmethod
@ModelView.button
def draft(cls, periods):
@@ -88,6 +92,7 @@ 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,
@@ -98,12 +103,14 @@ class Period(ModelSQL, ModelView):
):
pbl = Product.products_by_location([l.id for l in locations])
for (location_id, product_id), quantity in pbl.iteritems():
- Cache.create({
+ to_create.append({
'period': period.id,
'location': location_id,
'product': product_id,
'internal_quantity': quantity,
})
+ if to_create:
+ Cache.create(to_create)
cls.write(periods, {
'state': 'closed',
})
diff --git a/period.xml b/period.xml
index 7c107cd..7365018 100644
--- a/period.xml
+++ b/period.xml
@@ -6,37 +6,12 @@ this repository contains the full copyright notices and license terms. -->
<record model="ir.ui.view" id="period_view_form">
<field name="model">stock.period</field>
<field name="type">form</field>
- <field name="arch" type="xml">
- <![CDATA[
- <form string="Period">
- <label name="company"/>
- <field name="company"/>
- <label name="date"/>
- <field name="date"/>
- <label name="state"/>
- <field name="state"/>
- <group col="2" colspan="2" id="buttons">
- <button name="draft" string="Draft"
- icon="tryton-clear"/>
- <button name="close" string="Close"
- icon="tryton-ok"/>
- </group>
- </form>
- ]]>
- </field>
+ <field name="name">period_form</field>
</record>
<record model="ir.ui.view" id="period_view_list">
<field name="model">stock.period</field>
<field name="type">tree</field>
- <field name="arch" type="xml">
- <![CDATA[
- <tree string="Periods">
- <field name="date"/>
- <field name="company"/>
- <field name="state"/>
- </tree>
- ]]>
- </field>
+ <field name="name">period_list</field>
</record>
<record model="ir.action.act_window" id="act_period_list">
@@ -103,34 +78,12 @@ this repository contains the full copyright notices and license terms. -->
<record model="ir.ui.view" id="period_cache_view_form">
<field name="model">stock.period.cache</field>
<field name="type">form</field>
- <field name="arch" type="xml">
- <![CDATA[
- <form string="Period Cache" col="6">
- <label name="period"/>
- <field name="period" colspan="5"/>
- <label name="location"/>
- <field name="location"/>
- <label name="product"/>
- <field name="product"/>
- <label name="internal_quantity"/>
- <field name="internal_quantity"/>
- </form>
- ]]>
- </field>
+ <field name="name">period_cache_form</field>
</record>
<record model="ir.ui.view" id="period_cache_view_list">
<field name="model">stock.period.cache</field>
<field name="type">tree</field>
- <field name="arch" type="xml">
- <![CDATA[
- <tree string="Period Caches">
- <field name="period"/>
- <field name="location"/>
- <field name="product"/>
- <field name="internal_quantity"/>
- </tree>
- ]]>
- </field>
+ <field name="name">period_cache_list</field>
</record>
<record model="ir.model.access" id="access_period_cache_cache">
diff --git a/product.py b/product.py
index 24555fe..0344367 100644
--- a/product.py
+++ b/product.py
@@ -36,9 +36,9 @@ class Template:
def __setup__(cls):
super(Template, cls).__setup__()
cls._error_messages.update({
- 'change_default_uom': 'You cannot change the default uom for '\
- 'a product which is associated to stock moves.',
- })
+ 'change_default_uom': ('You cannot change the default uom for '
+ 'a product which is associated to stock moves.'),
+ })
cls.cost_price.states['required'] = Or(
cls.cost_price.states.get('required', True),
Eval('type').in_(['goods', 'assets']))
@@ -100,7 +100,7 @@ class Product:
with Transaction().set_context(context):
pbl = cls.products_by_location(
location_ids=Transaction().context['locations'],
- product_ids=[p.id for p in products], with_childs=True)
+ product_ids=quantities.keys(), with_childs=True)
for location in Transaction().context['locations']:
for product in products:
@@ -111,7 +111,7 @@ class Product:
def _search_quantity_eval_domain(line, domain):
field, operator, operand = domain
value = line.get(field)
- if value == None:
+ if value is None:
return False
if operator not in ("=", ">=", "<=", ">", "<", "!="):
return False
@@ -238,20 +238,20 @@ class Product:
if (context['stock_date_end'] < today
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_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'],
@@ -261,120 +261,121 @@ class Product:
# 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 '\
- '(planned_date <= %s) '\
- 'AND '\
- '(planned_date >= %s)'\
- ')'\
- 'OR '\
- '(' \
- '(effective_date <= %s) '\
- 'AND '\
- '(effective_date >= %s)'\
- ')'\
- ')'\
- ')'\
- ')'
+ 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',
- context['stock_date_end'], today,
+ datetime.date.max, context['stock_date_end'],
+ datetime.date.max, today,
context['stock_date_end'], 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)'\
- ')'\
+ 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']])
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_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,
@@ -417,12 +418,12 @@ class Product:
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 = (
+ "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) "
@@ -480,8 +481,8 @@ class Product:
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 + \
+ 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)
raw_lines = cursor.fetchall()
@@ -562,10 +563,10 @@ class ProductByLocationStart(ModelView):
'Product by Location'
__name__ = 'product.by_location.start'
forecast_date = fields.Date(
- 'At Date', help='Allow to compute expected '\
- 'stock quantities for this date.\n'\
- '* An empty value is an infinite date in the future.\n'\
- '* A date in the past will provide historical values.')
+ 'At Date', help=('Allow to compute expected '
+ 'stock quantities for this date.\n'
+ '* An empty value is an infinite date in the future.\n'
+ '* A date in the past will provide historical values.'))
@staticmethod
def default_forecast_date():
@@ -662,12 +663,16 @@ class ProductQuantitiesByWarehouse(ModelSQL, ModelView):
context = {
'stock_date_start': date_start,
'stock_date_end': date,
+ 'forecast': True,
}
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)]
- date_start = date + datetime.timedelta(1)
+ try:
+ date_start = date + datetime.timedelta(1)
+ except OverflowError:
+ pass
cumulate = 0
for date in dates:
cumulate += quantities[date]
diff --git a/product.xml b/product.xml
index f3b6801..3f8fe0e 100644
--- a/product.xml
+++ b/product.xml
@@ -7,20 +7,7 @@ this repository contains the full copyright notices and license terms. -->
<field name="model">product.product</field>
<field name="type">tree</field>
<field name="priority">20</field>
- <field name="arch" type="xml">
- <![CDATA[
- <tree string="Products">
- <field name="name"/>
- <field name="code"/>
- <field name="quantity"/>
- <field name="cost_value"/>
- <field name="forecast_quantity"/>
- <field name="default_uom"/>
- <field name="type"/>
- <field name="active"/>
- </tree>
- ]]>
- </field>
+ <field name="name">product_tree_qty</field>
</record>
<record model="ir.ui.view" id="location_quantity_view_tree">
@@ -28,18 +15,7 @@ this repository contains the full copyright notices and license terms. -->
<field name="type">tree</field>
<field name="field_childs">childs</field>
<field name="priority" eval="20"/>
- <field name="arch" type="xml">
- <![CDATA[
- <tree string="Location Quantity">
- <field name="name"/>
- <field name="quantity"/>
- <field name="forecast_quantity"/>
- <field name="cost_value"/>
- <field name="parent" tree_invisible="1"/>
- <field name="childs" tree_invisible="1"/>
- </tree>
- ]]>
- </field>
+ <field name="name">location_quantity_tree</field>
</record>
<record model="ir.action.act_window" id="act_location_quantity_tree">
@@ -73,45 +49,19 @@ this repository contains the full copyright notices and license terms. -->
<record model="ir.ui.view" id="product_by_location_start_view_form">
<field name="model">product.by_location.start</field>
<field name="type">form</field>
- <field name="arch" type="xml">
- <![CDATA[
- <form string="Product by Location">
- <label name="forecast_date"/>
- <field name="forecast_date"/>
- </form>
- ]]>
- </field>
+ <field name="name">product_by_location_start_form</field>
</record>
<record model="ir.ui.view" id="product_quantities_warehouse_view_graph">
<field name="model">stock.product_quantities_warehouse</field>
<field name="type">graph</field>
- <field name="arch" type="xml">
- <![CDATA[
- <graph string="Product Quantities By Warehouse" type="line"
- legend="0">
- <x>
- <field name="date"/>
- </x>
- <y>
- <field name="quantity" empty="0" interpolation="constant-left" fill="1"/>
- </y>
- </graph>
- ]]>
- </field>
+ <field name="name">product_quantities_warehouse_graph</field>
</record>
<record model="ir.ui.view" id="product_quantities_warehouse_view_list">
<field name="model">stock.product_quantities_warehouse</field>
<field name="type">tree</field>
- <field name="arch" type="xml">
- <![CDATA[
- <tree string="Product Quantities By Warehouse">
- <field name="date"/>
- <field name="quantity"/>
- </tree>
- ]]>
- </field>
+ <field name="name">product_quantities_warehouse_list</field>
</record>
<record model="ir.action.act_window"
@@ -136,14 +86,7 @@ this repository contains the full copyright notices and license terms. -->
<field
name="model">stock.product_quantities_warehouse.start</field>
<field name="type">form</field>
- <field name="arch" type="xml">
- <![CDATA[
- <form string="Product Quantities By Warehouse">
- <label name="warehouse"/>
- <field name="warehouse"/>
- </form>
- ]]>
- </field>
+ <field name="name">product_quantities_warehouse_start_form</field>
</record>
<record model="ir.action.wizard"
diff --git a/setup.py b/setup.py
index 249acba..26e2794 100644
--- a/setup.py
+++ b/setup.py
@@ -25,10 +25,10 @@ requires = []
for dep in info.get('depends', []):
if not re.match(r'(ir|res|webdav)(\W|$)', dep):
requires.append('trytond_%s >= %s.%s, < %s.%s' %
- (dep, major_version, minor_version, major_version,
- minor_version + 1))
+ (dep, major_version, minor_version, major_version,
+ minor_version + 1))
requires.append('trytond >= %s.%s, < %s.%s' %
- (major_version, minor_version, major_version, minor_version + 1))
+ (major_version, minor_version, major_version, minor_version + 1))
tests_require = ['proteus >= %s.%s, < %s.%s' %
(major_version, minor_version, major_version, minor_version + 1)]
@@ -38,17 +38,17 @@ setup(name='trytond_stock',
long_description=read('README'),
author='Tryton',
url='http://www.tryton.org/',
- download_url="http://downloads.tryton.org/" + \
- info.get('version', '0.0.1').rsplit('.', 1)[0] + '/',
+ download_url=("http://downloads.tryton.org/" +
+ info.get('version', '0.0.1').rsplit('.', 1)[0] + '/'),
package_dir={'trytond.modules.stock': '.'},
packages=[
'trytond.modules.stock',
'trytond.modules.stock.tests',
],
package_data={
- 'trytond.modules.stock': info.get('xml', []) \
- + ['tryton.cfg', 'locale/*.po', '*.odt', 'icons/*.svg',
- 'tests/*.rst'],
+ 'trytond.modules.stock': (info.get('xml', [])
+ + ['tryton.cfg', 'view/*.xml', 'locale/*.po', '*.odt',
+ 'icons/*.svg', 'tests/*.rst']),
},
classifiers=[
'Development Status :: 5 - Production/Stable',
@@ -60,6 +60,7 @@ setup(name='trytond_stock',
'Intended Audience :: Manufacturing',
'License :: OSI Approved :: GNU General Public License (GPL)',
'Natural Language :: Bulgarian',
+ 'Natural Language :: Catalan',
'Natural Language :: Czech',
'Natural Language :: Dutch',
'Natural Language :: English',
diff --git a/shipment.py b/shipment.py
index 52e63e1..aeb17d9 100644
--- a/shipment.py
+++ b/shipment.py
@@ -2,6 +2,8 @@
#this repository contains the full copyright notices and license terms.
import operator
import itertools
+import datetime
+
from trytond.model import Workflow, ModelView, ModelSQL, fields
from trytond.modules.company import CompanyReport
from trytond.wizard import Wizard, StateTransition, StateView, StateAction, \
@@ -80,7 +82,7 @@ class ShipmentIn(Workflow, ModelSQL, ModelView):
incoming_moves = fields.Function(fields.One2Many('stock.move', None,
'Incoming Moves',
add_remove=[
- ('shipment_in', '=', None),
+ ('shipment', '=', None),
('from_location', '=', Eval('supplier_location')),
('state', '=', 'draft'),
('to_location', '=', Eval('warehouse_input')),
@@ -111,7 +113,7 @@ class ShipmentIn(Workflow, ModelSQL, ModelView):
depends=['state', 'warehouse', 'warehouse_input',
'warehouse_storage', 'company']),
'get_inventory_moves', setter='set_inventory_moves')
- moves = fields.One2Many('stock.move', 'shipment_in', 'Moves',
+ moves = fields.One2Many('stock.move', 'shipment', 'Moves',
domain=[('company', '=', Eval('company'))], readonly=True,
depends=['company'])
code = fields.Char("Code", size=None, select=True, readonly=True)
@@ -127,12 +129,12 @@ class ShipmentIn(Workflow, ModelSQL, ModelView):
super(ShipmentIn, cls).__setup__()
cls._order[0] = ('id', 'DESC')
cls._error_messages.update({
- 'incoming_move_input_dest': 'Incoming Moves must have ' \
- 'the warehouse input location as destination location!',
- 'inventory_move_input_source': 'Inventory Moves must ' \
- 'have the warehouse input location as source location!',
- 'delete_cancel': 'Supplier Shipment "%s" must be cancelled '\
- 'before deletion!',
+ 'incoming_move_input_dest': ('Incoming Moves must have '
+ 'the warehouse input location as destination location.'),
+ 'inventory_move_input_source': ('Inventory Moves must '
+ 'have the warehouse input location as source location.'),
+ 'delete_cancel': ('Supplier Shipment "%s" must be cancelled '
+ 'before deletion.'),
})
cls._transitions |= set((
('draft', 'received'),
@@ -160,20 +162,20 @@ class ShipmentIn(Workflow, ModelSQL, ModelView):
def __register__(cls, module_name):
cursor = Transaction().cursor
# 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("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,))
old_table = 'stock_packing_in'
if TableHandler.table_exist(cursor, old_table):
@@ -196,10 +198,11 @@ class ShipmentIn(Workflow, ModelSQL, ModelView):
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 shipment.id = move.shipment_in '
+ '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._table, Move._table, cls.__name__))
for company_id, values in itertools.groupby(cursor.fetchall(),
operator.itemgetter(1)):
shipment_ids = [x[0] for x in values]
@@ -307,27 +310,34 @@ class ShipmentIn(Workflow, ModelSQL, ModelView):
for shipment in shipments:
dates = shipment._move_planned_date
incoming_date, inventory_date = dates
+ # Update planned_date only for later to not be too optimistic if
+ # the shipment is not directly received.
Move.write([m for m in shipment.incoming_moves
- if m.state not in ('assigned', 'done', 'cancel')], {
+ if (m.state not in ('assigned', 'done', 'cancel')
+ and ((m.planned_date or datetime.date.max)
+ < (incoming_date or datetime.date.max)))], {
'planned_date': incoming_date,
})
Move.write([m for m in shipment.inventory_moves
- if m.state not in ('assigned', 'done', 'cancel')], {
+ if (m.state not in ('assigned', 'done', 'cancel')
+ and ((m.planned_date or datetime.date.max)
+ < (inventory_date or datetime.date.max)))], {
'planned_date': inventory_date,
})
@classmethod
- def create(cls, values):
+ def create(cls, vlist):
pool = Pool()
Sequence = pool.get('ir.sequence')
Config = pool.get('stock.configuration')
- values = values.copy()
+ vlist = [x.copy() for x in vlist]
config = Config(1)
- values['code'] = Sequence.get_id(config.shipment_in_sequence)
- shipment = super(ShipmentIn, cls).create(values)
- cls._set_move_planned_date([shipment])
- return shipment
+ for values in vlist:
+ values['code'] = Sequence.get_id(config.shipment_in_sequence)
+ shipments = super(ShipmentIn, cls).create(vlist)
+ cls._set_move_planned_date(shipments)
+ return shipments
@classmethod
def write(cls, shipments, values):
@@ -345,42 +355,46 @@ class ShipmentIn(Workflow, ModelSQL, ModelView):
@classmethod
def _get_inventory_moves(cls, incoming_move):
- res = {}
+ pool = Pool()
+ Move = pool.get('stock.move')
if incoming_move.quantity <= 0.0:
return None
- res['product'] = incoming_move.product.id
- res['uom'] = incoming_move.uom.id
- res['quantity'] = incoming_move.quantity
- res['from_location'] = incoming_move.to_location.id
- res['to_location'] = incoming_move.shipment_in.warehouse.\
- storage_location.id
- res['state'] = 'draft'
+ move = Move()
+ move.product = incoming_move.product
+ move.uom = incoming_move.uom
+ move.quantity = incoming_move.quantity
+ move.from_location = incoming_move.to_location
+ move.to_location = incoming_move.shipment.warehouse.storage_location
+ move.state = Move.default_state()
# Product will be considered in stock only when the inventory
# move will be made:
- res['planned_date'] = None
- res['company'] = incoming_move.company.id
- return res
+ move.planned_date = None
+ move.company = incoming_move.company
+ return move
@classmethod
def create_inventory_moves(cls, shipments):
for shipment in shipments:
- inventory_moves = []
+ # Use moves instead of inventory_moves because save reset before
+ # adding new records and as set_inventory_moves is just a proxy to
+ # moves, it will reset also the incoming_moves
+ moves = list(shipment.moves)
for incoming_move in shipment.incoming_moves:
- vals = cls._get_inventory_moves(incoming_move)
- if vals:
- inventory_moves.append(('create', vals))
- if inventory_moves:
- cls.write([shipment], {
- 'inventory_moves': inventory_moves,
- })
+ move = cls._get_inventory_moves(incoming_move)
+ if move:
+ moves.append(move)
+ shipment.moves = moves
+ shipment.save()
@classmethod
def delete(cls, shipments):
+ Move = Pool().get('stock.move')
# Cancel before delete
cls.cancel(shipments)
for shipment in shipments:
if shipment.state != 'cancel':
cls.raise_user_error('delete_cancel', shipment.rec_name)
+ Move.delete([m for s in shipments for m in s.moves])
super(ShipmentIn, cls).delete(shipments)
@classmethod
@@ -388,21 +402,15 @@ class ShipmentIn(Workflow, ModelSQL, ModelView):
@Workflow.transition('cancel')
def cancel(cls, shipments):
Move = Pool().get('stock.move')
- Move.write([m for s in shipments
- for m in s.incoming_moves + s.inventory_moves
- if m.state not in ('cancel', 'done')], {
- 'state': 'cancel',
- })
+ Move.cancel([m for s in shipments
+ for m in s.incoming_moves + s.inventory_moves])
@classmethod
@ModelView.button
@Workflow.transition('draft')
def draft(cls, shipments):
Move = Pool().get('stock.move')
- Move.write([m for s in shipments for m in s.incoming_moves
- if m.state not in ('draft', 'done')], {
- 'state': 'draft',
- })
+ Move.draft([m for s in shipments for m in s.incoming_moves])
Move.delete([m for s in shipments for m in s.inventory_moves
if m.state in ('draft', 'cancel')])
@@ -411,10 +419,7 @@ class ShipmentIn(Workflow, ModelSQL, ModelView):
@Workflow.transition('received')
def receive(cls, shipments):
Move = Pool().get('stock.move')
- Move.write([m for s in shipments for m in s.incoming_moves
- if m.state not in ('done', 'cancel')], {
- 'state': 'done',
- })
+ Move.do([m for s in shipments for m in s.incoming_moves])
cls.create_inventory_moves(shipments)
@classmethod
@@ -424,10 +429,7 @@ class ShipmentIn(Workflow, ModelSQL, ModelView):
pool = Pool()
Move = pool.get('stock.move')
Date = pool.get('ir.date')
- Move.write([m for s in shipments for m in s.inventory_moves
- if m.state not in ('done', 'cancel')], {
- 'state': 'done',
- })
+ Move.do([m for s in shipments for m in s.inventory_moves])
cls.write(shipments, {
'effective_date': Date.today(),
})
@@ -468,7 +470,7 @@ class ShipmentInReturn(Workflow, ModelSQL, ModelView):
Bool(Eval('moves'))),
}, domain=[('type', '=', 'supplier')],
depends=['state', 'moves'])
- moves = fields.One2Many('stock.move', 'shipment_in_return', 'Moves',
+ moves = fields.One2Many('stock.move', 'shipment', 'Moves',
states={
'readonly': And(Or(Not(Equal(Eval('state'), 'draft')),
Not(Bool(Eval('from_location')))),
@@ -493,8 +495,8 @@ class ShipmentInReturn(Workflow, ModelSQL, ModelView):
super(ShipmentInReturn, cls).__setup__()
cls._order[0] = ('id', 'DESC')
cls._error_messages.update({
- 'delete_cancel': 'Supplier Return Shipment "%s" must be '\
- 'cancelled before deletion!',
+ 'delete_cancel': ('Supplier Return Shipment "%s" must be '
+ 'cancelled before deletion.'),
})
cls._transitions |= set((
('draft', 'waiting'),
@@ -559,10 +561,10 @@ class ShipmentInReturn(Workflow, ModelSQL, ModelView):
cursor.execute('SELECT shipment.id, MAX(move.company) '
'FROM "%s" AS shipment '
'INNER JOIN "%s" AS move '
- 'ON shipment.id = move.shipment_in_return '
+ 'ON \'%s,\' || shipment.id = move.shipment '
'GROUP BY shipment.id '
'ORDER BY MAX(move.company)'
- % (cls._table, Move._table))
+ % (cls._table, Move._table, cls.__name__))
for company_id, values in itertools.groupby(cursor.fetchall(),
operator.itemgetter(1)):
shipment_ids = [x[0] for x in values]
@@ -601,23 +603,25 @@ class ShipmentInReturn(Workflow, ModelSQL, ModelView):
Move = Pool().get('stock.move')
for shipment in shipments:
Move.write([m for m in shipment.moves
- if m.state not in ('assigned', 'done', 'cancel')], {
+ if (m.state not in ('assigned', 'done', 'cancel')
+ and m.planned_date != shipment._move_planned_date)], {
'planned_date': shipment._move_planned_date,
})
@classmethod
- def create(cls, values):
+ def create(cls, vlist):
pool = Pool()
Sequence = pool.get('ir.sequence')
Config = pool.get('stock.configuration')
- values = values.copy()
+ vlist = [x.copy() for x in vlist]
config = Config(1)
- values['code'] = Sequence.get_id(
- config.shipment_in_return_sequence.id)
- shipment = super(ShipmentInReturn, cls).create(values)
- cls._set_move_planned_date([shipment])
- return shipment
+ for values in vlist:
+ values['code'] = Sequence.get_id(
+ config.shipment_in_return_sequence.id)
+ shipments = super(ShipmentInReturn, cls).create(vlist)
+ cls._set_move_planned_date(shipments)
+ return shipments
@classmethod
def write(cls, shipments, values):
@@ -626,11 +630,13 @@ class ShipmentInReturn(Workflow, ModelSQL, ModelView):
@classmethod
def delete(cls, shipments):
+ Move = Pool().get('stock.move')
# Cancel before delete
cls.cancel(shipments)
for shipment in shipments:
if shipment.state != 'cancel':
cls.raise_user_error('delete_cancel', shipment.rec_name)
+ Move.delete([m for s in shipments for m in s.moves])
super(ShipmentInReturn, cls).delete(shipments)
@classmethod
@@ -638,10 +644,7 @@ class ShipmentInReturn(Workflow, ModelSQL, ModelView):
@Workflow.transition('draft')
def draft(cls, shipments):
Move = Pool().get('stock.move')
- Move.write([m for s in shipments for m in s.moves
- if m.state not in ('draft', 'done')], {
- 'state': 'draft',
- })
+ Move.draft([m for s in shipments for m in s.moves])
@classmethod
@ModelView.button
@@ -649,20 +652,14 @@ class ShipmentInReturn(Workflow, ModelSQL, ModelView):
def wait(cls, shipments):
Move = Pool().get('stock.move')
for shipment in shipments:
- Move.write([m for m in shipment.moves
- if m.state not in ('cancel', 'draft', 'done')], {
- 'state': 'draft',
- 'planned_date': shipment._move_planned_date,
- })
+ Move.draft([m for m in shipment.moves])
+ cls._set_move_planned_date(shipments)
@classmethod
@Workflow.transition('assigned')
def assign(cls, shipments):
Move = Pool().get('stock.move')
- Move.write([m for s in shipments for m in s.moves
- if m.state not in ('assigned', 'cancel', 'done')], {
- 'state': 'assigned',
- })
+ Move.assign([m for s in shipments for m in s.moves])
@classmethod
@ModelView.button
@@ -672,10 +669,7 @@ class ShipmentInReturn(Workflow, ModelSQL, ModelView):
Move = pool.get('stock.move')
Date = pool.get('ir.date')
- Move.write([m for s in shipments for m in s.moves
- if m.state not in ('done', 'cancel')], {
- 'state': 'done',
- })
+ Move.do([m for s in shipments for m in s.moves])
cls.write(shipments, {
'effective_date': Date.today(),
})
@@ -685,10 +679,7 @@ class ShipmentInReturn(Workflow, ModelSQL, ModelView):
@Workflow.transition('cancel')
def cancel(cls, shipments):
Move = Pool().get('stock.move')
- Move.write([m for s in shipments for m in s.moves
- if m.state not in ('cancel', 'done')], {
- 'state': 'cancel',
- })
+ Move.cancel([m for s in shipments for m in s.moves])
@classmethod
@ModelView.button_action('stock.wizard_shipment_in_return_assign')
@@ -815,7 +806,7 @@ class ShipmentOut(Workflow, ModelSQL, ModelView):
depends=['state', 'warehouse', 'warehouse_storage',
'warehouse_output', 'company']),
'get_inventory_moves', setter='set_inventory_moves')
- moves = fields.One2Many('stock.move', 'shipment_out', 'Moves',
+ moves = fields.One2Many('stock.move', 'shipment', 'Moves',
domain=[('company', '=', Eval('company'))], depends=['company'],
readonly=True)
code = fields.Char("Code", size=None, select=True, readonly=True)
@@ -833,8 +824,8 @@ class ShipmentOut(Workflow, ModelSQL, ModelView):
super(ShipmentOut, cls).__setup__()
cls._order[0] = ('id', 'DESC')
cls._error_messages.update({
- 'delete_cancel': 'Customer Shipment "%s" must be cancelled '\
- 'before deletion!',
+ 'delete_cancel': ('Customer Shipment "%s" must be cancelled '
+ 'before deletion.'),
})
cls._transitions |= set((
('draft', 'waiting'),
@@ -909,10 +900,11 @@ class ShipmentOut(Workflow, ModelSQL, ModelView):
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 shipment.id = move.shipment_out '
+ '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._table, Move._table, cls.__name__))
for company_id, values in itertools.groupby(cursor.fetchall(),
operator.itemgetter(1)):
shipment_ids = [x[0] for x in values]
@@ -1011,11 +1003,8 @@ class ShipmentOut(Workflow, ModelSQL, ModelView):
@Workflow.transition('draft')
def draft(cls, shipments):
Move = Pool().get('stock.move')
- Move.write([m for s in shipments
- for m in s.inventory_moves + s.outgoing_moves
- if m.state not in ('draft', 'done')], {
- 'state': 'draft',
- })
+ Move.draft([m for s in shipments
+ for m in s.inventory_moves + s.outgoing_moves])
@classmethod
@ModelView.button
@@ -1027,31 +1016,31 @@ class ShipmentOut(Workflow, ModelSQL, ModelView):
"""
Move = Pool().get('stock.move')
- Move.write([m for s in shipments for m in s.inventory_moves
- if m.state not in ('draft', 'done')], {
- 'state': 'draft',
- })
+ Move.draft([m for s in shipments for m in s.inventory_moves])
Move.delete([m for s in shipments for m in s.inventory_moves
if m.state in ('draft', 'cancel')])
+ to_create = []
for shipment in shipments:
for move in shipment.outgoing_moves:
if move.state in ('cancel', 'done'):
continue
- Move.create({
- 'from_location': \
- move.shipment_out.warehouse.storage_location.id,
+ to_create.append({
+ 'from_location': (
+ move.shipment.warehouse.storage_location.id),
'to_location': move.from_location.id,
'product': move.product.id,
'uom': move.uom.id,
'quantity': move.quantity,
- 'shipment_out': shipment.id,
+ 'shipment': str(shipment),
'planned_date': move.planned_date,
'state': 'draft',
'company': move.company.id,
'currency': move.currency.id,
'unit_price': move.unit_price,
})
+ if to_create:
+ Move.create(to_create)
@classmethod
@Workflow.transition('assigned')
@@ -1065,10 +1054,7 @@ class ShipmentOut(Workflow, ModelSQL, ModelView):
pool = Pool()
Move = pool.get('stock.move')
Uom = pool.get('product.uom')
- Move.write([m for s in shipments for m in s.inventory_moves
- if m.state not in ('done', 'cancel')], {
- 'state': 'done',
- })
+ Move.do([m for s in shipments for m in s.inventory_moves])
for shipment in shipments:
# Sum all outgoing quantities
@@ -1081,6 +1067,7 @@ class ShipmentOut(Workflow, ModelSQL, ModelView):
outgoing_qty.setdefault(move.product.id, 0.0)
outgoing_qty[move.product.id] += quantity
+ to_create = []
for move in shipment.inventory_moves:
if move.state == 'cancel':
continue
@@ -1104,19 +1091,21 @@ class ShipmentOut(Workflow, ModelSQL, ModelView):
unit_price = Uom.compute_price(move.product.default_uom,
move.product.list_price, move.uom)
- Move.create({
+ to_create.append({
'from_location': move.to_location.id,
'to_location': shipment.customer.customer_location.id,
'product': move.product.id,
'uom': move.uom.id,
'quantity': out_quantity,
- 'shipment_out': shipment.id,
+ 'shipment': str(shipment),
'state': 'draft',
'planned_date': shipment.planned_date,
'company': move.company.id,
'currency': move.company.currency.id,
'unit_price': unit_price,
})
+ if to_create:
+ Move.create(to_create)
#Re-read the shipment and remove exceeding quantities
for move in shipment.outgoing_moves:
@@ -1133,10 +1122,7 @@ class ShipmentOut(Workflow, ModelSQL, ModelView):
})
outgoing_qty[move.product.id] -= removed_qty
- Move.write([m for s in shipments for m in s.outgoing_moves
- if m.state not in ('cancel', 'done')], {
- 'state': 'assigned',
- })
+ Move.assign([m for s in shipments for m in s.outgoing_moves])
@classmethod
@ModelView.button
@@ -1146,10 +1132,7 @@ class ShipmentOut(Workflow, ModelSQL, ModelView):
Move = pool.get('stock.move')
Date = pool.get('ir.date')
- Move.write([m for s in shipments for m in s.outgoing_moves
- if m.state not in ('done', 'cancel')], {
- 'state': 'done',
- })
+ Move.do([m for s in shipments for m in s.outgoing_moves])
cls.write(shipments, {
'effective_date': Date.today(),
})
@@ -1159,11 +1142,8 @@ class ShipmentOut(Workflow, ModelSQL, ModelView):
@Workflow.transition('cancel')
def cancel(cls, shipments):
Move = Pool().get('stock.move')
- Move.write([m for s in shipments
- for m in s.outgoing_moves + s.inventory_moves
- if m.state not in ('cancel', 'done')], {
- 'state': 'cancel',
- })
+ Move.cancel([m for s in shipments
+ for m in s.outgoing_moves + s.inventory_moves])
@property
def _move_planned_date(self):
@@ -1181,26 +1161,29 @@ class ShipmentOut(Workflow, ModelSQL, ModelView):
for shipment in shipments:
outgoing_date, inventory_date = shipment._move_planned_date
Move.write([x for x in shipment.outgoing_moves
- if x.state not in ('assigned', 'done', 'cancel')], {
+ if (x.state not in ('assigned', 'done', 'cancel')
+ and x.planned_date != outgoing_date)], {
'planned_date': outgoing_date,
})
Move.write([x for x in shipment.inventory_moves
- if x.state not in ('assigned', 'done', 'cancel')], {
+ if (x.state not in ('assigned', 'done', 'cancel')
+ and x.planned_date != inventory_date)], {
'planned_date': inventory_date,
})
@classmethod
- def create(cls, values):
+ def create(cls, vlist):
pool = Pool()
Sequence = pool.get('ir.sequence')
Config = pool.get('stock.configuration')
- values = values.copy()
+ vlist = [x.copy() for x in vlist]
config = Config(1)
- values['code'] = Sequence.get_id(config.shipment_out_sequence.id)
- shipment = super(ShipmentOut, cls).create(values)
- cls._set_move_planned_date([shipment])
- return shipment
+ for values in vlist:
+ values['code'] = Sequence.get_id(config.shipment_out_sequence.id)
+ shipments = super(ShipmentOut, cls).create(vlist)
+ cls._set_move_planned_date(shipments)
+ return shipments
@classmethod
def write(cls, shipments, values):
@@ -1218,11 +1201,13 @@ class ShipmentOut(Workflow, ModelSQL, ModelView):
@classmethod
def delete(cls, shipments):
+ Move = Pool().get('stock.move')
# Cancel before delete
cls.cancel(shipments)
for shipment in shipments:
if shipment.state != 'cancel':
cls.raise_user_error('delete_cancel', shipment.rec_name)
+ Move.delete([m for s in shipments for m in s.moves])
super(ShipmentOut, cls).delete(shipments)
@staticmethod
@@ -1258,10 +1243,7 @@ class ShipmentOut(Workflow, ModelSQL, ModelView):
@ModelView.button
def assign_force(cls, shipments):
Move = Pool().get('stock.move')
- Move.write([m for s in shipments for m in s.inventory_moves
- if m.state not in ('cancel', 'done')], {
- 'state': 'assigned',
- })
+ Move.assign([m for s in shipments for m in s.inventory_moves])
cls.assign(shipments)
@@ -1342,7 +1324,7 @@ class ShipmentOutReturn(Workflow, ModelSQL, ModelView):
depends=['state', 'warehouse', 'warehouse_input',
'warehouse_storage', 'company']),
'get_inventory_moves', setter='set_inventory_moves')
- moves = fields.One2Many('stock.move', 'shipment_out_return', 'Moves',
+ moves = fields.One2Many('stock.move', 'shipment', 'Moves',
domain=[('company', '=', Eval('company'))], depends=['company'],
readonly=True)
code = fields.Char("Code", size=None, select=True, readonly=True)
@@ -1358,8 +1340,8 @@ class ShipmentOutReturn(Workflow, ModelSQL, ModelView):
super(ShipmentOutReturn, cls).__setup__()
cls._order[0] = ('id', 'DESC')
cls._error_messages.update({
- 'delete_cancel': 'Customer Return Shipment "%s" must be '\
- 'cancelled before deletion!',
+ 'delete_cancel': ('Customer Return Shipment "%s" must be '
+ 'cancelled before deletion.'),
})
cls._transitions |= set((
('draft', 'received'),
@@ -1411,10 +1393,10 @@ class ShipmentOutReturn(Workflow, ModelSQL, ModelView):
cursor.execute('SELECT shipment.id, MAX(move.company) '
'FROM "%s" AS shipment '
'INNER JOIN "%s" AS move '
- 'ON shipment.id = move.shipment_out_return '
+ 'ON \'%s,\' || shipment.id = move.shipment '
'GROUP BY shipment.id '
'ORDER BY MAX(move.company)'
- % (cls._table, Move._table))
+ % (cls._table, Move._table, cls.__name__))
for company_id, values in itertools.groupby(cursor.fetchall(),
operator.itemgetter(1)):
shipment_ids = [x[0] for x in values]
@@ -1523,27 +1505,30 @@ class ShipmentOutReturn(Workflow, ModelSQL, ModelView):
dates = shipment._get_move_planned_date()
incoming_date, inventory_date = dates
Move.write([x for x in shipment.incoming_moves
- if x.state not in ('assigned', 'done', 'cancel')], {
+ if (x.state not in ('assigned', 'done', 'cancel')
+ and x.planned_date != incoming_date)], {
'planned_date': incoming_date,
})
Move.write([x for x in shipment.inventory_moves
- if x.state not in ('assigned', 'done', 'cancel')], {
+ if (x.state not in ('assigned', 'done', 'cancel')
+ and x.planned_date != inventory_date)], {
'planned_date': inventory_date,
})
@classmethod
- def create(cls, values):
+ def create(cls, vlist):
pool = Pool()
Sequence = pool.get('ir.sequence')
Config = pool.get('stock.configuration')
- values = values.copy()
+ vlist = [x.copy() for x in vlist]
config = Config(1)
- values['code'] = Sequence.get_id(
- config.shipment_out_return_sequence.id)
- shipment = super(ShipmentOutReturn, cls).create(values)
- cls._set_move_planned_date([shipment])
- return shipment
+ for values in vlist:
+ values['code'] = Sequence.get_id(
+ config.shipment_out_return_sequence.id)
+ shipments = super(ShipmentOutReturn, cls).create(vlist)
+ cls._set_move_planned_date(shipments)
+ return shipments
@classmethod
def write(cls, shipments, values):
@@ -1561,11 +1546,13 @@ class ShipmentOutReturn(Workflow, ModelSQL, ModelView):
@classmethod
def delete(cls, shipments):
+ Move = Pool().get('stock.move')
# Cance before delete
cls.cancel(shipments)
for shipment in shipments:
if shipment.state != 'cancel':
cls.raise_user_error('delete_cancel', shipment.rec_name)
+ Move.delete([m for s in shipments for m in s.moves])
super(ShipmentOutReturn, cls).delete(shipments)
@classmethod
@@ -1573,10 +1560,7 @@ class ShipmentOutReturn(Workflow, ModelSQL, ModelView):
@Workflow.transition('draft')
def draft(cls, shipments):
Move = Pool().get('stock.move')
- Move.write([m for s in shipments for m in s.incoming_moves
- if m.state not in ('draft', 'done')], {
- 'state': 'draft',
- })
+ Move.draft([m for s in shipments for m in s.incoming_moves])
Move.delete([m for s in shipments for m in s.inventory_moves
if m.state in ('draft', 'cancel')])
@@ -1585,10 +1569,7 @@ class ShipmentOutReturn(Workflow, ModelSQL, ModelView):
@Workflow.transition('received')
def receive(cls, shipments):
Move = Pool().get('stock.move')
- Move.write([m for s in shipments for m in s.incoming_moves
- if m.state not in ('done', 'cancel')], {
- 'state': 'done',
- })
+ Move.do([m for s in shipments for m in s.incoming_moves])
cls.create_inventory_moves(shipments)
@classmethod
@@ -1598,10 +1579,7 @@ class ShipmentOutReturn(Workflow, ModelSQL, ModelView):
pool = Pool()
Move = pool.get('stock.move')
Date = pool.get('ir.date')
- Move.write([m for s in shipments for m in s.inventory_moves
- if m.state not in ('done', 'cancel')], {
- 'state': 'done',
- })
+ Move.do([m for s in shipments for m in s.inventory_moves])
cls.write(shipments, {
'effective_date': Date.today(),
})
@@ -1611,39 +1589,41 @@ class ShipmentOutReturn(Workflow, ModelSQL, ModelView):
@Workflow.transition('cancel')
def cancel(cls, shipments):
Move = Pool().get('stock.move')
- Move.write([m for s in shipments
- for m in s.incoming_moves + s.inventory_moves
- if m.state not in ('cancel', 'done')], {
- 'state': 'cancel',
- })
+ Move.cancel([m for s in shipments
+ for m in s.incoming_moves + s.inventory_moves])
@staticmethod
def _get_inventory_moves(incoming_move):
- res = {}
+ pool = Pool()
+ Move = pool.get('stock.move')
if incoming_move.quantity <= 0.0:
- return None
- res['product'] = incoming_move.product.id
- res['uom'] = incoming_move.uom.id
- res['quantity'] = incoming_move.quantity
- res['from_location'] = incoming_move.to_location.id
- res['to_location'] = incoming_move.shipment_out_return.warehouse.\
- storage_location.id
- res['state'] = 'draft'
+ return
+ move = Move()
+ move.product = incoming_move.product
+ move.uom = incoming_move.uom
+ move.quantity = incoming_move.quantity
+ move.from_location = incoming_move.to_location
+ move.to_location = incoming_move.shipment.warehouse.storage_location
+ move.state = Move.default_state()
# Product will be considered in stock only when the inventory
# move will be made:
- res['planned_date'] = None
- res['company'] = incoming_move.company.id
- return res
+ move.planned_date = None
+ move.company = incoming_move.company
+ return move
@classmethod
def create_inventory_moves(cls, shipments):
for shipment in shipments:
+ # Use moves instead of inventory_moves because save reset before
+ # adding new records and as set_inventory_moves is just a proxy to
+ # moves, it will reset also the incoming_moves
+ moves = list(shipment.moves)
for incoming_move in shipment.incoming_moves:
- vals = cls._get_inventory_moves(incoming_move)
- if vals:
- cls.write([shipment], {
- 'inventory_moves': [('create', vals)],
- })
+ move = cls._get_inventory_moves(incoming_move)
+ if move:
+ moves.append(move)
+ shipment.moves = moves
+ shipment.save()
class AssignShipmentOutAssignFailed(ModelView):
@@ -1723,18 +1703,16 @@ class ShipmentInternal(Workflow, ModelSQL, ModelView):
Bool(Eval('moves'))),
},
domain=[
- ('type', 'not in',
- ['supplier', 'customer', 'warehouse', 'view']),
+ ('type', 'in', ['storage']),
], depends=['state', 'moves'])
to_location = fields.Many2One('stock.location', "To Location",
required=True, states={
'readonly': Or(Not(Equal(Eval('state'), 'draft')),
Bool(Eval('moves'))),
}, domain=[
- ('type', 'not in',
- ['supplier', 'customer', 'warehouse', 'view']),
+ ('type', 'in', ['storage']),
], depends=['state', 'moves'])
- moves = fields.One2Many('stock.move', 'shipment_internal', 'Moves',
+ moves = fields.One2Many('stock.move', 'shipment', 'Moves',
states={
'readonly': ((Eval('state') != 'draft')
| ~Eval('from_location') | ~Eval('to_location')),
@@ -1759,8 +1737,8 @@ class ShipmentInternal(Workflow, ModelSQL, ModelView):
super(ShipmentInternal, cls).__setup__()
cls._order[0] = ('id', 'DESC')
cls._error_messages.update({
- 'delete_cancel': 'Internal Shipment "%s" must be cancelled '\
- 'before deletion!',
+ 'delete_cancel': ('Internal Shipment "%s" must be cancelled '
+ 'before deletion.'),
})
cls._transitions |= set((
('draft', 'waiting'),
@@ -1831,10 +1809,10 @@ class ShipmentInternal(Workflow, ModelSQL, ModelView):
cursor.execute('SELECT shipment.id, MAX(move.company) '
'FROM "%s" AS shipment '
'INNER JOIN "%s" AS move '
- 'ON shipment.id = move.shipment_internal '
+ 'ON \'%s,\' || shipment.id = move.shipment '
'GROUP BY shipment.id '
'ORDER BY MAX(move.company)'
- % (cls._table, Move._table))
+ % (cls._table, Move._table, cls.__name__))
for company_id, values in itertools.groupby(cursor.fetchall(),
operator.itemgetter(1)):
shipment_ids = [x[0] for x in values]
@@ -1859,24 +1837,27 @@ class ShipmentInternal(Workflow, ModelSQL, ModelView):
return Transaction().context.get('company')
@classmethod
- def create(cls, values):
+ def create(cls, vlist):
pool = Pool()
Sequence = pool.get('ir.sequence')
Config = pool.get('stock.configuration')
- values = values.copy()
+ vlist = [x.copy() for x in vlist]
config = Config(1)
- values['code'] = Sequence.get_id(
- config.shipment_internal_sequence.id)
- return super(ShipmentInternal, cls).create(values)
+ for values in vlist:
+ values['code'] = Sequence.get_id(
+ config.shipment_internal_sequence.id)
+ return super(ShipmentInternal, cls).create(vlist)
@classmethod
def delete(cls, shipments):
+ Move = Pool().get('stock.move')
# Cancel before delete
cls.cancel(shipments)
for shipment in shipments:
if shipment.state != 'cancel':
cls.raise_user_error('delete_cancel', shipment.rec_name)
+ Move.delete([m for s in shipments for m in s.moves])
super(ShipmentInternal, cls).delete(shipments)
@classmethod
@@ -1884,10 +1865,7 @@ class ShipmentInternal(Workflow, ModelSQL, ModelView):
@Workflow.transition('draft')
def draft(cls, shipments):
Move = Pool().get('stock.move')
- Move.write([m for s in shipments for m in s.moves
- if m.state not in ('draft', 'done')], {
- 'state': 'draft',
- })
+ Move.draft([m for s in shipments for m in s.moves])
@classmethod
@ModelView.button
@@ -1895,17 +1873,14 @@ class ShipmentInternal(Workflow, ModelSQL, ModelView):
def wait(cls, shipments):
Move = Pool().get('stock.move')
# First reset state to draft to allow update from and to location
- Move.write([m for s in shipments for m in s.moves
- if m.state not in ('draft', 'done')], {
- 'state': 'draft',
- })
+ Move.draft([m for s in shipments for m in s.moves])
for shipment in shipments:
Move.write([m for m in shipment.moves
if m.state != 'done'], {
- 'from_location': shipment.from_location.id,
- 'to_location': shipment.to_location.id,
- 'planned_date': shipment.planned_date,
- })
+ 'from_location': shipment.from_location.id,
+ 'to_location': shipment.to_location.id,
+ 'planned_date': shipment.planned_date,
+ })
@classmethod
@Workflow.transition('assigned')
@@ -1919,10 +1894,7 @@ class ShipmentInternal(Workflow, ModelSQL, ModelView):
pool = Pool()
Move = pool.get('stock.move')
Date = pool.get('ir.date')
- Move.write([m for s in shipments for m in s.moves
- if m.state not in ('done', 'cancel')], {
- 'state': 'done',
- })
+ Move.do([m for s in shipments for m in s.moves])
cls.write(shipments, {
'effective_date': Date.today(),
})
@@ -1932,10 +1904,7 @@ class ShipmentInternal(Workflow, ModelSQL, ModelView):
@Workflow.transition('cancel')
def cancel(cls, shipments):
Move = Pool().get('stock.move')
- Move.write([m for s in shipments for m in s.moves
- if m.state not in ('cancel', 'done')], {
- 'state': 'cancel',
- })
+ Move.cancel([m for s in shipments for m in s.moves])
@classmethod
@ModelView.button_action('stock.wizard_shipment_internal_assign')
@@ -1957,10 +1926,7 @@ class ShipmentInternal(Workflow, ModelSQL, ModelView):
@ModelView.button
def assign_force(cls, shipments):
Move = Pool().get('stock.move')
- Move.write([m for s in shipments for m in s.moves
- if m.state not in ('assigned', 'done')], {
- 'state': 'assigned',
- })
+ Move.assign([m for s in shipments for m in s.moves])
cls.assign(shipments)
@@ -2074,9 +2040,10 @@ class CreateShipmentOutReturn(Wizard):
def __setup__(cls):
super(CreateShipmentOutReturn, cls).__setup__()
cls._error_messages.update({
- 'shipment_done_title': 'You can not create return shipment',
- 'shipment_done_msg': 'The shipment with code %s is not yet sent.',
- })
+ 'shipment_done_title': 'You can not create return shipment',
+ 'shipment_done_msg': ('The shipment with code "%s" is not yet '
+ 'sent.'),
+ })
def do_start(self, action):
pool = Pool()
@@ -2086,7 +2053,7 @@ class CreateShipmentOutReturn(Wizard):
shipment_ids = Transaction().context['active_ids']
shipment_outs = ShipmentOut.browse(shipment_ids)
- shipment_out_return_ids = []
+ to_create = []
for shipment_out in shipment_outs:
if shipment_out.state != 'done':
self.raise_user_error('shipment_done_title',
@@ -2094,27 +2061,29 @@ class CreateShipmentOutReturn(Wizard):
error_description_args=shipment_out.code)
incoming_moves = []
+ moves_to_create = []
for move in shipment_out.outgoing_moves:
- incoming_moves.append(('create', {
- 'product': move.product.id,
- 'quantity': move.quantity,
- 'uom': move.uom.id,
- 'from_location': move.to_location.id,
- 'to_location': \
- shipment_out.warehouse.input_location.id,
- 'company': move.company.id,
- }))
- shipment_out_return_ids.append(
- ShipmentOutReturn.create({
+ moves_to_create.append({
+ 'product': move.product.id,
+ 'quantity': move.quantity,
+ 'uom': move.uom.id,
+ 'from_location': move.to_location.id,
+ 'to_location': (
+ shipment_out.warehouse.input_location.id),
+ 'company': move.company.id,
+ })
+ if moves_to_create:
+ incoming_moves.append(('create', moves_to_create))
+ to_create.append({
'customer': shipment_out.customer.id,
'delivery_address': shipment_out.delivery_address.id,
'warehouse': shipment_out.warehouse.id,
'incoming_moves': incoming_moves,
- }).id
- )
+ })
+ shipment_out_returns = ShipmentOutReturn.create(to_create)
- data = {'res_id': shipment_out_return_ids}
- if len(shipment_out_return_ids) == 1:
+ data = {'res_id': [x.id for x in shipment_out_returns]}
+ if len(shipment_out_returns) == 1:
action['views'].reverse()
return action, data
@@ -2129,7 +2098,7 @@ class DeliveryNote(CompanyReport):
@classmethod
def parse(cls, report, objects, data, localcontext):
localcontext['product_name'] = lambda product_id, language: \
- cls.product_name(product_id, language)
+ cls.product_name(product_id, language)
return super(DeliveryNote, cls).parse(report, objects, data,
localcontext)
diff --git a/shipment.xml b/shipment.xml
index 5c09f53..b3be7a9 100644
--- a/shipment.xml
+++ b/shipment.xml
@@ -4,77 +4,20 @@ this repository contains the full copyright notices and license terms. -->
<tryton>
<data>
- <!--Shipment in view-->
<record model="ir.ui.view" id="shipment_in_view_form">
<field name="model">stock.shipment.in</field>
<field name="type">form</field>
- <field name="arch" type="xml">
- <![CDATA[
- <form string="Supplier Shipment" col="4" cursor="supplier">
- <label name="reference"/>
- <field name="reference"/>
- <label name="code"/>
- <field name="code"/>
- <label name="supplier"/>
- <field name="supplier"/>
- <label name="contact_address"/>
- <field name="contact_address"/>
- <label name="planned_date"/>
- <field name="planned_date"/>
- <label name="effective_date"/>
- <field name="effective_date"/>
- <label name="company"/>
- <field name="company"/>
- <label name="warehouse"/>
- <field name="warehouse"/>
- <notebook colspan="6">
- <page string="Incoming Moves" id="incoming_moves">
- <field name="incoming_moves" colspan="4"/>
- </page>
- <page string="Inventory Moves" id="inventory_moves">
- <field name="inventory_moves" colspan="4"/>
- </page>
- </notebook>
- <group col="4" colspan="6" id="state_buttons">
- <label name="state"/>
- <field name="state"/>
- <group col="5" colspan="2" id="buttons">
- <button string="Cancel" name="cancel"
- icon="tryton-cancel"/>
- <button string="Receive" name="receive"
- icon="tryton-go-next"/>
- <button string="Done" name="done"
- icon="tryton-ok"/>
- <button string="Reset to Draft" name="draft"
- icon="tryton-clear"/>
- </group>
- </group>
- </form>
- ]]>
- </field>
+ <field name="name">shipment_in_form</field>
</record>
<record model="ir.ui.view" id="shipment_in_view_tree">
<field name="model">stock.shipment.in</field>
<field name="type">tree</field>
- <field name="arch" type="xml">
- <![CDATA[
- <tree string="Supplier Shipments">
- <field name="code"/>
- <field name="reference"/>
- <field name="planned_date"/>
- <field name="effective_date"/>
- <field name="supplier"/>
- <field name="contact_address"/>
- <field name="state"/>
- <field name="create_date" tree_invisible="1"/>
- </tree>
- ]]>
- </field>
+ <field name="name">shipment_in_tree</field>
</record>
<record model="ir.action.act_window" id="act_shipment_in_form">
<field name="name">Supplier Shipments</field>
<field name="res_model">stock.shipment.in</field>
- <field name="search_value">[('create_date', '>=', DateTime(hour=0, minute=0, second=0, microsecond=0, delta_years=-1))]</field>
+ <field name="search_value"></field>
</record>
<record model="ir.action.act_window.view"
id="act_shipment_in_form_view1">
@@ -88,51 +31,27 @@ this repository contains the full copyright notices and license terms. -->
<field name="view" ref="shipment_in_view_form"/>
<field name="act_window" ref="act_shipment_in_form"/>
</record>
- <menuitem parent="menu_stock" sequence="20"
- action="act_shipment_in_form" id="menu_shipment_in_form"/>
-
- <record model="ir.action.act_window" id="act_shipment_in_draft">
- <field name="name">Draft Supplier Shipment</field>
- <field name="res_model">stock.shipment.in</field>
- <field name="domain">[('state', '=', 'draft')]</field>
- </record>
- <record model="ir.action.act_window.view"
- id="act_shipment_in_draft_view1">
+ <record model="ir.action.act_window.domain" id="act_shipment_in_form_domain_draft">
+ <field name="name">Draft</field>
<field name="sequence" eval="10"/>
- <field name="view" ref="shipment_in_view_tree"/>
- <field name="act_window" ref="act_shipment_in_draft"/>
+ <field name="domain">[('state', '=', 'draft')]</field>
+ <field name="act_window" ref="act_shipment_in_form"/>
</record>
- <record model="ir.action.act_window.view"
- id="act_shipment_in_draft_view2">
+ <record model="ir.action.act_window.domain" id="act_shipment_in_form_domain_received">
+ <field name="name">Received</field>
<field name="sequence" eval="20"/>
- <field name="view" ref="shipment_in_view_form"/>
- <field name="act_window" ref="act_shipment_in_draft"/>
- </record>
- <menuitem parent="menu_shipment_in_form" sequence="10"
- action="act_shipment_in_draft" id="menu_shipment_in_draft"/>
-
- <record model="ir.action.act_window" id="act_shipment_in_form_received">
- <field name="name">Received Supplier shipments</field>
- <field name="res_model">stock.shipment.in</field>
<field name="domain">[('state', '=', 'received')]</field>
+ <field name="act_window" ref="act_shipment_in_form"/>
</record>
- <record model="ir.action.act_window.view"
- id="act_shipment_in_received_form_view1">
- <field name="sequence" eval="1"/>
- <field name="view" ref="shipment_in_view_tree"/>
- <field name="act_window" ref="act_shipment_in_form_received"/>
- </record>
- <record model="ir.action.act_window.view"
- id="act_shipment_in_received_form_view2">
- <field name="sequence" eval="2"/>
- <field name="view" ref="shipment_in_view_form"/>
- <field name="act_window" ref="act_shipment_in_form_received"/>
+ <record model="ir.action.act_window.domain" id="act_shipment_in_form_domain_all">
+ <field name="name">All</field>
+ <field name="sequence" eval="9999"/>
+ <field name="domain"></field>
+ <field name="act_window" ref="act_shipment_in_form"/>
</record>
- <menuitem parent="menu_shipment_in_form" sequence="20"
- action="act_shipment_in_form_received"
- id="menu_shipment_in_received"/>
+ <menuitem parent="menu_stock" sequence="20"
+ action="act_shipment_in_form" id="menu_shipment_in_form"/>
- <!-- Shipment In Return view-->
<record model="ir.action.wizard" id="wizard_shipment_in_return_assign">
<field name="name">Assign Purchase Return Shipment</field>
<field name="wiz_name">stock.shipment.in.return.assign</field>
@@ -142,61 +61,17 @@ this repository contains the full copyright notices and license terms. -->
<record model="ir.ui.view" id="shipment_in_return_view_form">
<field name="model">stock.shipment.in.return</field>
<field name="type">form</field>
- <field name="arch" type="xml">
- <![CDATA[
- <form string="Supplier Return Shipment" col="4" cursor="from_location">
- <label name="reference"/>
- <field name="reference"/>
- <label name="code"/>
- <field name="code"/>
- <label name="from_location"/>
- <field name="from_location"/>
- <label name="to_location"/>
- <field name="to_location"/>
- <label name="planned_date"/>
- <field name="planned_date"/>
- <label name="effective_date"/>
- <field name="effective_date"/>
- <field name="moves" colspan="4"/>
- <label name="state"/>
- <field name="state"/>
- <group col="5" colspan="2" id="buttons">
- <button string="Cancel" name="cancel"
- icon="tryton-cancel"/>
- <button string="Draft" name="draft"
- icon="tryton-go-previous"/>
- <button string="Wait" name="wait"/>
- <button string="Assign" name="assign_wizard"
- icon="tryton-go-next"/>
- <button string="Done" name="done"
- icon="tryton-ok"/>
- </group>
- </form>
- ]]>
- </field>
+ <field name="name">shipment_in_return_form</field>
</record>
<record model="ir.ui.view" id="shipment_in_return_view_tree">
<field name="model">stock.shipment.in.return</field>
<field name="type">tree</field>
- <field name="arch" type="xml">
- <![CDATA[
- <tree string="Supplier Return Shipments">
- <field name="code"/>
- <field name="reference"/>
- <field name="planned_date"/>
- <field name="effective_date"/>
- <field name="from_location"/>
- <field name="to_location"/>
- <field name="state"/>
- <field name="create_date" tree_invisible="1"/>
- </tree>
- ]]>
- </field>
+ <field name="name">shipment_in_return_tree</field>
</record>
<record model="ir.action.act_window" id="act_shipment_in_return_form">
<field name="name">Supplier Return Shipments</field>
<field name="res_model">stock.shipment.in.return</field>
- <field name="search_value">[('create_date', '>=', DateTime(hour=0, minute=0, second=0, microsecond=0, delta_years=-1))]</field>
+ <field name="search_value"></field>
</record>
<record model="ir.action.act_window.view"
id="act_shipment_in_return_form_view1">
@@ -210,27 +85,44 @@ this repository contains the full copyright notices and license terms. -->
<field name="view" ref="shipment_in_return_view_form"/>
<field name="act_window" ref="act_shipment_in_return_form"/>
</record>
- <menuitem parent="menu_shipment_in_form" sequence="40"
- action="act_shipment_in_return_form"
- id="menu_shipment_in_return_form"/>
+ <record model="ir.action.act_window.domain"
+ id="act_shipment_in_return_form_domain_draft">
+ <field name="name">Draft</field>
+ <field name="sequence" eval="10"/>
+ <field name="domain">[('state', '=', 'draft')]</field>
+ <field name="act_window" ref="act_shipment_in_return_form"/>
+ </record>
+ <record model="ir.action.act_window.domain"
+ id="act_shipment_in_return_form_domain_assigned">
+ <field name="name">Assigned</field>
+ <field name="sequence" eval="20"/>
+ <field name="domain">[('state', '=', 'assigned')]</field>
+ <field name="act_window" ref="act_shipment_in_return_form"/>
+ </record>
+ <record model="ir.action.act_window.domain"
+ id="act_shipment_in_return_form_domain_waiting">
+ <field name="name">Waiting</field>
+ <field name="sequence" eval="30"/>
+ <field name="domain">[('state', '=', 'waiting')]</field>
+ <field name="act_window" ref="act_shipment_in_return_form"/>
+ </record>
+ <record model="ir.action.act_window.domain"
+ id="act_shipment_in_return_form_domain_all">
+ <field name="name">All</field>
+ <field name="sequence" eval="9999"/>
+ <field name="domain"></field>
+ <field name="act_window" ref="act_shipment_in_return_form"/>
+ </record>
+ <menuitem parent="menu_shipment_in_form" sequence="10"
+ action="act_shipment_in_return_form"
+ id="menu_shipment_in_return_form"/>
<record model="ir.ui.view" id="shipment_in_return_assign_failed_view_form">
<field name="model">stock.shipment.in.return.assign.failed</field>
<field name="type">form</field>
- <field name="arch" type="xml">
- <![CDATA[
- <form string="Unable to Assign" col="2">
- <image name="tryton-dialog-warning" xexpand="0" xfill="0"/>
- <separator string="Unable to assign those products:"
- id="unable"/>
- <field name="moves" colspan="2"
- view_ids="stock.move_view_tree_simple"/>
- </form>
- ]]>
- </field>
- </record>
-
- <!--Shipment out view-->
+ <field name="name">shipment_in_return_assign_failed_form</field>
+ </record>
+
<record model="ir.action.wizard" id="wizard_shipment_out_assign">
<field name="name">Assign Shipment Out</field>
<field name="wiz_name">stock.shipment.out.assign</field>
@@ -240,70 +132,12 @@ this repository contains the full copyright notices and license terms. -->
<record model="ir.ui.view" id="shipment_out_view_form">
<field name="model">stock.shipment.out</field>
<field name="type">form</field>
- <field name="arch" type="xml">
- <![CDATA[
- <form string="Customer Shipment" col="4" cursor="customer">
- <label name="reference"/>
- <field name="reference"/>
- <label name="code"/>
- <field name="code"/>
- <label name="customer"/>
- <field name="customer"/>
- <label name="delivery_address"/>
- <field name="delivery_address"/>
- <label name="planned_date"/>
- <field name="planned_date"/>
- <label name="effective_date"/>
- <field name="effective_date"/>
- <label name="company"/>
- <field name="company"/>
- <label name="warehouse"/>
- <field name="warehouse"/>
- <notebook colspan="4">
- <page string="Inventory Moves" id="inventory_moves">
- <field name="inventory_moves" colspan="4"/>
- </page>
- <page string="Outgoing Moves" id="outgoing_moves">
- <field name="outgoing_moves" colspan="4"/>
- </page>
- </notebook>
- <group col="4" colspan="4" id="state_buttons">
- <label name="state"/>
- <field name="state"/>
- <group col="6" colspan="2" id="buttons">
- <button string="Cancel" name="cancel"
- icon="tryton-cancel"/>
- <button string="Draft" name="draft"/>
- <button string="Waiting" name="wait"/>
- <button string="Assign" name="assign_wizard"
- icon="tryton-go-next"/>
- <button string="Make shipment" name="pack"
- icon="tryton-go-next"/>
- <button string="Done" name="done"
- icon="tryton-ok"/>
- </group>
- </group>
- </form>
- ]]>
- </field>
+ <field name="name">shipment_out_form</field>
</record>
<record model="ir.ui.view" id="shipment_out_view_tree">
<field name="model">stock.shipment.out</field>
<field name="type">tree</field>
- <field name="arch" type="xml">
- <![CDATA[
- <tree string="Customer Shipments">
- <field name="code"/>
- <field name="reference"/>
- <field name="planned_date"/>
- <field name="effective_date"/>
- <field name="customer"/>
- <field name="delivery_address"/>
- <field name="state"/>
- <field name="create_date" tree_invisible="1"/>
- </tree>
- ]]>
- </field>
+ <field name="name">shipment_out_tree</field>
</record>
<record model="ir.action.wizard" id="create_shipment_out_return">
@@ -320,7 +154,7 @@ this repository contains the full copyright notices and license terms. -->
<record model="ir.action.act_window" id="act_shipment_out_form">
<field name="name">Customer Shipments</field>
<field name="res_model">stock.shipment.out</field>
- <field name="search_value">[('create_date', '>=', DateTime(hour=0, minute=0, second=0, microsecond=0, delta_years=-1))]</field>
+ <field name="search_value"></field>
</record>
<record model="ir.action.act_window.view"
id="act_shipment_out_form_view1">
@@ -334,89 +168,45 @@ this repository contains the full copyright notices and license terms. -->
<field name="view" ref="shipment_out_view_form"/>
<field name="act_window" ref="act_shipment_out_form"/>
</record>
- <menuitem parent="menu_stock" sequence="30"
- action="act_shipment_out_form" id="menu_shipment_out_form"/>
-
- <record model="ir.action.act_window" id="act_shipment_out_form_waiting">
- <field name="name">Customer Shipments Waiting Assignation</field>
- <field name="res_model">stock.shipment.out</field>
- <field name="domain">[('state', '=', 'waiting')]</field>
- </record>
- <record model="ir.action.act_window.view"
- id="act_shipment_out_waiting_form_view1">
- <field name="sequence" eval="1"/>
- <field name="view" ref="shipment_out_view_tree"/>
- <field name="act_window" ref="act_shipment_out_form_waiting"/>
+ <record model="ir.action.act_window.domain" id="act_shipment_out_form_domain_draft">
+ <field name="name">Draft</field>
+ <field name="sequence" eval="10"/>
+ <field name="domain">[('state', '=', 'draft')]</field>
+ <field name="act_window" ref="act_shipment_out_form"/>
</record>
- <record model="ir.action.act_window.view"
- id="act_shipment_out_waiting_form_view2">
- <field name="sequence" eval="2"/>
- <field name="view" ref="shipment_out_view_form"/>
- <field name="act_window" ref="act_shipment_out_form_waiting"/>
+ <record model="ir.action.act_window.domain" id="act_shipment_out_form_domain_waiting">
+ <field name="name">Waiting</field>
+ <field name="sequence" eval="20"/>
+ <field name="domain">[('state', '=', 'waiting')]</field>
+ <field name="act_window" ref="act_shipment_out_form"/>
</record>
- <menuitem parent="menu_shipment_out_form" sequence="10"
- action="act_shipment_out_form_waiting"
- id="menu_shipment_out_waiting"/>
-
- <record model="ir.action.act_window"
- id="act_shipment_out_form_assigned">
- <field name="name">Assigned Customer Shipments</field>
- <field name="res_model">stock.shipment.out</field>
+ <record model="ir.action.act_window.domain" id="act_shipment_out_form_domain_assigned">
+ <field name="name">Assigned</field>
+ <field name="sequence" eval="30"/>
<field name="domain">[('state', '=', 'assigned')]</field>
+ <field name="act_window" ref="act_shipment_out_form"/>
</record>
- <record model="ir.action.act_window.view"
- id="act_shipment_out_assigned_form_view1">
- <field name="sequence" eval="1"/>
- <field name="view" ref="shipment_out_view_tree"/>
- <field name="act_window" ref="act_shipment_out_form_assigned"/>
- </record>
- <record model="ir.action.act_window.view"
- id="act_shipment_out_assigned_form_view2">
- <field name="sequence" eval="2"/>
- <field name="view" ref="shipment_out_view_form"/>
- <field name="act_window" ref="act_shipment_out_form_assigned"/>
- </record>
- <menuitem parent="menu_shipment_out_form" sequence="20"
- action="act_shipment_out_form_assigned"
- id="menu_shipment_out_assigned"/>
-
- <record model="ir.action.act_window" id="act_shipment_out_form_ready">
- <field name="name">Customer Shipments Ready for Shipping</field>
- <field name="res_model">stock.shipment.out</field>
+ <record model="ir.action.act_window.domain" id="act_shipment_out_form_domain_packed">
+ <field name="name">Packed</field>
+ <field name="sequence" eval="40"/>
<field name="domain">[('state', '=', 'packed')]</field>
+ <field name="act_window" ref="act_shipment_out_form"/>
</record>
- <record model="ir.action.act_window.view"
- id="act_shipment_out_ready_form_view1">
- <field name="sequence" eval="1"/>
- <field name="view" ref="shipment_out_view_tree"/>
- <field name="act_window" ref="act_shipment_out_form_ready"/>
- </record>
- <record model="ir.action.act_window.view"
- id="act_shipment_out_ready_form_view2">
- <field name="sequence" eval="2"/>
- <field name="view" ref="shipment_out_view_form"/>
- <field name="act_window" ref="act_shipment_out_form_ready"/>
+ <record model="ir.action.act_window.domain" id="act_shipment_out_form_domain_all">
+ <field name="name">All</field>
+ <field name="sequence" eval="9999"/>
+ <field name="domain"></field>
+ <field name="act_window" ref="act_shipment_out_form"/>
</record>
- <menuitem parent="menu_shipment_out_form" sequence="30"
- action="act_shipment_out_form_ready" id="menu_shipment_out_ready"/>
+ <menuitem parent="menu_stock" sequence="30"
+ action="act_shipment_out_form" id="menu_shipment_out_form"/>
<record model="ir.ui.view" id="shipment_out_assign_failed_view_form">
<field name="model">stock.shipment.out.assign.failed</field>
<field name="type">form</field>
- <field name="arch" type="xml">
- <![CDATA[
- <form string="Unable to Assign" col="2">
- <image name="tryton-dialog-warning" xexpand="0" xfill="0"/>
- <separator string="Unable to assign those products:"
- id="unable"/>
- <field name="inventory_moves" colspan="2"
- view_ids="stock.move_view_tree_simple"/>
- </form>
- ]]>
- </field>
- </record>
-
- <!--Internal Shipment view-->
+ <field name="name">shipment_out_assign_failed_form</field>
+ </record>
+
<record model="ir.action.wizard" id="wizard_shipment_internal_assign">
<field name="name">Assign Shipment Internal</field>
<field name="wiz_name">stock.shipment.internal.assign</field>
@@ -426,62 +216,17 @@ this repository contains the full copyright notices and license terms. -->
<record model="ir.ui.view" id="shipment_internal_view_form">
<field name="model">stock.shipment.internal</field>
<field name="type">form</field>
- <field name="arch" type="xml">
- <![CDATA[
- <form string="Internal Shipment" col="4" cursor="from_location">
- <label name="reference"/>
- <field name="reference"/>
- <label name="code"/>
- <field name="code"/>
- <label name="from_location"/>
- <field name="from_location"/>
- <label name="to_location"/>
- <field name="to_location"/>
- <label name="planned_date"/>
- <field name="planned_date"/>
- <label name="effective_date"/>
- <field name="effective_date"/>
- <label name="company"/>
- <field name="company"/>
- <field name="moves" colspan="4"/>
- <label name="state"/>
- <field name="state"/>
- <group col="5" colspan="2" id="buttons">
- <button string="Cancel" name="cancel"
- icon="tryton-cancel"/>
- <button string="Draft" name="draft"/>
- <button string="Waiting" name="wait"/>
- <button string="Assign" name="assign_wizard"
- icon="tryton-go-next"/>
- <button string="Done" name="done"
- icon="tryton-ok"/>
- </group>
- </form>
- ]]>
- </field>
+ <field name="name">shipment_internal_form</field>
</record>
<record model="ir.ui.view" id="shipment_internal_view_tree">
<field name="model">stock.shipment.internal</field>
<field name="type">tree</field>
- <field name="arch" type="xml">
- <![CDATA[
- <tree string="Internal Shipments">
- <field name="code"/>
- <field name="reference"/>
- <field name="planned_date"/>
- <field name="effective_date"/>
- <field name="from_location"/>
- <field name="to_location"/>
- <field name="state"/>
- <field name="create_date" tree_invisible="1"/>
- </tree>
- ]]>
- </field>
+ <field name="name">shipment_internal_tree</field>
</record>
<record model="ir.action.act_window" id="act_shipment_internal_form">
<field name="name">Internal Shipments</field>
<field name="res_model">stock.shipment.internal</field>
- <field name="search_value">[('create_date', '>=', DateTime(hour=0, minute=0, second=0, microsecond=0, delta_years=-1))]</field>
+ <field name="search_value"></field>
</record>
<record model="ir.action.act_window.view"
id="act_shipment_internal_form_view1">
@@ -495,161 +240,59 @@ this repository contains the full copyright notices and license terms. -->
<field name="view" ref="shipment_internal_view_form"/>
<field name="act_window" ref="act_shipment_internal_form"/>
</record>
- <menuitem parent="menu_stock" sequence="35"
- action="act_shipment_internal_form"
- id="menu_shipment_internal_form"/>
-
- <record model="ir.action.act_window" id="act_shipment_internal_draft_form">
- <field name="name">Draft Internal Shipments</field>
- <field name="res_model">stock.shipment.internal</field>
+ <record model="ir.action.act_window.domain"
+ id="act_shipment_internal_form_domain_draft">
+ <field name="name">Draft</field>
+ <field name="sequence" eval="10"/>
<field name="domain">[('state', '=', 'draft')]</field>
+ <field name="act_window" ref="act_shipment_internal_form"/>
</record>
- <record model="ir.action.act_window.view"
- id="act_shipment_internal_draft_form_view1">
- <field name="sequence" eval="1"/>
- <field name="view" ref="shipment_internal_view_tree"/>
- <field name="act_window" ref="act_shipment_internal_draft_form"/>
- </record>
- <record model="ir.action.act_window.view"
- id="act_shipment_internal_draft_form_view2">
- <field name="sequence" eval="2"/>
- <field name="view" ref="shipment_internal_view_form"/>
- <field name="act_window" ref="act_shipment_internal_draft_form"/>
- </record>
- <menuitem parent="menu_shipment_internal_form" sequence="20"
- action="act_shipment_internal_draft_form"
- id="menu_shipment_internal_draft_form"/>
-
- <record model="ir.action.act_window" id="act_shipment_internal_waiting_form">
- <field name="name">Internal Shipments Waiting Assignation</field>
- <field name="res_model">stock.shipment.internal</field>
+ <record model="ir.action.act_window.domain"
+ id="act_shipment_internal_form_domain_waiting">
+ <field name="name">Waiting</field>
+ <field name="sequence" eval="20"/>
<field name="domain">[('state', '=', 'waiting')]</field>
+ <field name="act_window" ref="act_shipment_internal_form"/>
</record>
- <record model="ir.action.act_window.view"
- id="act_shipment_internal_waiting_form_view1">
- <field name="sequence" eval="1"/>
- <field name="view" ref="shipment_internal_view_tree"/>
- <field name="act_window" ref="act_shipment_internal_waiting_form"/>
- </record>
- <record model="ir.action.act_window.view"
- id="act_shipment_internal_waiting_form_view2">
- <field name="sequence" eval="2"/>
- <field name="view" ref="shipment_internal_view_form"/>
- <field name="act_window" ref="act_shipment_internal_waiting_form"/>
- </record>
- <menuitem parent="menu_shipment_internal_form" sequence="30"
- action="act_shipment_internal_waiting_form"
- id="menu_shipment_internal_waiting_form"/>
-
- <record model="ir.action.act_window" id="act_shipment_internal_assigned_form">
- <field name="name">Assigned Internal Shipments</field>
- <field name="res_model">stock.shipment.internal</field>
+ <record model="ir.action.act_window.domain"
+ id="act_shipment_internal_form_domain_assigned">
+ <field name="name">Assigned</field>
+ <field name="sequence" eval="30"/>
<field name="domain">[('state', '=', 'assigned')]</field>
+ <field name="act_window" ref="act_shipment_internal_form"/>
</record>
- <record model="ir.action.act_window.view"
- id="act_shipment_internal_assigned_form_view1">
- <field name="sequence" eval="1"/>
- <field name="view" ref="shipment_internal_view_tree"/>
- <field name="act_window" ref="act_shipment_internal_assigned_form"/>
- </record>
- <record model="ir.action.act_window.view"
- id="act_shipment_internal_assigned_form_view2">
- <field name="sequence" eval="2"/>
- <field name="view" ref="shipment_internal_view_form"/>
- <field name="act_window" ref="act_shipment_internal_assigned_form"/>
+ <record model="ir.action.act_window.domain"
+ id="act_shipment_internal_form_domain_all">
+ <field name="name">All</field>
+ <field name="sequence" eval="9999"/>
+ <field name="domain"></field>
+ <field name="act_window" ref="act_shipment_internal_form"/>
</record>
- <menuitem parent="menu_shipment_internal_form" sequence="40"
- action="act_shipment_internal_assigned_form"
- id="menu_shipment_internal_assigned_form"/>
+ <menuitem parent="menu_stock" sequence="35"
+ action="act_shipment_internal_form"
+ id="menu_shipment_internal_form"/>
<record model="ir.ui.view" id="shipment_internal_assign_failed_view_form">
<field name="model">stock.shipment.internal.assign.failed</field>
<field name="type">form</field>
- <field name="arch" type="xml">
- <![CDATA[
- <form string="Unable to Assign" col="2">
- <image name="tryton-dialog-warning" xexpand="0" xfill="0"/>
- <separator string="Unable to assign those products:"
- id="unable"/>
- <field name="moves" colspan="2"
- view_ids="stock.move_view_tree_simple"/>
- </form>
- ]]>
- </field>
- </record>
-
- <!--Return Shipment Out view-->
+ <field name="name">shipment_internal_assign_failed_form</field>
+ </record>
+
<record model="ir.ui.view" id="shipment_out_return_view_form">
<field name="model">stock.shipment.out.return</field>
<field name="type">form</field>
- <field name="arch" type="xml">
- <![CDATA[
- <form string="Customer Return Shipment" col="4" cursor="customer">
- <label name="reference"/>
- <field name="reference"/>
- <label name="code"/>
- <field name="code"/>
- <label name="customer"/>
- <field name="customer"/>
- <label name="delivery_address"/>
- <field name="delivery_address"/>
- <label name="planned_date"/>
- <field name="planned_date"/>
- <label name="effective_date"/>
- <field name="effective_date"/>
- <label name="company"/>
- <field name="company"/>
- <label name="warehouse"/>
- <field name="warehouse"/>
- <notebook colspan="6">
- <page string="Incoming Moves" id="incoming_moves">
- <field name="incoming_moves" colspan="4"/>
- </page>
- <page string="Inventory Moves" id="inventory_moves">
- <field name="inventory_moves" colspan="4"/>
- </page>
- </notebook>
- <group col="4" colspan="6" id="state_buttons">
- <label name="state"/>
- <field name="state"/>
- <group col="5" colspan="2" id="buttons">
- <button string="Cancel" name="cancel"
- icon="tryton-cancel"/>
- <button string="Draft" name="draft"
- icon="tryton-clear"/>
- <button string="Received" name="receive"
- icon="tryton-go-next"/>
- <button string="Done" name="done"
- icon="tryton-ok"/>
- </group>
- </group>
- </form>
- ]]>
- </field>
+ <field name="name">shipment_out_return_form</field>
</record>
<record model="ir.ui.view" id="shipment_out_return_view_tree">
<field name="model">stock.shipment.out.return</field>
<field name="type">tree</field>
- <field name="arch" type="xml">
- <![CDATA[
- <tree string="Customer Return Shipments">
- <field name="code"/>
- <field name="reference"/>
- <field name="state"/>
- <field name="planned_date"/>
- <field name="effective_date"/>
- <field name="customer"/>
- <field name="delivery_address"/>
- <field name="create_date" tree_invisible="1"/>
- </tree>
- ]]>
- </field>
+ <field name="name">shipment_out_return_tree</field>
</record>
<record model="ir.action.act_window" id="act_shipment_out_return_form">
<field name="name">Customer Return Shipments</field>
<field name="res_model">stock.shipment.out.return</field>
- <field name="search_value">[('create_date', '>=', DateTime(hour=0, minute=0, second=0, microsecond=0, delta_years=-1))]</field>
+ <field name="search_value"></field>
</record>
<record model="ir.action.act_window.view"
id="act_shipment_out_return_form_view1">
@@ -663,9 +306,30 @@ this repository contains the full copyright notices and license terms. -->
<field name="view" ref="shipment_out_return_view_form"/>
<field name="act_window" ref="act_shipment_out_return_form"/>
</record>
- <menuitem parent="menu_shipment_out_form" sequence="40"
- action="act_shipment_out_return_form"
- id="menu_shipment_out_return_form"/>
+ <record model="ir.action.act_window.domain"
+ id="act_shipment_out_return_form_domain_draft">
+ <field name="name">Draft</field>
+ <field name="sequence" eval="10"/>
+ <field name="domain">[('state', '=', 'draft')]</field>
+ <field name="act_window" ref="act_shipment_out_return_form"/>
+ </record>
+ <record model="ir.action.act_window.domain"
+ id="act_shipment_out_return_form_domain_received">
+ <field name="name">Received</field>
+ <field name="sequence" eval="20"/>
+ <field name="domain">[('state', '=', 'received')]</field>
+ <field name="act_window" ref="act_shipment_out_return_form"/>
+ </record>
+ <record model="ir.action.act_window.domain"
+ id="act_shipment_out_return_form_domain_all">
+ <field name="name">All</field>
+ <field name="sequence" eval="9999"/>
+ <field name="domain"></field>
+ <field name="act_window" ref="act_shipment_out_return_form"/>
+ </record>
+ <menuitem parent="menu_shipment_out_form" sequence="10"
+ action="act_shipment_out_return_form"
+ id="menu_shipment_out_return_form"/>
<record model="ir.action.report" id="report_shipment_out_delivery_note">
<field name="name">Delivery Note</field>
@@ -758,7 +422,6 @@ this repository contains the full copyright notices and license terms. -->
<field name="code">stock.shipment.out</field>
</record>
- <!-- Sequence shipment in -->
<record model="ir.sequence.type" id="sequence_type_shipment_in">
<field name="name">Supplier Shipment</field>
<field name="code">stock.shipment.in</field>
@@ -779,7 +442,6 @@ this repository contains the full copyright notices and license terms. -->
<field name="code">stock.shipment.in</field>
</record>
- <!-- Sequence shipment internal -->
<record model="ir.sequence.type" id="sequence_type_shipment_internal">
<field name="name">Internal Shipment</field>
<field name="code">stock.shipment.internal</field>
@@ -800,7 +462,6 @@ this repository contains the full copyright notices and license terms. -->
<field name="code">stock.shipment.internal</field>
</record>
- <!-- Sequence shipment out return-->
<record model="ir.sequence.type" id="sequence_type_shipment_out_return">
<field name="name">Customer Return Shipment</field>
<field name="code">stock.shipment.out.return</field>
@@ -842,38 +503,17 @@ this repository contains the full copyright notices and license terms. -->
<field name="code">stock.shipment.in.return</field>
</record>
- <!-- Add delivery field on address -->
<record model="ir.ui.view" id="address_view_tree">
<field name="model">party.address</field>
<field name="inherit" ref="party.address_view_tree"/>
- <field name="arch" type="xml">
- <![CDATA[
- <data>
- <xpath
- expr="/tree/field[@name="active"]" position="after">
- <field name="delivery"/>
- </xpath>
- </data>
- ]]>
- </field>
+ <field name="name">party_address_tree</field>
</record>
<record model="ir.ui.view" id="address_view_form">
<field name="model">party.address</field>
<field name="inherit" ref="party.address_view_form"/>
- <field name="arch" type="xml">
- <![CDATA[
- <data>
- <xpath
- expr="/form/group/field[@name="active"]"
- position="after">
- <label name="delivery"/>
- <field name="delivery" xexpand="0" width="25"/>
- </xpath>
- </data>
- ]]>
- </field>
- </record>
- <!-- Model Access -->
+ <field name="name">party_address_form</field>
+ </record>
+
<record model="ir.model.access" id="access_shipment_in">
<field name="model" search="[('model', '=', 'stock.shipment.in')]"/>
<field name="perm_read" eval="False"/>
@@ -1291,15 +931,13 @@ this repository contains the full copyright notices and license terms. -->
<field name="group" ref="group_stock_force_assignment"/>
</record>
- <!-- Rule definition -->
+
<record model="ir.rule.group" id="rule_group_shipment_in">
<field name="model" search="[('model', '=', 'stock.shipment.in')]"/>
<field name="global_p" eval="True"/>
</record>
<record model="ir.rule" id="rule_shipment_in">
- <field name="field" search="[('name', '=', 'company'), ('model.model', '=', 'stock.shipment.in')]"/>
- <field name="operator">=</field>
- <field name="operand">User/Current Company</field>
+ <field name="domain">[('company', '=', user.company.id if user.company else None)]</field>
<field name="rule_group" ref="rule_group_shipment_in"/>
</record>
<record model="ir.rule.group" id="rule_group_shipment_in_return">
@@ -1307,9 +945,7 @@ this repository contains the full copyright notices and license terms. -->
<field name="global_p" eval="True"/>
</record>
<record model="ir.rule" id="rule_shipment_in_return">
- <field name="field" search="[('name', '=', 'company'), ('model.model', '=', 'stock.shipment.in.return')]"/>
- <field name="operator">=</field>
- <field name="operand">User/Current Company</field>
+ <field name="domain">[('company', '=', user.company.id if user.company else None)]</field>
<field name="rule_group" ref="rule_group_shipment_in_return"/>
</record>
<record model="ir.rule.group" id="rule_group_shipment_out">
@@ -1317,9 +953,7 @@ this repository contains the full copyright notices and license terms. -->
<field name="global_p" eval="True"/>
</record>
<record model="ir.rule" id="rule_shipment_out">
- <field name="field" search="[('name', '=', 'company'), ('model.model', '=', 'stock.shipment.out')]"/>
- <field name="operator">=</field>
- <field name="operand">User/Current Company</field>
+ <field name="domain">[('company', '=', user.company.id if user.company else None)]</field>
<field name="rule_group" ref="rule_group_shipment_out"/>
</record>
<record model="ir.rule.group" id="rule_group_shipment_out_return">
@@ -1327,9 +961,7 @@ this repository contains the full copyright notices and license terms. -->
<field name="global_p" eval="True"/>
</record>
<record model="ir.rule" id="rule_shipment_out_return">
- <field name="field" search="[('name', '=', 'company'), ('model.model', '=', 'stock.shipment.out.return')]"/>
- <field name="operator">=</field>
- <field name="operand">User/Current Company</field>
+ <field name="domain">[('company', '=', user.company.id if user.company else None)]</field>
<field name="rule_group" ref="rule_group_shipment_out_return"/>
</record>
<record model="ir.rule.group" id="rule_group_shipment_internal">
@@ -1337,9 +969,7 @@ this repository contains the full copyright notices and license terms. -->
<field name="global_p" eval="True"/>
</record>
<record model="ir.rule" id="rule_shipment_internal">
- <field name="field" search="[('name', '=', 'company'), ('model.model', '=', 'stock.shipment.internal')]"/>
- <field name="operator">=</field>
- <field name="operand">User/Current Company</field>
+ <field name="domain">[('company', '=', user.company.id if user.company else None)]</field>
<field name="rule_group" ref="rule_group_shipment_internal"/>
</record>
</data>
diff --git a/tests/scenario_stock_average_cost_price.rst b/tests/scenario_stock_average_cost_price.rst
new file mode 100644
index 0000000..d638797
--- /dev/null
+++ b/tests/scenario_stock_average_cost_price.rst
@@ -0,0 +1,127 @@
+========================
+Stock Average Cost Price
+========================
+
+=============
+General Setup
+=============
+
+Imports::
+
+ >>> import datetime
+ >>> from dateutil.relativedelta import relativedelta
+ >>> from decimal import Decimal
+ >>> from proteus import config, Model, Wizard
+ >>> today = datetime.date.today()
+
+Create database::
+
+ >>> config = config.set_trytond()
+ >>> config.pool.test = True
+
+Install stock Module::
+
+ >>> Module = Model.get('ir.module.module')
+ >>> modules = Module.find([('name', '=', 'stock')])
+ >>> Module.install([x.id for x in modules], config.context)
+ >>> Wizard('ir.module.module.install_upgrade').execute('upgrade')
+
+Create company::
+
+ >>> Currency = Model.get('currency.currency')
+ >>> CurrencyRate = Model.get('currency.currency.rate')
+ >>> Company = Model.get('company.company')
+ >>> Party = Model.get('party.party')
+ >>> company_config = Wizard('company.company.config')
+ >>> company_config.execute('company')
+ >>> company = company_config.form
+ >>> party = Party(name='Dunder Mifflin')
+ >>> party.save()
+ >>> company.party = party
+ >>> currencies = Currency.find([('code', '=', 'USD')])
+ >>> if not currencies:
+ ... currency = Currency(name='US Dollar', symbol='$', code='USD',
+ ... rounding=Decimal('0.01'), mon_grouping='[3, 3, 0]',
+ ... mon_decimal_point='.')
+ ... currency.save()
+ ... CurrencyRate(date=today + relativedelta(month=1, day=1),
+ ... rate=Decimal('1.0'), currency=currency).save()
+ ... else:
+ ... currency, = currencies
+ >>> company.currency = currency
+ >>> company_config.execute('add')
+ >>> company, = Company.find()
+
+Reload the context::
+
+ >>> User = Model.get('res.user')
+ >>> config._context = User.get_preferences(True, config.context)
+
+Create product::
+
+ >>> ProductUom = Model.get('product.uom')
+ >>> ProductTemplate = Model.get('product.template')
+ >>> Product = Model.get('product.product')
+ >>> unit, = ProductUom.find([('name', '=', 'Unit')])
+ >>> product = Product()
+ >>> template = ProductTemplate()
+ >>> template.name = 'Product'
+ >>> template.default_uom = unit
+ >>> template.type = 'goods'
+ >>> template.list_price = Decimal('300')
+ >>> template.cost_price = Decimal('80')
+ >>> template.cost_price_method = 'average'
+ >>> template.save()
+ >>> product.template = template
+ >>> product.save()
+
+Get stock locations::
+
+ >>> Location = Model.get('stock.location')
+ >>> supplier_loc, = Location.find([('code', '=', 'SUP')])
+ >>> storage_loc, = Location.find([('code', '=', 'STO')])
+
+Make 1 unit of the product available @ 100 ::
+
+ >>> StockMove = Model.get('stock.move')
+ >>> incoming_move = StockMove()
+ >>> incoming_move.product = product
+ >>> incoming_move.uom = unit
+ >>> incoming_move.quantity = 1
+ >>> incoming_move.from_location = supplier_loc
+ >>> incoming_move.to_location = storage_loc
+ >>> incoming_move.planned_date = today
+ >>> incoming_move.effective_date = today
+ >>> incoming_move.company = company
+ >>> incoming_move.unit_price = Decimal('100')
+ >>> incoming_move.currency = currency
+ >>> incoming_move.save()
+ >>> StockMove.do([incoming_move.id], config.context)
+
+Check Cost Price is 100::
+
+ >>> product.reload()
+ >>> product.template.cost_price == Decimal('100')
+ True
+
+Add 1 more unit @ 200::
+
+ >>> incoming_move = StockMove()
+ >>> incoming_move.product = product
+ >>> incoming_move.uom = unit
+ >>> incoming_move.quantity = 1
+ >>> incoming_move.from_location = supplier_loc
+ >>> incoming_move.to_location = storage_loc
+ >>> incoming_move.planned_date = today
+ >>> incoming_move.effective_date = today
+ >>> incoming_move.company = company
+ >>> incoming_move.unit_price = Decimal('200')
+ >>> incoming_move.currency = currency
+ >>> incoming_move.save()
+ >>> StockMove.do([incoming_move.id], config.context)
+
+Check Cost Price Average is 150::
+
+ >>> product.reload()
+ >>> product.template.cost_price == Decimal('150')
+ True
diff --git a/tests/scenario_stock_shipment_out.rst b/tests/scenario_stock_shipment_out.rst
index 62d2c06..d2689cf 100644
--- a/tests/scenario_stock_shipment_out.rst
+++ b/tests/scenario_stock_shipment_out.rst
@@ -31,10 +31,13 @@ Create company::
>>> Currency = Model.get('currency.currency')
>>> CurrencyRate = Model.get('currency.currency.rate')
>>> Company = Model.get('company.company')
+ >>> Party = Model.get('party.party')
>>> company_config = Wizard('company.company.config')
>>> company_config.execute('company')
>>> company = company_config.form
- >>> company.name = 'OPENLABS'
+ >>> party = Party(name='OPENLABS')
+ >>> party.save()
+ >>> company.party = party
>>> currencies = Currency.find([('code', '=', 'EUR')])
>>> if not currencies:
... currency = Currency(name='Euro', symbol=u'â¬', code='EUR',
@@ -69,15 +72,19 @@ Create category::
Create product::
>>> ProductUom = Model.get('product.uom')
+ >>> ProductTemplate = Model.get('product.template')
>>> Product = Model.get('product.product')
>>> unit, = ProductUom.find([('name', '=', 'Unit')])
>>> product = Product()
- >>> product.name = 'Product'
- >>> product.category = category
- >>> product.default_uom = unit
- >>> product.type = 'goods'
- >>> product.list_price = Decimal('20')
- >>> product.cost_price = Decimal('8')
+ >>> template = ProductTemplate()
+ >>> template.name = 'Product'
+ >>> template.category = category
+ >>> template.default_uom = unit
+ >>> template.type = 'goods'
+ >>> template.list_price = Decimal('20')
+ >>> template.cost_price = Decimal('8')
+ >>> template.save()
+ >>> product.template = template
>>> product.save()
Get stock locations::
@@ -132,11 +139,11 @@ Make 1 unit of the product available::
>>> incoming_move.to_location = storage_loc
>>> incoming_move.planned_date = today
>>> incoming_move.effective_date = today
- >>> incoming_move.state = 'done'
>>> incoming_move.company = company
>>> incoming_move.unit_price = Decimal('1')
>>> incoming_move.currency = currency
>>> incoming_move.save()
+ >>> StockMove.do([incoming_move.id], config.context)
Assign the shipment now::
diff --git a/tests/test_stock.py b/tests/test_stock.py
index 548fd35..349e9e4 100644
--- a/tests/test_stock.py
+++ b/tests/test_stock.py
@@ -29,6 +29,7 @@ class StockTestCase(unittest.TestCase):
def setUp(self):
trytond.tests.test_tryton.install_module('stock')
+ self.template = POOL.get('product.template')
self.product = POOL.get('product.product')
self.category = POOL.get('product.category')
self.uom = POOL.get('product.uom')
@@ -56,23 +57,26 @@ class StockTestCase(unittest.TestCase):
Test Move.internal_quantity.
'''
with Transaction().start(DB_NAME, USER, context=CONTEXT):
- category = self.category.create({
- 'name': 'Test Move.internal_quantity',
- })
+ category, = self.category.create([{
+ 'name': 'Test Move.internal_quantity',
+ }])
kg, = self.uom.search([('name', '=', 'Kilogram')])
g, = self.uom.search([('name', '=', 'Gram')])
- product = self.product.create({
- 'name': 'Test Move.internal_quantity',
- 'type': 'goods',
- 'list_price': Decimal(1),
- 'cost_price': Decimal(0),
- 'category': category.id,
- 'cost_price_method': 'fixed',
- 'default_uom': kg.id,
- })
+ template, = self.template.create([{
+ 'name': 'Test Move.internal_quantity',
+ 'type': 'goods',
+ 'list_price': Decimal(1),
+ 'cost_price': Decimal(0),
+ 'category': category.id,
+ 'cost_price_method': 'fixed',
+ 'default_uom': kg.id,
+ }])
+ product, = self.product.create([{
+ 'template': template.id,
+ }])
supplier, = self.location.search([('code', '=', 'SUP')])
storage, = self.location.search([('code', '=', 'STO')])
- company, = self.company.search([('name', '=', 'B2CK')])
+ company, = self.company.search([('rec_name', '=', 'B2CK')])
currency = company.currency
self.user.write([self.user(USER)], {
'main_company': company.id,
@@ -85,16 +89,16 @@ class StockTestCase(unittest.TestCase):
(g, 1, 0), # rounded
]
for uom, quantity, internal_quantity in tests:
- move = self.move.create({
- 'product': product.id,
- 'uom': uom.id,
- 'quantity': quantity,
- 'from_location': supplier.id,
- 'to_location': storage.id,
- 'company': company.id,
- 'unit_price': Decimal('1'),
- 'currency': currency.id,
- })
+ move, = self.move.create([{
+ 'product': product.id,
+ 'uom': uom.id,
+ 'quantity': quantity,
+ 'from_location': supplier.id,
+ 'to_location': storage.id,
+ 'company': company.id,
+ 'unit_price': Decimal('1'),
+ 'currency': currency.id,
+ }])
self.assertEqual(move.internal_quantity, internal_quantity)
for uom, quantity, internal_quantity in tests:
@@ -110,24 +114,27 @@ class StockTestCase(unittest.TestCase):
'''
with Transaction().start(DB_NAME, USER,
context=CONTEXT) as transaction:
- category = self.category.create({
- 'name': 'Test products_by_location',
- })
+ category, = self.category.create([{
+ 'name': 'Test products_by_location',
+ }])
kg, = self.uom.search([('name', '=', 'Kilogram')])
g, = self.uom.search([('name', '=', 'Gram')])
- product = self.product.create({
- 'name': 'Test products_by_location',
- 'type': 'goods',
- 'list_price': Decimal(0),
- 'cost_price': Decimal(0),
- 'category': category.id,
- 'cost_price_method': 'fixed',
- 'default_uom': kg.id,
- })
+ template, = self.template.create([{
+ 'name': 'Test products_by_location',
+ 'type': 'goods',
+ 'list_price': Decimal(0),
+ 'cost_price': Decimal(0),
+ 'category': category.id,
+ 'cost_price_method': 'fixed',
+ 'default_uom': kg.id,
+ }])
+ product, = self.product.create([{
+ 'template': template.id,
+ }])
supplier, = self.location.search([('code', '=', 'SUP')])
customer, = self.location.search([('code', '=', 'CUS')])
storage, = self.location.search([('code', '=', 'STO')])
- company, = self.company.search([('name', '=', 'B2CK')])
+ company, = self.company.search([('rec_name', '=', 'B2CK')])
currency = company.currency
self.user.write([self.user(USER)], {
'main_company': company.id,
@@ -136,80 +143,70 @@ class StockTestCase(unittest.TestCase):
today = datetime.date.today()
- self.move.create({
- 'product': product.id,
- 'uom': kg.id,
- 'quantity': 5,
- 'from_location': supplier.id,
- 'to_location': storage.id,
- 'planned_date': today + relativedelta(days=-5),
- 'effective_date': today + relativedelta(days=-5),
- 'state': 'done',
- 'company': company.id,
- 'unit_price': Decimal('1'),
- 'currency': currency.id,
- })
- self.move.create({
- 'product': product.id,
- 'uom': kg.id,
- 'quantity': 1,
- 'from_location': supplier.id,
- 'to_location': storage.id,
- 'planned_date': today + relativedelta(days=-4),
- 'state': 'draft',
- 'company': company.id,
- 'unit_price': Decimal('1'),
- 'currency': currency.id,
- })
- self.move.create({
- 'product': product.id,
- 'uom': kg.id,
- 'quantity': 1,
- 'from_location': storage.id,
- 'to_location': customer.id,
- 'planned_date': today,
- 'effective_date': today,
- 'state': 'done',
- 'company': company.id,
- 'unit_price': Decimal('1'),
- 'currency': currency.id,
- })
- self.move.create({
- 'product': product.id,
- 'uom': kg.id,
- 'quantity': 1,
- 'from_location': storage.id,
- 'to_location': customer.id,
- 'planned_date': today,
- 'state': 'draft',
- 'company': company.id,
- 'unit_price': Decimal('1'),
- 'currency': currency.id,
- })
- self.move.create({
- 'product': product.id,
- 'uom': kg.id,
- 'quantity': 2,
- 'from_location': storage.id,
- 'to_location': customer.id,
- 'planned_date': today + relativedelta(days=5),
- 'state': 'draft',
- 'company': company.id,
- 'unit_price': Decimal('1'),
- 'currency': currency.id,
- })
- self.move.create({
- 'product': product.id,
- 'uom': kg.id,
- 'quantity': 5,
- 'from_location': supplier.id,
- 'to_location': storage.id,
- 'planned_date': today + relativedelta(days=7),
- 'state': 'draft',
- 'company': company.id,
- 'unit_price': Decimal('1'),
- 'currency': currency.id,
- })
+ moves = self.move.create([{
+ 'product': product.id,
+ 'uom': kg.id,
+ 'quantity': 5,
+ 'from_location': supplier.id,
+ 'to_location': storage.id,
+ 'planned_date': today + relativedelta(days=-5),
+ 'effective_date': today + relativedelta(days=-5),
+ 'company': company.id,
+ 'unit_price': Decimal('1'),
+ 'currency': currency.id,
+ }, {
+ 'product': product.id,
+ 'uom': kg.id,
+ 'quantity': 1,
+ 'from_location': supplier.id,
+ 'to_location': storage.id,
+ 'planned_date': today + relativedelta(days=-4),
+ 'company': company.id,
+ 'unit_price': Decimal('1'),
+ 'currency': currency.id,
+ }, {
+ 'product': product.id,
+ 'uom': kg.id,
+ 'quantity': 1,
+ 'from_location': storage.id,
+ 'to_location': customer.id,
+ 'planned_date': today,
+ 'effective_date': today,
+ 'company': company.id,
+ 'unit_price': Decimal('1'),
+ 'currency': currency.id,
+ }, {
+ 'product': product.id,
+ 'uom': kg.id,
+ 'quantity': 1,
+ 'from_location': storage.id,
+ 'to_location': customer.id,
+ 'planned_date': today,
+ 'company': company.id,
+ 'unit_price': Decimal('1'),
+ 'currency': currency.id,
+ }, {
+ 'product': product.id,
+ 'uom': kg.id,
+ 'quantity': 2,
+ 'from_location': storage.id,
+ 'to_location': customer.id,
+ 'planned_date': today + relativedelta(days=5),
+ 'company': company.id,
+ 'unit_price': Decimal('1'),
+ 'currency': currency.id,
+ }, {
+ 'product': product.id,
+ 'uom': kg.id,
+ 'quantity': 5,
+ 'from_location': supplier.id,
+ 'to_location': storage.id,
+ 'planned_date': today + relativedelta(days=7),
+ 'company': company.id,
+ 'unit_price': Decimal('1'),
+ 'currency': currency.id,
+ }])
+ self.move.do([moves[0], moves[2]])
products_by_location = partial(self.product.products_by_location,
[storage.id], [product.id])
@@ -293,79 +290,83 @@ class StockTestCase(unittest.TestCase):
today + relativedelta(days=-2),
]
- self.move.create({
- 'product': product.id,
- 'uom': g.id,
- 'quantity': 1,
- 'from_location': supplier.id,
- 'to_location': storage.id,
- 'planned_date': today + relativedelta(days=-5),
- 'effective_date': today + relativedelta(days=-5),
- 'state': 'done',
- 'company': company.id,
- 'unit_price': Decimal('1'),
- 'currency': currency.id,
- })
+ moves = self.move.create([{
+ 'product': product.id,
+ 'uom': g.id,
+ 'quantity': 1,
+ 'from_location': supplier.id,
+ 'to_location': storage.id,
+ 'planned_date': today + relativedelta(days=-5),
+ 'effective_date': (today
+ + relativedelta(days=-5)),
+ 'company': company.id,
+ 'unit_price': Decimal('1'),
+ 'currency': currency.id,
+ }])
+ self.move.do(moves)
# Nothing should change when adding a small quantity
test_products_by_location()
for period_date in periods:
- period = self.period.create({
- 'date': period_date,
- 'company': company.id,
- })
+ period, = self.period.create([{
+ 'date': period_date,
+ 'company': company.id,
+ }])
self.period.close([period])
test_products_by_location()
# Test with_childs
with Transaction().start(DB_NAME, USER,
context=CONTEXT) as transaction:
- company, = self.company.search([('name', '=', 'B2CK')])
+ company, = self.company.search([('rec_name', '=', 'B2CK')])
self.user.write([self.user(USER)], {
'main_company': company.id,
'company': company.id,
})
unit, = self.uom.search([('name', '=', 'Unit')])
- product = self.product.create({
- 'name': 'Test products_by_location',
- 'type': 'goods',
- 'list_price': Decimal(0),
- 'cost_price': Decimal(0),
- 'cost_price_method': 'fixed',
- 'default_uom': unit.id,
- })
+ template, = self.template.create([{
+ 'name': 'Test products_by_location',
+ 'type': 'goods',
+ 'list_price': Decimal(0),
+ 'cost_price': Decimal(0),
+ 'cost_price_method': 'fixed',
+ 'default_uom': unit.id,
+ }])
+ product, = self.product.create([{
+ 'template': template.id,
+ }])
lost_found, = self.location.search([('type', '=', 'lost_found')])
warehouse, = self.location.search([('type', '=', 'warehouse')])
storage, = self.location.search([('code', '=', 'STO')])
- storage1 = self.location.create({
- 'name': 'Storage 1',
- 'type': 'view',
- 'parent': storage.id,
- })
- self.location.create({
- 'name': 'Storage 1.1',
- 'type': 'storage',
- 'parent': storage1.id,
- })
- self.location.create({
- 'name': 'Storage 2',
- 'type': 'view',
- 'parent': storage.id,
- })
-
- self.move.create({
- 'product': product.id,
- 'uom': unit.id,
- 'quantity': 1,
- 'from_location': lost_found.id,
- 'to_location': storage.id,
- 'planned_date': today,
- 'effective_date': today,
- 'state': 'done',
- 'company': company.id,
- })
+ storage1, = self.location.create([{
+ 'name': 'Storage 1',
+ 'type': 'view',
+ 'parent': storage.id,
+ }])
+ storage2, = self.location.create([{
+ 'name': 'Storage 1.1',
+ 'type': 'view',
+ 'parent': storage1.id,
+ }])
+ storage3, = self.location.create([{
+ 'name': 'Storage 2',
+ 'type': 'view',
+ 'parent': storage.id,
+ }])
+
+ moves = self.move.create([{
+ 'product': product.id,
+ 'uom': unit.id,
+ 'quantity': 1,
+ 'from_location': lost_found.id,
+ 'to_location': storage.id,
+ 'planned_date': today,
+ 'effective_date': today,
+ 'company': company.id,
+ }])
+ self.move.do(moves)
products_by_location = self.product.products_by_location(
[warehouse.id], [product.id], with_childs=True)
@@ -377,23 +378,26 @@ class StockTestCase(unittest.TestCase):
Test period.
'''
with Transaction().start(DB_NAME, USER, context=CONTEXT):
- category = self.category.create({
- 'name': 'Test period',
- })
+ category, = self.category.create([{
+ 'name': 'Test period',
+ }])
unit, = self.uom.search([('name', '=', 'Unit')])
- product = self.product.create({
- 'name': 'Test period',
- 'type': 'goods',
- 'category': category.id,
- 'cost_price_method': 'fixed',
- 'default_uom': unit.id,
- 'list_price': Decimal(0),
- 'cost_price': Decimal(0),
- })
+ template, = self.template.create([{
+ 'name': 'Test period',
+ 'type': 'goods',
+ 'category': category.id,
+ 'cost_price_method': 'fixed',
+ 'default_uom': unit.id,
+ 'list_price': Decimal(0),
+ 'cost_price': Decimal(0),
+ }])
+ product, = self.product.create([{
+ 'template': template.id,
+ }])
supplier, = self.location.search([('code', '=', 'SUP')])
customer, = self.location.search([('code', '=', 'CUS')])
storage, = self.location.search([('code', '=', 'STO')])
- company, = self.company.search([('name', '=', 'B2CK')])
+ company, = self.company.search([('rec_name', '=', 'B2CK')])
currency = company.currency
self.user.write([self.user(USER)], {
'main_company': company.id,
@@ -402,45 +406,41 @@ class StockTestCase(unittest.TestCase):
today = datetime.date.today()
- self.move.create({
- 'product': product.id,
- 'uom': unit.id,
- 'quantity': 10,
- 'from_location': supplier.id,
- 'to_location': storage.id,
- 'planned_date': today + relativedelta(days=-5),
- 'effective_date': today + relativedelta(days=-5),
- 'state': 'done',
- 'company': company.id,
- 'unit_price': Decimal('1'),
- 'currency': currency.id,
- })
- self.move.create({
- 'product': product.id,
- 'uom': unit.id,
- 'quantity': 15,
- 'from_location': supplier.id,
- 'to_location': storage.id,
- 'planned_date': today + relativedelta(days=-4),
- 'effective_date': today + relativedelta(days=-4),
- 'state': 'done',
- 'company': company.id,
- 'unit_price': Decimal('1'),
- 'currency': currency.id,
- })
- self.move.create({
- 'product': product.id,
- 'uom': unit.id,
- 'quantity': 5,
- 'from_location': storage.id,
- 'to_location': customer.id,
- 'planned_date': today + relativedelta(days=-3),
- 'effective_date': today + relativedelta(days=-3),
- 'state': 'done',
- 'company': company.id,
- 'unit_price': Decimal('1'),
- 'currency': currency.id,
- })
+ moves = self.move.create([{
+ 'product': product.id,
+ 'uom': unit.id,
+ 'quantity': 10,
+ 'from_location': supplier.id,
+ 'to_location': storage.id,
+ 'planned_date': today + relativedelta(days=-5),
+ 'effective_date': today + relativedelta(days=-5),
+ 'company': company.id,
+ 'unit_price': Decimal('1'),
+ 'currency': currency.id,
+ }, {
+ 'product': product.id,
+ 'uom': unit.id,
+ 'quantity': 15,
+ 'from_location': supplier.id,
+ 'to_location': storage.id,
+ 'planned_date': today + relativedelta(days=-4),
+ 'effective_date': today + relativedelta(days=-4),
+ 'company': company.id,
+ 'unit_price': Decimal('1'),
+ 'currency': currency.id,
+ }, {
+ 'product': product.id,
+ 'uom': unit.id,
+ 'quantity': 5,
+ 'from_location': storage.id,
+ 'to_location': customer.id,
+ 'planned_date': today + relativedelta(days=-3),
+ 'effective_date': today + relativedelta(days=-3),
+ 'company': company.id,
+ 'unit_price': Decimal('1'),
+ 'currency': currency.id,
+ }])
+ self.move.do(moves)
tests = [
(-5, {
@@ -455,10 +455,10 @@ class StockTestCase(unittest.TestCase):
]
for days, quantities in tests:
- period = self.period.create({
- 'date': today + relativedelta(days=days),
- 'company': company.id,
- })
+ period, = self.period.create([{
+ 'date': today + relativedelta(days=days),
+ 'company': company.id,
+ }])
self.period.close([period])
self.assertEqual(period.state, 'closed')
@@ -470,45 +470,44 @@ class StockTestCase(unittest.TestCase):
quantities[cache.location.id])
# Test check_period_closed
- self.move.create({
- 'product': product.id,
- 'uom': unit.id,
- 'quantity': 10,
- 'from_location': supplier.id,
- 'to_location': storage.id,
- 'planned_date': today,
- 'effective_date': today,
- 'state': 'done',
- 'company': company.id,
- 'unit_price': Decimal('1'),
- 'currency': currency.id,
- })
-
- self.assertRaises(Exception, self.move.create, {
- 'product': product.id,
- 'uom': unit.id,
- 'quantity': 10,
- 'from_location': supplier.id,
- 'to_location': storage.id,
- 'planned_date': today + relativedelta(days=-5),
- 'effective_date': today + relativedelta(days=-5),
- 'state': 'done',
- 'company': company.id,
- 'unit_price': Decimal('1'),
- 'currency': currency.id,
- })
+ moves = self.move.create([{
+ 'product': product.id,
+ 'uom': unit.id,
+ 'quantity': 10,
+ 'from_location': supplier.id,
+ 'to_location': storage.id,
+ 'planned_date': today,
+ 'effective_date': today,
+ 'company': company.id,
+ 'unit_price': Decimal('1'),
+ 'currency': currency.id,
+ }])
+ self.move.do(moves)
+
+ self.assertRaises(Exception, self.move.create, [{
+ 'product': product.id,
+ 'uom': unit.id,
+ 'quantity': 10,
+ 'from_location': supplier.id,
+ 'to_location': storage.id,
+ 'planned_date': today + relativedelta(days=-5),
+ 'effective_date': today + relativedelta(days=-5),
+ 'company': company.id,
+ 'unit_price': Decimal('1'),
+ 'currency': currency.id,
+ }])
# Test close period check
- period = self.period.create({
- 'date': today,
- 'company': company.id,
- })
+ period, = self.period.create([{
+ 'date': today,
+ 'company': company.id,
+ }])
self.assertRaises(Exception, self.period.close, [period])
- period = self.period.create({
- 'date': today + relativedelta(days=1),
- 'company': company.id,
- })
+ period, = self.period.create([{
+ 'date': today + relativedelta(days=1),
+ 'company': company.id,
+ }])
self.assertRaises(Exception, self.period.close, [period])
@@ -533,9 +532,12 @@ def suite():
suite.addTest(test)
suite.addTests(unittest.TestLoader().loadTestsFromTestCase(StockTestCase))
suite.addTests(doctest.DocFileSuite('scenario_stock_shipment_out.rst',
- setUp=doctest_dropdb, tearDown=doctest_dropdb, encoding='utf-8',
+ setUp=doctest_dropdb, tearDown=doctest_dropdb, encoding='utf-8',
+ optionflags=doctest.REPORT_ONLY_FIRST_FAILURE))
+ suite.addTests(doctest.DocFileSuite(
+ 'scenario_stock_average_cost_price.rst',
+ setUp=doctest_dropdb, tearDown=doctest_dropdb, encoding='utf-8',
optionflags=doctest.REPORT_ONLY_FIRST_FAILURE))
-
return suite
if __name__ == '__main__':
diff --git a/tryton.cfg b/tryton.cfg
index 18627e8..c63f782 100644
--- a/tryton.cfg
+++ b/tryton.cfg
@@ -1,5 +1,5 @@
[tryton]
-version=2.6.1
+version=2.8.0
depends:
company
currency
diff --git a/trytond_stock.egg-info/PKG-INFO b/trytond_stock.egg-info/PKG-INFO
index 50f6207..fb0f48d 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.6.1
+Version: 2.8.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.6/
+Download-URL: http://downloads.tryton.org/2.8/
Description: trytond_stock
=============
@@ -53,6 +53,7 @@ Classifier: Intended Audience :: Legal Industry
Classifier: Intended Audience :: Manufacturing
Classifier: License :: OSI Approved :: GNU General Public License (GPL)
Classifier: Natural Language :: Bulgarian
+Classifier: Natural Language :: Catalan
Classifier: Natural Language :: Czech
Classifier: Natural Language :: Dutch
Classifier: Natural Language :: English
diff --git a/trytond_stock.egg-info/SOURCES.txt b/trytond_stock.egg-info/SOURCES.txt
index e9badc4..2822d28 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
+tests/scenario_stock_average_cost_price.rst
tests/scenario_stock_shipment_out.rst
trytond_stock.egg-info/PKG-INFO
trytond_stock.egg-info/SOURCES.txt
@@ -50,4 +51,42 @@ trytond_stock.egg-info/dependency_links.txt
trytond_stock.egg-info/entry_points.txt
trytond_stock.egg-info/not-zip-safe
trytond_stock.egg-info/requires.txt
-trytond_stock.egg-info/top_level.txt
\ No newline at end of file
+trytond_stock.egg-info/top_level.txt
+view/configuration_form.xml
+view/inventory_form.xml
+view/inventory_line_form.xml
+view/inventory_line_tree.xml
+view/inventory_tree.xml
+view/location_form.xml
+view/location_list.xml
+view/location_quantity_tree.xml
+view/location_tree.xml
+view/move_form.xml
+view/move_tree.xml
+view/move_tree_simple.xml
+view/party_address_form.xml
+view/party_address_tree.xml
+view/party_form.xml
+view/period_cache_form.xml
+view/period_cache_list.xml
+view/period_form.xml
+view/period_list.xml
+view/product_by_location_start_form.xml
+view/product_quantities_warehouse_graph.xml
+view/product_quantities_warehouse_list.xml
+view/product_quantities_warehouse_start_form.xml
+view/product_tree_qty.xml
+view/products_by_locations_start_form.xml
+view/shipment_in_form.xml
+view/shipment_in_return_assign_failed_form.xml
+view/shipment_in_return_form.xml
+view/shipment_in_return_tree.xml
+view/shipment_in_tree.xml
+view/shipment_internal_assign_failed_form.xml
+view/shipment_internal_form.xml
+view/shipment_internal_tree.xml
+view/shipment_out_assign_failed_form.xml
+view/shipment_out_form.xml
+view/shipment_out_return_form.xml
+view/shipment_out_return_tree.xml
+view/shipment_out_tree.xml
\ No newline at end of file
diff --git a/trytond_stock.egg-info/requires.txt b/trytond_stock.egg-info/requires.txt
index 238adba..18b97a6 100644
--- a/trytond_stock.egg-info/requires.txt
+++ b/trytond_stock.egg-info/requires.txt
@@ -1,5 +1,5 @@
-trytond_company >= 2.6, < 2.7
-trytond_currency >= 2.6, < 2.7
-trytond_party >= 2.6, < 2.7
-trytond_product >= 2.6, < 2.7
-trytond >= 2.6, < 2.7
\ No newline at end of file
+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
diff --git a/view/configuration_form.xml b/view/configuration_form.xml
new file mode 100644
index 0000000..5623085
--- /dev/null
+++ b/view/configuration_form.xml
@@ -0,0 +1,15 @@
+<?xml version="1.0"?>
+<!-- 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="Stock Configuration">
+ <label name="shipment_in_sequence"/>
+ <field name="shipment_in_sequence"/>
+ <label name="shipment_in_return_sequence"/>
+ <field name="shipment_in_return_sequence"/>
+ <label name="shipment_out_sequence"/>
+ <field name="shipment_out_sequence"/>
+ <label name="shipment_out_return_sequence"/>
+ <field name="shipment_out_return_sequence"/>
+ <label name="shipment_internal_sequence"/>
+ <field name="shipment_internal_sequence"/>
+</form>
diff --git a/view/inventory_form.xml b/view/inventory_form.xml
new file mode 100644
index 0000000..b139c13
--- /dev/null
+++ b/view/inventory_form.xml
@@ -0,0 +1,26 @@
+<?xml version="1.0"?>
+<!-- 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="Inventory" col="4">
+ <label name="location"/>
+ <field name="location"/>
+ <label name="lost_found"/>
+ <field name="lost_found"/>
+ <label name="date"/>
+ <field name="date"/>
+ <label name="company"/>
+ <field name="company"/>
+ <label colspan="2" id="empty"/>
+ <button string="Complete Inventory"
+ name="complete_lines" colspan="2"
+ help="Add an inventory line for each missing products"/>
+ <field name="lines" colspan="4"/>
+ <group col="4" colspan="4" id="group_buttons">
+ <label name="state"/>
+ <field name="state"/>
+ <group colspan="2" col="3" id="buttons">
+ <button string="Cancel" name="cancel" icon="tryton-cancel" />
+ <button string="Confirm" name="confirm" icon="tryton-ok"/>
+ </group>
+ </group>
+</form>
diff --git a/view/inventory_line_form.xml b/view/inventory_line_form.xml
new file mode 100644
index 0000000..1181051
--- /dev/null
+++ b/view/inventory_line_form.xml
@@ -0,0 +1,18 @@
+<?xml version="1.0"?>
+<!-- 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="Inventory Line" col="4">
+ <label name="product"/>
+ <field name="product"/>
+ <label name="uom"/>
+ <field name="uom"/>
+ <label name="expected_quantity"/>
+ <field name="expected_quantity"/>
+ <label name="quantity"/>
+ <field name="quantity"/>
+ <label name="move"/>
+ <field name="move"/>
+ <label name="inventory"/>
+ <field name="inventory"/>
+ <field name="unit_digits" invisible="1" colspan="4"/>
+</form>
diff --git a/view/inventory_line_tree.xml b/view/inventory_line_tree.xml
new file mode 100644
index 0000000..7668336
--- /dev/null
+++ b/view/inventory_line_tree.xml
@@ -0,0 +1,10 @@
+<?xml version="1.0"?>
+<!-- This file is part of Tryton. The COPYRIGHT file at the top level of
+this repository contains the full copyright notices and license terms. -->
+<tree string="Inventory Lines" editable="bottom">
+ <field name="product"/>
+ <field name="expected_quantity"/>
+ <field name="quantity"/>
+ <field name="uom"/>
+ <field name="unit_digits" tree_invisible="1"/>
+</tree>
diff --git a/view/inventory_tree.xml b/view/inventory_tree.xml
new file mode 100644
index 0000000..db5c588
--- /dev/null
+++ b/view/inventory_tree.xml
@@ -0,0 +1,10 @@
+<?xml version="1.0"?>
+<!-- This file is part of Tryton. The COPYRIGHT file at the top level of
+this repository contains the full copyright notices and license terms. -->
+<tree string="Inventories">
+ <field name="location"/>
+ <field name="date"/>
+ <field name="state"/>
+ <field name="company"/>
+ <field name="create_date" tree_invisible="1"/>
+</tree>
diff --git a/view/location_form.xml b/view/location_form.xml
new file mode 100644
index 0000000..04b5dbf
--- /dev/null
+++ b/view/location_form.xml
@@ -0,0 +1,27 @@
+<?xml version="1.0"?>
+<!-- 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="Location">
+ <label name="name"/>
+ <field name="name"/>
+ <label name="code"/>
+ <field name="code"/>
+ <label name="parent"/>
+ <field name="parent"/>
+ <label name="active"/>
+ <field name="active"/>
+ <label name="type"/>
+ <field name="type"/>
+ <newline/>
+ <label name="address"/>
+ <field name="address"/>
+ <newline/>
+ <label name="input_location"/>
+ <field name="input_location"/>
+ <newline/>
+ <label name="output_location"/>
+ <field name="output_location"/>
+ <newline/>
+ <label name="storage_location"/>
+ <field name="storage_location"/>
+</form>
diff --git a/view/location_list.xml b/view/location_list.xml
new file mode 100644
index 0000000..62ffee2
--- /dev/null
+++ b/view/location_list.xml
@@ -0,0 +1,9 @@
+<?xml version="1.0"?>
+<!-- This file is part of Tryton. The COPYRIGHT file at the top level of
+this repository contains the full copyright notices and license terms. -->
+<tree string="Locations">
+ <field name="name"/>
+ <field name="code"/>
+ <field name="type"/>
+ <field name="active" tree_invisible="1"/>
+</tree>
diff --git a/view/location_quantity_tree.xml b/view/location_quantity_tree.xml
new file mode 100644
index 0000000..bcb3ec5
--- /dev/null
+++ b/view/location_quantity_tree.xml
@@ -0,0 +1,11 @@
+<?xml version="1.0"?>
+<!-- This file is part of Tryton. The COPYRIGHT file at the top level of
+this repository contains the full copyright notices and license terms. -->
+<tree string="Location Quantity">
+ <field name="name"/>
+ <field name="quantity"/>
+ <field name="forecast_quantity"/>
+ <field name="cost_value"/>
+ <field name="parent" tree_invisible="1"/>
+ <field name="childs" tree_invisible="1"/>
+</tree>
diff --git a/view/location_tree.xml b/view/location_tree.xml
new file mode 100644
index 0000000..42b2d4a
--- /dev/null
+++ b/view/location_tree.xml
@@ -0,0 +1,11 @@
+<?xml version="1.0"?>
+<!-- This file is part of Tryton. The COPYRIGHT file at the top level of
+this repository contains the full copyright notices and license terms. -->
+<tree string="Locations" keyword_open="1">
+ <field name="name"/>
+ <field name="code"/>
+ <field name="type"/>
+ <field name="active" tree_invisible="1"/>
+ <field name="parent" tree_invisible="1"/>
+ <field name="childs" tree_invisible="1"/>
+</tree>
diff --git a/view/move_form.xml b/view/move_form.xml
new file mode 100644
index 0000000..d401b58
--- /dev/null
+++ b/view/move_form.xml
@@ -0,0 +1,30 @@
+<?xml version="1.0"?>
+<!-- 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="from_location"/>
+ <field name="from_location"/>
+ <label name="to_location"/>
+ <field name="to_location"/>
+ <label name="product"/>
+ <field name="product"/>
+ <label name="company"/>
+ <field name="company"/>
+ <label name="quantity"/>
+ <field name="quantity"/>
+ <label name="uom"/>
+ <field name="uom"/>
+ <label name="unit_price"/>
+ <field name="unit_price"/>
+ <label name="currency"/>
+ <field name="currency"/>
+ <label name="planned_date"/>
+ <field name="planned_date"/>
+ <label name="effective_date"/>
+ <field name="effective_date"/>
+ <separator colspan="4" id="separator"/>
+ <label name="state"/>
+ <field name="state"/>
+ <field name="unit_price_required" invisible="1" colspan="4"/>
+ <field name="unit_digits" invisible="1" colspan="4"/>
+</form>
diff --git a/view/move_tree.xml b/view/move_tree.xml
new file mode 100644
index 0000000..4d3623a
--- /dev/null
+++ b/view/move_tree.xml
@@ -0,0 +1,14 @@
+<?xml version="1.0"?>
+<!-- This file is part of Tryton. The COPYRIGHT file at the top level of
+this repository contains the full copyright notices and license terms. -->
+<tree string="Moves">
+ <field name="product"/>
+ <field name="from_location"/>
+ <field name="to_location"/>
+ <field name="quantity"/>
+ <field name="uom"/>
+ <field name="planned_date"/>
+ <field name="state"/>
+ <field name="unit_digits" tree_invisible="1"/>
+ <field name="create_date" tree_invisible="1"/>
+</tree>
diff --git a/view/move_tree_simple.xml b/view/move_tree_simple.xml
new file mode 100644
index 0000000..ab8d001
--- /dev/null
+++ b/view/move_tree_simple.xml
@@ -0,0 +1,9 @@
+<?xml version="1.0"?>
+<!-- This file is part of Tryton. The COPYRIGHT file at the top level of
+this repository contains the full copyright notices and license terms. -->
+<tree string="Moves">
+ <field name="product"/>
+ <field name="quantity"/>
+ <field name="uom" expand="1"/>
+ <field name="unit_digits" tree_invisible="1"/>
+</tree>
diff --git a/view/party_address_form.xml b/view/party_address_form.xml
new file mode 100644
index 0000000..41a7036
--- /dev/null
+++ b/view/party_address_form.xml
@@ -0,0 +1,10 @@
+<?xml version="1.0"?>
+<!-- This file is part of Tryton. The COPYRIGHT file at the top level of
+this repository contains the full copyright notices and license terms. -->
+<data>
+ <xpath expr="/form/group/field[@name='active']" position="after">
+ <label name="delivery"/>
+ <field name="delivery" xexpand="0" width="25"/>
+ </xpath>
+</data>
+
diff --git a/view/party_address_tree.xml b/view/party_address_tree.xml
new file mode 100644
index 0000000..2a80410
--- /dev/null
+++ b/view/party_address_tree.xml
@@ -0,0 +1,8 @@
+<?xml version="1.0"?>
+<!-- This file is part of Tryton. The COPYRIGHT file at the top level of
+this repository contains the full copyright notices and license terms. -->
+<data>
+ <xpath expr="/tree/field[@name='active']" position="after">
+ <field name="delivery"/>
+ </xpath>
+</data>
diff --git a/view/party_form.xml b/view/party_form.xml
new file mode 100644
index 0000000..4ab8eed
--- /dev/null
+++ b/view/party_form.xml
@@ -0,0 +1,13 @@
+<?xml version="1.0"?>
+<!-- This file is part of Tryton. The COPYRIGHT file at the top level of
+this repository contains the full copyright notices and license terms. -->
+<data>
+ <xpath expr="/form/notebook/page[@id='accounting']" position="after">
+ <page string="Stock" id="stock">
+ <label name="customer_location"/>
+ <field name="customer_location"/>
+ <label name="supplier_location"/>
+ <field name="supplier_location"/>
+ </page>
+ </xpath>
+</data>
diff --git a/view/period_cache_form.xml b/view/period_cache_form.xml
new file mode 100644
index 0000000..5183ec7
--- /dev/null
+++ b/view/period_cache_form.xml
@@ -0,0 +1,13 @@
+<?xml version="1.0"?>
+<!-- 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="Period Cache" col="6">
+ <label name="period"/>
+ <field name="period" colspan="5"/>
+ <label name="location"/>
+ <field name="location"/>
+ <label name="product"/>
+ <field name="product"/>
+ <label name="internal_quantity"/>
+ <field name="internal_quantity"/>
+</form>
diff --git a/view/period_cache_list.xml b/view/period_cache_list.xml
new file mode 100644
index 0000000..49b2f5c
--- /dev/null
+++ b/view/period_cache_list.xml
@@ -0,0 +1,9 @@
+<?xml version="1.0"?>
+<!-- This file is part of Tryton. The COPYRIGHT file at the top level of
+this repository contains the full copyright notices and license terms. -->
+<tree string="Period Caches">
+ <field name="period"/>
+ <field name="location"/>
+ <field name="product"/>
+ <field name="internal_quantity"/>
+</tree>
diff --git a/view/period_form.xml b/view/period_form.xml
new file mode 100644
index 0000000..46aee41
--- /dev/null
+++ b/view/period_form.xml
@@ -0,0 +1,15 @@
+<?xml version="1.0"?>
+<!-- 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="Period">
+ <label name="company"/>
+ <field name="company"/>
+ <label name="date"/>
+ <field name="date"/>
+ <label name="state"/>
+ <field name="state"/>
+ <group col="2" colspan="2" id="buttons">
+ <button name="draft" string="Draft" icon="tryton-clear"/>
+ <button name="close" string="Close" icon="tryton-ok"/>
+ </group>
+</form>
diff --git a/view/period_list.xml b/view/period_list.xml
new file mode 100644
index 0000000..aded88e
--- /dev/null
+++ b/view/period_list.xml
@@ -0,0 +1,8 @@
+<?xml version="1.0"?>
+<!-- This file is part of Tryton. The COPYRIGHT file at the top level of
+this repository contains the full copyright notices and license terms. -->
+<tree string="Periods">
+ <field name="date"/>
+ <field name="company"/>
+ <field name="state"/>
+</tree>
diff --git a/view/product_by_location_start_form.xml b/view/product_by_location_start_form.xml
new file mode 100644
index 0000000..6d15c30
--- /dev/null
+++ b/view/product_by_location_start_form.xml
@@ -0,0 +1,7 @@
+<?xml version="1.0"?>
+<!-- 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="Product by Location">
+ <label name="forecast_date"/>
+ <field name="forecast_date"/>
+</form>
diff --git a/view/product_quantities_warehouse_graph.xml b/view/product_quantities_warehouse_graph.xml
new file mode 100644
index 0000000..8211831
--- /dev/null
+++ b/view/product_quantities_warehouse_graph.xml
@@ -0,0 +1,12 @@
+<?xml version="1.0"?>
+<!-- This file is part of Tryton. The COPYRIGHT file at the top level of
+this repository contains the full copyright notices and license terms. -->
+<graph string="Product Quantities By Warehouse" type="line"
+ legend="0">
+ <x>
+ <field name="date"/>
+ </x>
+ <y>
+ <field name="quantity" empty="0" interpolation="constant-left" fill="1"/>
+ </y>
+</graph>
diff --git a/view/product_quantities_warehouse_list.xml b/view/product_quantities_warehouse_list.xml
new file mode 100644
index 0000000..7cac2d2
--- /dev/null
+++ b/view/product_quantities_warehouse_list.xml
@@ -0,0 +1,7 @@
+<?xml version="1.0"?>
+<!-- This file is part of Tryton. The COPYRIGHT file at the top level of
+this repository contains the full copyright notices and license terms. -->
+<tree string="Product Quantities By Warehouse">
+ <field name="date"/>
+ <field name="quantity"/>
+</tree>
diff --git a/view/product_quantities_warehouse_start_form.xml b/view/product_quantities_warehouse_start_form.xml
new file mode 100644
index 0000000..10f516f
--- /dev/null
+++ b/view/product_quantities_warehouse_start_form.xml
@@ -0,0 +1,7 @@
+<?xml version="1.0"?>
+<!-- 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="Product Quantities By Warehouse">
+ <label name="warehouse"/>
+ <field name="warehouse"/>
+</form>
diff --git a/view/product_tree_qty.xml b/view/product_tree_qty.xml
new file mode 100644
index 0000000..ac84701
--- /dev/null
+++ b/view/product_tree_qty.xml
@@ -0,0 +1,12 @@
+<?xml version="1.0"?>
+<!-- This file is part of Tryton. The COPYRIGHT file at the top level of
+this repository contains the full copyright notices and license terms. -->
+<tree string="Products">
+ <field name="template"/>
+ <field name="code"/>
+ <field name="quantity"/>
+ <field name="cost_value"/>
+ <field name="forecast_quantity"/>
+ <field name="default_uom"/>
+ <field name="active"/>
+</tree>
diff --git a/view/products_by_locations_start_form.xml b/view/products_by_locations_start_form.xml
new file mode 100644
index 0000000..7bc1757
--- /dev/null
+++ b/view/products_by_locations_start_form.xml
@@ -0,0 +1,7 @@
+<?xml version="1.0"?>
+<!-- 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="Products by Locations">
+ <label name="forecast_date"/>
+ <field name="forecast_date"/>
+</form>
diff --git a/view/shipment_in_form.xml b/view/shipment_in_form.xml
new file mode 100644
index 0000000..e9b6577
--- /dev/null
+++ b/view/shipment_in_form.xml
@@ -0,0 +1,39 @@
+<?xml version="1.0"?>
+<!-- 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="Supplier Shipment" col="4" cursor="supplier">
+ <label name="reference"/>
+ <field name="reference"/>
+ <label name="code"/>
+ <field name="code"/>
+ <label name="supplier"/>
+ <field name="supplier"/>
+ <label name="contact_address"/>
+ <field name="contact_address"/>
+ <label name="planned_date"/>
+ <field name="planned_date"/>
+ <label name="effective_date"/>
+ <field name="effective_date"/>
+ <label name="company"/>
+ <field name="company"/>
+ <label name="warehouse"/>
+ <field name="warehouse"/>
+ <notebook colspan="6">
+ <page string="Incoming Moves" id="incoming_moves">
+ <field name="incoming_moves" colspan="4"/>
+ </page>
+ <page string="Inventory Moves" id="inventory_moves">
+ <field name="inventory_moves" colspan="4"/>
+ </page>
+ </notebook>
+ <group col="4" colspan="6" id="state_buttons">
+ <label name="state"/>
+ <field name="state"/>
+ <group col="5" colspan="2" id="buttons">
+ <button string="Cancel" name="cancel" icon="tryton-cancel"/>
+ <button string="Receive" name="receive" icon="tryton-go-next"/>
+ <button string="Done" name="done" icon="tryton-ok"/>
+ <button string="Reset to Draft" name="draft" icon="tryton-clear"/>
+ </group>
+ </group>
+</form>
diff --git a/view/shipment_in_return_assign_failed_form.xml b/view/shipment_in_return_assign_failed_form.xml
new file mode 100644
index 0000000..941e0f0
--- /dev/null
+++ b/view/shipment_in_return_assign_failed_form.xml
@@ -0,0 +1,10 @@
+<?xml version="1.0"?>
+<!-- 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="Unable to Assign" col="2">
+<image name="tryton-dialog-warning" xexpand="0" xfill="0"/>
+<separator string="Unable to assign those products:"
+ id="unable"/>
+<field name="moves" colspan="2"
+ view_ids="stock.move_view_tree_simple"/>
+</form>
diff --git a/view/shipment_in_return_form.xml b/view/shipment_in_return_form.xml
new file mode 100644
index 0000000..d599fa0
--- /dev/null
+++ b/view/shipment_in_return_form.xml
@@ -0,0 +1,27 @@
+<?xml version="1.0"?>
+<!-- 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="Supplier Return Shipment" col="4" cursor="from_location">
+ <label name="reference"/>
+ <field name="reference"/>
+ <label name="code"/>
+ <field name="code"/>
+ <label name="from_location"/>
+ <field name="from_location"/>
+ <label name="to_location"/>
+ <field name="to_location"/>
+ <label name="planned_date"/>
+ <field name="planned_date"/>
+ <label name="effective_date"/>
+ <field name="effective_date"/>
+ <field name="moves" colspan="4"/>
+ <label name="state"/>
+ <field name="state"/>
+ <group col="5" colspan="2" id="buttons">
+ <button string="Cancel" name="cancel" icon="tryton-cancel"/>
+ <button string="Draft" name="draft" icon="tryton-go-previous"/>
+ <button string="Wait" name="wait"/>
+ <button string="Assign" name="assign_wizard" icon="tryton-go-next"/>
+ <button string="Done" name="done" icon="tryton-ok"/>
+ </group>
+</form>
diff --git a/view/shipment_in_return_tree.xml b/view/shipment_in_return_tree.xml
new file mode 100644
index 0000000..3e6266f
--- /dev/null
+++ b/view/shipment_in_return_tree.xml
@@ -0,0 +1,13 @@
+<?xml version="1.0"?>
+<!-- This file is part of Tryton. The COPYRIGHT file at the top level of
+this repository contains the full copyright notices and license terms. -->
+<tree string="Supplier Return Shipments">
+ <field name="code"/>
+ <field name="reference"/>
+ <field name="planned_date"/>
+ <field name="effective_date"/>
+ <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
new file mode 100644
index 0000000..7038fc1
--- /dev/null
+++ b/view/shipment_in_tree.xml
@@ -0,0 +1,13 @@
+<?xml version="1.0"?>
+<!-- This file is part of Tryton. The COPYRIGHT file at the top level of
+this repository contains the full copyright notices and license terms. -->
+<tree string="Supplier Shipments">
+ <field name="code"/>
+ <field name="reference"/>
+ <field name="planned_date"/>
+ <field name="effective_date"/>
+ <field name="supplier"/>
+ <field name="contact_address"/>
+ <field name="state"/>
+ <field name="create_date" tree_invisible="1"/>
+</tree>
diff --git a/view/shipment_internal_assign_failed_form.xml b/view/shipment_internal_assign_failed_form.xml
new file mode 100644
index 0000000..5cbb455
--- /dev/null
+++ b/view/shipment_internal_assign_failed_form.xml
@@ -0,0 +1,9 @@
+<?xml version="1.0"?>
+<!-- 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="Unable to Assign" col="2">
+ <image name="tryton-dialog-warning" xexpand="0" xfill="0"/>
+ <separator string="Unable to assign those products:" id="unable"/>
+ <field name="moves" colspan="2"
+ view_ids="stock.move_view_tree_simple"/>
+</form>
diff --git a/view/shipment_internal_form.xml b/view/shipment_internal_form.xml
new file mode 100644
index 0000000..5a8442b
--- /dev/null
+++ b/view/shipment_internal_form.xml
@@ -0,0 +1,29 @@
+<?xml version="1.0"?>
+<!-- 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="Internal Shipment" col="4" cursor="from_location">
+ <label name="reference"/>
+ <field name="reference"/>
+ <label name="code"/>
+ <field name="code"/>
+ <label name="from_location"/>
+ <field name="from_location"/>
+ <label name="to_location"/>
+ <field name="to_location"/>
+ <label name="planned_date"/>
+ <field name="planned_date"/>
+ <label name="effective_date"/>
+ <field name="effective_date"/>
+ <label name="company"/>
+ <field name="company"/>
+ <field name="moves" colspan="4"/>
+ <label name="state"/>
+ <field name="state"/>
+ <group col="5" colspan="2" id="buttons">
+ <button string="Cancel" name="cancel" icon="tryton-cancel"/>
+ <button string="Draft" name="draft"/>
+ <button string="Waiting" name="wait"/>
+ <button string="Assign" name="assign_wizard" icon="tryton-go-next"/>
+ <button string="Done" name="done" icon="tryton-ok"/>
+ </group>
+</form>
diff --git a/view/shipment_internal_tree.xml b/view/shipment_internal_tree.xml
new file mode 100644
index 0000000..4b4e126
--- /dev/null
+++ b/view/shipment_internal_tree.xml
@@ -0,0 +1,13 @@
+<?xml version="1.0"?>
+<!-- This file is part of Tryton. The COPYRIGHT file at the top level of
+this repository contains the full copyright notices and license terms. -->
+<tree string="Internal Shipments">
+ <field name="code"/>
+ <field name="reference"/>
+ <field name="planned_date"/>
+ <field name="effective_date"/>
+ <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_assign_failed_form.xml b/view/shipment_out_assign_failed_form.xml
new file mode 100644
index 0000000..1ef4e15
--- /dev/null
+++ b/view/shipment_out_assign_failed_form.xml
@@ -0,0 +1,9 @@
+<?xml version="1.0"?>
+<!-- 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="Unable to Assign" col="2">
+ <image name="tryton-dialog-warning" xexpand="0" xfill="0"/>
+ <separator string="Unable to assign those products:" id="unable"/>
+ <field name="inventory_moves" colspan="2"
+ view_ids="stock.move_view_tree_simple"/>
+</form>
diff --git a/view/shipment_out_form.xml b/view/shipment_out_form.xml
new file mode 100644
index 0000000..ac51e97
--- /dev/null
+++ b/view/shipment_out_form.xml
@@ -0,0 +1,42 @@
+<?xml version="1.0"?>
+<!-- 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="Customer Shipment" col="4" cursor="customer">
+ <label name="reference"/>
+ <field name="reference"/>
+ <label name="code"/>
+ <field name="code"/>
+ <label name="customer"/>
+ <field name="customer"/>
+ <label name="delivery_address"/>
+ <field name="delivery_address"/>
+ <label name="planned_date"/>
+ <field name="planned_date"/>
+ <label name="effective_date"/>
+ <field name="effective_date"/>
+ <label name="company"/>
+ <field name="company"/>
+ <label name="warehouse"/>
+ <field name="warehouse"/>
+ <notebook colspan="4">
+ <page string="Inventory Moves" id="inventory_moves">
+ <field name="inventory_moves" colspan="4"/>
+ </page>
+ <page string="Outgoing Moves" id="outgoing_moves">
+ <field name="outgoing_moves" colspan="4"/>
+ </page>
+ </notebook>
+ <group col="4" colspan="4" id="state_buttons">
+ <label name="state"/>
+ <field name="state"/>
+ <group col="6" colspan="2" id="buttons">
+ <button string="Cancel" name="cancel" icon="tryton-cancel"/>
+ <button string="Draft" name="draft"/>
+ <button string="Waiting" name="wait"/>
+ <button string="Assign" name="assign_wizard"
+ icon="tryton-go-next"/>
+ <button string="Make shipment" name="pack" icon="tryton-go-next"/>
+ <button string="Done" name="done" icon="tryton-ok"/>
+ </group>
+ </group>
+</form>
diff --git a/view/shipment_out_return_form.xml b/view/shipment_out_return_form.xml
new file mode 100644
index 0000000..6e4bb1f
--- /dev/null
+++ b/view/shipment_out_return_form.xml
@@ -0,0 +1,39 @@
+<?xml version="1.0"?>
+<!-- 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="Customer Return Shipment" col="4" cursor="customer">
+ <label name="reference"/>
+ <field name="reference"/>
+ <label name="code"/>
+ <field name="code"/>
+ <label name="customer"/>
+ <field name="customer"/>
+ <label name="delivery_address"/>
+ <field name="delivery_address"/>
+ <label name="planned_date"/>
+ <field name="planned_date"/>
+ <label name="effective_date"/>
+ <field name="effective_date"/>
+ <label name="company"/>
+ <field name="company"/>
+ <label name="warehouse"/>
+ <field name="warehouse"/>
+ <notebook colspan="6">
+ <page string="Incoming Moves" id="incoming_moves">
+ <field name="incoming_moves" colspan="4"/>
+ </page>
+ <page string="Inventory Moves" id="inventory_moves">
+ <field name="inventory_moves" colspan="4"/>
+ </page>
+ </notebook>
+ <group col="4" colspan="6" id="state_buttons">
+ <label name="state"/>
+ <field name="state"/>
+ <group col="5" colspan="2" id="buttons">
+ <button string="Cancel" name="cancel" icon="tryton-cancel"/>
+ <button string="Draft" name="draft" icon="tryton-clear"/>
+ <button string="Received" name="receive" icon="tryton-go-next"/>
+ <button string="Done" name="done" icon="tryton-ok"/>
+ </group>
+ </group>
+</form>
diff --git a/view/shipment_out_return_tree.xml b/view/shipment_out_return_tree.xml
new file mode 100644
index 0000000..38950a9
--- /dev/null
+++ b/view/shipment_out_return_tree.xml
@@ -0,0 +1,13 @@
+<?xml version="1.0"?>
+<!-- This file is part of Tryton. The COPYRIGHT file at the top level of
+this repository contains the full copyright notices and license terms. -->
+<tree string="Customer Return Shipments">
+ <field name="code"/>
+ <field name="reference"/>
+ <field name="state"/>
+ <field name="planned_date"/>
+ <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
new file mode 100644
index 0000000..c0e54f5
--- /dev/null
+++ b/view/shipment_out_tree.xml
@@ -0,0 +1,13 @@
+<?xml version="1.0"?>
+<!-- This file is part of Tryton. The COPYRIGHT file at the top level of
+this repository contains the full copyright notices and license terms. -->
+<tree string="Customer Shipments">
+ <field name="code"/>
+ <field name="reference"/>
+ <field name="planned_date"/>
+ <field name="effective_date"/>
+ <field name="customer"/>
+ <field name="delivery_address"/>
+ <field name="state"/>
+ <field name="create_date" tree_invisible="1"/>
+</tree>
commit a55a4a4229cb55112cd6fcbc3db7e2630b45d31c
Author: Mathias Behrle <mathiasb at m9s.biz>
Date: Fri Feb 15 20:50:56 2013 +0100
Adding upstream version 2.6.1.
diff --git a/CHANGELOG b/CHANGELOG
index 907a61c..ceabd66 100644
--- a/CHANGELOG
+++ b/CHANGELOG
@@ -1,3 +1,6 @@
+Version 2.6.1 - 2013-02-12
+* Bug fixes (see mercurial logs for details)
+
Version 2.6.0 - 2012-10-22
* Bug fixes (see mercurial logs for details)
* Add Product Quantities By Warehouse
diff --git a/COPYRIGHT b/COPYRIGHT
index 2eaddc3..5d0e16a 100644
--- a/COPYRIGHT
+++ b/COPYRIGHT
@@ -1,7 +1,7 @@
Copyright (C) 2012 Openlabs Technologies & Consulting (P) LTD.
-Copyright (C) 2008-2012 Cédric Krier.
+Copyright (C) 2008-2013 Cédric Krier.
Copyright (C) 2008-2012 Bertrand Chenal.
-Copyright (C) 2008-2012 B2CK SPRL.
+Copyright (C) 2008-2013 B2CK SPRL.
Copyright (C) 2004-2008 Tiny SPRL.
This program is free software: you can redistribute it and/or modify
diff --git a/PKG-INFO b/PKG-INFO
index c25b574..2b0ba30 100644
--- a/PKG-INFO
+++ b/PKG-INFO
@@ -1,6 +1,6 @@
-Metadata-Version: 1.0
+Metadata-Version: 1.1
Name: trytond_stock
-Version: 2.6.0
+Version: 2.6.1
Summary: Tryton module for stock and inventory
Home-page: http://www.tryton.org/
Author: Tryton
diff --git a/inventory.py b/inventory.py
index 81191a7..d8de0fb 100644
--- a/inventory.py
+++ b/inventory.py
@@ -149,8 +149,8 @@ class Inventory(Workflow, ModelSQL, ModelView):
new_inventories.append(new_inventory)
return new_inventories
- @classmethod
- def complete_lines(self, inventories):
+ @staticmethod
+ def complete_lines(inventories):
'''
Complete or update the inventories
'''
@@ -196,7 +196,7 @@ class Inventory(Workflow, ModelSQL, ModelView):
# Create lines if needed
for product_id in product_qty:
if (product2type[product_id] != 'goods'
- and not product2consumable[product_id]):
+ or product2consumable[product_id]):
continue
quantity, uom_id = product_qty[product_id]
values = Line.create_values4complete(product_id, inventory,
diff --git a/location.py b/location.py
index 657d93a..d6146dd 100644
--- a/location.py
+++ b/location.py
@@ -228,10 +228,11 @@ class Location(ModelSQL, ModelView):
to_update.add(location.output_location)
if not location.storage_location.parent:
to_update.add(location.storage_location)
- if to_update:
- cls.write(list(to_update), {
- 'parent': location.id,
- })
+ if to_update:
+ cls.write(list(to_update), {
+ 'parent': location.id,
+ })
+ to_update.clear()
@classmethod
def create(cls, vals):
diff --git a/tryton.cfg b/tryton.cfg
index 45c5753..18627e8 100644
--- a/tryton.cfg
+++ b/tryton.cfg
@@ -1,5 +1,5 @@
[tryton]
-version=2.6.0
+version=2.6.1
depends:
company
currency
diff --git a/trytond_stock.egg-info/PKG-INFO b/trytond_stock.egg-info/PKG-INFO
index ea381e0..50f6207 100644
--- a/trytond_stock.egg-info/PKG-INFO
+++ b/trytond_stock.egg-info/PKG-INFO
@@ -1,6 +1,6 @@
-Metadata-Version: 1.0
+Metadata-Version: 1.1
Name: trytond-stock
-Version: 2.6.0
+Version: 2.6.1
Summary: Tryton module for stock and inventory
Home-page: http://www.tryton.org/
Author: Tryton
commit 6dae0f33f534ebe29b5f59aac79af7d163fe2fbf
Author: Mathias Behrle <mathiasb at m9s.biz>
Date: Tue Oct 23 19:53:47 2012 +0200
Adding upstream version 2.6.0.
diff --git a/CHANGELOG b/CHANGELOG
index 84d5b02..907a61c 100644
--- a/CHANGELOG
+++ b/CHANGELOG
@@ -1,5 +1,6 @@
-Version 2.4.1 - 2012-09-02
+Version 2.6.0 - 2012-10-22
* Bug fixes (see mercurial logs for details)
+* Add Product Quantities By Warehouse
Version 2.4.0 - 2012-04-24
* Bug fixes (see mercurial logs for details)
diff --git a/MANIFEST.in b/MANIFEST.in
index 44a0685..501657d 100644
--- a/MANIFEST.in
+++ b/MANIFEST.in
@@ -4,8 +4,10 @@ include TODO
include COPYRIGHT
include CHANGELOG
include LICENSE
+include tryton.cfg
include *.xml
include *.odt
include locale/*.po
include doc/*
include icons/*
+include tests/*.rst
diff --git a/PKG-INFO b/PKG-INFO
index 1889b8a..c25b574 100644
--- a/PKG-INFO
+++ b/PKG-INFO
@@ -1,24 +1,48 @@
Metadata-Version: 1.0
Name: trytond_stock
-Version: 2.4.1
-Summary: Stock Management and Inventory Control with:
- - Location definition
- - Stock move
- - Supplier, Customer and Internal Shipments. Customer and Supplier Return Shipments.
- - Stock Inventory
-
-And with reports:
- - Delivery Note
- - Picking List
- - Restocking List (on Supplier Shipment and Customer Return Shipment)
- - Products by Locations
-
+Version: 2.6.0
+Summary: Tryton module for stock and inventory
Home-page: http://www.tryton.org/
-Author: B2CK
-Author-email: info at b2ck.com
+Author: Tryton
+Author-email: UNKNOWN
License: GPL-3
-Download-URL: http://downloads.tryton.org/2.4/
-Description: UNKNOWN
+Download-URL: http://downloads.tryton.org/2.6/
+Description: trytond_stock
+ =============
+
+ The stock module of the Tryton application platform.
+
+ Installing
+ ----------
+
+ See INSTALL
+
+ Support
+ -------
+
+ If you encounter any problems with Tryton, please don't hesitate to ask
+ questions on the Tryton bug tracker, mailing list, wiki or IRC channel:
+
+ http://bugs.tryton.org/
+ http://groups.tryton.org/
+ http://wiki.tryton.org/
+ irc://irc.freenode.net/tryton
+
+ License
+ -------
+
+ See LICENSE
+
+ Copyright
+ ---------
+
+ See COPYRIGHT
+
+
+ For more information please visit the Tryton web site:
+
+ http://www.tryton.org/
+
Platform: UNKNOWN
Classifier: Development Status :: 5 - Production/Stable
Classifier: Environment :: Plugins
diff --git a/README b/README
index fc8c3ff..e63261a 100644
--- a/README
+++ b/README
@@ -2,7 +2,6 @@ trytond_stock
=============
The stock module of the Tryton application platform.
-See __tryton__.py
Installing
----------
diff --git a/__init__.py b/__init__.py
index a3f9c7d..4a34707 100644
--- a/__init__.py
+++ b/__init__.py
@@ -1,6 +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 trytond.pool import Pool
from .location import *
from .shipment import *
from .period import *
@@ -8,3 +9,47 @@ from .move import *
from .product import *
from .inventory import *
from .configuration import *
+
+
+def register():
+ Pool.register(
+ Location,
+ Party,
+ ProductsByLocationsStart,
+ ShipmentIn,
+ ShipmentInReturn,
+ ShipmentOut,
+ ShipmentOutReturn,
+ AssignShipmentOutAssignFailed,
+ ShipmentInternal,
+ Address,
+ AssignShipmentInternalAssignFailed,
+ AssignShipmentInReturnAssignFailed,
+ Period,
+ Cache,
+ Move,
+ Template,
+ Product,
+ ProductByLocationStart,
+ ProductQuantitiesByWarehouse,
+ ProductQuantitiesByWarehouseStart,
+ Inventory,
+ InventoryLine,
+ Configuration,
+ module='stock', type_='model')
+ Pool.register(
+ ProductsByLocations,
+ AssignShipmentOut,
+ AssignShipmentInternal,
+ AssignShipmentInReturn,
+ CreateShipmentOutReturn,
+ ProductByLocation,
+ OpenProductQuantitiesByWarehouse,
+ module='stock', type_='wizard')
+ Pool.register(
+ DeliveryNote,
+ PickingList,
+ SupplierRestockingList,
+ CustomerReturnRestockingList,
+ InteralShipmentReport,
+ module='stock', type_='report')
diff --git a/__tryton__.py b/__tryton__.py
deleted file mode 100644
index b1ba926..0000000
--- a/__tryton__.py
+++ /dev/null
@@ -1,153 +0,0 @@
-#This file is part of Tryton. The COPYRIGHT file at the top level of
-#this repository contains the full copyright notices and license terms.
-{
- 'name': 'Stock Management',
- 'name_bg_BG': 'УпÑавление на налиÑноÑÑи',
- 'name_ca_ES': 'Estocs',
- 'name_de_DE': 'Lagerverwaltung',
- 'name_es_AR': 'Gestión de existencias',
- 'name_es_CO': 'Inventarios',
- 'name_es_ES': 'Stocks',
- 'name_fr_FR': 'Gestion des stocks',
- 'name_ru_RU': 'УпÑавление Ñкладами',
- 'version': '2.4.1',
- 'author': 'B2CK',
- 'email': 'info at b2ck.com',
- 'website': 'http://www.tryton.org/',
- 'description': '''Stock Management and Inventory Control with:
- - Location definition
- - Stock move
- - Supplier, Customer and Internal Shipments. Customer and Supplier Return Shipments.
- - Stock Inventory
-
-And with reports:
- - Delivery Note
- - Picking List
- - Restocking List (on Supplier Shipment and Customer Return Shipment)
- - Products by Locations
-''',
- 'description_bg_BG': '''УпÑавление на налиÑноÑÑи и конÑÑол на инвенÑаÑизаÑÐ¸Ñ Ñ:
- - Ðадаване на меÑÑонаÑ
ождениÑ
- - ÐÐ²Ð¸Ð¶ÐµÐ½Ð¸Ñ Ð½Ð° налиÑноÑÑ
- - ÐÑаÑки за клиенÑ, Ð¾Ñ Ð´Ð¾ÑÑавÑик, вÑÑÑеÑни пÑаÑки. ÐÑÑнаÑи пÑаÑки Ð¾Ñ ÐºÐ»Ð¸ÐµÐ½Ñ Ð¸ за доÑÑавÑик.
- - ÐнвенÑаÑизаÑÐ¸Ñ Ð½Ð° налиÑноÑÑ
-
-СÑÑ ÑледниÑе ÑпÑавки:
- - Ðележка за доÑÑавка
- - ÐпаковÑÑен лиÑÑ
- - ÐÑеизÑиÑлÑване на инвенÑаÑен Ð¾Ð¿Ð¸Ñ (пÑи пÑаÑка на доÑÑавÑик и пÑаÑка вÑÑнаÑа Ð¾Ñ ÐºÐ»Ð¸ÐµÐ½Ñ)
- - ÐÑодÑкÑи по меÑÑонаÑ
ождение
-''',
- 'description_ca_ES': '''Gestió d'estocs i control d'inventaris amb:
- - Definició d'ubicacions
- - Moviments d'estoc
- - Albarans de proveïdors, clients i interns. Albarans de devolució a client i proveïdor.
- - Inventaris d'estoc
-
-Amb informes:
- - Albarà de lliurament
- - Albarà intern o de picking
- - Llista de recà lcul d'estocs (en recepcions de proveïdors i de devolucions de clients)
- - Productes per ubiació
-''',
- 'description_de_DE': '''Lagerverwaltung und Bestandskontrolle mit:
- - Definition von Lagerorten
- - Lagerbewegungen
- - Lieferposten Lieferant/Kunde/Intern, Warenrückgaben und Warenrücknahmen
- - Lagerbestandsaktualisierung
-
-Mit den Berichten:
- - Lieferschein
- - Pick Liste
- - Einlagerungsliste (für Lieferposten von Lieferanten und Warenrücknahmen)
- - Artikel nach Lagerorten
-''',
- 'description_es_AR': '''Gestión de Existencias y control de inventarios con:
- - Definición de ubicaciones
- - Movimiento de existencias
- - Envios de proveedores, clientes e internos. Envio de devoluciones de clientes y proveedores.
- - Inventario de existencias
-
-Y con los informes:
- - Notas de envio
- - Lista de selección
- - Lista de recálculo de existencias (con envios de proveedores y envios de devoluciones de clientes)
- - Productos por ubicación
-''',
- 'description_es_CO': '''Administración de Inventarios y bodegas:
- - Definición de sitios
- - Movimiento de Bodega
- - Empaque de Proveedor / Cliente / Interno
- - Inventario en Bodega
-
-Y con los reportes:
- - Empaques de Clientes
- - Productos por Lugar
-''',
- 'description_es_ES': '''Gestión de stocks y control de inventarios con:
- - Definición de ubicaciones
- - Movimientos de stock
- - Albaranes de proveedores, clientes e internos. Albaranes de devolución de clientes y proveedores.
- - Inventario de stock
-
-Y con los informes:
- - Albarán de entrega
- - Albarán interno o de picking
- - Lista de recálculo de stocks (en recepciones de proveedores y devoluciones de clientes)
- - Productos por ubicación
-''',
- 'description_fr_FR': '''Gestion des stocks et contrôle de l'inventaire avec:
- - Emplacement
- - Mouvement de stock
- - Expédition client, fournisseur et interne. Retour d'expédition client et founisseur.
- - Inventaire
-
-Et les rapports:
- - Bon de livraison client
- - Liste de prélèvement
- - Liste de restockage (sur l'expédition fournisseur et le retour d'expédition client)
- - Quantités de produit par location
-''',
- 'description_ru_RU': '''УпÑавление Ñкладами и запаÑами:
- - ÐпÑеделение меÑÑ Ñ
ÑанениÑ
- - СкладÑкие пеÑемеÑениÑ
- - ÐÑиÑ
од, оÑгÑÑзки, внÑÑÑенние пеÑемеÑениÑ. ÐозвÑаÑÑ Ð¿Ð¾ÑÑавÑикам и Ð¾Ñ Ð·Ð°ÐºÐ°Ð·Ñиков.
- - СкладÑкой ÑÑеÑ
-
-Ð Ñ Ð¾ÑÑеÑами:
- - ÐоÑÑавка
- - Упаковка
- - ÐнвенÑаÑизаÑÐ¸Ñ (на пÑиÑ
од Ð¾Ñ Ð¿Ð¾ÑÑавÑиков и возвÑаÑÑ ÐºÐ»Ð¸ÐµÐ½Ñов)
- - ТÐЦ по меÑÑам Ñ
ÑанениÑ
-''',
- 'depends': [
- 'ir',
- 'party',
- 'product',
- 'company',
- 'currency',
- ],
- 'xml': [
- 'stock.xml',
- 'product.xml',
- 'location.xml',
- 'shipment.xml',
- 'move.xml',
- 'inventory.xml',
- 'party.xml',
- 'configuration.xml',
- 'period.xml',
- ],
- 'translation': [
- 'locale/cs_CZ.po',
- 'locale/bg_BG.po',
- 'locale/ca_ES.po',
- 'locale/de_DE.po',
- 'locale/es_AR.po',
- 'locale/es_CO.po',
- 'locale/es_ES.po',
- 'locale/fr_FR.po',
- 'locale/nl_NL.po',
- 'locale/ru_RU.po',
- ],
-}
diff --git a/configuration.py b/configuration.py
index 7b06ed7..f2bd881 100644
--- a/configuration.py
+++ b/configuration.py
@@ -3,12 +3,12 @@
from trytond.model import ModelView, ModelSQL, ModelSingleton, fields
from trytond.pyson import Eval, Get
+__all__ = ['Configuration']
+
class Configuration(ModelSingleton, ModelSQL, ModelView):
'Stock Configuration'
- _name = 'stock.configuration'
- _description = __doc__
-
+ __name__ = 'stock.configuration'
shipment_in_sequence = fields.Property(fields.Many2One('ir.sequence',
'Supplier Shipment Sequence', domain=[
('company', 'in',
@@ -39,5 +39,3 @@ class Configuration(ModelSingleton, ModelSQL, ModelView):
[Get(Eval('context', {}), 'company'), None]),
('code', '=', 'stock.shipment.internal'),
], required=True))
-
-Configuration()
diff --git a/inventory.py b/inventory.py
index bde1835..81191a7 100644
--- a/inventory.py
+++ b/inventory.py
@@ -6,6 +6,8 @@ from trytond.backend import TableHandler
from trytond.transaction import Transaction
from trytond.pool import Pool
+__all__ = ['Inventory', 'InventoryLine']
+
STATES = {
'readonly': Not(Equal(Eval('state'), 'draft')),
}
@@ -14,9 +16,7 @@ DEPENDS = ['state']
class Inventory(Workflow, ModelSQL, ModelView):
'Stock Inventory'
- _name = 'stock.inventory'
- _description = __doc__
-
+ __name__ = 'stock.inventory'
location = fields.Many2One(
'stock.location', 'Location', required=True,
domain=[('type', '=', 'storage')], states={
@@ -47,18 +47,19 @@ class Inventory(Workflow, ModelSQL, ModelView):
('cancel', 'Canceled'),
], 'State', readonly=True, select=True)
- def __init__(self):
- super(Inventory, self).__init__()
- self._order.insert(0, ('date', 'DESC'))
- self._error_messages.update({
+ @classmethod
+ def __setup__(cls):
+ super(Inventory, cls).__setup__()
+ cls._order.insert(0, ('date', 'DESC'))
+ cls._error_messages.update({
'delete_cancel': 'Inventory "%s" must be cancelled before ' \
'deletion!',
})
- self._transitions |= set((
+ cls._transitions |= set((
('draft', 'done'),
('draft', 'cancel'),
))
- self._buttons.update({
+ cls._buttons.update({
'confirm': {
'invisible': Eval('state').in_(['done', 'cancel']),
},
@@ -70,112 +71,103 @@ class Inventory(Workflow, ModelSQL, ModelView):
},
})
- def init(self, module_name):
- super(Inventory, self).init(module_name)
+ @classmethod
+ def __register__(cls, module_name):
+ super(Inventory, cls).__register__(module_name)
cursor = Transaction().cursor
# Add index on create_date
- table = TableHandler(cursor, self, module_name)
+ table = TableHandler(cursor, cls, module_name)
table.index_action('create_date', action='add')
- def default_state(self):
+ @staticmethod
+ def default_state():
return 'draft'
- def default_date(self):
- date_obj = Pool().get('ir.date')
- return date_obj.today()
+ @staticmethod
+ def default_date():
+ Date = Pool().get('ir.date')
+ return Date.today()
- def default_company(self):
+ @staticmethod
+ def default_company():
return Transaction().context.get('company')
- def default_lost_found(self):
- location_obj = Pool().get('stock.location')
- location_ids = location_obj.search(self.lost_found.domain)
- if len(location_ids) == 1:
- return location_ids[0]
+ @classmethod
+ def default_lost_found(cls):
+ Location = Pool().get('stock.location')
+ locations = Location.search(cls.lost_found.domain)
+ if len(locations) == 1:
+ return locations[0].id
- def delete(self, ids):
- if isinstance(ids, (int, long)):
- ids = [ids]
+ @classmethod
+ def delete(cls, inventories):
# Cancel before delete
- self.cancel(ids)
- for inventory in self.browse(ids):
+ cls.cancel(inventories)
+ for inventory in inventories:
if inventory.state != 'cancel':
- self.raise_user_error('delete_cancel', inventory.rec_name)
- return super(Inventory, self).delete(ids)
+ cls.raise_user_error('delete_cancel', inventory.rec_name)
+ super(Inventory, cls).delete(inventories)
+ @classmethod
@ModelView.button
@Workflow.transition('done')
- def confirm(self, ids):
- line_obj = Pool().get('stock.inventory.line')
- for inventory in self.browse(ids):
+ def confirm(self, inventories):
+ for inventory in inventories:
for line in inventory.lines:
- line_obj.create_move(line)
+ line.create_move()
+ @classmethod
@ModelView.button
@Workflow.transition('cancel')
- def cancel(self, ids):
- line_obj = Pool().get("stock.inventory.line")
- inventories = self.browse(ids)
- line_obj.cancel_move([l for i in inventories for l in i.lines])
-
- def copy(self, ids, default=None):
- date_obj = Pool().get('ir.date')
- line_obj = Pool().get('stock.inventory.line')
+ def cancel(self, inventories):
+ Line = Pool().get("stock.inventory.line")
+ Line.cancel_move([l for i in inventories for l in i.lines])
- int_id = False
- if isinstance(ids, (int, long)):
- int_id = True
- ids = [ids]
+ @classmethod
+ def copy(cls, inventories, default=None):
+ pool = Pool()
+ Date = pool.get('ir.date')
+ Line = pool.get('stock.inventory.line')
if default is None:
default = {}
default = default.copy()
- default['date'] = date_obj.today()
+ default['date'] = Date.today()
default['lines'] = None
- new_ids = []
- for inventory in self.browse(ids):
- new_id = super(Inventory, self).copy(inventory.id, default=default)
- line_obj.copy([x.id for x in inventory.lines],
- default={
- 'inventory': new_id,
- 'move': None,
- })
- self.complete_lines(new_id)
- new_ids.append(new_id)
-
- if int_id:
- return new_ids[0]
- return new_ids
-
- def complete_lines(self, ids):
+ new_inventories = []
+ for inventory in inventories:
+ new_inventory, = super(Inventory, cls).copy([inventory],
+ default=default)
+ Line.copy(inventory.lines,
+ default={
+ 'inventory': new_inventory.id,
+ 'move': None,
+ })
+ cls.complete_lines([new_inventory])
+ new_inventories.append(new_inventory)
+ return new_inventories
+
+ @classmethod
+ def complete_lines(self, inventories):
'''
Complete or update the inventories
-
- :param ids: the ids of stock.inventory
- :param context: the context
'''
pool = Pool()
- line_obj = pool.get('stock.inventory.line')
- product_obj = pool.get('product.product')
-
- if isinstance(ids, (int, long)):
- ids = [ids]
-
- inventories = self.browse(ids)
+ Line = pool.get('stock.inventory.line')
+ Product = pool.get('product.product')
for inventory in inventories:
# Compute product quantities
with Transaction().set_context(stock_date_end=inventory.date):
- pbl = product_obj.products_by_location(
- [inventory.location.id])
+ pbl = Product.products_by_location([inventory.location.id])
# Index some data
product2uom = {}
product2type = {}
product2consumable = {}
- for product in product_obj.browse([line[1] for line in pbl]):
+ for product in Product.browse([line[1] for line in pbl]):
product2uom[product.id] = product.default_uom.id
product2type[product.id] = product.type
product2consumable[product.id] = product.consumable
@@ -189,7 +181,7 @@ class Inventory(Workflow, ModelSQL, ModelView):
if not (line.product.active and
line.product.type == 'goods'
and not line.product.consumable):
- line_obj.delete(line.id)
+ Line.delete([line])
continue
if line.product.id in product_qty:
quantity, uom_id = product_qty.pop(line.product.id)
@@ -197,10 +189,9 @@ class Inventory(Workflow, ModelSQL, ModelView):
quantity, uom_id = 0.0, product2uom[line.product.id]
else:
quantity, uom_id = 0.0, line.product.default_uom.id
- values = line_obj.update_values4complete(line, quantity,
- uom_id)
+ values = line.update_values4complete(quantity, uom_id)
if values:
- line_obj.write(line.id, values)
+ Line.write([line], values)
# Create lines if needed
for product_id in product_qty:
@@ -208,19 +199,15 @@ class Inventory(Workflow, ModelSQL, ModelView):
and not product2consumable[product_id]):
continue
quantity, uom_id = product_qty[product_id]
- values = line_obj.create_values4complete(product_id, inventory,
- quantity, uom_id)
- line_obj.create(values)
-
-Inventory()
+ values = Line.create_values4complete(product_id, inventory,
+ quantity, uom_id)
+ Line.create(values)
class InventoryLine(ModelSQL, ModelView):
'Stock Inventory Line'
- _name = 'stock.inventory.line'
- _description = __doc__
+ __name__ = 'stock.inventory.line'
_rec_name = 'product'
-
product = fields.Many2One('product.product', 'Product', required=True,
domain=[
('type', '=', 'goods'),
@@ -239,121 +226,104 @@ class InventoryLine(ModelSQL, ModelView):
inventory = fields.Many2One('stock.inventory', 'Inventory', required=True,
ondelete='CASCADE')
- def __init__(self):
- super(InventoryLine, self).__init__()
- self._sql_constraints += [
+ @classmethod
+ def __setup__(cls):
+ super(InventoryLine, cls).__setup__()
+ 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!'),
- ]
- self._order.insert(0, ('product', 'ASC'))
+ ]
+ cls._order.insert(0, ('product', 'ASC'))
- def default_unit_digits(self):
+ @staticmethod
+ def default_unit_digits():
return 2
- def default_expected_quantity(self):
+ @staticmethod
+ def default_expected_quantity():
return 0.
- def on_change_product(self, vals):
- product_obj = Pool().get('product.product')
- res = {}
- res['unit_digits'] = 2
- if vals.get('product'):
- product = product_obj.browse(vals['product'])
- res['uom'] = product.default_uom.id
- res['uom.rec_name'] = product.default_uom.rec_name
- res['unit_digits'] = product.default_uom.digits
- return res
-
- def get_uom(self, ids, name):
- res = {}
- for line in self.browse(ids):
- res[line.id] = line.product.default_uom.id
- return res
-
- def get_unit_digits(self, ids, name):
- res = {}
- for line in self.browse(ids):
- res[line.id] = line.product.default_uom.digits
- return res
-
- def cancel_move(self, lines):
- move_obj = Pool().get('stock.move')
- move_obj.write([l.move.id for l in lines if l.move], {
+ def on_change_product(self):
+ change = {}
+ change['unit_digits'] = 2
+ if self.product:
+ change['uom'] = self.product.default_uom.id
+ change['uom.rec_name'] = self.product.default_uom.rec_name
+ change['unit_digits'] = self.product.default_uom.digits
+ return change
+
+ def get_uom(self, name):
+ return self.product.default_uom.id
+
+ def get_unit_digits(self, name):
+ return self.product.default_uom.digits
+
+ @classmethod
+ def cancel_move(cls, lines):
+ Move = Pool().get('stock.move')
+ Move.write([l.move for l in lines if l.move], {
'state': 'cancel',
})
- move_obj.delete([l.move.id for l in lines if l.move])
- self.write([l.id for l in lines if l.move], {
+ Move.delete([l.move for l in lines if l.move])
+ cls.write([l for l in lines if l.move], {
'move': None,
})
- def create_move(self, line):
+ def create_move(self):
'''
- Create move for an inventory line
-
- :param line: a BrowseRecord of inventory.line
- :return: the stock.move id or None
+ Create move for an inventory line and return id
'''
- move_obj = Pool().get('stock.move')
- uom_obj = Pool().get('product.uom')
+ pool = Pool()
+ Move = pool.get('stock.move')
+ Uom = pool.get('product.uom')
- delta_qty = uom_obj.compute_qty(line.uom,
- line.expected_quantity - line.quantity,
- line.uom)
+ delta_qty = Uom.compute_qty(self.uom,
+ self.expected_quantity - self.quantity,
+ self.uom)
if delta_qty == 0.0:
return
- from_location = line.inventory.location.id
- to_location = line.inventory.lost_found.id
+ from_location = self.inventory.location.id
+ to_location = self.inventory.lost_found.id
if delta_qty < 0:
(from_location, to_location, delta_qty) = \
(to_location, from_location, -delta_qty)
- move_id = move_obj.create({
+ move = Move.create({
'from_location': from_location,
'to_location': to_location,
'quantity': delta_qty,
- 'product': line.product.id,
- 'uom': line.uom.id,
- 'company': line.inventory.company.id,
+ 'product': self.product.id,
+ 'uom': self.uom.id,
+ 'company': self.inventory.company.id,
'state': 'done',
- 'effective_date': line.inventory.date,
+ 'effective_date': self.inventory.date,
})
- self.write(line.id, {
- 'move': move_id,
- })
- return move_id
+ self.move = move
+ self.save()
+ return move.id
- def update_values4complete(self, line, quantity, uom_id):
+ def update_values4complete(self, quantity, uom_id):
'''
Return update values to complete inventory
-
- :param line: a BrowseRecord of inventory.line
- :param quantity: the actual product quantity for the inventory location
- :param uom_id: the UoM id of the product line
- :return: a dictionary
'''
- res = {}
+ values = {}
# if nothing changed, no update
- if line.quantity == line.expected_quantity == quantity \
- and line.uom.id == uom_id:
- return {}
- res['expected_quantity'] = quantity
- res['uom'] = uom_id
+ if self.quantity == self.expected_quantity == quantity \
+ and self.uom.id == uom_id:
+ return values
+ values['expected_quantity'] = quantity
+ values['uom'] = uom_id
# update also quantity field if not edited
- if line.quantity == line.expected_quantity:
- res['quantity'] = max(quantity, 0.0)
- return res
+ if self.quantity == self.expected_quantity:
+ values['quantity'] = max(quantity, 0.0)
+ return values
- def create_values4complete(self, product_id, inventory, quantity, uom_id):
+ @classmethod
+ def create_values4complete(cls, product_id, inventory, quantity, uom_id):
'''
Return create values to complete inventory
-
- :param product_id: the product.product id
- :param inventory: a BrowseRecord of inventory.inventory
- :param quantity: the actual product quantity for the inventory location
- :param uom_id: the UoM id of the product_id
- :return: a dictionary
'''
return {
'inventory': inventory.id,
@@ -362,5 +332,3 @@ class InventoryLine(ModelSQL, ModelView):
'quantity': max(quantity, 0.0),
'uom': uom_id,
}
-
-InventoryLine()
diff --git a/inventory.xml b/inventory.xml
index 39818cb..4102c9e 100644
--- a/inventory.xml
+++ b/inventory.xml
@@ -20,7 +20,7 @@ this repository contains the full copyright notices and license terms. -->
<field name="company"/>
<label colspan="2" id="empty"/>
<button string="Complete Inventory"
- name="complete_lines" type="object" colspan="2"
+ name="complete_lines" colspan="2"
help="Add an inventory line for each missing products"/>
<field name="lines" colspan="4"/>
<group col="4" colspan="4" id="group_buttons">
@@ -28,9 +28,9 @@ this repository contains the full copyright notices and license terms. -->
<field name="state"/>
<group colspan="2" col="3" id="buttons">
<button string="Cancel" name="cancel"
- type="object" icon="tryton-cancel" />
+ icon="tryton-cancel" />
<button string="Confirm" name="confirm"
- type="object" icon="tryton-ok"/>
+ icon="tryton-ok"/>
</group>
</group>
</form>
diff --git a/locale/bg_BG.po b/locale/bg_BG.po
index b9901e6..40c062b 100644
--- a/locale/bg_BG.po
+++ b/locale/bg_BG.po
@@ -20,7 +20,7 @@ msgstr "ÐÑодÑкÑа ÑÑÑбва да е Ñникален по инвенÑ
msgctxt "error:stock.inventory:"
msgid "Inventory \"%s\" must be cancelled before deletion!"
-msgstr ""
+msgstr "ÐÑеди да бÑде изÑÑиÑа инвенÑаÑизаÑÐ¸Ñ \"%s\" ÑÑÑбва да бÑде пÑекÑаÑена!"
msgctxt "error:stock.location:"
msgid ""
@@ -91,8 +91,8 @@ msgstr "Ðе може да заÑваÑÑÑе пеÑиод когаÑо ÑÑдÑ
msgctxt "error:stock.shipment.in.return:"
msgid "Supplier Return Shipment \"%s\" must be cancelled before deletion!"
msgstr ""
-"ÐÑаÑка вÑÑнаÑа Ð¾Ñ Ð´Ð¾ÑÑавÑик \"%s\" ÑÑÑбва да бÑде оÑказана пÑеди да бÑде "
-"изÑÑиÑа!"
+"ÐÑеди да бÑде изÑÑиÑа пÑаÑка вÑÑнаÑа Ð¾Ñ Ð´Ð¾ÑÑавÑик \"%s\" ÑÑÑбва да бÑде "
+"пÑекÑаÑена!"
msgctxt "error:stock.shipment.in:"
msgid ""
@@ -111,11 +111,12 @@ msgstr ""
msgctxt "error:stock.shipment.in:"
msgid "Supplier Shipment \"%s\" must be cancelled before deletion!"
-msgstr "ÐÑаÑка на доÑÑавÑик \"%s\" ÑÑÑбва да бÑде оÑказана пÑеди да бÑде изÑÑиÑа!"
+msgstr ""
+"ÐÑеди да бÑде изÑÑиÑа пÑаÑка на доÑÑавÑик \"%s\" ÑÑÑбва да бÑде пÑекÑаÑена!"
msgctxt "error:stock.shipment.internal:"
msgid "Internal Shipment \"%s\" must be cancelled before deletion!"
-msgstr ""
+msgstr "ÐÑеди да бÑде изÑÑиÑа вÑÑÑеÑна доÑÑавка \"%s\" ÑÑÑбва да бÑде пÑекÑаÑена!"
msgctxt "error:stock.shipment.out.return.create:"
msgid "The shipment with code %s is not yet sent."
@@ -128,10 +129,13 @@ msgstr "Ðе може да ÑÑздадеÑе вÑÑÑане на пÑаÑка"
msgctxt "error:stock.shipment.out.return:"
msgid "Customer Return Shipment \"%s\" must be cancelled before deletion!"
msgstr ""
+"ÐÑеди да бÑде изÑÑиÑа пÑаÑка вÑÑнаÑа Ð¾Ñ ÐºÐ»Ð¸ÐµÐ½Ñ \"%s\" ÑÑÑбва да бÑде "
+"пÑекÑаÑена!"
msgctxt "error:stock.shipment.out:"
msgid "Customer Shipment \"%s\" must be cancelled before deletion!"
msgstr ""
+"ÐÑеди да бÑде изÑÑиÑа доÑÑавка за ÐºÐ»Ð¸ÐµÐ½Ñ \"%s\" ÑÑÑбва да бÑде пÑекÑаÑена!"
msgctxt "field:party.address,delivery:"
msgid "Delivery"
@@ -155,7 +159,7 @@ msgstr "ID"
msgctxt "field:product.product,cost_value:"
msgid "Cost Value"
-msgstr ""
+msgstr "СебеÑÑойноÑÑ"
msgctxt "field:product.product,forecast_quantity:"
msgid "Forecast Quantity"
@@ -167,7 +171,7 @@ msgstr "ÐолиÑеÑÑво"
msgctxt "field:product.template,cost_value:"
msgid "Cost Value"
-msgstr ""
+msgstr "СебеÑÑойноÑÑ"
msgctxt "field:product.template,forecast_quantity:"
msgid "Forecast Quantity"
@@ -331,7 +335,7 @@ msgstr "ÐдÑеÑ"
msgctxt "field:stock.location,childs:"
msgid "Children"
-msgstr "ÐеÑа"
+msgstr "ÐаÑледниÑи"
msgctxt "field:stock.location,code:"
msgid "Code"
@@ -339,7 +343,7 @@ msgstr "Ðод"
msgctxt "field:stock.location,cost_value:"
msgid "Cost Value"
-msgstr ""
+msgstr "СебеÑÑойноÑÑ"
msgctxt "field:stock.location,create_date:"
msgid "Create Date"
@@ -451,7 +455,7 @@ msgstr "ÐÑодÑкÑ"
msgctxt "field:stock.move,product_uom_category:"
msgid "Product Uom Category"
-msgstr ""
+msgstr "ÐаÑегоÑÐ¸Ñ Ð¼ÐµÑ. ед. на пÑодÑкÑ"
msgctxt "field:stock.move,quantity:"
msgid "Quantity"
@@ -593,6 +597,56 @@ msgctxt "field:stock.period.cache,write_uid:"
msgid "Write User"
msgstr "ÐÑоменено оÑ"
+#, fuzzy
+msgctxt "field:stock.product_quantities_warehouse,create_date:"
+msgid "Create Date"
+msgstr "СÑздадено на"
+
+#, fuzzy
+msgctxt "field:stock.product_quantities_warehouse,create_uid:"
+msgid "Create User"
+msgstr "СÑздадено оÑ"
+
+#, fuzzy
+msgctxt "field:stock.product_quantities_warehouse,date:"
+msgid "Date"
+msgstr "ÐаÑа"
+
+#, fuzzy
+msgctxt "field:stock.product_quantities_warehouse,id:"
+msgid "ID"
+msgstr "ID"
+
+#, fuzzy
+msgctxt "field:stock.product_quantities_warehouse,quantity:"
+msgid "Quantity"
+msgstr "ÐолиÑеÑÑво"
+
+#, fuzzy
+msgctxt "field:stock.product_quantities_warehouse,rec_name:"
+msgid "Name"
+msgstr "Ðме на пÑикаÑен Ñайл"
+
+#, fuzzy
+msgctxt "field:stock.product_quantities_warehouse,write_date:"
+msgid "Write Date"
+msgstr "ÐÑоменено на"
+
+#, fuzzy
+msgctxt "field:stock.product_quantities_warehouse,write_uid:"
+msgid "Write User"
+msgstr "ÐÑоменено оÑ"
+
+#, fuzzy
+msgctxt "field:stock.product_quantities_warehouse.start,id:"
+msgid "ID"
+msgstr "ID"
+
+#, fuzzy
+msgctxt "field:stock.product_quantities_warehouse.start,warehouse:"
+msgid "Warehouse"
+msgstr "Склад"
+
msgctxt "field:stock.products_by_locations.start,forecast_date:"
msgid "At Date"
msgstr "Ðа даÑа"
@@ -671,11 +725,11 @@ msgstr "Склад"
msgctxt "field:stock.shipment.in,warehouse_input:"
msgid "Warehouse Input"
-msgstr ""
+msgstr "ÐÑ
од в Ñклад"
msgctxt "field:stock.shipment.in,warehouse_storage:"
msgid "Warehouse Storage"
-msgstr ""
+msgstr "СÑÑ
ÑанÑване в Ñклад"
msgctxt "field:stock.shipment.in,write_date:"
msgid "Write Date"
@@ -891,11 +945,11 @@ msgstr "Склад"
msgctxt "field:stock.shipment.out,warehouse_output:"
msgid "Warehouse Output"
-msgstr ""
+msgstr "ÐзÑ
од Ð¾Ñ Ñклад"
msgctxt "field:stock.shipment.out,warehouse_storage:"
msgid "Warehouse Storage"
-msgstr ""
+msgstr "СÑÑ
ÑанÑване в Ñклад"
msgctxt "field:stock.shipment.out,write_date:"
msgid "Write Date"
@@ -983,11 +1037,11 @@ msgstr "Склад"
msgctxt "field:stock.shipment.out.return,warehouse_input:"
msgid "Warehouse Input"
-msgstr ""
+msgstr "ÐÑ
од в Ñклад"
msgctxt "field:stock.shipment.out.return,warehouse_storage:"
msgid "Warehouse Storage"
-msgstr ""
+msgstr "ÐзÑ
од Ð¾Ñ Ñклад"
msgctxt "field:stock.shipment.out.return,write_date:"
msgid "Write Date"
@@ -1043,8 +1097,8 @@ msgstr "ÐеÑÑонаÑ
ождениÑ"
#, fuzzy
msgctxt "model:ir.action,name:act_location_quantity_tree"
-msgid "Location Quantity & Cost Value"
-msgstr "ÐолиÑеÑÑво в меÑÑонаÑ
ождение & ÑÑойноÑÑ Ð½Ð° ÑазÑ
од"
+msgid "Locations"
+msgstr "ÐолиÑеÑÑво в меÑÑонаÑ
ождение & ÑебеÑÑойноÑÑ"
msgctxt "model:ir.action,name:act_location_tree"
msgid "Locations"
@@ -1070,10 +1124,15 @@ msgctxt "model:ir.action,name:act_period_list"
msgid "Periods"
msgstr "ÐеÑиоди"
-msgctxt "model:ir.action,name:act_products_by_locations"
-msgid "Products by Locations"
+msgctxt "model:ir.action,name:act_product_quantities_warehouse"
+msgid "Product Quantities By Warehouse"
msgstr ""
+#, fuzzy
+msgctxt "model:ir.action,name:act_products_by_locations"
+msgid "Products"
+msgstr "ÐÑодÑкÑи по меÑÑонаÑ
ождениÑ"
+
msgctxt "model:ir.action,name:act_shipment_in_draft"
msgid "Draft Supplier Shipment"
msgstr "ЧеÑнова на пÑаÑка на доÑÑавÑик"
@@ -1162,13 +1221,18 @@ msgctxt "model:ir.action,name:report_shipment_out_return_restocking_list"
msgid "Restocking List"
msgstr "СпиÑÑк за ÑвелиÑаване налиÑноÑÑ Ð½Ð° пÑодÑкÑ"
+#, fuzzy
msgctxt "model:ir.action,name:wizard_product_by_location"
-msgid "Product by Location"
+msgid "Product by Locations"
msgstr "ÐÑодÑÐºÑ Ð¿Ð¾ меÑÑонаÑ
ождение"
+msgctxt "model:ir.action,name:wizard_product_quantities_warehouse"
+msgid "Product Quantities By Warehouse"
+msgstr ""
+
msgctxt "model:ir.action,name:wizard_products_by_locations"
msgid "Products by Locations"
-msgstr ""
+msgstr "ÐÑодÑлÑи по меÑÑонаÑ
ождениÑ"
msgctxt "model:ir.action,name:wizard_shipment_in_return_assign"
msgid "Assign Purchase Return Shipment"
@@ -1395,12 +1459,20 @@ msgid "Stock Period"
msgstr "ÐеÑиод на налиÑноÑÑ"
msgctxt "model:stock.period.cache,name:"
-msgid "stock.period.cache"
+msgid "Stock Period Cache"
+msgstr ""
+
+msgctxt "model:stock.product_quantities_warehouse,name:"
+msgid "Product Quantities By Warehouse"
+msgstr ""
+
+msgctxt "model:stock.product_quantities_warehouse.start,name:"
+msgid "Product Quantities By Warehouse"
msgstr ""
msgctxt "model:stock.products_by_locations.start,name:"
msgid "Products by Locations"
-msgstr ""
+msgstr "ÐÑодÑкÑи по меÑÑонаÑ
ождениÑ"
msgctxt "model:stock.shipment.in,name:"
msgid "Supplier Shipment"
@@ -1916,7 +1988,7 @@ msgstr "ÐеÑÑоположение"
msgctxt "view:stock.location:"
msgid "Location Quantity"
-msgstr ""
+msgstr "ÐолиÑеÑÑво в меÑÑонаÑ
ождение"
msgctxt "view:stock.location:"
msgid "Locations"
@@ -1958,9 +2030,17 @@ msgctxt "view:stock.period:"
msgid "Periods"
msgstr "ÐеÑиоди"
+msgctxt "view:stock.product_quantities_warehouse.start:"
+msgid "Product Quantities By Warehouse"
+msgstr ""
+
+msgctxt "view:stock.product_quantities_warehouse:"
+msgid "Product Quantities By Warehouse"
+msgstr ""
+
msgctxt "view:stock.products_by_locations.start:"
msgid "Products by Locations"
-msgstr ""
+msgstr "ÐÑодÑкÑи по меÑÑонаÑ
ождениÑ"
msgctxt "view:stock.shipment.in.return.assign.failed:"
msgid "Unable to Assign"
@@ -2000,7 +2080,7 @@ msgstr "ÐÑаÑка вÑÑнаÑа на доÑÑавÑик"
msgctxt "view:stock.shipment.in.return:"
msgid "Wait"
-msgstr ""
+msgstr "ÐÑакване"
msgctxt "view:stock.shipment.in.return:"
msgid "Waiting"
@@ -2028,7 +2108,7 @@ msgstr "ÐвижениÑ"
msgctxt "view:stock.shipment.in:"
msgid "Receive"
-msgstr ""
+msgstr "ÐолÑÑаване"
msgctxt "view:stock.shipment.in:"
msgid "Received"
@@ -2186,6 +2266,16 @@ msgctxt "wizard_button:product.by_location,start,open:"
msgid "Open"
msgstr "ÐÑваÑÑне"
+#, fuzzy
+msgctxt "wizard_button:stock.product_quantities_warehouse,start,end:"
+msgid "Cancel"
+msgstr "ÐÑказване"
+
+#, fuzzy
+msgctxt "wizard_button:stock.product_quantities_warehouse,start,open_:"
+msgid "Open"
+msgstr "ÐÑваÑÑне"
+
msgctxt "wizard_button:stock.products_by_locations,start,end:"
msgid "Cancel"
msgstr "ÐÑказ"
diff --git a/locale/ca_ES.po b/locale/ca_ES.po
index 444e486..f8c0a57 100644
--- a/locale/ca_ES.po
+++ b/locale/ca_ES.po
@@ -16,11 +16,11 @@ 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"
+msgstr "El producte ha de ser únic per inventari."
msgctxt "error:stock.inventory:"
msgid "Inventory \"%s\" must be cancelled before deletion!"
-msgstr ""
+msgstr "Ha de cancel·lar la ubicació \"%s\" abans d'eliminar-la."
msgctxt "error:stock.location:"
msgid ""
@@ -32,23 +32,23 @@ msgstr ""
msgctxt "error:stock.location:"
msgid "Location \"%s\" must be a child of warehouse \"%s\"!"
-msgstr "La ubicació «%s» ha de ser filla del magatzem «%s»"
+msgstr "La ubicació \"%s\" ha de ser filla del magatzem \"%s\"."
msgctxt "error:stock.location:"
msgid "You can not create recursive locations!"
-msgstr "No pot crear ubicacions recursives"
+msgstr "No pot crear ubicacions recursives."
msgctxt "error:stock.move:"
msgid "Internal move quantity must be positive"
-msgstr ""
+msgstr "La quantitat de moviment intern ha de ser positiva."
msgctxt "error:stock.move:"
msgid "Move can be on only one Shipment"
-msgstr "Un moviment només pot estar en un enviament."
+msgstr "Un moviment només pot estar en un albarà ."
msgctxt "error:stock.move:"
msgid "Move quantity must be positive"
-msgstr "La quantitat a moure ha de ser positiva"
+msgstr "La quantitat a moure ha de ser positiva."
msgctxt "error:stock.move:"
msgid "Source and destination location must be different"
@@ -57,22 +57,24 @@ msgstr "Els llocs origen i destà han de ser diferents"
msgctxt "error:stock.move:"
msgid "You can not modify a move in the state: \"Assigned\", \"Done\" or \"Cancel\""
msgstr ""
+"No pot modificar un moviment en estat: \"Assignat\", \"Realitzat\" o "
+"\"Cancel·lat\"."
msgctxt "error:stock.move:"
msgid "You can not modify move in closed period!"
-msgstr ""
+msgstr "No pot modificar un moviment en un perÃode tancat."
msgctxt "error:stock.move:"
msgid "You can not set state to assigned!"
-msgstr "No pot establir l'estat com a assignat"
+msgstr "No pot establir l'estat com a assignat."
msgctxt "error:stock.move:"
msgid "You can not set state to done!"
-msgstr "No pot establir l'estat com a acabat"
+msgstr "No pot establir l'estat com a acabat."
msgctxt "error:stock.move:"
msgid "You can not set state to draft!"
-msgstr "No pot establir l'estat com a esborrany"
+msgstr "No pot establir l'estat com a esborrany."
msgctxt "error:stock.move:"
msgid "You can only delete draft or cancelled moves!"
@@ -80,15 +82,16 @@ msgstr "Només pot esborrar moviments en esborrany o cancel·lats"
msgctxt "error:stock.period:"
msgid "You can not close a period in the future or today!"
-msgstr ""
+msgstr "No pot tancar un perÃode quan té moviments reservats."
msgctxt "error:stock.period:"
msgid "You can not close a period when there is still assigned moves!"
-msgstr ""
+msgstr "No pot tancar un perÃode quan té moviments reservats."
msgctxt "error:stock.shipment.in.return:"
msgid "Supplier Return Shipment \"%s\" must be cancelled before deletion!"
msgstr ""
+"Ha de cancel·lar l'abarán devolució de proveïdor \"%s\" abans d'eliminar-lo."
msgctxt "error:stock.shipment.in:"
msgid ""
@@ -107,27 +110,28 @@ msgstr ""
msgctxt "error:stock.shipment.in:"
msgid "Supplier Shipment \"%s\" must be cancelled before deletion!"
-msgstr ""
+msgstr "Ha de cancel·lar un albarà de proveïdor \"%s\" abans d'eliminar-lo."
msgctxt "error:stock.shipment.internal:"
msgid "Internal Shipment \"%s\" must be cancelled before deletion!"
-msgstr ""
+msgstr "Ha de cancel·lar l'albarà intern \"%s\" abans d'eliminar-lo."
msgctxt "error:stock.shipment.out.return.create:"
msgid "The shipment with code %s is not yet sent."
-msgstr "El paquet amb codi %s no ha estat enviat encara."
+msgstr "L'albarà amb codi %s no ha estat enviat encara."
msgctxt "error:stock.shipment.out.return.create:"
msgid "You can not create return shipment"
-msgstr "No pot crear paquets de tornada"
+msgstr "No pot crear un albarà de devolució."
msgctxt "error:stock.shipment.out.return:"
msgid "Customer Return Shipment \"%s\" must be cancelled before deletion!"
msgstr ""
+"Ha de cancel·lar l'albarà de devolució de client \"%s\" abans d'eliminar-lo."
msgctxt "error:stock.shipment.out:"
msgid "Customer Shipment \"%s\" must be cancelled before deletion!"
-msgstr ""
+msgstr "Ha de cancel·lar l'albarà de client \"%s\" abans d'eliminar-lo."
msgctxt "field:party.address,delivery:"
msgid "Delivery"
@@ -143,15 +147,15 @@ msgstr "Ubicació del proveïdor"
msgctxt "field:product.by_location.start,forecast_date:"
msgid "At Date"
-msgstr ""
+msgstr "A data"
msgctxt "field:product.by_location.start,id:"
msgid "ID"
-msgstr ""
+msgstr "ID"
msgctxt "field:product.product,cost_value:"
msgid "Cost Value"
-msgstr ""
+msgstr "Valor de cost"
msgctxt "field:product.product,forecast_quantity:"
msgid "Forecast Quantity"
@@ -163,7 +167,7 @@ msgstr "Quantitat"
msgctxt "field:product.template,cost_value:"
msgid "Cost Value"
-msgstr ""
+msgstr "Valor de cost"
msgctxt "field:product.template,forecast_quantity:"
msgid "Forecast Quantity"
@@ -175,49 +179,47 @@ msgstr "Quantitat"
msgctxt "field:stock.configuration,create_date:"
msgid "Create Date"
-msgstr ""
+msgstr "Data creació"
-#, fuzzy
msgctxt "field:stock.configuration,create_uid:"
msgid "Create User"
-msgstr "Crear usuari"
+msgstr "Usuari creació"
msgctxt "field:stock.configuration,id:"
msgid "ID"
-msgstr ""
+msgstr "ID"
-#, fuzzy
msgctxt "field:stock.configuration,rec_name:"
msgid "Name"
-msgstr "Nom del camp"
+msgstr "Nom"
msgctxt "field:stock.configuration,shipment_in_return_sequence:"
msgid "Supplier Return Shipment Sequence"
-msgstr ""
+msgstr "Seqüència albarà devolució proveïdor"
msgctxt "field:stock.configuration,shipment_in_sequence:"
msgid "Supplier Shipment Sequence"
-msgstr ""
+msgstr "Seqüència albarà proveïdor"
msgctxt "field:stock.configuration,shipment_internal_sequence:"
msgid "Internal Shipment Sequence"
-msgstr ""
+msgstr "Seqüència albarà intern"
msgctxt "field:stock.configuration,shipment_out_return_sequence:"
msgid "Customer Return Shipment Sequence"
-msgstr ""
+msgstr "Seqüència albarà devolució client"
msgctxt "field:stock.configuration,shipment_out_sequence:"
msgid "Customer Shipment Sequence"
-msgstr ""
+msgstr "Seqüència albarà client"
msgctxt "field:stock.configuration,write_date:"
msgid "Write Date"
-msgstr ""
+msgstr "Data modificació"
msgctxt "field:stock.configuration,write_uid:"
msgid "Write User"
-msgstr ""
+msgstr "Usuari modificació"
msgctxt "field:stock.inventory,company:"
msgid "Company"
@@ -225,12 +227,11 @@ msgstr "Empresa"
msgctxt "field:stock.inventory,create_date:"
msgid "Create Date"
-msgstr ""
+msgstr "Data creació"
-#, fuzzy
msgctxt "field:stock.inventory,create_uid:"
msgid "Create User"
-msgstr "Crear usuari"
+msgstr "Usuari creació"
msgctxt "field:stock.inventory,date:"
msgid "Date"
@@ -238,7 +239,7 @@ msgstr "Data"
msgctxt "field:stock.inventory,id:"
msgid "ID"
-msgstr ""
+msgstr "ID"
msgctxt "field:stock.inventory,lines:"
msgid "Lines"
@@ -250,7 +251,7 @@ msgstr "Ubicació"
msgctxt "field:stock.inventory,lost_found:"
msgid "Lost and Found"
-msgstr "Perdut i trobat"
+msgstr "Perdut/trobat"
msgctxt "field:stock.inventory,rec_name:"
msgid "Name"
@@ -262,20 +263,19 @@ msgstr "Estat"
msgctxt "field:stock.inventory,write_date:"
msgid "Write Date"
-msgstr ""
+msgstr "Data modificació"
msgctxt "field:stock.inventory,write_uid:"
msgid "Write User"
-msgstr ""
+msgstr "Usuari modificació"
msgctxt "field:stock.inventory.line,create_date:"
msgid "Create Date"
-msgstr ""
+msgstr "Data creació"
-#, fuzzy
msgctxt "field:stock.inventory.line,create_uid:"
msgid "Create User"
-msgstr "Crear usuari"
+msgstr "Usuari creació"
msgctxt "field:stock.inventory.line,expected_quantity:"
msgid "Expected Quantity"
@@ -283,7 +283,7 @@ msgstr "Quantitat esperada"
msgctxt "field:stock.inventory.line,id:"
msgid "ID"
-msgstr ""
+msgstr "ID"
msgctxt "field:stock.inventory.line,inventory:"
msgid "Inventory"
@@ -307,7 +307,7 @@ msgstr "Nom"
msgctxt "field:stock.inventory.line,unit_digits:"
msgid "Unit Digits"
-msgstr "DÃgits de la unitat"
+msgstr "Decimals de la unitat"
msgctxt "field:stock.inventory.line,uom:"
msgid "UOM"
@@ -315,11 +315,11 @@ msgstr "UdM"
msgctxt "field:stock.inventory.line,write_date:"
msgid "Write Date"
-msgstr ""
+msgstr "Data modificació"
msgctxt "field:stock.inventory.line,write_uid:"
msgid "Write User"
-msgstr ""
+msgstr "Usuari modificació"
msgctxt "field:stock.location,active:"
msgid "Active"
@@ -339,16 +339,15 @@ msgstr "Codi"
msgctxt "field:stock.location,cost_value:"
msgid "Cost Value"
-msgstr ""
+msgstr "Valor de cost"
msgctxt "field:stock.location,create_date:"
msgid "Create Date"
-msgstr ""
+msgstr "Data creació"
-#, fuzzy
msgctxt "field:stock.location,create_uid:"
msgid "Create User"
-msgstr "Crear usuari"
+msgstr "Usuari creació"
msgctxt "field:stock.location,forecast_quantity:"
msgid "Forecast Quantity"
@@ -356,7 +355,7 @@ msgstr "Quantitat prevista"
msgctxt "field:stock.location,id:"
msgid "ID"
-msgstr ""
+msgstr "ID"
msgctxt "field:stock.location,input_location:"
msgid "Input"
@@ -400,11 +399,11 @@ msgstr "Tipus d'ubicació"
msgctxt "field:stock.location,write_date:"
msgid "Write Date"
-msgstr ""
+msgstr "Data modificació"
msgctxt "field:stock.location,write_uid:"
msgid "Write User"
-msgstr ""
+msgstr "Usuari modificació"
msgctxt "field:stock.move,company:"
msgid "Company"
@@ -416,16 +415,15 @@ msgstr "Preu de cost"
msgctxt "field:stock.move,create_date:"
msgid "Create Date"
-msgstr ""
+msgstr "Data creació"
-#, fuzzy
msgctxt "field:stock.move,create_uid:"
msgid "Create User"
-msgstr "Crear usuari"
+msgstr "Usuari creació"
msgctxt "field:stock.move,currency:"
msgid "Currency"
-msgstr "Divisa"
+msgstr "Moneda"
msgctxt "field:stock.move,effective_date:"
msgid "Effective Date"
@@ -437,11 +435,11 @@ msgstr "Des d'ubicació"
msgctxt "field:stock.move,id:"
msgid "ID"
-msgstr ""
+msgstr "ID"
msgctxt "field:stock.move,internal_quantity:"
msgid "Internal Quantity"
-msgstr ""
+msgstr "Quantitat interna"
msgctxt "field:stock.move,planned_date:"
msgid "Planned Date"
@@ -453,7 +451,7 @@ msgstr "Producte"
msgctxt "field:stock.move,product_uom_category:"
msgid "Product Uom Category"
-msgstr ""
+msgstr "Categoria UdM del producte"
msgctxt "field:stock.move,quantity:"
msgid "Quantity"
@@ -465,23 +463,23 @@ msgstr "Nom"
msgctxt "field:stock.move,shipment_in:"
msgid "Supplier Shipment"
-msgstr "Enviament del proveïdor"
+msgstr "Albarà de proveïdor"
msgctxt "field:stock.move,shipment_in_return:"
msgid "Supplier Return Shipment"
-msgstr "Enviament de devolució a proveïdor"
+msgstr "Albarà devolució proveïdor"
msgctxt "field:stock.move,shipment_internal:"
msgid "Internal Shipment"
-msgstr "Enviament intern"
+msgstr "Albarà intern"
msgctxt "field:stock.move,shipment_out:"
msgid "Customer Shipment"
-msgstr "Enviament a client"
+msgstr "Albarà client"
msgctxt "field:stock.move,shipment_out_return:"
msgid "Customer Return Shipment"
-msgstr "Enviament de devolució de client"
+msgstr "Albarà client devolució"
msgctxt "field:stock.move,state:"
msgid "State"
@@ -493,7 +491,7 @@ msgstr "A la ubicació"
msgctxt "field:stock.move,unit_digits:"
msgid "Unit Digits"
-msgstr "DÃgits d'unitat"
+msgstr "Decimals d'unitat"
msgctxt "field:stock.move,unit_price:"
msgid "Unit Price"
@@ -509,115 +507,144 @@ msgstr "UdM"
msgctxt "field:stock.move,write_date:"
msgid "Write Date"
-msgstr ""
+msgstr "Data modificació"
msgctxt "field:stock.move,write_uid:"
msgid "Write User"
-msgstr ""
+msgstr "Usuari modificació"
msgctxt "field:stock.period,caches:"
msgid "Caches"
-msgstr ""
+msgstr "Precalculat"
-#, fuzzy
msgctxt "field:stock.period,company:"
msgid "Company"
msgstr "Empresa"
msgctxt "field:stock.period,create_date:"
msgid "Create Date"
-msgstr ""
+msgstr "Data creació"
-#, fuzzy
msgctxt "field:stock.period,create_uid:"
msgid "Create User"
-msgstr "Crear usuari"
+msgstr "Usuari creació"
-#, fuzzy
msgctxt "field:stock.period,date:"
msgid "Date"
msgstr "Data"
msgctxt "field:stock.period,id:"
msgid "ID"
-msgstr ""
+msgstr "ID"
-#, fuzzy
msgctxt "field:stock.period,rec_name:"
msgid "Name"
-msgstr "Nom del camp"
+msgstr "Nom"
-#, fuzzy
msgctxt "field:stock.period,state:"
msgid "State"
msgstr "Estat"
msgctxt "field:stock.period,write_date:"
msgid "Write Date"
-msgstr ""
+msgstr "Data modificació"
msgctxt "field:stock.period,write_uid:"
msgid "Write User"
-msgstr ""
+msgstr "Usuari modificació"
msgctxt "field:stock.period.cache,create_date:"
msgid "Create Date"
-msgstr ""
+msgstr "Data creació"
-#, fuzzy
msgctxt "field:stock.period.cache,create_uid:"
msgid "Create User"
-msgstr "Crear usuari"
+msgstr "Usuari creació"
msgctxt "field:stock.period.cache,id:"
msgid "ID"
-msgstr ""
+msgstr "ID"
msgctxt "field:stock.period.cache,internal_quantity:"
msgid "Internal Quantity"
-msgstr ""
+msgstr "Quantitat interna"
-#, fuzzy
msgctxt "field:stock.period.cache,location:"
msgid "Location"
msgstr "Ubicació"
-#, fuzzy
msgctxt "field:stock.period.cache,period:"
msgid "Period"
msgstr "PerÃode"
-#, fuzzy
msgctxt "field:stock.period.cache,product:"
msgid "Product"
msgstr "Productes"
-#, fuzzy
msgctxt "field:stock.period.cache,rec_name:"
msgid "Name"
-msgstr "Nom del camp"
+msgstr "Nom"
msgctxt "field:stock.period.cache,write_date:"
msgid "Write Date"
-msgstr ""
+msgstr "Data modificació"
msgctxt "field:stock.period.cache,write_uid:"
msgid "Write User"
-msgstr ""
+msgstr "Usuari modificació"
+
+msgctxt "field:stock.product_quantities_warehouse,create_date:"
+msgid "Create Date"
+msgstr "Data creació"
+
+msgctxt "field:stock.product_quantities_warehouse,create_uid:"
+msgid "Create User"
+msgstr "Usuari creació"
+
+msgctxt "field:stock.product_quantities_warehouse,date:"
+msgid "Date"
+msgstr "Data"
+
+msgctxt "field:stock.product_quantities_warehouse,id:"
+msgid "ID"
+msgstr "ID"
+
+msgctxt "field:stock.product_quantities_warehouse,quantity:"
+msgid "Quantity"
+msgstr "Quantitat"
+
+msgctxt "field:stock.product_quantities_warehouse,rec_name:"
+msgid "Name"
+msgstr "Nom"
+
+msgctxt "field:stock.product_quantities_warehouse,write_date:"
+msgid "Write Date"
+msgstr "Data modificació"
+
+msgctxt "field:stock.product_quantities_warehouse,write_uid:"
+msgid "Write User"
+msgstr "Usuari modificació"
+
+msgctxt "field:stock.product_quantities_warehouse.start,id:"
+msgid "ID"
+msgstr "ID"
+
+msgctxt "field:stock.product_quantities_warehouse.start,warehouse:"
+msgid "Warehouse"
+msgstr "Magatzem"
msgctxt "field:stock.products_by_locations.start,forecast_date:"
msgid "At Date"
-msgstr ""
+msgstr "A data"
msgctxt "field:stock.products_by_locations.start,id:"
msgid "ID"
-msgstr ""
+msgstr "ID"
msgctxt "field:stock.shipment.in,code:"
msgid "Code"
msgstr "Codi"
-#, fuzzy
msgctxt "field:stock.shipment.in,company:"
msgid "Company"
msgstr "Empresa"
@@ -628,12 +655,11 @@ msgstr "Adreça de contacte"
msgctxt "field:stock.shipment.in,create_date:"
msgid "Create Date"
-msgstr ""
+msgstr "Data creació"
-#, fuzzy
msgctxt "field:stock.shipment.in,create_uid:"
msgid "Create User"
-msgstr "Crear usuari"
+msgstr "Usuari creació"
msgctxt "field:stock.shipment.in,effective_date:"
msgid "Effective Date"
@@ -641,7 +667,7 @@ msgstr "Data efectiva"
msgctxt "field:stock.shipment.in,id:"
msgid "ID"
-msgstr ""
+msgstr "ID"
msgctxt "field:stock.shipment.in,incoming_moves:"
msgid "Incoming Moves"
@@ -675,7 +701,6 @@ msgctxt "field:stock.shipment.in,supplier:"
msgid "Supplier"
msgstr "Proveïdor"
-#, fuzzy
msgctxt "field:stock.shipment.in,supplier_location:"
msgid "Supplier Location"
msgstr "Ubicació del proveïdor"
@@ -686,37 +711,35 @@ msgstr "Magatzem"
msgctxt "field:stock.shipment.in,warehouse_input:"
msgid "Warehouse Input"
-msgstr ""
+msgstr "Magatzem entrada"
msgctxt "field:stock.shipment.in,warehouse_storage:"
msgid "Warehouse Storage"
-msgstr ""
+msgstr "Magatzem intern"
msgctxt "field:stock.shipment.in,write_date:"
msgid "Write Date"
-msgstr ""
+msgstr "Data modificació"
msgctxt "field:stock.shipment.in,write_uid:"
msgid "Write User"
-msgstr ""
+msgstr "Usuari modificació"
msgctxt "field:stock.shipment.in.return,code:"
msgid "Code"
msgstr "Codi"
-#, fuzzy
msgctxt "field:stock.shipment.in.return,company:"
msgid "Company"
msgstr "Empresa"
msgctxt "field:stock.shipment.in.return,create_date:"
msgid "Create Date"
-msgstr ""
+msgstr "Data creació"
-#, fuzzy
msgctxt "field:stock.shipment.in.return,create_uid:"
msgid "Create User"
-msgstr "Crear usuari"
+msgstr "Usuari creació"
msgctxt "field:stock.shipment.in.return,effective_date:"
msgid "Effective Date"
@@ -728,7 +751,7 @@ msgstr "Des de la ubicació"
msgctxt "field:stock.shipment.in.return,id:"
msgid "ID"
-msgstr ""
+msgstr "ID"
msgctxt "field:stock.shipment.in.return,moves:"
msgid "Moves"
@@ -756,17 +779,16 @@ msgstr "A la ubicació"
msgctxt "field:stock.shipment.in.return,write_date:"
msgid "Write Date"
-msgstr ""
+msgstr "Data modificació"
msgctxt "field:stock.shipment.in.return,write_uid:"
msgid "Write User"
-msgstr ""
+msgstr "Usuari modificació"
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 "Moviments"
@@ -775,19 +797,17 @@ msgctxt "field:stock.shipment.internal,code:"
msgid "Code"
msgstr "Codi"
-#, fuzzy
msgctxt "field:stock.shipment.internal,company:"
msgid "Company"
msgstr "Empresa"
msgctxt "field:stock.shipment.internal,create_date:"
msgid "Create Date"
-msgstr ""
+msgstr "Data creació"
-#, fuzzy
msgctxt "field:stock.shipment.internal,create_uid:"
msgid "Create User"
-msgstr "Crear usuari"
+msgstr "Usuari creació"
msgctxt "field:stock.shipment.internal,effective_date:"
msgid "Effective Date"
@@ -799,7 +819,7 @@ msgstr "Des de la ubicació"
msgctxt "field:stock.shipment.internal,id:"
msgid "ID"
-msgstr ""
+msgstr "ID"
msgctxt "field:stock.shipment.internal,moves:"
msgid "Moves"
@@ -827,17 +847,16 @@ msgstr "A la ubicació"
msgctxt "field:stock.shipment.internal,write_date:"
msgid "Write Date"
-msgstr ""
+msgstr "Data modificació"
msgctxt "field:stock.shipment.internal,write_uid:"
msgid "Write User"
-msgstr ""
+msgstr "Usuari modificació"
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 "Moviments"
@@ -846,16 +865,14 @@ msgctxt "field:stock.shipment.out,code:"
msgid "Code"
msgstr "Codi"
-#, fuzzy
msgctxt "field:stock.shipment.out,company:"
msgid "Company"
msgstr "Empresa"
msgctxt "field:stock.shipment.out,create_date:"
msgid "Create Date"
-msgstr ""
+msgstr "Data creació"
-#, fuzzy
msgctxt "field:stock.shipment.out,create_uid:"
msgid "Create User"
msgstr "Crear usuari"
@@ -864,7 +881,6 @@ msgctxt "field:stock.shipment.out,customer:"
msgid "Customer"
msgstr "Client"
-#, fuzzy
msgctxt "field:stock.shipment.out,customer_location:"
msgid "Customer Location"
msgstr "Ubicació del client"
@@ -879,7 +895,7 @@ msgstr "Data efectiva"
msgctxt "field:stock.shipment.out,id:"
msgid "ID"
-msgstr ""
+msgstr "ID"
msgctxt "field:stock.shipment.out,inventory_moves:"
msgid "Inventory Moves"
@@ -915,25 +931,24 @@ msgstr "Magatzem"
msgctxt "field:stock.shipment.out,warehouse_output:"
msgid "Warehouse Output"
-msgstr ""
+msgstr "Magatzem sortida"
msgctxt "field:stock.shipment.out,warehouse_storage:"
msgid "Warehouse Storage"
-msgstr ""
+msgstr "Magatzem intern"
msgctxt "field:stock.shipment.out,write_date:"
msgid "Write Date"
-msgstr ""
+msgstr "Data modificació"
msgctxt "field:stock.shipment.out,write_uid:"
msgid "Write User"
-msgstr ""
+msgstr "Usuari modificació"
msgctxt "field:stock.shipment.out.assign.failed,id:"
msgid "ID"
-msgstr ""
+msgstr "ID"
-#, fuzzy
msgctxt "field:stock.shipment.out.assign.failed,inventory_moves:"
msgid "Inventory Moves"
msgstr "Moviments d'inventari"
@@ -942,25 +957,22 @@ msgctxt "field:stock.shipment.out.return,code:"
msgid "Code"
msgstr "Codi"
-#, fuzzy
msgctxt "field:stock.shipment.out.return,company:"
msgid "Company"
msgstr "Empresa"
msgctxt "field:stock.shipment.out.return,create_date:"
msgid "Create Date"
-msgstr ""
+msgstr "Data creació"
-#, fuzzy
msgctxt "field:stock.shipment.out.return,create_uid:"
msgid "Create User"
-msgstr "Crear usuari"
+msgstr "Usuari creació"
msgctxt "field:stock.shipment.out.return,customer:"
msgid "Customer"
msgstr "Client"
-#, fuzzy
msgctxt "field:stock.shipment.out.return,customer_location:"
msgid "Customer Location"
msgstr "Ubicació del client"
@@ -975,7 +987,7 @@ msgstr "Data efectiva"
msgctxt "field:stock.shipment.out.return,id:"
msgid "ID"
-msgstr ""
+msgstr "ID"
msgctxt "field:stock.shipment.out.return,incoming_moves:"
msgid "Incoming Moves"
@@ -1011,19 +1023,19 @@ msgstr "Magatzem"
msgctxt "field:stock.shipment.out.return,warehouse_input:"
msgid "Warehouse Input"
-msgstr ""
+msgstr "Magatzem entrada"
msgctxt "field:stock.shipment.out.return,warehouse_storage:"
msgid "Warehouse Storage"
-msgstr ""
+msgstr "Magatzem intern"
msgctxt "field:stock.shipment.out.return,write_date:"
msgid "Write Date"
-msgstr ""
+msgstr "Data modificació"
msgctxt "field:stock.shipment.out.return,write_uid:"
msgid "Write User"
-msgstr ""
+msgstr "Usuari modificació"
msgctxt "help:party.party,customer_location:"
msgid "The default destination location when sending products to the party."
@@ -1041,6 +1053,9 @@ msgid ""
"* An empty value is an infinite date in the future.\n"
"* A date in the past will provide historical values."
msgstr ""
+"Permet calcular les quantitats previstes d'estoc per a aquesta data.\n"
+"* Un valor buit és un data infinita en el futur.\n"
+"* Una data en el passat proporcionarà valors històrics."
msgctxt "help:stock.products_by_locations.start,forecast_date:"
msgid ""
@@ -1048,6 +1063,9 @@ msgid ""
"* An empty value is an infinite date in the future.\n"
"* A date in the past will provide historical values."
msgstr ""
+"Permet calcular les quantitats previstes d'estoc per a aquesta data.\n"
+"* Un valor buit és un data infinita en el futur.\n"
+"* Una data en el passat proporcionarà valors històrics."
msgctxt "model:ir.action,name:act_inventory_form"
msgid "Inventories"
@@ -1055,17 +1073,15 @@ msgstr "Inventaris"
msgctxt "model:ir.action,name:act_inventory_form_draft"
msgid "Draft Inventories"
-msgstr ""
+msgstr "Inventaris borrador"
-#, fuzzy
msgctxt "model:ir.action,name:act_location_form"
msgid "Locations"
-msgstr "Editar ubicacions"
+msgstr "Ubicacions"
-#, fuzzy
msgctxt "model:ir.action,name:act_location_quantity_tree"
-msgid "Location Quantity & Cost Value"
-msgstr "Existències de producte"
+msgid "Locations"
+msgstr "Ubicacions"
msgctxt "model:ir.action,name:act_location_tree"
msgid "Locations"
@@ -1077,92 +1093,95 @@ msgstr "Moviments"
msgctxt "model:ir.action,name:act_move_form_cust"
msgid "Moves to Customers"
-msgstr "Moviments cap a clients"
+msgstr "Moviments client"
msgctxt "model:ir.action,name:act_move_form_supp"
msgid "Moves from Suppliers"
-msgstr "Moviments de proveïdors"
+msgstr "Moviments proveïdor"
msgctxt "model:ir.action,name:act_move_form_supp_proceed"
msgid "Moves from Suppliers Waiting Arrival"
-msgstr "Moviments de proveïdors tot esperant arribada"
+msgstr "Moviments proveïdor esperant arribada"
-#, fuzzy
msgctxt "model:ir.action,name:act_period_list"
msgid "Periods"
msgstr "PerÃodes"
+msgctxt "model:ir.action,name:act_product_quantities_warehouse"
+msgid "Product Quantities By Warehouse"
+msgstr "Unitats de producte per magatzem"
+
msgctxt "model:ir.action,name:act_products_by_locations"
-msgid "Products by Locations"
-msgstr ""
+msgid "Products"
+msgstr "Productes"
msgctxt "model:ir.action,name:act_shipment_in_draft"
msgid "Draft Supplier Shipment"
-msgstr ""
+msgstr "Albarans proveïdor borrador"
msgctxt "model:ir.action,name:act_shipment_in_form"
msgid "Supplier Shipments"
-msgstr "Enviaments del proveïdor"
+msgstr "Albarans proveïdors"
msgctxt "model:ir.action,name:act_shipment_in_form_received"
msgid "Received Supplier shipments"
-msgstr "Paquets rebuts de proveïdors"
+msgstr "Albarans proveïdors rebuts"
msgctxt "model:ir.action,name:act_shipment_in_return_form"
msgid "Supplier Return Shipments"
-msgstr "Enviaments de devolució a proveïdor"
+msgstr "Albarans proveïdor devolució"
msgctxt "model:ir.action,name:act_shipment_internal_assigned_form"
msgid "Assigned Internal Shipments"
-msgstr "Enviaments interns assignats"
+msgstr "Albarans intern assignats"
msgctxt "model:ir.action,name:act_shipment_internal_draft_form"
msgid "Draft Internal Shipments"
-msgstr "Enviaments interns en esborrany"
+msgstr "Albarans intern borrador"
msgctxt "model:ir.action,name:act_shipment_internal_form"
msgid "Internal Shipments"
-msgstr "Enviaments interns"
+msgstr "Albarans intern"
msgctxt "model:ir.action,name:act_shipment_internal_waiting_form"
msgid "Internal Shipments Waiting Assignation"
-msgstr "Enviaments interns esperant assignació"
+msgstr "Albarans intern esperant resposta"
msgctxt "model:ir.action,name:act_shipment_out_form"
msgid "Customer Shipments"
-msgstr "Enviaments a client"
+msgstr "Albarans client"
msgctxt "model:ir.action,name:act_shipment_out_form2"
msgid "Customer Shipments"
-msgstr "Enviaments de client"
+msgstr "Albarans client"
msgctxt "model:ir.action,name:act_shipment_out_form3"
msgid "Supplier Shipments"
-msgstr "Enviaments a proveïdor"
+msgstr "Albarans proveïdors"
msgctxt "model:ir.action,name:act_shipment_out_form_assigned"
msgid "Assigned Customer Shipments"
-msgstr "Enviaments a clients assignats"
+msgstr "Albarans client assignats"
msgctxt "model:ir.action,name:act_shipment_out_form_ready"
msgid "Customer Shipments Ready for Shipping"
-msgstr "Enviaments a client llests per ser enviats"
+msgstr "Albarans client llest per l'enviament"
msgctxt "model:ir.action,name:act_shipment_out_form_waiting"
msgid "Customer Shipments Waiting Assignation"
-msgstr "Enviaments a client esperant assignació"
+msgstr "Albarans client esperant reserva"
msgctxt "model:ir.action,name:act_shipment_out_return_form"
msgid "Customer Return Shipments"
-msgstr "Enviaments de devolucions de client"
+msgstr "Albarans client devolució"
msgctxt "model:ir.action,name:act_stock_configuration_form"
msgid "Stock Configuration"
-msgstr ""
+msgstr "Configuració estoc"
msgctxt "model:ir.action,name:create_shipment_out_return"
msgid "Create Return Shipment"
-msgstr "Crear enviament de devolució"
+msgstr "Crea albarà de devolució"
msgctxt "model:ir.action,name:report_shipment_in_restocking_list"
msgid "Restocking List"
@@ -1170,11 +1189,11 @@ msgstr "Llista de renovació d'inventari"
msgctxt "model:ir.action,name:report_shipment_internal"
msgid "Internal Shipment"
-msgstr "Enviament intern"
+msgstr "Albarans interns"
msgctxt "model:ir.action,name:report_shipment_out_delivery_note"
msgid "Delivery Note"
-msgstr "Albarà d'enviament"
+msgstr "Nota enviament"
msgctxt "model:ir.action,name:report_shipment_out_picking_list"
msgid "Picking List"
@@ -1185,64 +1204,68 @@ msgid "Restocking List"
msgstr "Llista de renovació d'inventari"
msgctxt "model:ir.action,name:wizard_product_by_location"
-msgid "Product by Location"
-msgstr ""
+msgid "Product by Locations"
+msgstr "Producte per ubicacions"
+
+msgctxt "model:ir.action,name:wizard_product_quantities_warehouse"
+msgid "Product Quantities By Warehouse"
+msgstr "Unitats de producte per magatzem"
msgctxt "model:ir.action,name:wizard_products_by_locations"
msgid "Products by Locations"
-msgstr ""
+msgstr "Productes per ubicació"
msgctxt "model:ir.action,name:wizard_shipment_in_return_assign"
msgid "Assign Purchase Return Shipment"
-msgstr "Assignar enviament de devolució de compra"
+msgstr "Assignar albarà de devolució de compra"
msgctxt "model:ir.action,name:wizard_shipment_internal_assign"
msgid "Assign Shipment Internal"
-msgstr "Assignar enviament intern"
+msgstr "Assignar albarà intern"
msgctxt "model:ir.action,name:wizard_shipment_out_assign"
msgid "Assign Shipment Out"
-msgstr "Assignació d'enviament de sortida"
+msgstr "Assignació d'albarà de sortida"
msgctxt "model:ir.sequence,name:sequence_shipment_in"
msgid "Supplier Shipment"
-msgstr "Enviament de proveïdor"
+msgstr "Albarà de proveïdor"
msgctxt "model:ir.sequence,name:sequence_shipment_in_return"
msgid "Supplier Return Shipment"
-msgstr "Enviament de devolució a proveïdor"
+msgstr "Albarà devolució proveïdor"
msgctxt "model:ir.sequence,name:sequence_shipment_internal"
msgid "Internal Shipment"
-msgstr "Enviament intern"
+msgstr "Albarà intern"
msgctxt "model:ir.sequence,name:sequence_shipment_out"
msgid "Customer Shipment"
-msgstr "Enviament a client"
+msgstr "Albarà client"
msgctxt "model:ir.sequence,name:sequence_shipment_out_return"
msgid "Customer Return Shipment"
-msgstr "Enviament de devolució de client"
+msgstr "Albarà client devolució"
msgctxt "model:ir.sequence.type,name:sequence_type_shipment_in"
msgid "Supplier Shipment"
-msgstr "Enviament de proveïdor"
+msgstr "Albarà de proveïdor"
msgctxt "model:ir.sequence.type,name:sequence_type_shipment_in_return"
msgid "Supplier Return Shipment"
-msgstr "Enviament de devolució a proveïdor"
+msgstr "Albarà devolució proveïdor"
msgctxt "model:ir.sequence.type,name:sequence_type_shipment_internal"
msgid "Internal Shipment"
-msgstr "Enviament intern"
+msgstr "Albarà intern"
msgctxt "model:ir.sequence.type,name:sequence_type_shipment_out"
msgid "Customer Shipment"
-msgstr "Enviament a client"
+msgstr "Albarà client"
msgctxt "model:ir.sequence.type,name:sequence_type_shipment_out_return"
msgid "Customer Return Shipment"
-msgstr "Enviament de devolució de client"
+msgstr "Albarà client devolució"
msgctxt "model:ir.ui.menu,name:menu_configuration"
msgid "Configuration"
@@ -1254,12 +1277,11 @@ msgstr "Inventaris"
msgctxt "model:ir.ui.menu,name:menu_inventory_form_draft"
msgid "Draft Inventories"
-msgstr ""
+msgstr "Borrador"
-#, fuzzy
msgctxt "model:ir.ui.menu,name:menu_location_form"
msgid "Locations"
-msgstr "Editar ubicacions"
+msgstr "Ubicacions"
msgctxt "model:ir.ui.menu,name:menu_location_tree"
msgid "Locations"
@@ -1271,17 +1293,16 @@ msgstr "Moviments"
msgctxt "model:ir.ui.menu,name:menu_move_form_cust"
msgid "Moves to Customers"
-msgstr "Moviments cap a clients"
+msgstr "Clients"
msgctxt "model:ir.ui.menu,name:menu_move_form_supp"
msgid "Moves from Suppliers"
-msgstr "Moviments de proveïdors"
+msgstr "Proveïdors"
msgctxt "model:ir.ui.menu,name:menu_move_form_supp_proceed"
msgid "Moves from Suppliers Waiting Arrival"
-msgstr "Moviments de proveïdors esperant arribada"
+msgstr "Esperant arribada"
-#, fuzzy
msgctxt "model:ir.ui.menu,name:menu_period_list"
msgid "Periods"
msgstr "PerÃodes"
@@ -1292,84 +1313,83 @@ msgstr "Informes"
msgctxt "model:ir.ui.menu,name:menu_shipment_in_draft"
msgid "Draft Supplier Shipment"
-msgstr ""
+msgstr "Borrador"
msgctxt "model:ir.ui.menu,name:menu_shipment_in_form"
msgid "Supplier Shipments"
-msgstr "Enviaments del proveïdor"
+msgstr "Albarans proveïdors"
msgctxt "model:ir.ui.menu,name:menu_shipment_in_received"
msgid "Received Supplier shipments"
-msgstr "Paquets de proveïdors rebuts"
+msgstr "Rebuts"
msgctxt "model:ir.ui.menu,name:menu_shipment_in_return_form"
msgid "Supplier Return Shipments"
-msgstr "Enviaments de devolució a proveïdor"
+msgstr "Devolució"
msgctxt "model:ir.ui.menu,name:menu_shipment_internal_assigned_form"
msgid "Assigned Internal Shipments"
-msgstr "Enviaments interns assignats"
+msgstr "Reservats"
msgctxt "model:ir.ui.menu,name:menu_shipment_internal_draft_form"
msgid "Draft Internal Shipments"
-msgstr "Enviaments Interns en esborrany"
+msgstr "Borrador"
msgctxt "model:ir.ui.menu,name:menu_shipment_internal_form"
msgid "Internal Shipments"
-msgstr "Enviaments interns"
+msgstr "Albarans intern"
msgctxt "model:ir.ui.menu,name:menu_shipment_internal_waiting_form"
msgid "Internal Shipments Waiting Assignation"
-msgstr "Enviament interns esperant assignació"
+msgstr "Esperant reserva"
msgctxt "model:ir.ui.menu,name:menu_shipment_out_assigned"
msgid "Assigned Customer Shipments"
-msgstr "Enviaments a clients assignats"
+msgstr "Reservats"
msgctxt "model:ir.ui.menu,name:menu_shipment_out_form"
msgid "Customer Shipments"
-msgstr "Enviaments al client"
+msgstr "Albarans client"
msgctxt "model:ir.ui.menu,name:menu_shipment_out_ready"
msgid "Customer Shipments Ready for Shipping"
-msgstr "Enviaments al client llestos per l'enviament"
+msgstr "Llest per l'enviament"
msgctxt "model:ir.ui.menu,name:menu_shipment_out_return_form"
msgid "Customer Return Shipments"
-msgstr "Enviaments de devolució de client"
+msgstr "Devolució"
msgctxt "model:ir.ui.menu,name:menu_shipment_out_waiting"
msgid "Customer Shipments Waiting Assignation"
-msgstr "Enviaments a client esperant assignació"
+msgstr "Esperant reserva"
-#, fuzzy
msgctxt "model:ir.ui.menu,name:menu_stock"
msgid "Inventory & Stock"
-msgstr "Gestió d'inventaris"
+msgstr "LogÃstica"
msgctxt "model:ir.ui.menu,name:menu_stock_configuration"
msgid "Stock Configuration"
-msgstr ""
+msgstr "Configuració estoc"
msgctxt "model:product.by_location.start,name:"
msgid "Product by Location"
-msgstr ""
+msgstr "Producte per ubicació"
msgctxt "model:res.group,name:group_stock"
msgid "Stock"
-msgstr "Existències"
+msgstr "LogÃstica"
msgctxt "model:res.group,name:group_stock_admin"
msgid "Stock Administration"
-msgstr "Administració d'existències"
+msgstr "Administració de logÃstica"
msgctxt "model:res.group,name:group_stock_force_assignment"
msgid "Stock Force Assignment"
-msgstr "Assignació forçada d'existències"
+msgstr "Forçar reserves en la logÃstica"
msgctxt "model:stock.configuration,name:"
msgid "Stock Configuration"
-msgstr ""
+msgstr "Configuració estoc"
msgctxt "model:stock.inventory,name:"
msgid "Stock Inventory"
@@ -1393,7 +1413,7 @@ msgstr "Zona d'entrada"
msgctxt "model:stock.location,name:location_lost_found"
msgid "Lost and Found"
-msgstr "Perdut i trobat"
+msgstr "Perdut/trobat"
msgctxt "model:stock.location,name:location_output"
msgid "Output Zone"
@@ -1417,49 +1437,55 @@ msgstr "Moviment d'existències"
msgctxt "model:stock.period,name:"
msgid "Stock Period"
-msgstr ""
+msgstr "PerÃode d'estoc"
msgctxt "model:stock.period.cache,name:"
-msgid "stock.period.cache"
-msgstr ""
+msgid "Stock Period Cache"
+msgstr "PerÃode estoc precalculat"
+
+msgctxt "model:stock.product_quantities_warehouse,name:"
+msgid "Product Quantities By Warehouse"
+msgstr "Unitats de producte per magatzem"
+
+msgctxt "model:stock.product_quantities_warehouse.start,name:"
+msgid "Product Quantities By Warehouse"
+msgstr "Unitats de producte per magatzem"
msgctxt "model:stock.products_by_locations.start,name:"
msgid "Products by Locations"
-msgstr ""
+msgstr "Productes per ubicació"
msgctxt "model:stock.shipment.in,name:"
msgid "Supplier Shipment"
-msgstr "Enviament de proveïdor"
+msgstr "Albarà de proveïdor"
msgctxt "model:stock.shipment.in.return,name:"
msgid "Supplier Return Shipment"
-msgstr "Enviament de devolució a proveïdor"
+msgstr "Albarà devolució proveïdor"
msgctxt "model:stock.shipment.in.return.assign.failed,name:"
msgid "Assign Supplier Return Shipment"
-msgstr ""
+msgstr "Reservar albarans de devolució de proveïdor"
msgctxt "model:stock.shipment.internal,name:"
msgid "Internal Shipment"
-msgstr "Enviament intern"
+msgstr "Albarà intern"
-#, fuzzy
msgctxt "model:stock.shipment.internal.assign.failed,name:"
msgid "Assign Shipment Internal"
-msgstr "Assignar enviament intern"
+msgstr "Assignar albarà intern"
msgctxt "model:stock.shipment.out,name:"
msgid "Customer Shipment"
-msgstr "Enviament a client"
+msgstr "Albarà client"
-#, fuzzy
msgctxt "model:stock.shipment.out.assign.failed,name:"
msgid "Assign Shipment Out"
-msgstr "Assignació d'enviament de sortida"
+msgstr "Assignació d'albarà de sortida"
msgctxt "model:stock.shipment.out.return,name:"
msgid "Customer Return Shipment"
-msgstr "Enviament de devolució de client"
+msgstr "Albarà client devolució"
msgctxt "odt:stock.shipment.in.restocking_list:"
msgid "/"
@@ -1511,7 +1537,7 @@ msgstr "A la ubicació"
msgctxt "odt:stock.shipment.in.restocking_list:"
msgid "VAT Number:"
-msgstr ""
+msgstr "Magatzem:"
msgctxt "odt:stock.shipment.in.restocking_list:"
msgid "Warehouse:"
@@ -1539,7 +1565,7 @@ msgstr "Des de la ubicació:"
msgctxt "odt:stock.shipment.internal.report:"
msgid "Internal Shipment"
-msgstr "Enviament intern"
+msgstr "Albarà intern"
msgctxt "odt:stock.shipment.internal.report:"
msgid "Phone:"
@@ -1571,7 +1597,7 @@ msgstr "A la ubicació:"
msgctxt "odt:stock.shipment.internal.report:"
msgid "VAT Number:"
-msgstr ""
+msgstr "Nombre CIF/NIF:"
msgctxt "odt:stock.shipment.out.delivery_note:"
msgid "/"
@@ -1587,7 +1613,7 @@ msgstr "Data:"
msgctxt "odt:stock.shipment.out.delivery_note:"
msgid "Delivery Note"
-msgstr "Albarà d'enviament"
+msgstr "Nota enviament"
msgctxt "odt:stock.shipment.out.delivery_note:"
msgid "E-Mail:"
@@ -1611,11 +1637,11 @@ msgstr "Referència:"
msgctxt "odt:stock.shipment.out.delivery_note:"
msgid "Shipment Number:"
-msgstr "Número d'enviament:"
+msgstr "Número d'albarà :"
msgctxt "odt:stock.shipment.out.delivery_note:"
msgid "VAT Number:"
-msgstr ""
+msgstr "Nombre CIF/NIF:"
msgctxt "odt:stock.shipment.out.picking_list:"
msgid "/"
@@ -1667,7 +1693,7 @@ msgstr "A la ubicació"
msgctxt "odt:stock.shipment.out.picking_list:"
msgid "VAT Number:"
-msgstr ""
+msgstr "Magatzem:"
msgctxt "odt:stock.shipment.out.picking_list:"
msgid "Warehouse:"
@@ -1723,7 +1749,7 @@ msgstr "A la ubicació"
msgctxt "odt:stock.shipment.out.return.restocking_list:"
msgid "VAT Number:"
-msgstr ""
+msgstr "Magatzem:"
msgctxt "odt:stock.shipment.out.return.restocking_list:"
msgid "Warehouse:"
@@ -1735,7 +1761,7 @@ msgstr "Cancel·lat"
msgctxt "selection:stock.inventory,state:"
msgid "Done"
-msgstr "Acabat"
+msgstr "Finalitzat"
msgctxt "selection:stock.inventory,state:"
msgid "Draft"
@@ -1747,7 +1773,7 @@ msgstr "Client"
msgctxt "selection:stock.location,type:"
msgid "Lost and Found"
-msgstr "Perdut i trobat"
+msgstr "Perdut/trobat"
msgctxt "selection:stock.location,type:"
msgid "Production"
@@ -1779,18 +1805,16 @@ msgstr "Cancel·lat"
msgctxt "selection:stock.move,state:"
msgid "Done"
-msgstr "Acabat"
+msgstr "Finalitzat"
msgctxt "selection:stock.move,state:"
msgid "Draft"
msgstr "Esborrany"
-#, fuzzy
msgctxt "selection:stock.period,state:"
msgid "Closed"
msgstr "Tancat"
-#, fuzzy
msgctxt "selection:stock.period,state:"
msgid "Draft"
msgstr "Esborrany"
@@ -1801,7 +1825,7 @@ msgstr "Cancel·lat"
msgctxt "selection:stock.shipment.in,state:"
msgid "Done"
-msgstr "Acabat"
+msgstr "Finalitzat"
msgctxt "selection:stock.shipment.in,state:"
msgid "Draft"
@@ -1821,7 +1845,7 @@ msgstr "Cancel·lat"
msgctxt "selection:stock.shipment.in.return,state:"
msgid "Done"
-msgstr "Acabat"
+msgstr "Finalitzat"
msgctxt "selection:stock.shipment.in.return,state:"
msgid "Draft"
@@ -1841,7 +1865,7 @@ msgstr "Cancel·lat"
msgctxt "selection:stock.shipment.internal,state:"
msgid "Done"
-msgstr "Acabat"
+msgstr "Finalitzat"
msgctxt "selection:stock.shipment.internal,state:"
msgid "Draft"
@@ -1861,7 +1885,7 @@ msgstr "Cancel·lat"
msgctxt "selection:stock.shipment.out,state:"
msgid "Done"
-msgstr "Acabat"
+msgstr "Finalitzat"
msgctxt "selection:stock.shipment.out,state:"
msgid "Draft"
@@ -1881,7 +1905,7 @@ msgstr "Cancel·lat"
msgctxt "selection:stock.shipment.out.return,state:"
msgid "Done"
-msgstr "Acabat"
+msgstr "Finalitzat"
msgctxt "selection:stock.shipment.out.return,state:"
msgid "Draft"
@@ -1901,7 +1925,7 @@ msgstr "_Existències"
msgctxt "view:product.by_location.start:"
msgid "Product by Location"
-msgstr ""
+msgstr "Producte per ubicació"
msgctxt "view:product.product:"
msgid "Products"
@@ -1909,7 +1933,7 @@ msgstr "Productes"
msgctxt "view:stock.configuration:"
msgid "Stock Configuration"
-msgstr ""
+msgstr "Configuració estoc"
msgctxt "view:stock.inventory.line:"
msgid "Inventory Line"
@@ -1929,7 +1953,7 @@ msgstr "Es cancel·laran tots els moviments generats"
msgctxt "view:stock.inventory:"
msgid "Cancel"
-msgstr "Cancel·lar"
+msgstr "Cancel·la"
msgctxt "view:stock.inventory:"
msgid "Complete Inventory"
@@ -1937,7 +1961,7 @@ msgstr "Inventari complet"
msgctxt "view:stock.inventory:"
msgid "Confirm"
-msgstr "Confirmar"
+msgstr "Confirma"
msgctxt "view:stock.inventory:"
msgid "Inventories"
@@ -1949,7 +1973,7 @@ msgstr "Inventari"
msgctxt "view:stock.inventory:"
msgid "Re-Open"
-msgstr "Reobrir"
+msgstr "Reobre"
msgctxt "view:stock.location:"
msgid "Location"
@@ -1957,7 +1981,7 @@ msgstr "Ubicació"
msgctxt "view:stock.location:"
msgid "Location Quantity"
-msgstr ""
+msgstr "Quantitat per ubicació"
msgctxt "view:stock.location:"
msgid "Locations"
@@ -1969,7 +1993,7 @@ msgstr "Existències del producte"
msgctxt "view:stock.move:"
msgid "Cancel"
-msgstr "Cancel·lar"
+msgstr "Cancel·la"
msgctxt "view:stock.move:"
msgid "Move"
@@ -1981,7 +2005,7 @@ msgstr "Moviments"
msgctxt "view:stock.move:"
msgid "Set Done"
-msgstr "Marcar com acabat"
+msgstr "Marca com a finalitzat"
msgctxt "view:stock.move:"
msgid "Set Draft"
@@ -1989,55 +2013,59 @@ msgstr "Marcar com a esborrany"
msgctxt "view:stock.period.cache:"
msgid "Period Cache"
-msgstr ""
+msgstr "PerÃode precalculat"
msgctxt "view:stock.period.cache:"
msgid "Period Caches"
-msgstr ""
+msgstr "PerÃode precalculat"
-#, fuzzy
msgctxt "view:stock.period:"
msgid "Close"
msgstr "Tancat"
-#, fuzzy
msgctxt "view:stock.period:"
msgid "Draft"
msgstr "Esborrany"
-#, fuzzy
msgctxt "view:stock.period:"
msgid "Period"
msgstr "PerÃode"
-#, fuzzy
msgctxt "view:stock.period:"
msgid "Periods"
msgstr "PerÃodes"
+msgctxt "view:stock.product_quantities_warehouse.start:"
+msgid "Product Quantities By Warehouse"
+msgstr "Unitats de producte per magatzem"
+
+msgctxt "view:stock.product_quantities_warehouse:"
+msgid "Product Quantities By Warehouse"
+msgstr "Unitats de producte per magatzem"
+
msgctxt "view:stock.products_by_locations.start:"
msgid "Products by Locations"
-msgstr ""
+msgstr "Productes per ubicació"
msgctxt "view:stock.shipment.in.return.assign.failed:"
msgid "Unable to Assign"
-msgstr ""
+msgstr "No es poden reservar aquests productes:"
msgctxt "view:stock.shipment.in.return.assign.failed:"
msgid "Unable to assign those products:"
-msgstr ""
+msgstr "No es poden reservar aquests productes:"
msgctxt "view:stock.shipment.in.return:"
msgid "Assign"
-msgstr "Assignar"
+msgstr "Assigna"
msgctxt "view:stock.shipment.in.return:"
msgid "Cancel"
-msgstr "Cancel·lar"
+msgstr "Cancel·la"
msgctxt "view:stock.shipment.in.return:"
msgid "Done"
-msgstr "Acabat"
+msgstr "Finalitzat"
msgctxt "view:stock.shipment.in.return:"
msgid "Draft"
@@ -2049,15 +2077,15 @@ msgstr "Restablir a esborrany"
msgctxt "view:stock.shipment.in.return:"
msgid "Supplier Return Shipment"
-msgstr "Enviament de devolució a proveïdor"
+msgstr "Albarà devolució proveïdor"
msgctxt "view:stock.shipment.in.return:"
msgid "Supplier Return Shipments"
-msgstr "Eniament de devolució a proveïdor"
+msgstr "Albarans proveïdor devolució"
msgctxt "view:stock.shipment.in.return:"
msgid "Wait"
-msgstr ""
+msgstr "En espera"
msgctxt "view:stock.shipment.in.return:"
msgid "Waiting"
@@ -2065,7 +2093,7 @@ msgstr "En espera"
msgctxt "view:stock.shipment.in:"
msgid "Cancel"
-msgstr "Cancel·lar"
+msgstr "Cancel·la"
msgctxt "view:stock.shipment.in:"
msgid "Done"
@@ -2089,7 +2117,7 @@ msgstr "Moviments"
msgctxt "view:stock.shipment.in:"
msgid "Receive"
-msgstr ""
+msgstr "Rebut"
msgctxt "view:stock.shipment.in:"
msgid "Received"
@@ -2101,31 +2129,31 @@ msgstr "Restablir a esborrany"
msgctxt "view:stock.shipment.in:"
msgid "Supplier Shipment"
-msgstr "Enviament de proveïdor"
+msgstr "Albarà de proveïdor"
msgctxt "view:stock.shipment.in:"
msgid "Supplier Shipments"
-msgstr "Enviaments de proveïdor"
+msgstr "Albarans proveïdors"
msgctxt "view:stock.shipment.internal.assign.failed:"
msgid "Unable to Assign"
-msgstr ""
+msgstr "No es poden reservar aquests productes:"
msgctxt "view:stock.shipment.internal.assign.failed:"
msgid "Unable to assign those products:"
-msgstr ""
+msgstr "No es poden reservar aquests productes:"
msgctxt "view:stock.shipment.internal:"
msgid "Assign"
-msgstr "Assignar"
+msgstr "Assigna"
msgctxt "view:stock.shipment.internal:"
msgid "Cancel"
-msgstr "Cancel·lar"
+msgstr "Cancel·la"
msgctxt "view:stock.shipment.internal:"
msgid "Done"
-msgstr "Acabat"
+msgstr "Finalitzat"
msgctxt "view:stock.shipment.internal:"
msgid "Draft"
@@ -2133,15 +2161,15 @@ msgstr "Esborrany"
msgctxt "view:stock.shipment.internal:"
msgid "Force Assign"
-msgstr "Forçar assignació"
+msgstr "Forçar reserva"
msgctxt "view:stock.shipment.internal:"
msgid "Internal Shipment"
-msgstr "Enviament intern"
+msgstr "Albarà intern"
msgctxt "view:stock.shipment.internal:"
msgid "Internal Shipments"
-msgstr "Enviaments interns"
+msgstr "Albarans interns"
msgctxt "view:stock.shipment.internal:"
msgid "Reset to Draft"
@@ -2149,11 +2177,11 @@ msgstr "Restablir a esborrany"
msgctxt "view:stock.shipment.internal:"
msgid "Set Done"
-msgstr "Marcar com acabat"
+msgstr "Marca com a finalitzat"
msgctxt "view:stock.shipment.internal:"
msgid "Set Waiting"
-msgstr "Col·locar en espera"
+msgstr "Marcar en espera"
msgctxt "view:stock.shipment.internal:"
msgid "Waiting"
@@ -2161,29 +2189,28 @@ msgstr "En espera"
msgctxt "view:stock.shipment.out.assign.failed:"
msgid "Unable to Assign"
-msgstr ""
+msgstr "No es poden reservar aquests productes:"
msgctxt "view:stock.shipment.out.assign.failed:"
msgid "Unable to assign those products:"
-msgstr ""
+msgstr "No es poden reservar aquests productes:"
msgctxt "view:stock.shipment.out.return:"
msgid "Cancel"
-msgstr "Cancel·lar"
+msgstr "Cancel·la"
msgctxt "view:stock.shipment.out.return:"
msgid "Customer Return Shipment"
-msgstr "Enviament de devolució de client"
+msgstr "Albarà client devolució"
msgctxt "view:stock.shipment.out.return:"
msgid "Customer Return Shipments"
-msgstr "Enviaments de devolució de client"
+msgstr "Albarans client devolució"
msgctxt "view:stock.shipment.out.return:"
msgid "Done"
-msgstr "Acabat"
+msgstr "Finalitzat"
-#, fuzzy
msgctxt "view:stock.shipment.out.return:"
msgid "Draft"
msgstr "Esborrany"
@@ -2210,19 +2237,19 @@ msgstr "Restablir a esborrany"
msgctxt "view:stock.shipment.out:"
msgid "Assign"
-msgstr "Assignar"
+msgstr "Assigna"
msgctxt "view:stock.shipment.out:"
msgid "Cancel"
-msgstr "Cancel·lar"
+msgstr "Cancel·la"
msgctxt "view:stock.shipment.out:"
msgid "Customer Shipment"
-msgstr "Enviament a client"
+msgstr "Albarà client"
msgctxt "view:stock.shipment.out:"
msgid "Customer Shipments"
-msgstr "Enviaments a clients"
+msgstr "Albarans client"
msgctxt "view:stock.shipment.out:"
msgid "Done"
@@ -2234,7 +2261,7 @@ msgstr "Esborrany"
msgctxt "view:stock.shipment.out:"
msgid "Force Assign"
-msgstr "Forçar l'assignació"
+msgstr "Forçar reserva"
msgctxt "view:stock.shipment.out:"
msgid "Inventory Moves"
@@ -2242,7 +2269,7 @@ msgstr "Moviments d'inventari"
msgctxt "view:stock.shipment.out:"
msgid "Make shipment"
-msgstr "Fer empaquetat"
+msgstr "Realiza enviament"
msgctxt "view:stock.shipment.out:"
msgid "Outgoing Moves"
@@ -2254,11 +2281,11 @@ msgstr "Restablir a esborrany"
msgctxt "view:stock.shipment.out:"
msgid "Set Done"
-msgstr "Marcar com acabat"
+msgstr "Marca com a finalitzat"
msgctxt "view:stock.shipment.out:"
msgid "Set Waiting"
-msgstr "Col·locar en espera"
+msgstr "Marcar en espera"
msgctxt "view:stock.shipment.out:"
msgid "Unpack"
@@ -2268,52 +2295,50 @@ msgctxt "view:stock.shipment.out:"
msgid "Waiting"
msgstr "En espera"
-#, fuzzy
msgctxt "wizard_button:product.by_location,start,end:"
msgid "Cancel"
-msgstr "Cancel·lar"
+msgstr "Cancel·la"
-#, fuzzy
msgctxt "wizard_button:product.by_location,start,open:"
msgid "Open"
+msgstr "Obre"
+
+msgctxt "wizard_button:stock.product_quantities_warehouse,start,end:"
+msgid "Cancel"
+msgstr "Cancel·la"
+
+msgctxt "wizard_button:stock.product_quantities_warehouse,start,open_:"
+msgid "Open"
msgstr "Obrir"
-#, fuzzy
msgctxt "wizard_button:stock.products_by_locations,start,end:"
msgid "Cancel"
-msgstr "Cancel·lar"
+msgstr "Cancel·la"
-#, fuzzy
msgctxt "wizard_button:stock.products_by_locations,start,open:"
msgid "Open"
-msgstr "Obrir"
+msgstr "Obre"
-#, fuzzy
msgctxt "wizard_button:stock.shipment.in.return.assign,failed,end:"
msgid "Ok"
-msgstr "Acceptar"
+msgstr "Accepta"
-#, fuzzy
msgctxt "wizard_button:stock.shipment.in.return.assign,failed,force:"
msgid "Force Assign"
-msgstr "Forçar l'assignació"
+msgstr "Força reserva"
-#, fuzzy
msgctxt "wizard_button:stock.shipment.internal.assign,failed,end:"
msgid "Ok"
-msgstr "Acceptar"
+msgstr "Accepta"
-#, fuzzy
msgctxt "wizard_button:stock.shipment.internal.assign,failed,force:"
msgid "Force Assign"
-msgstr "Forçar l'assignació"
+msgstr "Forçar reserva"
-#, fuzzy
msgctxt "wizard_button:stock.shipment.out.assign,failed,end:"
msgid "Ok"
-msgstr "Acceptar"
+msgstr "Accepta"
-#, fuzzy
msgctxt "wizard_button:stock.shipment.out.assign,failed,force:"
msgid "Force Assign"
-msgstr "Forçar l'assignació"
+msgstr "Força reserva"
diff --git a/locale/cs_CZ.po b/locale/cs_CZ.po
index 1898214..0f01ab1 100644
--- a/locale/cs_CZ.po
+++ b/locale/cs_CZ.po
@@ -581,6 +581,46 @@ msgctxt "field:stock.period.cache,write_uid:"
msgid "Write User"
msgstr ""
+msgctxt "field:stock.product_quantities_warehouse,create_date:"
+msgid "Create Date"
+msgstr ""
+
+msgctxt "field:stock.product_quantities_warehouse,create_uid:"
+msgid "Create User"
+msgstr ""
+
+msgctxt "field:stock.product_quantities_warehouse,date:"
+msgid "Date"
+msgstr ""
+
+msgctxt "field:stock.product_quantities_warehouse,id:"
+msgid "ID"
+msgstr ""
+
+msgctxt "field:stock.product_quantities_warehouse,quantity:"
+msgid "Quantity"
+msgstr ""
+
+msgctxt "field:stock.product_quantities_warehouse,rec_name:"
+msgid "Name"
+msgstr ""
+
+msgctxt "field:stock.product_quantities_warehouse,write_date:"
+msgid "Write Date"
+msgstr ""
+
+msgctxt "field:stock.product_quantities_warehouse,write_uid:"
+msgid "Write User"
+msgstr ""
+
+msgctxt "field:stock.product_quantities_warehouse.start,id:"
+msgid "ID"
+msgstr ""
+
+msgctxt "field:stock.product_quantities_warehouse.start,warehouse:"
+msgid "Warehouse"
+msgstr ""
+
msgctxt "field:stock.products_by_locations.start,forecast_date:"
msgid "At Date"
msgstr ""
@@ -1020,7 +1060,7 @@ msgid "Locations"
msgstr ""
msgctxt "model:ir.action,name:act_location_quantity_tree"
-msgid "Location Quantity & Cost Value"
+msgid "Locations"
msgstr ""
msgctxt "model:ir.action,name:act_location_tree"
@@ -1047,8 +1087,12 @@ msgctxt "model:ir.action,name:act_period_list"
msgid "Periods"
msgstr ""
+msgctxt "model:ir.action,name:act_product_quantities_warehouse"
+msgid "Product Quantities By Warehouse"
+msgstr ""
+
msgctxt "model:ir.action,name:act_products_by_locations"
-msgid "Products by Locations"
+msgid "Products"
msgstr ""
msgctxt "model:ir.action,name:act_shipment_in_draft"
@@ -1140,7 +1184,11 @@ msgid "Restocking List"
msgstr ""
msgctxt "model:ir.action,name:wizard_product_by_location"
-msgid "Product by Location"
+msgid "Product by Locations"
+msgstr ""
+
+msgctxt "model:ir.action,name:wizard_product_quantities_warehouse"
+msgid "Product Quantities By Warehouse"
msgstr ""
msgctxt "model:ir.action,name:wizard_products_by_locations"
@@ -1372,7 +1420,15 @@ msgid "Stock Period"
msgstr ""
msgctxt "model:stock.period.cache,name:"
-msgid "stock.period.cache"
+msgid "Stock Period Cache"
+msgstr ""
+
+msgctxt "model:stock.product_quantities_warehouse,name:"
+msgid "Product Quantities By Warehouse"
+msgstr ""
+
+msgctxt "model:stock.product_quantities_warehouse.start,name:"
+msgid "Product Quantities By Warehouse"
msgstr ""
msgctxt "model:stock.products_by_locations.start,name:"
@@ -1935,6 +1991,14 @@ msgctxt "view:stock.period:"
msgid "Periods"
msgstr ""
+msgctxt "view:stock.product_quantities_warehouse.start:"
+msgid "Product Quantities By Warehouse"
+msgstr ""
+
+msgctxt "view:stock.product_quantities_warehouse:"
+msgid "Product Quantities By Warehouse"
+msgstr ""
+
msgctxt "view:stock.products_by_locations.start:"
msgid "Products by Locations"
msgstr ""
@@ -2163,6 +2227,14 @@ msgctxt "wizard_button:product.by_location,start,open:"
msgid "Open"
msgstr ""
+msgctxt "wizard_button:stock.product_quantities_warehouse,start,end:"
+msgid "Cancel"
+msgstr ""
+
+msgctxt "wizard_button:stock.product_quantities_warehouse,start,open_:"
+msgid "Open"
+msgstr ""
+
msgctxt "wizard_button:stock.products_by_locations,start,end:"
msgid "Cancel"
msgstr ""
diff --git a/locale/de_DE.po b/locale/de_DE.po
index 1b4394e..11f66f2 100644
--- a/locale/de_DE.po
+++ b/locale/de_DE.po
@@ -609,6 +609,46 @@ msgctxt "field:stock.period.cache,write_uid:"
msgid "Write User"
msgstr "Letzte Ãnderung durch"
+msgctxt "field:stock.product_quantities_warehouse,create_date:"
+msgid "Create Date"
+msgstr "Erstellungsdatum"
+
+msgctxt "field:stock.product_quantities_warehouse,create_uid:"
+msgid "Create User"
+msgstr "Erstellt durch"
+
+msgctxt "field:stock.product_quantities_warehouse,date:"
+msgid "Date"
+msgstr "Datum"
+
+msgctxt "field:stock.product_quantities_warehouse,id:"
+msgid "ID"
+msgstr "ID"
+
+msgctxt "field:stock.product_quantities_warehouse,quantity:"
+msgid "Quantity"
+msgstr "Menge"
+
+msgctxt "field:stock.product_quantities_warehouse,rec_name:"
+msgid "Name"
+msgstr "Name"
+
+msgctxt "field:stock.product_quantities_warehouse,write_date:"
+msgid "Write Date"
+msgstr "Zuletzt geändert"
+
+msgctxt "field:stock.product_quantities_warehouse,write_uid:"
+msgid "Write User"
+msgstr "Letzte Ãnderung durch"
+
+msgctxt "field:stock.product_quantities_warehouse.start,id:"
+msgid "ID"
+msgstr "ID"
+
+msgctxt "field:stock.product_quantities_warehouse.start,warehouse:"
+msgid "Warehouse"
+msgstr "Warenlager"
+
msgctxt "field:stock.products_by_locations.start,forecast_date:"
msgid "At Date"
msgstr "Zum"
@@ -1054,8 +1094,8 @@ msgid "Locations"
msgstr "Lagerorte"
msgctxt "model:ir.action,name:act_location_quantity_tree"
-msgid "Location Quantity & Cost Value"
-msgstr "Lagerbestand & Kostenbewertung"
+msgid "Locations"
+msgstr "Lagerorte"
msgctxt "model:ir.action,name:act_location_tree"
msgid "Locations"
@@ -1081,9 +1121,13 @@ msgctxt "model:ir.action,name:act_period_list"
msgid "Periods"
msgstr "Lagerperioden"
+msgctxt "model:ir.action,name:act_product_quantities_warehouse"
+msgid "Product Quantities By Warehouse"
+msgstr "Artikelanzahl nach Warenlager"
+
msgctxt "model:ir.action,name:act_products_by_locations"
-msgid "Products by Locations"
-msgstr "Artikel nach Lagerorten"
+msgid "Products"
+msgstr "Artikel"
msgctxt "model:ir.action,name:act_shipment_in_draft"
msgid "Draft Supplier Shipment"
@@ -1174,9 +1218,13 @@ msgid "Restocking List"
msgstr "Einlagerungsliste"
msgctxt "model:ir.action,name:wizard_product_by_location"
-msgid "Product by Location"
+msgid "Product by Locations"
msgstr "Artikel nach Lagerort"
+msgctxt "model:ir.action,name:wizard_product_quantities_warehouse"
+msgid "Product Quantities By Warehouse"
+msgstr "Artikelanzahl nach Warenlager"
+
msgctxt "model:ir.action,name:wizard_products_by_locations"
msgid "Products by Locations"
msgstr "Artikel nach Lagerorten"
@@ -1406,10 +1454,16 @@ msgid "Stock Period"
msgstr "Lager Periode"
msgctxt "model:stock.period.cache,name:"
-msgid "stock.period.cache"
-msgstr ""
-"Perioden Cache-Speicher\n"
-"Dient der Pufferspeicherung von berechneten Lagerbeständen."
+msgid "Stock Period Cache"
+msgstr "Lager Perioden Cache"
+
+msgctxt "model:stock.product_quantities_warehouse,name:"
+msgid "Product Quantities By Warehouse"
+msgstr "Artikelanzahl nach Warenlager"
+
+msgctxt "model:stock.product_quantities_warehouse.start,name:"
+msgid "Product Quantities By Warehouse"
+msgstr "Artikelanzahl nach Warenlager"
msgctxt "model:stock.products_by_locations.start,name:"
msgid "Products by Locations"
@@ -1973,11 +2027,11 @@ msgstr "Auf Entwurf setzen"
msgctxt "view:stock.period.cache:"
msgid "Period Cache"
-msgstr "Perioden Cache-Speicher"
+msgstr "Perioden Cache"
msgctxt "view:stock.period.cache:"
msgid "Period Caches"
-msgstr "Perioden Cache-Speicher"
+msgstr "Perioden Cache"
msgctxt "view:stock.period:"
msgid "Close"
@@ -1995,6 +2049,14 @@ msgctxt "view:stock.period:"
msgid "Periods"
msgstr "Lagerperioden"
+msgctxt "view:stock.product_quantities_warehouse.start:"
+msgid "Product Quantities By Warehouse"
+msgstr "Artikelanzahl nach Warenlager"
+
+msgctxt "view:stock.product_quantities_warehouse:"
+msgid "Product Quantities By Warehouse"
+msgstr "Artikelanzahl nach Warenlager"
+
msgctxt "view:stock.products_by_locations.start:"
msgid "Products by Locations"
msgstr "Artikel nach Lagerorten"
@@ -2259,6 +2321,14 @@ msgctxt "wizard_button:product.by_location,start,open:"
msgid "Open"
msgstr "Ãffnen"
+msgctxt "wizard_button:stock.product_quantities_warehouse,start,end:"
+msgid "Cancel"
+msgstr "Abbrechen"
+
+msgctxt "wizard_button:stock.product_quantities_warehouse,start,open_:"
+msgid "Open"
+msgstr "Ãffnen"
+
msgctxt "wizard_button:stock.products_by_locations,start,end:"
msgid "Cancel"
msgstr "Abbrechen"
diff --git a/locale/es_AR.po b/locale/es_AR.po
index eb697c0..5fefa74 100644
--- a/locale/es_AR.po
+++ b/locale/es_AR.po
@@ -594,6 +594,56 @@ msgctxt "field:stock.period.cache,write_uid:"
msgid "Write User"
msgstr "Usuario modificación"
+#, fuzzy
+msgctxt "field:stock.product_quantities_warehouse,create_date:"
+msgid "Create Date"
+msgstr "Fecha de Creación"
+
+#, fuzzy
+msgctxt "field:stock.product_quantities_warehouse,create_uid:"
+msgid "Create User"
+msgstr "Usuario creación"
+
+#, fuzzy
+msgctxt "field:stock.product_quantities_warehouse,date:"
+msgid "Date"
+msgstr "Fecha"
+
+#, fuzzy
+msgctxt "field:stock.product_quantities_warehouse,id:"
+msgid "ID"
+msgstr "ID"
+
+#, fuzzy
+msgctxt "field:stock.product_quantities_warehouse,quantity:"
+msgid "Quantity"
+msgstr "Cantidad"
+
+#, fuzzy
+msgctxt "field:stock.product_quantities_warehouse,rec_name:"
+msgid "Name"
+msgstr "Nombre del campo"
+
+#, fuzzy
+msgctxt "field:stock.product_quantities_warehouse,write_date:"
+msgid "Write Date"
+msgstr "Fecha modificación"
+
+#, fuzzy
+msgctxt "field:stock.product_quantities_warehouse,write_uid:"
+msgid "Write User"
+msgstr "Usuario modificación"
+
+#, fuzzy
+msgctxt "field:stock.product_quantities_warehouse.start,id:"
+msgid "ID"
+msgstr "ID"
+
+#, fuzzy
+msgctxt "field:stock.product_quantities_warehouse.start,warehouse:"
+msgid "Warehouse"
+msgstr "Depósito"
+
msgctxt "field:stock.products_by_locations.start,forecast_date:"
msgid "At Date"
msgstr "En la fecha"
@@ -1041,8 +1091,9 @@ msgctxt "model:ir.action,name:act_location_form"
msgid "Locations"
msgstr "Editar ubicaciones"
+#, fuzzy
msgctxt "model:ir.action,name:act_location_quantity_tree"
-msgid "Location Quantity & Cost Value"
+msgid "Locations"
msgstr "Existencias de producto"
msgctxt "model:ir.action,name:act_location_tree"
@@ -1069,8 +1120,13 @@ msgctxt "model:ir.action,name:act_period_list"
msgid "Periods"
msgstr "PerÃodos"
+msgctxt "model:ir.action,name:act_product_quantities_warehouse"
+msgid "Product Quantities By Warehouse"
+msgstr ""
+
+#, fuzzy
msgctxt "model:ir.action,name:act_products_by_locations"
-msgid "Products by Locations"
+msgid "Products"
msgstr "Productos por Ubicaciones"
msgctxt "model:ir.action,name:act_shipment_in_draft"
@@ -1161,10 +1217,15 @@ msgctxt "model:ir.action,name:report_shipment_out_return_restocking_list"
msgid "Restocking List"
msgstr "Lista de renovación de inventario"
+#, fuzzy
msgctxt "model:ir.action,name:wizard_product_by_location"
-msgid "Product by Location"
+msgid "Product by Locations"
msgstr "Producto por Ubicación"
+msgctxt "model:ir.action,name:wizard_product_quantities_warehouse"
+msgid "Product Quantities By Warehouse"
+msgstr ""
+
msgctxt "model:ir.action,name:wizard_products_by_locations"
msgid "Products by Locations"
msgstr "Productos por Ubicaciones"
@@ -1393,10 +1454,19 @@ msgctxt "model:stock.period,name:"
msgid "Stock Period"
msgstr "PerÃodo de stock"
+#, fuzzy
msgctxt "model:stock.period.cache,name:"
-msgid "stock.period.cache"
+msgid "Stock Period Cache"
msgstr "Caché de perÃodo de stock"
+msgctxt "model:stock.product_quantities_warehouse,name:"
+msgid "Product Quantities By Warehouse"
+msgstr ""
+
+msgctxt "model:stock.product_quantities_warehouse.start,name:"
+msgid "Product Quantities By Warehouse"
+msgstr ""
+
msgctxt "model:stock.products_by_locations.start,name:"
msgid "Products by Locations"
msgstr "Productos por Ubicaciones"
@@ -1981,6 +2051,14 @@ msgctxt "view:stock.period:"
msgid "Periods"
msgstr "PerÃodos"
+msgctxt "view:stock.product_quantities_warehouse.start:"
+msgid "Product Quantities By Warehouse"
+msgstr ""
+
+msgctxt "view:stock.product_quantities_warehouse:"
+msgid "Product Quantities By Warehouse"
+msgstr ""
+
msgctxt "view:stock.products_by_locations.start:"
msgid "Products by Locations"
msgstr "Productos por Ubicaciones"
@@ -2241,6 +2319,16 @@ msgctxt "wizard_button:product.by_location,start,open:"
msgid "Open"
msgstr "Abrir"
+#, fuzzy
+msgctxt "wizard_button:stock.product_quantities_warehouse,start,end:"
+msgid "Cancel"
+msgstr "Cancelar"
+
+#, fuzzy
+msgctxt "wizard_button:stock.product_quantities_warehouse,start,open_:"
+msgid "Open"
+msgstr "Abrir"
+
msgctxt "wizard_button:stock.products_by_locations,start,end:"
msgid "Cancel"
msgstr "Cancelar"
diff --git a/locale/es_CO.po b/locale/es_CO.po
index 7e2e619..f1ab631 100644
--- a/locale/es_CO.po
+++ b/locale/es_CO.po
@@ -7,127 +7,133 @@ msgid ""
"You cannot change the default uom for a product which is associated to stock"
" moves."
msgstr ""
-"No puede cambiar la UdM predeterminada para un producto asociado a "
-"movimientos de inventario."
+"No puede cambiar la UdM predeterminada de un producto que está asociado con "
+"movimientos de existencias."
msgctxt "error:stock.inventory.line:"
msgid "Line quantity must be positive!"
-msgstr "La lÃnea de cantidad debe ser positiva!"
+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!"
+msgstr "¡El producto debe ser único por inventario!"
msgctxt "error:stock.inventory:"
msgid "Inventory \"%s\" must be cancelled before deletion!"
-msgstr ""
+msgstr "¡Inventario \"%s\" debe ser cancelado antes de eliminar!"
msgctxt "error:stock.location:"
msgid ""
"A location with existing moves cannot be changed to a type that does not "
"support moves."
msgstr ""
-"Un lugar con movimientos existentes no puede ser cambiado a un tipo que no "
-"soporte movimientos."
+"Una locación con movimientos no puede ser cambiado a un tipo que no soporte "
+"movimientos."
msgctxt "error:stock.location:"
msgid "Location \"%s\" must be a child of warehouse \"%s\"!"
-msgstr "¡Localización de \"%s\" debe ser un hijo de la bodega \"%s\"!"
+msgstr "¡La locación «%s» debe ser hijo del almacén «%s»!"
msgctxt "error:stock.location:"
msgid "You can not create recursive locations!"
-msgstr "No puede crear lugares recursivamente!"
+msgstr "¡No puede crear locaciones recursivas!"
msgctxt "error:stock.move:"
msgid "Internal move quantity must be positive"
-msgstr ""
+msgstr "Cantidad interna del movimiento debe ser positiva"
msgctxt "error:stock.move:"
msgid "Move can be on only one Shipment"
-msgstr "Solamente se puede hacer movimiento sobre un EnvÃo."
+msgstr "Un movimiento solo puede hacerse con un envio."
msgctxt "error:stock.move:"
msgid "Move quantity must be positive"
-msgstr "El valor del movimiento debe ser positivo"
+msgstr "La cantidad a mover tiene que ser positiva"
msgctxt "error:stock.move:"
msgid "Source and destination location must be different"
-msgstr "Los lugares fuente y destino deben diferir"
+msgstr "Las locaciones origen y destino deben ser distintas"
msgctxt "error:stock.move:"
msgid "You can not modify a move in the state: \"Assigned\", \"Done\" or \"Cancel\""
msgstr ""
+"¡No puede modificar un movimiento en estado: \"Asignado\", \"Hecho\" o "
+"\"Cancelado\""
msgctxt "error:stock.move:"
msgid "You can not modify move in closed period!"
-msgstr ""
+msgstr "¡No puede modificar un movimiento en un perÃodo cerrado!"
msgctxt "error:stock.move:"
msgid "You can not set state to assigned!"
-msgstr "No puede establecer el estado como asignado!"
+msgstr "¡No puede establecer el estado como asignado!"
msgctxt "error:stock.move:"
msgid "You can not set state to done!"
-msgstr "No puede establecer el estado como hecho!"
+msgstr "¡No puede establecer el estado como hecho!"
msgctxt "error:stock.move:"
msgid "You can not set state to draft!"
-msgstr "No puede establecer el estado como borrador!"
+msgstr "¡No puede establecer el estado como borrador!"
msgctxt "error:stock.move:"
msgid "You can only delete draft or cancelled moves!"
-msgstr "Solamente puede eliminar movimientos en borrador o cancelados!"
+msgstr "¡Solamente puede eliminar movimientos en borrador o cancelados!"
msgctxt "error:stock.period:"
msgid "You can not close a period in the future or today!"
-msgstr ""
+msgstr "¡No se puede cerrar un perÃodo en el futuro o hoy mismo!"
msgctxt "error:stock.period:"
msgid "You can not close a period when there is still assigned moves!"
-msgstr ""
+msgstr "¡No se puede cerrar un perÃodo cuando existen movimientos asignados!"
msgctxt "error:stock.shipment.in.return:"
msgid "Supplier Return Shipment \"%s\" must be cancelled before deletion!"
msgstr ""
+"¡El envÃo de devolución a proveedor \"%s\" debe ser cancelado antes de "
+"eliminarse!"
msgctxt "error:stock.shipment.in:"
msgid ""
"Incoming Moves must have the warehouse input location as destination "
"location!"
msgstr ""
-"Movimientos de ingreso debe tener un lugar de entrada de bodega como lugar "
-"destino!"
+"¡Los movimientos de entrada deben tener la locación del almacén de entrada "
+"como la locación de destino!"
msgctxt "error:stock.shipment.in:"
msgid ""
"Inventory Moves must have the warehouse input location as source location!"
msgstr ""
-"Movimientos de inventario deben tener lugar de entrada a bodega como lugar "
-"fuente!"
+"¡Los movimientos de inventario deben tener la locación del almacén de "
+"entrada como la locación de origen!"
msgctxt "error:stock.shipment.in:"
msgid "Supplier Shipment \"%s\" must be cancelled before deletion!"
-msgstr ""
+msgstr "¡EnvÃo de proveedor \"%s\" debe ser cancelado antes de eliminar!"
msgctxt "error:stock.shipment.internal:"
msgid "Internal Shipment \"%s\" must be cancelled before deletion!"
-msgstr ""
+msgstr "¡EnvÃo interno \"%s\" debe ser cancelado antes de eliminar!"
msgctxt "error:stock.shipment.out.return.create:"
msgid "The shipment with code %s is not yet sent."
-msgstr "El empaque con código %s no ha sido enviado aún."
+msgstr "El paquete con código %s no ha sido enviado aún."
msgctxt "error:stock.shipment.out.return.create:"
msgid "You can not create return shipment"
-msgstr "No puede crear empaques de retorno"
+msgstr "No puede crear paquetes de retorno"
msgctxt "error:stock.shipment.out.return:"
msgid "Customer Return Shipment \"%s\" must be cancelled before deletion!"
msgstr ""
+"¡El envÃo de devolución de cliente \"%s\" debe ser cancelado antes de "
+"eliminarse!"
msgctxt "error:stock.shipment.out:"
msgid "Customer Shipment \"%s\" must be cancelled before deletion!"
-msgstr ""
+msgstr "¡El envÃo de cliente \"%s\" debe ser cancelado antes de eliminarse!"
msgctxt "field:party.address,delivery:"
msgid "Delivery"
@@ -135,27 +141,27 @@ msgstr "EnvÃo"
msgctxt "field:party.party,customer_location:"
msgid "Customer Location"
-msgstr "Lugar del Cliente"
+msgstr "Locación del Cliente"
msgctxt "field:party.party,supplier_location:"
msgid "Supplier Location"
-msgstr "Lugar del Proveedor"
+msgstr "Locación del Proveedor"
msgctxt "field:product.by_location.start,forecast_date:"
msgid "At Date"
-msgstr ""
+msgstr "En la fecha"
msgctxt "field:product.by_location.start,id:"
msgid "ID"
-msgstr ""
+msgstr "ID"
msgctxt "field:product.product,cost_value:"
msgid "Cost Value"
-msgstr ""
+msgstr "Costo"
msgctxt "field:product.product,forecast_quantity:"
msgid "Forecast Quantity"
-msgstr "Cantidad Proyectada"
+msgstr "Cantidad prevista"
msgctxt "field:product.product,quantity:"
msgid "Quantity"
@@ -163,7 +169,7 @@ msgstr "Cantidad"
msgctxt "field:product.template,cost_value:"
msgid "Cost Value"
-msgstr ""
+msgstr "Costo"
msgctxt "field:product.template,forecast_quantity:"
msgid "Forecast Quantity"
@@ -175,29 +181,27 @@ msgstr "Cantidad"
msgctxt "field:stock.configuration,create_date:"
msgid "Create Date"
-msgstr ""
+msgstr "Fecha creación"
-#, fuzzy
msgctxt "field:stock.configuration,create_uid:"
msgid "Create User"
-msgstr "Crear usuario"
+msgstr "Usuario creación"
msgctxt "field:stock.configuration,id:"
msgid "ID"
-msgstr ""
+msgstr "ID"
-#, fuzzy
msgctxt "field:stock.configuration,rec_name:"
msgid "Name"
-msgstr "Nombre de Contacto"
+msgstr "Nombre"
msgctxt "field:stock.configuration,shipment_in_return_sequence:"
msgid "Supplier Return Shipment Sequence"
-msgstr "Secuencia de retorno de envÃo al proveedor"
+msgstr "Secuencia de envÃo de devolución a proveedor"
msgctxt "field:stock.configuration,shipment_in_sequence:"
msgid "Supplier Shipment Sequence"
-msgstr "Secuencia de envÃo al proveedor"
+msgstr "Secuencia de envÃo de proveedor"
msgctxt "field:stock.configuration,shipment_internal_sequence:"
msgid "Internal Shipment Sequence"
@@ -205,32 +209,31 @@ msgstr "Secuencia de envÃo interno"
msgctxt "field:stock.configuration,shipment_out_return_sequence:"
msgid "Customer Return Shipment Sequence"
-msgstr "Secuencia de retorno de envÃo al cliente "
+msgstr "Secuencia de envÃo de devolución de cliente"
msgctxt "field:stock.configuration,shipment_out_sequence:"
msgid "Customer Shipment Sequence"
-msgstr "Secuencia de envÃo al cliente"
+msgstr "Secuencia de envÃo a cliente"
msgctxt "field:stock.configuration,write_date:"
msgid "Write Date"
-msgstr ""
+msgstr "Fecha modificación"
msgctxt "field:stock.configuration,write_uid:"
msgid "Write User"
-msgstr ""
+msgstr "Usuario modificación"
msgctxt "field:stock.inventory,company:"
msgid "Company"
-msgstr "CompañÃa"
+msgstr "Compañia"
msgctxt "field:stock.inventory,create_date:"
msgid "Create Date"
-msgstr ""
+msgstr "Fecha creación"
-#, fuzzy
msgctxt "field:stock.inventory,create_uid:"
msgid "Create User"
-msgstr "Crear usuario"
+msgstr "Usuario creación"
msgctxt "field:stock.inventory,date:"
msgid "Date"
@@ -238,15 +241,15 @@ msgstr "Fecha"
msgctxt "field:stock.inventory,id:"
msgid "ID"
-msgstr ""
+msgstr "ID"
msgctxt "field:stock.inventory,lines:"
msgid "Lines"
-msgstr "LÃneas de Inventario"
+msgstr "LÃneas"
msgctxt "field:stock.inventory,location:"
msgid "Location"
-msgstr "Lugar"
+msgstr "Locación"
msgctxt "field:stock.inventory,lost_found:"
msgid "Lost and Found"
@@ -262,20 +265,19 @@ msgstr "Estado"
msgctxt "field:stock.inventory,write_date:"
msgid "Write Date"
-msgstr ""
+msgstr "Fecha modificación"
msgctxt "field:stock.inventory,write_uid:"
msgid "Write User"
-msgstr ""
+msgstr "Usuario modificación"
msgctxt "field:stock.inventory.line,create_date:"
msgid "Create Date"
-msgstr ""
+msgstr "Fecha creación"
-#, fuzzy
msgctxt "field:stock.inventory.line,create_uid:"
msgid "Create User"
-msgstr "Crear usuario"
+msgstr "Usuario creación"
msgctxt "field:stock.inventory.line,expected_quantity:"
msgid "Expected Quantity"
@@ -283,7 +285,7 @@ msgstr "Cantidad Esperada"
msgctxt "field:stock.inventory.line,id:"
msgid "ID"
-msgstr ""
+msgstr "ID"
msgctxt "field:stock.inventory.line,inventory:"
msgid "Inventory"
@@ -307,19 +309,19 @@ msgstr "Nombre"
msgctxt "field:stock.inventory.line,unit_digits:"
msgid "Unit Digits"
-msgstr "DÃgitos Unitarios"
+msgstr "DÃgitos de la Unidad"
msgctxt "field:stock.inventory.line,uom:"
msgid "UOM"
-msgstr "UDM"
+msgstr "UdM"
msgctxt "field:stock.inventory.line,write_date:"
msgid "Write Date"
-msgstr ""
+msgstr "Fecha modificación"
msgctxt "field:stock.inventory.line,write_uid:"
msgid "Write User"
-msgstr ""
+msgstr "Usuario modificación"
msgctxt "field:stock.location,active:"
msgid "Active"
@@ -331,7 +333,7 @@ msgstr "Direcciones"
msgctxt "field:stock.location,childs:"
msgid "Children"
-msgstr "Hij at s"
+msgstr "Hijos"
msgctxt "field:stock.location,code:"
msgid "Code"
@@ -339,16 +341,15 @@ msgstr "Código"
msgctxt "field:stock.location,cost_value:"
msgid "Cost Value"
-msgstr ""
+msgstr "Costo"
msgctxt "field:stock.location,create_date:"
msgid "Create Date"
-msgstr ""
+msgstr "Fecha creación"
-#, fuzzy
msgctxt "field:stock.location,create_uid:"
msgid "Create User"
-msgstr "Crear usuario"
+msgstr "Usuario creación"
msgctxt "field:stock.location,forecast_quantity:"
msgid "Forecast Quantity"
@@ -356,7 +357,7 @@ msgstr "Cantidad Proyectada"
msgctxt "field:stock.location,id:"
msgid "ID"
-msgstr ""
+msgstr "ID"
msgctxt "field:stock.location,input_location:"
msgid "Input"
@@ -396,32 +397,31 @@ msgstr "Almacén"
msgctxt "field:stock.location,type:"
msgid "Location type"
-msgstr "Tipo de Lugar"
+msgstr "Tipo de Locación"
msgctxt "field:stock.location,write_date:"
msgid "Write Date"
-msgstr ""
+msgstr "Fecha modificación"
msgctxt "field:stock.location,write_uid:"
msgid "Write User"
-msgstr ""
+msgstr "Usuario modificación"
msgctxt "field:stock.move,company:"
msgid "Company"
-msgstr "CompañÃa"
+msgstr "Compañia"
msgctxt "field:stock.move,cost_price:"
msgid "Cost Price"
-msgstr "Método de Precio"
+msgstr "Precio de Costo"
msgctxt "field:stock.move,create_date:"
msgid "Create Date"
-msgstr ""
+msgstr "Fecha creación"
-#, fuzzy
msgctxt "field:stock.move,create_uid:"
msgid "Create User"
-msgstr "Crear usuario"
+msgstr "Usuario creación"
msgctxt "field:stock.move,currency:"
msgid "Currency"
@@ -429,19 +429,19 @@ msgstr "Moneda"
msgctxt "field:stock.move,effective_date:"
msgid "Effective Date"
-msgstr "Fecha Efectiva"
+msgstr "Fecha efectiva"
msgctxt "field:stock.move,from_location:"
msgid "From Location"
-msgstr "Lugar Inicial"
+msgstr "Desde Locación"
msgctxt "field:stock.move,id:"
msgid "ID"
-msgstr ""
+msgstr "ID"
msgctxt "field:stock.move,internal_quantity:"
msgid "Internal Quantity"
-msgstr ""
+msgstr "Cantidad Interna"
msgctxt "field:stock.move,planned_date:"
msgid "Planned Date"
@@ -453,7 +453,7 @@ msgstr "Producto"
msgctxt "field:stock.move,product_uom_category:"
msgid "Product Uom Category"
-msgstr ""
+msgstr "CategorÃa UdM del Producto"
msgctxt "field:stock.move,quantity:"
msgid "Quantity"
@@ -469,7 +469,7 @@ msgstr "EnvÃo del Proveedor"
msgctxt "field:stock.move,shipment_in_return:"
msgid "Supplier Return Shipment"
-msgstr "Devolución de Proveedor"
+msgstr "Envio de Devolución a Proveedor"
msgctxt "field:stock.move,shipment_internal:"
msgid "Internal Shipment"
@@ -477,11 +477,11 @@ msgstr "EnvÃo Interno"
msgctxt "field:stock.move,shipment_out:"
msgid "Customer Shipment"
-msgstr "EnvÃo de Cliente"
+msgstr "EnvÃo a Cliente"
msgctxt "field:stock.move,shipment_out_return:"
msgid "Customer Return Shipment"
-msgstr "Devolución a Cliente"
+msgstr "Envio de Devolución de Cliente"
msgctxt "field:stock.move,state:"
msgid "State"
@@ -489,11 +489,11 @@ msgstr "Estado"
msgctxt "field:stock.move,to_location:"
msgid "To Location"
-msgstr "Al Lugar:"
+msgstr "A Locación"
msgctxt "field:stock.move,unit_digits:"
msgid "Unit Digits"
-msgstr "DÃgitos de Unidad"
+msgstr "Decimales de Unidad"
msgctxt "field:stock.move,unit_price:"
msgid "Unit Price"
@@ -501,126 +501,155 @@ msgstr "Precio Unitario"
msgctxt "field:stock.move,unit_price_required:"
msgid "Unit Price Required"
-msgstr "Requiere Precio Unitario"
+msgstr "Requiere precio unitario"
msgctxt "field:stock.move,uom:"
msgid "Uom"
-msgstr "Udm"
+msgstr "UdM"
msgctxt "field:stock.move,write_date:"
msgid "Write Date"
-msgstr ""
+msgstr "Fecha modificación"
msgctxt "field:stock.move,write_uid:"
msgid "Write User"
-msgstr ""
+msgstr "Usuario modificación"
msgctxt "field:stock.period,caches:"
msgid "Caches"
-msgstr ""
+msgstr "Cachés"
-#, fuzzy
msgctxt "field:stock.period,company:"
msgid "Company"
-msgstr "CompañÃa"
+msgstr "Compañia"
msgctxt "field:stock.period,create_date:"
msgid "Create Date"
-msgstr ""
+msgstr "Fecha creación"
-#, fuzzy
msgctxt "field:stock.period,create_uid:"
msgid "Create User"
-msgstr "Crear usuario"
+msgstr "Usuario creación"
-#, fuzzy
msgctxt "field:stock.period,date:"
msgid "Date"
msgstr "Fecha"
msgctxt "field:stock.period,id:"
msgid "ID"
-msgstr ""
+msgstr "ID"
-#, fuzzy
msgctxt "field:stock.period,rec_name:"
msgid "Name"
-msgstr "Nombre de Contacto"
+msgstr "Nombre"
-#, fuzzy
msgctxt "field:stock.period,state:"
msgid "State"
msgstr "Estado"
msgctxt "field:stock.period,write_date:"
msgid "Write Date"
-msgstr ""
+msgstr "Fecha modificación"
msgctxt "field:stock.period,write_uid:"
msgid "Write User"
-msgstr ""
+msgstr "Usuario modificación"
msgctxt "field:stock.period.cache,create_date:"
msgid "Create Date"
-msgstr ""
+msgstr "Fecha creación"
-#, fuzzy
msgctxt "field:stock.period.cache,create_uid:"
msgid "Create User"
-msgstr "Crear usuario"
+msgstr "Usuario creación"
msgctxt "field:stock.period.cache,id:"
msgid "ID"
-msgstr ""
+msgstr "ID"
msgctxt "field:stock.period.cache,internal_quantity:"
msgid "Internal Quantity"
-msgstr ""
+msgstr "Cantidad Interna"
-#, fuzzy
msgctxt "field:stock.period.cache,location:"
msgid "Location"
-msgstr "Lugar"
+msgstr "Locación"
-#, fuzzy
msgctxt "field:stock.period.cache,period:"
msgid "Period"
msgstr "PerÃodo"
-#, fuzzy
msgctxt "field:stock.period.cache,product:"
msgid "Product"
-msgstr "Productos"
+msgstr "Producto"
-#, fuzzy
msgctxt "field:stock.period.cache,rec_name:"
msgid "Name"
-msgstr "Nombre de Contacto"
+msgstr "Nombre"
msgctxt "field:stock.period.cache,write_date:"
msgid "Write Date"
-msgstr ""
+msgstr "Fecha modificación"
msgctxt "field:stock.period.cache,write_uid:"
msgid "Write User"
-msgstr ""
+msgstr "Usuario modificación"
+
+msgctxt "field:stock.product_quantities_warehouse,create_date:"
+msgid "Create Date"
+msgstr "Fecha de Creación"
+
+msgctxt "field:stock.product_quantities_warehouse,create_uid:"
+msgid "Create User"
+msgstr "Usuario creación"
+
+msgctxt "field:stock.product_quantities_warehouse,date:"
+msgid "Date"
+msgstr "Fecha"
+
+msgctxt "field:stock.product_quantities_warehouse,id:"
+msgid "ID"
+msgstr "ID"
+
+msgctxt "field:stock.product_quantities_warehouse,quantity:"
+msgid "Quantity"
+msgstr "Cantidad"
+
+msgctxt "field:stock.product_quantities_warehouse,rec_name:"
+msgid "Name"
+msgstr "Nombre"
+
+msgctxt "field:stock.product_quantities_warehouse,write_date:"
+msgid "Write Date"
+msgstr "Fecha modificación"
+
+msgctxt "field:stock.product_quantities_warehouse,write_uid:"
+msgid "Write User"
+msgstr "Usuario modificación"
+
+msgctxt "field:stock.product_quantities_warehouse.start,id:"
+msgid "ID"
+msgstr "ID"
+
+msgctxt "field:stock.product_quantities_warehouse.start,warehouse:"
+msgid "Warehouse"
+msgstr "Almacén"
msgctxt "field:stock.products_by_locations.start,forecast_date:"
msgid "At Date"
-msgstr ""
+msgstr "En la fecha"
msgctxt "field:stock.products_by_locations.start,id:"
msgid "ID"
-msgstr ""
+msgstr "ID"
msgctxt "field:stock.shipment.in,code:"
msgid "Code"
msgstr "Código"
-#, fuzzy
msgctxt "field:stock.shipment.in,company:"
msgid "Company"
-msgstr "CompañÃa"
+msgstr "Compañia"
msgctxt "field:stock.shipment.in,contact_address:"
msgid "Contact Address"
@@ -628,20 +657,19 @@ msgstr "Dirección de Contacto"
msgctxt "field:stock.shipment.in,create_date:"
msgid "Create Date"
-msgstr ""
+msgstr "Fecha creación"
-#, fuzzy
msgctxt "field:stock.shipment.in,create_uid:"
msgid "Create User"
-msgstr "Crear usuario"
+msgstr "Usuario creación"
msgctxt "field:stock.shipment.in,effective_date:"
msgid "Effective Date"
-msgstr "Fecha Efectiva"
+msgstr "Fecha efectiva"
msgctxt "field:stock.shipment.in,id:"
msgid "ID"
-msgstr ""
+msgstr "ID"
msgctxt "field:stock.shipment.in,incoming_moves:"
msgid "Incoming Moves"
@@ -675,60 +703,57 @@ msgctxt "field:stock.shipment.in,supplier:"
msgid "Supplier"
msgstr "Proveedor"
-#, fuzzy
msgctxt "field:stock.shipment.in,supplier_location:"
msgid "Supplier Location"
-msgstr "Lugar del Proveedor"
+msgstr "Locación del Proveedor"
msgctxt "field:stock.shipment.in,warehouse:"
msgid "Warehouse"
-msgstr "Depósito"
+msgstr "Almacén"
msgctxt "field:stock.shipment.in,warehouse_input:"
msgid "Warehouse Input"
-msgstr ""
+msgstr "Almacén de Entrada"
msgctxt "field:stock.shipment.in,warehouse_storage:"
msgid "Warehouse Storage"
-msgstr ""
+msgstr "Depósito de Almacenamiento"
msgctxt "field:stock.shipment.in,write_date:"
msgid "Write Date"
-msgstr ""
+msgstr "Fecha modificación"
msgctxt "field:stock.shipment.in,write_uid:"
msgid "Write User"
-msgstr ""
+msgstr "Usuario modificación"
msgctxt "field:stock.shipment.in.return,code:"
msgid "Code"
msgstr "Código"
-#, fuzzy
msgctxt "field:stock.shipment.in.return,company:"
msgid "Company"
-msgstr "CompañÃa"
+msgstr "Empresa"
msgctxt "field:stock.shipment.in.return,create_date:"
msgid "Create Date"
-msgstr ""
+msgstr "Fecha creación"
-#, fuzzy
msgctxt "field:stock.shipment.in.return,create_uid:"
msgid "Create User"
-msgstr "Crear usuario"
+msgstr "Usuario creación"
msgctxt "field:stock.shipment.in.return,effective_date:"
msgid "Effective Date"
-msgstr "Fecha Efectiva"
+msgstr "Fecha efectiva"
msgctxt "field:stock.shipment.in.return,from_location:"
msgid "From Location"
-msgstr "Lugar Inicial"
+msgstr "Desde locación"
msgctxt "field:stock.shipment.in.return,id:"
msgid "ID"
-msgstr ""
+msgstr "ID"
msgctxt "field:stock.shipment.in.return,moves:"
msgid "Moves"
@@ -752,21 +777,20 @@ msgstr "Estado"
msgctxt "field:stock.shipment.in.return,to_location:"
msgid "To Location"
-msgstr "Al Lugar:"
+msgstr "A Locación"
msgctxt "field:stock.shipment.in.return,write_date:"
msgid "Write Date"
-msgstr ""
+msgstr "Fecha modificación"
msgctxt "field:stock.shipment.in.return,write_uid:"
msgid "Write User"
-msgstr ""
+msgstr "Usuario modificación"
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 "Movimientos"
@@ -775,31 +799,29 @@ msgctxt "field:stock.shipment.internal,code:"
msgid "Code"
msgstr "Código"
-#, fuzzy
msgctxt "field:stock.shipment.internal,company:"
msgid "Company"
-msgstr "CompañÃa"
+msgstr "Compañia"
msgctxt "field:stock.shipment.internal,create_date:"
msgid "Create Date"
-msgstr ""
+msgstr "Fecha creación"
-#, fuzzy
msgctxt "field:stock.shipment.internal,create_uid:"
msgid "Create User"
-msgstr "Crear usuario"
+msgstr "Usuario creación"
msgctxt "field:stock.shipment.internal,effective_date:"
msgid "Effective Date"
-msgstr "Fecha Efectiva"
+msgstr "Fecha efectiva"
msgctxt "field:stock.shipment.internal,from_location:"
msgid "From Location"
-msgstr "Lugar Inicial"
+msgstr "Desde locación"
msgctxt "field:stock.shipment.internal,id:"
msgid "ID"
-msgstr ""
+msgstr "ID"
msgctxt "field:stock.shipment.internal,moves:"
msgid "Moves"
@@ -807,7 +829,7 @@ msgstr "Movimientos"
msgctxt "field:stock.shipment.internal,planned_date:"
msgid "Planned Date"
-msgstr "Fecha Planeada"
+msgstr "Fecha estimada"
msgctxt "field:stock.shipment.internal,rec_name:"
msgid "Name"
@@ -823,21 +845,20 @@ msgstr "Estado"
msgctxt "field:stock.shipment.internal,to_location:"
msgid "To Location"
-msgstr "Al Lugar:"
+msgstr "A Locación"
msgctxt "field:stock.shipment.internal,write_date:"
msgid "Write Date"
-msgstr ""
+msgstr "Fecha modificación"
msgctxt "field:stock.shipment.internal,write_uid:"
msgid "Write User"
-msgstr ""
+msgstr "Usuario modificación"
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 "Movimientos"
@@ -846,44 +867,41 @@ msgctxt "field:stock.shipment.out,code:"
msgid "Code"
msgstr "Código"
-#, fuzzy
msgctxt "field:stock.shipment.out,company:"
msgid "Company"
-msgstr "CompañÃa"
+msgstr "Compañia"
msgctxt "field:stock.shipment.out,create_date:"
msgid "Create Date"
-msgstr ""
+msgstr "Fecha creación"
-#, fuzzy
msgctxt "field:stock.shipment.out,create_uid:"
msgid "Create User"
-msgstr "Crear usuario"
+msgstr "Usuario creación"
msgctxt "field:stock.shipment.out,customer:"
msgid "Customer"
msgstr "Cliente"
-#, fuzzy
msgctxt "field:stock.shipment.out,customer_location:"
msgid "Customer Location"
-msgstr "Lugar del Cliente"
+msgstr "Locación del cliente"
msgctxt "field:stock.shipment.out,delivery_address:"
msgid "Delivery Address"
-msgstr "Dirección de EnvÃo"
+msgstr "Dirección de envÃo"
msgctxt "field:stock.shipment.out,effective_date:"
msgid "Effective Date"
-msgstr "Fecha Efectiva"
+msgstr "Fecha efectiva"
msgctxt "field:stock.shipment.out,id:"
msgid "ID"
-msgstr ""
+msgstr "ID"
msgctxt "field:stock.shipment.out,inventory_moves:"
msgid "Inventory Moves"
-msgstr "Movimientos de Inventario"
+msgstr "Movimientos de inventario"
msgctxt "field:stock.shipment.out,moves:"
msgid "Moves"
@@ -891,11 +909,11 @@ msgstr "Movimientos"
msgctxt "field:stock.shipment.out,outgoing_moves:"
msgid "Outgoing Moves"
-msgstr "Movimientos de Salida"
+msgstr "Movimientos de salida"
msgctxt "field:stock.shipment.out,planned_date:"
msgid "Planned Date"
-msgstr "Fecha Planeada"
+msgstr "Fecha estimada"
msgctxt "field:stock.shipment.out,rec_name:"
msgid "Name"
@@ -911,29 +929,28 @@ msgstr "Estado"
msgctxt "field:stock.shipment.out,warehouse:"
msgid "Warehouse"
-msgstr "Depósito"
+msgstr "Almacén"
msgctxt "field:stock.shipment.out,warehouse_output:"
msgid "Warehouse Output"
-msgstr ""
+msgstr "Almacén de salida"
msgctxt "field:stock.shipment.out,warehouse_storage:"
msgid "Warehouse Storage"
-msgstr ""
+msgstr "Depósito de almacenamiento"
msgctxt "field:stock.shipment.out,write_date:"
msgid "Write Date"
-msgstr ""
+msgstr "Fecha modificación"
msgctxt "field:stock.shipment.out,write_uid:"
msgid "Write User"
-msgstr ""
+msgstr "Usuario modificación"
msgctxt "field:stock.shipment.out.assign.failed,id:"
msgid "ID"
-msgstr ""
+msgstr "ID"
-#, fuzzy
msgctxt "field:stock.shipment.out.assign.failed,inventory_moves:"
msgid "Inventory Moves"
msgstr "Movimientos de Inventario"
@@ -942,48 +959,45 @@ msgctxt "field:stock.shipment.out.return,code:"
msgid "Code"
msgstr "Código"
-#, fuzzy
msgctxt "field:stock.shipment.out.return,company:"
msgid "Company"
-msgstr "CompañÃa"
+msgstr "Compañia"
msgctxt "field:stock.shipment.out.return,create_date:"
msgid "Create Date"
-msgstr ""
+msgstr "Fecha creación"
-#, fuzzy
msgctxt "field:stock.shipment.out.return,create_uid:"
msgid "Create User"
-msgstr "Crear usuario"
+msgstr "Usuario creación"
msgctxt "field:stock.shipment.out.return,customer:"
msgid "Customer"
msgstr "Cliente"
-#, fuzzy
msgctxt "field:stock.shipment.out.return,customer_location:"
msgid "Customer Location"
-msgstr "Lugar del Cliente"
+msgstr "Locación del Cliente"
msgctxt "field:stock.shipment.out.return,delivery_address:"
msgid "Delivery Address"
-msgstr "Dirección de EnvÃo"
+msgstr "Dirección de envÃo"
msgctxt "field:stock.shipment.out.return,effective_date:"
msgid "Effective Date"
-msgstr "Fecha Efectiva"
+msgstr "Fecha efectiva"
msgctxt "field:stock.shipment.out.return,id:"
msgid "ID"
-msgstr ""
+msgstr "ID"
msgctxt "field:stock.shipment.out.return,incoming_moves:"
msgid "Incoming Moves"
-msgstr "Movimientos de Entrada"
+msgstr "Movimientos de entrada"
msgctxt "field:stock.shipment.out.return,inventory_moves:"
msgid "Inventory Moves"
-msgstr "Movimientos de Inventario"
+msgstr "Movimientos de inventario"
msgctxt "field:stock.shipment.out.return,moves:"
msgid "Moves"
@@ -991,7 +1005,7 @@ msgstr "Movimientos"
msgctxt "field:stock.shipment.out.return,planned_date:"
msgid "Planned Date"
-msgstr "Fecha Planeada"
+msgstr "Fecha planeada"
msgctxt "field:stock.shipment.out.return,rec_name:"
msgid "Name"
@@ -1007,33 +1021,34 @@ msgstr "Estado"
msgctxt "field:stock.shipment.out.return,warehouse:"
msgid "Warehouse"
-msgstr "Depósito"
+msgstr "Almacén"
msgctxt "field:stock.shipment.out.return,warehouse_input:"
msgid "Warehouse Input"
-msgstr ""
+msgstr "Almacén de entrada"
msgctxt "field:stock.shipment.out.return,warehouse_storage:"
msgid "Warehouse Storage"
-msgstr ""
+msgstr "Depósito de almacenamiento"
msgctxt "field:stock.shipment.out.return,write_date:"
msgid "Write Date"
-msgstr ""
+msgstr "Fecha modificación"
msgctxt "field:stock.shipment.out.return,write_uid:"
msgid "Write User"
-msgstr ""
+msgstr "Usuario modificación"
msgctxt "help:party.party,customer_location:"
msgid "The default destination location when sending products to the party."
msgstr ""
-"El lugar predeterminado destino cuando se envian productos al tercero."
+"La locación de destino predeterminada cuando se envian productos al tercero."
msgctxt "help:party.party,supplier_location:"
msgid "The default source location when receiving products from the party."
msgstr ""
-"El lugar origen predeterminado cuando se reciben productos del tercero."
+"La locación de origen predeterminada cuando se reciben productos del "
+"tercero."
msgctxt "help:product.by_location.start,forecast_date:"
msgid ""
@@ -1041,6 +1056,9 @@ msgid ""
"* An empty value is an infinite date in the future.\n"
"* A date in the past will provide historical values."
msgstr ""
+"Permite calcular las cantidades previstas en stock para esta fecha.\n"
+"* Un valor vacÃo es una fecha infinita en el futuro.\n"
+"* Una fecha del pasado proporcionará valores históricos."
msgctxt "help:stock.products_by_locations.start,forecast_date:"
msgid ""
@@ -1048,6 +1066,9 @@ msgid ""
"* An empty value is an infinite date in the future.\n"
"* A date in the past will provide historical values."
msgstr ""
+"Permite calcular las cantidades previstas en stock para esta fecha.\n"
+"* Un valor vacÃo es una fecha infinita en el futuro.\n"
+"* Una fecha del pasado proporcionará valores históricos."
msgctxt "model:ir.action,name:act_inventory_form"
msgid "Inventories"
@@ -1055,21 +1076,19 @@ msgstr "Inventarios"
msgctxt "model:ir.action,name:act_inventory_form_draft"
msgid "Draft Inventories"
-msgstr "Inventarios de Prueba"
+msgstr "Inventarios en Borrador"
-#, fuzzy
msgctxt "model:ir.action,name:act_location_form"
msgid "Locations"
-msgstr "Editar Lugares"
+msgstr "Editar Locaciones"
-#, fuzzy
msgctxt "model:ir.action,name:act_location_quantity_tree"
-msgid "Location Quantity & Cost Value"
-msgstr "Inventario de Producto"
+msgid "Locations"
+msgstr "Locaciones"
msgctxt "model:ir.action,name:act_location_tree"
msgid "Locations"
-msgstr "Lugares"
+msgstr "Locaciones"
msgctxt "model:ir.action,name:act_move_form"
msgid "Moves"
@@ -1085,20 +1104,23 @@ msgstr "Movimientos de Proveedores"
msgctxt "model:ir.action,name:act_move_form_supp_proceed"
msgid "Moves from Suppliers Waiting Arrival"
-msgstr "Movimientos de Proveedores en espera de Arrivo"
+msgstr "Movimientos de proveedores en espera de llegada"
-#, fuzzy
msgctxt "model:ir.action,name:act_period_list"
msgid "Periods"
msgstr "PerÃodos"
+msgctxt "model:ir.action,name:act_product_quantities_warehouse"
+msgid "Product Quantities By Warehouse"
+msgstr "Cantidades de Producto por Almacén"
+
msgctxt "model:ir.action,name:act_products_by_locations"
-msgid "Products by Locations"
-msgstr ""
+msgid "Products"
+msgstr "Productos por Locaciones"
msgctxt "model:ir.action,name:act_shipment_in_draft"
msgid "Draft Supplier Shipment"
-msgstr ""
+msgstr "EnvÃo de Proveedor en Borrador"
msgctxt "model:ir.action,name:act_shipment_in_form"
msgid "Supplier Shipments"
@@ -1106,15 +1128,15 @@ msgstr "EnvÃos del Proveedor"
msgctxt "model:ir.action,name:act_shipment_in_form_received"
msgid "Received Supplier shipments"
-msgstr "Empaques de Proveedores recibidos"
+msgstr "Envios Recibidos de Proveedores"
msgctxt "model:ir.action,name:act_shipment_in_return_form"
msgid "Supplier Return Shipments"
-msgstr "Devolución al Proveedor"
+msgstr "Envios de Devolución a Proveedor"
msgctxt "model:ir.action,name:act_shipment_internal_assigned_form"
msgid "Assigned Internal Shipments"
-msgstr "EnvÃos internos asignados"
+msgstr "EnvÃos Internos Asignados"
msgctxt "model:ir.action,name:act_shipment_internal_draft_form"
msgid "Draft Internal Shipments"
@@ -1126,43 +1148,43 @@ msgstr "EnvÃos Internos"
msgctxt "model:ir.action,name:act_shipment_internal_waiting_form"
msgid "Internal Shipments Waiting Assignation"
-msgstr "EnvÃos Internos esperando Asignación"
+msgstr "EnvÃos Internos Esperando Asignación"
msgctxt "model:ir.action,name:act_shipment_out_form"
msgid "Customer Shipments"
-msgstr "EnvÃos a Cliente"
+msgstr "EnvÃos a Clientes"
msgctxt "model:ir.action,name:act_shipment_out_form2"
msgid "Customer Shipments"
-msgstr "EnvÃos a Cliente"
+msgstr "EnvÃos a Clientes"
msgctxt "model:ir.action,name:act_shipment_out_form3"
msgid "Supplier Shipments"
-msgstr "EnvÃos del Proveedor"
+msgstr "Envios de Proveedor"
msgctxt "model:ir.action,name:act_shipment_out_form_assigned"
msgid "Assigned Customer Shipments"
-msgstr "EnvÃos a Clientes asignados"
+msgstr "EnvÃos a Clientes Asignados"
msgctxt "model:ir.action,name:act_shipment_out_form_ready"
msgid "Customer Shipments Ready for Shipping"
-msgstr "EnvÃos de Cliente listos para Enviar"
+msgstr "EnvÃos a Cliente Listos para Despacho"
msgctxt "model:ir.action,name:act_shipment_out_form_waiting"
msgid "Customer Shipments Waiting Assignation"
-msgstr "EnvÃos de Cliente esperando Asignación"
+msgstr "EnvÃos a Cliente Esperando Asignación"
msgctxt "model:ir.action,name:act_shipment_out_return_form"
msgid "Customer Return Shipments"
-msgstr "Devolución al Cliente"
+msgstr "Envios de Devoluciones de Cliente"
msgctxt "model:ir.action,name:act_stock_configuration_form"
msgid "Stock Configuration"
-msgstr "Configuración del inventario"
+msgstr "Configuración Inventarios"
msgctxt "model:ir.action,name:create_shipment_out_return"
msgid "Create Return Shipment"
-msgstr "Crear Devolución"
+msgstr "Crear Envio de Devolución"
msgctxt "model:ir.action,name:report_shipment_in_restocking_list"
msgid "Restocking List"
@@ -1174,43 +1196,47 @@ msgstr "EnvÃo Interno"
msgctxt "model:ir.action,name:report_shipment_out_delivery_note"
msgid "Delivery Note"
-msgstr "Nota de EnvÃo"
+msgstr "Nota de Entrega"
msgctxt "model:ir.action,name:report_shipment_out_picking_list"
msgid "Picking List"
-msgstr "Lista de Recogida"
+msgstr "Lista de Selección"
msgctxt "model:ir.action,name:report_shipment_out_return_restocking_list"
msgid "Restocking List"
-msgstr "Lista de Renovación de Inventario"
+msgstr "Lista de renovación de inventario"
msgctxt "model:ir.action,name:wizard_product_by_location"
-msgid "Product by Location"
-msgstr ""
+msgid "Product by Locations"
+msgstr "Producto por Locación"
+
+msgctxt "model:ir.action,name:wizard_product_quantities_warehouse"
+msgid "Product Quantities By Warehouse"
+msgstr "Cantidades de Producto por Almacén"
msgctxt "model:ir.action,name:wizard_products_by_locations"
msgid "Products by Locations"
-msgstr ""
+msgstr "Productos por Locaciones"
msgctxt "model:ir.action,name:wizard_shipment_in_return_assign"
msgid "Assign Purchase Return Shipment"
-msgstr "Asigne Devolución de Compra"
+msgstr "Asignar Envio de Devolución de Compra"
msgctxt "model:ir.action,name:wizard_shipment_internal_assign"
msgid "Assign Shipment Internal"
-msgstr "Asigne EnvÃo Interno"
+msgstr "Asignar EnvÃo Interno"
msgctxt "model:ir.action,name:wizard_shipment_out_assign"
msgid "Assign Shipment Out"
-msgstr "Asignación de EnvÃo"
+msgstr "Asignación de Salida de EnvÃo"
msgctxt "model:ir.sequence,name:sequence_shipment_in"
msgid "Supplier Shipment"
-msgstr "EnvÃo del Proveedor"
+msgstr "EnvÃo de Proveedor"
msgctxt "model:ir.sequence,name:sequence_shipment_in_return"
msgid "Supplier Return Shipment"
-msgstr "Devolución al Proveedor"
+msgstr "Envio de Devolución a Proveedor"
msgctxt "model:ir.sequence,name:sequence_shipment_internal"
msgid "Internal Shipment"
@@ -1222,15 +1248,15 @@ msgstr "EnvÃo a Cliente"
msgctxt "model:ir.sequence,name:sequence_shipment_out_return"
msgid "Customer Return Shipment"
-msgstr "Devolución al Cliente"
+msgstr "Envio de Devolución de Cliente"
msgctxt "model:ir.sequence.type,name:sequence_type_shipment_in"
msgid "Supplier Shipment"
-msgstr "EnvÃo del Proveedor"
+msgstr "EnvÃo de Proveedor"
msgctxt "model:ir.sequence.type,name:sequence_type_shipment_in_return"
msgid "Supplier Return Shipment"
-msgstr "Devolución al Proveedor"
+msgstr "Envio de Devolución a Proveedor"
msgctxt "model:ir.sequence.type,name:sequence_type_shipment_internal"
msgid "Internal Shipment"
@@ -1242,7 +1268,7 @@ msgstr "EnvÃo a Cliente"
msgctxt "model:ir.sequence.type,name:sequence_type_shipment_out_return"
msgid "Customer Return Shipment"
-msgstr "Devolución al Cliente"
+msgstr "Envio de Devolución de Cliente"
msgctxt "model:ir.ui.menu,name:menu_configuration"
msgid "Configuration"
@@ -1254,16 +1280,15 @@ msgstr "Inventarios"
msgctxt "model:ir.ui.menu,name:menu_inventory_form_draft"
msgid "Draft Inventories"
-msgstr "Inventarios de prueba"
+msgstr "Inventarios en Borrador"
-#, fuzzy
msgctxt "model:ir.ui.menu,name:menu_location_form"
msgid "Locations"
-msgstr "Editar Lugares"
+msgstr "Editar Locaciones"
msgctxt "model:ir.ui.menu,name:menu_location_tree"
msgid "Locations"
-msgstr "Lugares"
+msgstr "Locaciones"
msgctxt "model:ir.ui.menu,name:menu_move_form"
msgid "Moves"
@@ -1275,40 +1300,39 @@ msgstr "Movimientos hacia Clientes"
msgctxt "model:ir.ui.menu,name:menu_move_form_supp"
msgid "Moves from Suppliers"
-msgstr "Movimientos de Proveedores"
+msgstr "Movimientos desde Proveedores"
msgctxt "model:ir.ui.menu,name:menu_move_form_supp_proceed"
msgid "Moves from Suppliers Waiting Arrival"
-msgstr "Movimientos de Proveedores en espera de Arrivo"
+msgstr "Movimientos de Proveedores en Espera de Llegada"
-#, fuzzy
msgctxt "model:ir.ui.menu,name:menu_period_list"
msgid "Periods"
msgstr "PerÃodos"
msgctxt "model:ir.ui.menu,name:menu_reporting"
msgid "Reporting"
-msgstr "Reportes"
+msgstr "Informes"
msgctxt "model:ir.ui.menu,name:menu_shipment_in_draft"
msgid "Draft Supplier Shipment"
-msgstr ""
+msgstr "EnvÃo de Proveedor en Borrador"
msgctxt "model:ir.ui.menu,name:menu_shipment_in_form"
msgid "Supplier Shipments"
-msgstr "EnvÃo del Proveedor"
+msgstr "EnvÃos del Proveedor"
msgctxt "model:ir.ui.menu,name:menu_shipment_in_received"
msgid "Received Supplier shipments"
-msgstr "Empaques de Proveedores recibidos"
+msgstr "EnvÃos de Proveedores Recibidos"
msgctxt "model:ir.ui.menu,name:menu_shipment_in_return_form"
msgid "Supplier Return Shipments"
-msgstr "Devolución al Proveedor"
+msgstr "EnvÃos de Devolución a Proveedor"
msgctxt "model:ir.ui.menu,name:menu_shipment_internal_assigned_form"
msgid "Assigned Internal Shipments"
-msgstr "EnvÃos asignados internamente"
+msgstr "EnvÃos Internos Asignados"
msgctxt "model:ir.ui.menu,name:menu_shipment_internal_draft_form"
msgid "Draft Internal Shipments"
@@ -1316,15 +1340,15 @@ msgstr "EnvÃos Internos en Borrador"
msgctxt "model:ir.ui.menu,name:menu_shipment_internal_form"
msgid "Internal Shipments"
-msgstr "EnvÃo Internos"
+msgstr "EnvÃos Internos"
msgctxt "model:ir.ui.menu,name:menu_shipment_internal_waiting_form"
msgid "Internal Shipments Waiting Assignation"
-msgstr "EnvÃo Internos esperando Asignación"
+msgstr "EnvÃos Internos Esperando Asignación"
msgctxt "model:ir.ui.menu,name:menu_shipment_out_assigned"
msgid "Assigned Customer Shipments"
-msgstr "EnvÃos asignados a Clientes"
+msgstr "EnvÃos a Clientes Asignados"
msgctxt "model:ir.ui.menu,name:menu_shipment_out_form"
msgid "Customer Shipments"
@@ -1332,45 +1356,43 @@ msgstr "EnvÃos al Cliente"
msgctxt "model:ir.ui.menu,name:menu_shipment_out_ready"
msgid "Customer Shipments Ready for Shipping"
-msgstr "EnvÃos de Cliente listos para EnvÃo"
+msgstr "EnvÃos a Clientes Listos para Despacho"
msgctxt "model:ir.ui.menu,name:menu_shipment_out_return_form"
msgid "Customer Return Shipments"
-msgstr "Devolución al Cliente"
+msgstr "EnvÃos de Devolución de Cliente"
msgctxt "model:ir.ui.menu,name:menu_shipment_out_waiting"
msgid "Customer Shipments Waiting Assignation"
-msgstr "EnvÃos de Cliente listos esperando Asignación"
+msgstr "EnvÃos a Cliente Esperando Asignación"
-#, fuzzy
msgctxt "model:ir.ui.menu,name:menu_stock"
msgid "Inventory & Stock"
msgstr "Gestión de Inventarios"
msgctxt "model:ir.ui.menu,name:menu_stock_configuration"
msgid "Stock Configuration"
-msgstr "Configuración de Inventario"
+msgstr "Configuración de Inventarios"
msgctxt "model:product.by_location.start,name:"
msgid "Product by Location"
-msgstr ""
+msgstr "Producto por Locación"
msgctxt "model:res.group,name:group_stock"
msgid "Stock"
-msgstr "Stock"
+msgstr "Existencias"
msgctxt "model:res.group,name:group_stock_admin"
msgid "Stock Administration"
-msgstr "Administración de existencia"
+msgstr "Administración de Existencias"
msgctxt "model:res.group,name:group_stock_force_assignment"
msgid "Stock Force Assignment"
-msgstr ""
+msgstr "Asignación Forzada de Existencias"
-#, fuzzy
msgctxt "model:stock.configuration,name:"
msgid "Stock Configuration"
-msgstr "Configuración del inventario"
+msgstr "Configuración de Stock"
msgctxt "model:stock.inventory,name:"
msgid "Stock Inventory"
@@ -1378,11 +1400,11 @@ msgstr "Inventario de Existencia"
msgctxt "model:stock.inventory.line,name:"
msgid "Stock Inventory Line"
-msgstr "LÃnea de existencia en Inventario "
+msgstr "LÃnea de Existencia en Inventario "
msgctxt "model:stock.location,name:"
msgid "Stock Location"
-msgstr "Lugar de Existencia"
+msgstr "Locación de Existencia"
msgctxt "model:stock.location,name:location_customer"
msgid "Customer"
@@ -1402,7 +1424,7 @@ msgstr "Zona de Salida"
msgctxt "model:stock.location,name:location_storage"
msgid "Storage Zone"
-msgstr "Zona de Almacén"
+msgstr "Zona de Almacenamiento"
msgctxt "model:stock.location,name:location_supplier"
msgid "Supplier"
@@ -1410,7 +1432,7 @@ msgstr "Proveedor"
msgctxt "model:stock.location,name:location_warehouse"
msgid "Warehouse"
-msgstr "Depósito"
+msgstr "Almacén"
msgctxt "model:stock.move,name:"
msgid "Stock Move"
@@ -1418,49 +1440,56 @@ msgstr "Movimiento de Existencias"
msgctxt "model:stock.period,name:"
msgid "Stock Period"
-msgstr ""
+msgstr "PerÃodo de Stock"
+#, fuzzy
msgctxt "model:stock.period.cache,name:"
-msgid "stock.period.cache"
-msgstr ""
+msgid "Stock Period Cache"
+msgstr "Caché de perÃodo de stock"
+
+msgctxt "model:stock.product_quantities_warehouse,name:"
+msgid "Product Quantities By Warehouse"
+msgstr "Cantidades de Producto por Almacén"
+
+msgctxt "model:stock.product_quantities_warehouse.start,name:"
+msgid "Product Quantities By Warehouse"
+msgstr "Cantidades de Producto por Almacén"
msgctxt "model:stock.products_by_locations.start,name:"
msgid "Products by Locations"
-msgstr ""
+msgstr "Productos por Locaciones"
msgctxt "model:stock.shipment.in,name:"
msgid "Supplier Shipment"
-msgstr "EnvÃo del Proveedor"
+msgstr "EnvÃo de Proveedor"
msgctxt "model:stock.shipment.in.return,name:"
msgid "Supplier Return Shipment"
-msgstr "Devolución a Proveedor"
+msgstr "Envio de Devolución a Proveedor"
msgctxt "model:stock.shipment.in.return.assign.failed,name:"
msgid "Assign Supplier Return Shipment"
-msgstr ""
+msgstr "Asignar Envio de Devolución de Proveedor"
msgctxt "model:stock.shipment.internal,name:"
msgid "Internal Shipment"
msgstr "EnvÃo Interno"
-#, fuzzy
msgctxt "model:stock.shipment.internal.assign.failed,name:"
msgid "Assign Shipment Internal"
-msgstr "Asigne EnvÃo Interno"
+msgstr "Asignar EnvÃo Interno"
msgctxt "model:stock.shipment.out,name:"
msgid "Customer Shipment"
-msgstr "EnvÃo de Cliente"
+msgstr "EnvÃo a Cliente"
-#, fuzzy
msgctxt "model:stock.shipment.out.assign.failed,name:"
msgid "Assign Shipment Out"
-msgstr "Asignación de EnvÃo"
+msgstr "Asignación de Salida de EnvÃo"
msgctxt "model:stock.shipment.out.return,name:"
msgid "Customer Return Shipment"
-msgstr "Devolución a Cliente"
+msgstr "Envio de Devolución de Cliente"
msgctxt "odt:stock.shipment.in.restocking_list:"
msgid "/"
@@ -1476,7 +1505,7 @@ msgstr "Correo electrónico:"
msgctxt "odt:stock.shipment.in.restocking_list:"
msgid "From Location"
-msgstr "Lugar Inicial"
+msgstr "Desde locación"
msgctxt "odt:stock.shipment.in.restocking_list:"
msgid "Phone:"
@@ -1484,7 +1513,7 @@ msgstr "Teléfono:"
msgctxt "odt:stock.shipment.in.restocking_list:"
msgid "Planned Date:"
-msgstr "Fecha Planeada:"
+msgstr "Fecha planeada:"
msgctxt "odt:stock.shipment.in.restocking_list:"
msgid "Product"
@@ -1500,7 +1529,7 @@ msgstr "Referencia:"
msgctxt "odt:stock.shipment.in.restocking_list:"
msgid "Restocking List"
-msgstr "Lista de Renovación de Inventario"
+msgstr "Lista de renovación de existencias"
msgctxt "odt:stock.shipment.in.restocking_list:"
msgid "Supplier:"
@@ -1508,15 +1537,15 @@ msgstr "Proveedor:"
msgctxt "odt:stock.shipment.in.restocking_list:"
msgid "To Location"
-msgstr "Al Lugar:"
+msgstr "A Locación"
msgctxt "odt:stock.shipment.in.restocking_list:"
msgid "VAT Number:"
-msgstr ""
+msgstr "NIT:"
msgctxt "odt:stock.shipment.in.restocking_list:"
msgid "Warehouse:"
-msgstr "Bodega:"
+msgstr "Almacén:"
msgctxt "odt:stock.shipment.internal.report:"
msgid "/"
@@ -1532,11 +1561,11 @@ msgstr "Correo electrónico:"
msgctxt "odt:stock.shipment.internal.report:"
msgid "From Location"
-msgstr "Lugar Inicial"
+msgstr "Desde Locación"
msgctxt "odt:stock.shipment.internal.report:"
msgid "From Location:"
-msgstr "Origen:"
+msgstr "Desde Locación:"
msgctxt "odt:stock.shipment.internal.report:"
msgid "Internal Shipment"
@@ -1548,7 +1577,7 @@ msgstr "Teléfono:"
msgctxt "odt:stock.shipment.internal.report:"
msgid "Planned Date:"
-msgstr "Fecha Planeada:"
+msgstr "Fecha estimada:"
msgctxt "odt:stock.shipment.internal.report:"
msgid "Product"
@@ -1564,15 +1593,15 @@ msgstr "Referencia:"
msgctxt "odt:stock.shipment.internal.report:"
msgid "To Location"
-msgstr "Al Lugar:"
+msgstr "A locación"
msgctxt "odt:stock.shipment.internal.report:"
msgid "To Location:"
-msgstr "Destino:"
+msgstr "A locación:"
msgctxt "odt:stock.shipment.internal.report:"
msgid "VAT Number:"
-msgstr ""
+msgstr "NIT:"
msgctxt "odt:stock.shipment.out.delivery_note:"
msgid "/"
@@ -1580,7 +1609,7 @@ msgstr "/"
msgctxt "odt:stock.shipment.out.delivery_note:"
msgid "Customer Code:"
-msgstr "Código de Cliente:"
+msgstr "Código de cliente:"
msgctxt "odt:stock.shipment.out.delivery_note:"
msgid "Date:"
@@ -1588,7 +1617,7 @@ msgstr "Fecha:"
msgctxt "odt:stock.shipment.out.delivery_note:"
msgid "Delivery Note"
-msgstr "Nota de EnvÃo"
+msgstr "Remito de envio"
msgctxt "odt:stock.shipment.out.delivery_note:"
msgid "E-Mail:"
@@ -1612,11 +1641,11 @@ msgstr "Referencia:"
msgctxt "odt:stock.shipment.out.delivery_note:"
msgid "Shipment Number:"
-msgstr "Número de EnvÃo"
+msgstr "Número de envÃo:"
msgctxt "odt:stock.shipment.out.delivery_note:"
msgid "VAT Number:"
-msgstr ""
+msgstr "NIT:"
msgctxt "odt:stock.shipment.out.picking_list:"
msgid "/"
@@ -1636,7 +1665,7 @@ msgstr "Correo electrónico:"
msgctxt "odt:stock.shipment.out.picking_list:"
msgid "From Location"
-msgstr "Lugar Inicial"
+msgstr "Desde locación"
msgctxt "odt:stock.shipment.out.picking_list:"
msgid "Phone:"
@@ -1644,11 +1673,11 @@ msgstr "Teléfono:"
msgctxt "odt:stock.shipment.out.picking_list:"
msgid "Picking List"
-msgstr "Lista de Elección"
+msgstr "Lista de selección"
msgctxt "odt:stock.shipment.out.picking_list:"
msgid "Planned Date:"
-msgstr "Fecha Planeada:"
+msgstr "Fecha estimada:"
msgctxt "odt:stock.shipment.out.picking_list:"
msgid "Product"
@@ -1664,15 +1693,15 @@ msgstr "Referencia:"
msgctxt "odt:stock.shipment.out.picking_list:"
msgid "To Location"
-msgstr "Al Lugar:"
+msgstr "A locación"
msgctxt "odt:stock.shipment.out.picking_list:"
msgid "VAT Number:"
-msgstr ""
+msgstr "NIT:"
msgctxt "odt:stock.shipment.out.picking_list:"
msgid "Warehouse:"
-msgstr "Bodega:"
+msgstr "Almacén:"
msgctxt "odt:stock.shipment.out.return.restocking_list:"
msgid "/"
@@ -1688,7 +1717,7 @@ msgstr "Correo electrónico:"
msgctxt "odt:stock.shipment.out.return.restocking_list:"
msgid "From Location"
-msgstr "Lugar Inicial"
+msgstr "De Locación"
msgctxt "odt:stock.shipment.out.return.restocking_list:"
msgid "Phone:"
@@ -1696,7 +1725,7 @@ msgstr "Teléfono:"
msgctxt "odt:stock.shipment.out.return.restocking_list:"
msgid "Planned Date:"
-msgstr "Fecha Planeada:"
+msgstr "Fecha estimada:"
msgctxt "odt:stock.shipment.out.return.restocking_list:"
msgid "Product"
@@ -1712,7 +1741,7 @@ msgstr "Referencia:"
msgctxt "odt:stock.shipment.out.return.restocking_list:"
msgid "Restocking List"
-msgstr "Lista de reposición de existencias"
+msgstr "Lista de renovación de existencias"
msgctxt "odt:stock.shipment.out.return.restocking_list:"
msgid "Supplier:"
@@ -1720,15 +1749,15 @@ msgstr "Proveedor:"
msgctxt "odt:stock.shipment.out.return.restocking_list:"
msgid "To Location"
-msgstr "Al Lugar:"
+msgstr "A Locación"
msgctxt "odt:stock.shipment.out.return.restocking_list:"
msgid "VAT Number:"
-msgstr ""
+msgstr "NIT:"
msgctxt "odt:stock.shipment.out.return.restocking_list:"
msgid "Warehouse:"
-msgstr "Bodega:"
+msgstr "Almacén:"
msgctxt "selection:stock.inventory,state:"
msgid "Canceled"
@@ -1768,7 +1797,7 @@ msgstr "Vista"
msgctxt "selection:stock.location,type:"
msgid "Warehouse"
-msgstr "Depósito"
+msgstr "Almacén"
msgctxt "selection:stock.move,state:"
msgid "Assigned"
@@ -1786,12 +1815,10 @@ msgctxt "selection:stock.move,state:"
msgid "Draft"
msgstr "Borrador"
-#, fuzzy
msgctxt "selection:stock.period,state:"
msgid "Closed"
msgstr "Cerrado"
-#, fuzzy
msgctxt "selection:stock.period,state:"
msgid "Draft"
msgstr "Borrador"
@@ -1830,7 +1857,7 @@ msgstr "Borrador"
msgctxt "selection:stock.shipment.in.return,state:"
msgid "Waiting"
-msgstr "En Espera"
+msgstr "En espera"
msgctxt "selection:stock.shipment.internal,state:"
msgid "Assigned"
@@ -1850,7 +1877,7 @@ msgstr "Borrador"
msgctxt "selection:stock.shipment.internal,state:"
msgid "Waiting"
-msgstr "En Espera"
+msgstr "En espera"
msgctxt "selection:stock.shipment.out,state:"
msgid "Assigned"
@@ -1870,11 +1897,11 @@ msgstr "Borrador"
msgctxt "selection:stock.shipment.out,state:"
msgid "Packed"
-msgstr "Empacado"
+msgstr "Empaquetado"
msgctxt "selection:stock.shipment.out,state:"
msgid "Waiting"
-msgstr "En Espera"
+msgstr "En espera"
msgctxt "selection:stock.shipment.out.return,state:"
msgid "Canceled"
@@ -1894,7 +1921,7 @@ msgstr "Recibido"
msgctxt "view:party.party:"
msgid "Stock"
-msgstr "Stock"
+msgstr "Existencias"
msgctxt "view:party.party:"
msgid "_Stock"
@@ -1902,7 +1929,7 @@ msgstr "_Existencias"
msgctxt "view:product.by_location.start:"
msgid "Product by Location"
-msgstr ""
+msgstr "Producto por Locación"
msgctxt "view:product.product:"
msgid "Products"
@@ -1910,7 +1937,7 @@ msgstr "Productos"
msgctxt "view:stock.configuration:"
msgid "Stock Configuration"
-msgstr "Configuración del Inventario"
+msgstr "Configuración de Inventarios"
msgctxt "view:stock.inventory.line:"
msgid "Inventory Line"
@@ -1922,11 +1949,11 @@ msgstr "LÃneas de Inventario"
msgctxt "view:stock.inventory:"
msgid "Add an inventory line for each missing products"
-msgstr "Adicione una lÃnea de inventario para cada producto faltante"
+msgstr "Añadir una lÃnea de inventario por cada producto que falta"
msgctxt "view:stock.inventory:"
msgid "All generated moves will be cancelled!"
-msgstr "Se cancelarán todos los movimientos generados!"
+msgstr "¡Se cancelarán todos los movimientos generados!"
msgctxt "view:stock.inventory:"
msgid "Cancel"
@@ -1950,23 +1977,23 @@ msgstr "Inventario"
msgctxt "view:stock.inventory:"
msgid "Re-Open"
-msgstr "Re-abrir"
+msgstr "Reabrir"
msgctxt "view:stock.location:"
msgid "Location"
-msgstr "Lugar"
+msgstr "Locación"
msgctxt "view:stock.location:"
msgid "Location Quantity"
-msgstr ""
+msgstr "Cantidad en la Locación"
msgctxt "view:stock.location:"
msgid "Locations"
-msgstr "Lugares"
+msgstr "Locaciones"
msgctxt "view:stock.location:"
msgid "Product Stock"
-msgstr "Inventario de Producto"
+msgstr "Existencias del Producto"
msgctxt "view:stock.move:"
msgid "Cancel"
@@ -1990,43 +2017,47 @@ msgstr "Marcar como Borrador"
msgctxt "view:stock.period.cache:"
msgid "Period Cache"
-msgstr ""
+msgstr "Caché de perÃodo"
msgctxt "view:stock.period.cache:"
msgid "Period Caches"
-msgstr ""
+msgstr "Cachés de periodo"
-#, fuzzy
msgctxt "view:stock.period:"
msgid "Close"
msgstr "Cerrar"
-#, fuzzy
msgctxt "view:stock.period:"
msgid "Draft"
msgstr "Borrador"
-#, fuzzy
msgctxt "view:stock.period:"
msgid "Period"
msgstr "PerÃodo"
-#, fuzzy
msgctxt "view:stock.period:"
msgid "Periods"
msgstr "PerÃodos"
+msgctxt "view:stock.product_quantities_warehouse.start:"
+msgid "Product Quantities By Warehouse"
+msgstr "Cantidades de Producto por Almacén"
+
+msgctxt "view:stock.product_quantities_warehouse:"
+msgid "Product Quantities By Warehouse"
+msgstr "Cantidades de Producto por Almacén"
+
msgctxt "view:stock.products_by_locations.start:"
msgid "Products by Locations"
-msgstr ""
+msgstr "Productos por Locaciones"
msgctxt "view:stock.shipment.in.return.assign.failed:"
msgid "Unable to Assign"
-msgstr ""
+msgstr "No se puede asignar"
msgctxt "view:stock.shipment.in.return.assign.failed:"
msgid "Unable to assign those products:"
-msgstr ""
+msgstr "No se puede asignar estos productos:"
msgctxt "view:stock.shipment.in.return:"
msgid "Assign"
@@ -2046,23 +2077,23 @@ msgstr "Borrador"
msgctxt "view:stock.shipment.in.return:"
msgid "Reset to Draft"
-msgstr "Revertir a Borrador"
+msgstr "Restablecer a Borrador"
msgctxt "view:stock.shipment.in.return:"
msgid "Supplier Return Shipment"
-msgstr "Devolución de Proveedor"
+msgstr "Envio de Devolución a Proveedor"
msgctxt "view:stock.shipment.in.return:"
msgid "Supplier Return Shipments"
-msgstr "Devoluciones de Proveedor"
+msgstr "Envios de Devolución a Proveedor"
msgctxt "view:stock.shipment.in.return:"
msgid "Wait"
-msgstr ""
+msgstr "Espera"
msgctxt "view:stock.shipment.in.return:"
msgid "Waiting"
-msgstr "En Espera"
+msgstr "En espera"
msgctxt "view:stock.shipment.in:"
msgid "Cancel"
@@ -2090,7 +2121,7 @@ msgstr "Movimientos"
msgctxt "view:stock.shipment.in:"
msgid "Receive"
-msgstr ""
+msgstr "Recibe"
msgctxt "view:stock.shipment.in:"
msgid "Received"
@@ -2098,23 +2129,23 @@ msgstr "Recibido"
msgctxt "view:stock.shipment.in:"
msgid "Reset to Draft"
-msgstr "Revertir a Borrador"
+msgstr "Restablecer a Borrador"
msgctxt "view:stock.shipment.in:"
msgid "Supplier Shipment"
-msgstr "EnvÃo del Proveedor"
+msgstr "EnvÃo de Proveedor"
msgctxt "view:stock.shipment.in:"
msgid "Supplier Shipments"
-msgstr "EnvÃos del Proveedor"
+msgstr "EnvÃos de Proveedor"
msgctxt "view:stock.shipment.internal.assign.failed:"
msgid "Unable to Assign"
-msgstr ""
+msgstr "No se puede Asignar"
msgctxt "view:stock.shipment.internal.assign.failed:"
msgid "Unable to assign those products:"
-msgstr ""
+msgstr "No se puede asignar estos productos:"
msgctxt "view:stock.shipment.internal:"
msgid "Assign"
@@ -2146,7 +2177,7 @@ msgstr "EnvÃos Internos"
msgctxt "view:stock.shipment.internal:"
msgid "Reset to Draft"
-msgstr "Revertir a Borrador"
+msgstr "Restablecer a Borrador"
msgctxt "view:stock.shipment.internal:"
msgid "Set Done"
@@ -2154,19 +2185,19 @@ msgstr "Marcar como Hecho"
msgctxt "view:stock.shipment.internal:"
msgid "Set Waiting"
-msgstr "Colocar en Espera"
+msgstr "Marcar en Espera"
msgctxt "view:stock.shipment.internal:"
msgid "Waiting"
-msgstr "En espera"
+msgstr "Esperando"
msgctxt "view:stock.shipment.out.assign.failed:"
msgid "Unable to Assign"
-msgstr ""
+msgstr "No se puede asignar"
msgctxt "view:stock.shipment.out.assign.failed:"
msgid "Unable to assign those products:"
-msgstr ""
+msgstr "No se puede asignar estos productos:"
msgctxt "view:stock.shipment.out.return:"
msgid "Cancel"
@@ -2174,17 +2205,16 @@ msgstr "Cancelar"
msgctxt "view:stock.shipment.out.return:"
msgid "Customer Return Shipment"
-msgstr "Devolución a Cliente"
+msgstr "Envio de Devolución de Cliente"
msgctxt "view:stock.shipment.out.return:"
msgid "Customer Return Shipments"
-msgstr "Devolución a Cliente"
+msgstr "Envios de Devolución de Cliente"
msgctxt "view:stock.shipment.out.return:"
msgid "Done"
msgstr "Hecho"
-#, fuzzy
msgctxt "view:stock.shipment.out.return:"
msgid "Draft"
msgstr "Borrador"
@@ -2207,7 +2237,7 @@ msgstr "Recibido"
msgctxt "view:stock.shipment.out.return:"
msgid "Reset to Draft"
-msgstr "Revertir a Borrador"
+msgstr "Restablecer a Borrador"
msgctxt "view:stock.shipment.out:"
msgid "Assign"
@@ -2219,11 +2249,11 @@ msgstr "Cancelar"
msgctxt "view:stock.shipment.out:"
msgid "Customer Shipment"
-msgstr "EnvÃo de Cliente"
+msgstr "EnvÃo a Cliente"
msgctxt "view:stock.shipment.out:"
msgid "Customer Shipments"
-msgstr "EnvÃos de Cliente"
+msgstr "EnvÃos a Clientes"
msgctxt "view:stock.shipment.out:"
msgid "Done"
@@ -2239,11 +2269,11 @@ msgstr "Forzar Asignación"
msgctxt "view:stock.shipment.out:"
msgid "Inventory Moves"
-msgstr "Movimientos de Inventario"
+msgstr "Movimientos de inventario"
msgctxt "view:stock.shipment.out:"
msgid "Make shipment"
-msgstr "Hacer Empaque"
+msgstr "Hacer Envio"
msgctxt "view:stock.shipment.out:"
msgid "Outgoing Moves"
@@ -2251,7 +2281,7 @@ msgstr "Movimientos de Salida"
msgctxt "view:stock.shipment.out:"
msgid "Reset to Draft"
-msgstr "Revertir a Borrador"
+msgstr "Restablecer a Borrador"
msgctxt "view:stock.shipment.out:"
msgid "Set Done"
@@ -2259,62 +2289,60 @@ msgstr "Marcar como Hecho"
msgctxt "view:stock.shipment.out:"
msgid "Set Waiting"
-msgstr "Colocar en Espera"
+msgstr "Marcar en Espera"
msgctxt "view:stock.shipment.out:"
msgid "Unpack"
-msgstr "Sin empaque"
+msgstr "Desempacar"
msgctxt "view:stock.shipment.out:"
msgid "Waiting"
-msgstr "En espera"
+msgstr "Esperando"
-#, fuzzy
msgctxt "wizard_button:product.by_location,start,end:"
msgid "Cancel"
msgstr "Cancelar"
-#, fuzzy
msgctxt "wizard_button:product.by_location,start,open:"
msgid "Open"
msgstr "Abrir"
-#, fuzzy
+msgctxt "wizard_button:stock.product_quantities_warehouse,start,end:"
+msgid "Cancel"
+msgstr "Cancelar"
+
+msgctxt "wizard_button:stock.product_quantities_warehouse,start,open_:"
+msgid "Open"
+msgstr "Abrir"
+
msgctxt "wizard_button:stock.products_by_locations,start,end:"
msgid "Cancel"
msgstr "Cancelar"
-#, fuzzy
msgctxt "wizard_button:stock.products_by_locations,start,open:"
msgid "Open"
msgstr "Abrir"
-#, fuzzy
msgctxt "wizard_button:stock.shipment.in.return.assign,failed,end:"
msgid "Ok"
msgstr "Aceptar"
-#, fuzzy
msgctxt "wizard_button:stock.shipment.in.return.assign,failed,force:"
msgid "Force Assign"
msgstr "Forzar Asignación"
-#, fuzzy
msgctxt "wizard_button:stock.shipment.internal.assign,failed,end:"
msgid "Ok"
msgstr "Aceptar"
-#, fuzzy
msgctxt "wizard_button:stock.shipment.internal.assign,failed,force:"
msgid "Force Assign"
msgstr "Forzar Asignación"
-#, fuzzy
msgctxt "wizard_button:stock.shipment.out.assign,failed,end:"
msgid "Ok"
msgstr "Aceptar"
-#, fuzzy
msgctxt "wizard_button:stock.shipment.out.assign,failed,force:"
msgid "Force Assign"
msgstr "Forzar Asignación"
diff --git a/locale/es_ES.po b/locale/es_ES.po
index aaba3c4..69ffca7 100644
--- a/locale/es_ES.po
+++ b/locale/es_ES.po
@@ -422,7 +422,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"
@@ -592,6 +592,46 @@ msgctxt "field:stock.period.cache,write_uid:"
msgid "Write User"
msgstr "Usuario modificación"
+msgctxt "field:stock.product_quantities_warehouse,create_date:"
+msgid "Create Date"
+msgstr "Fecha creación"
+
+msgctxt "field:stock.product_quantities_warehouse,create_uid:"
+msgid "Create User"
+msgstr "Usuario creación"
+
+msgctxt "field:stock.product_quantities_warehouse,date:"
+msgid "Date"
+msgstr "Fecha"
+
+msgctxt "field:stock.product_quantities_warehouse,id:"
+msgid "ID"
+msgstr "ID"
+
+msgctxt "field:stock.product_quantities_warehouse,quantity:"
+msgid "Quantity"
+msgstr "Cantidad"
+
+msgctxt "field:stock.product_quantities_warehouse,rec_name:"
+msgid "Name"
+msgstr "Nombre"
+
+msgctxt "field:stock.product_quantities_warehouse,write_date:"
+msgid "Write Date"
+msgstr "Fecha modificación"
+
+msgctxt "field:stock.product_quantities_warehouse,write_uid:"
+msgid "Write User"
+msgstr "Usuario modificación"
+
+msgctxt "field:stock.product_quantities_warehouse.start,id:"
+msgid "ID"
+msgstr "ID"
+
+msgctxt "field:stock.product_quantities_warehouse.start,warehouse:"
+msgid "Warehouse"
+msgstr "Almacén"
+
msgctxt "field:stock.products_by_locations.start,forecast_date:"
msgid "At Date"
msgstr "A fecha"
@@ -1032,16 +1072,15 @@ msgstr "Inventarios"
msgctxt "model:ir.action,name:act_inventory_form_draft"
msgid "Draft Inventories"
-msgstr "Inventario borrador"
+msgstr "Inventarios borrador"
msgctxt "model:ir.action,name:act_location_form"
msgid "Locations"
msgstr "Editar ubicaciones"
-#, fuzzy
msgctxt "model:ir.action,name:act_location_quantity_tree"
-msgid "Location Quantity & Cost Value"
-msgstr "Cantidad y valor coste por ubicación"
+msgid "Locations"
+msgstr "Ubicaciones"
msgctxt "model:ir.action,name:act_location_tree"
msgid "Locations"
@@ -1067,13 +1106,17 @@ msgctxt "model:ir.action,name:act_period_list"
msgid "Periods"
msgstr "PerÃodos"
+msgctxt "model:ir.action,name:act_product_quantities_warehouse"
+msgid "Product Quantities By Warehouse"
+msgstr "Unidades de producto por almazén"
+
msgctxt "model:ir.action,name:act_products_by_locations"
-msgid "Products by Locations"
-msgstr "Productos por ubicación"
+msgid "Products"
+msgstr "Productos"
msgctxt "model:ir.action,name:act_shipment_in_draft"
msgid "Draft Supplier Shipment"
-msgstr "Albarán proveedor borrador"
+msgstr "Albaranes proveedor borrador"
msgctxt "model:ir.action,name:act_shipment_in_form"
msgid "Supplier Shipments"
@@ -1081,11 +1124,11 @@ msgstr "Albaranes proveedor"
msgctxt "model:ir.action,name:act_shipment_in_form_received"
msgid "Received Supplier shipments"
-msgstr "Albaranes de proveedor recibidos"
+msgstr "Albaranes proveedor recibidos"
msgctxt "model:ir.action,name:act_shipment_in_return_form"
msgid "Supplier Return Shipments"
-msgstr "Albaranes devolución a proveedor"
+msgstr "Albaranes proveedor devolución"
msgctxt "model:ir.action,name:act_shipment_internal_assigned_form"
msgid "Assigned Internal Shipments"
@@ -1113,23 +1156,23 @@ msgstr "Albaranes cliente"
msgctxt "model:ir.action,name:act_shipment_out_form3"
msgid "Supplier Shipments"
-msgstr "Albaranes de proveedor"
+msgstr "Albaranes proveedor"
msgctxt "model:ir.action,name:act_shipment_out_form_assigned"
msgid "Assigned Customer Shipments"
-msgstr "Albaranes a clientes reservados"
+msgstr "Albaranes clientes reservados"
msgctxt "model:ir.action,name:act_shipment_out_form_ready"
msgid "Customer Shipments Ready for Shipping"
-msgstr "Albaranes a cliente listos para ser enviados"
+msgstr "Albaranes cliente listos para envÃo"
msgctxt "model:ir.action,name:act_shipment_out_form_waiting"
msgid "Customer Shipments Waiting Assignation"
-msgstr "Albaranes a cliente esperando reserva"
+msgstr "Albaranes cliente esperando reserva"
msgctxt "model:ir.action,name:act_shipment_out_return_form"
msgid "Customer Return Shipments"
-msgstr "Albaranes de devolución de cliente"
+msgstr "Albaranes cliente devolución"
msgctxt "model:ir.action,name:act_stock_configuration_form"
msgid "Stock Configuration"
@@ -1145,7 +1188,7 @@ msgstr "Lista reabastecimiento"
msgctxt "model:ir.action,name:report_shipment_internal"
msgid "Internal Shipment"
-msgstr "Albarán interno"
+msgstr "Albaranes internos"
msgctxt "model:ir.action,name:report_shipment_out_delivery_note"
msgid "Delivery Note"
@@ -1160,9 +1203,13 @@ msgid "Restocking List"
msgstr "Lista reabastecimiento"
msgctxt "model:ir.action,name:wizard_product_by_location"
-msgid "Product by Location"
+msgid "Product by Locations"
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"
+
msgctxt "model:ir.action,name:wizard_products_by_locations"
msgid "Products by Locations"
msgstr "Productos por ubicación"
@@ -1229,7 +1276,7 @@ msgstr "Inventarios"
msgctxt "model:ir.ui.menu,name:menu_inventory_form_draft"
msgid "Draft Inventories"
-msgstr "Inventarios borrador"
+msgstr "Borrador"
msgctxt "model:ir.ui.menu,name:menu_location_form"
msgid "Locations"
@@ -1245,15 +1292,15 @@ msgstr "Movimientos"
msgctxt "model:ir.ui.menu,name:menu_move_form_cust"
msgid "Moves to Customers"
-msgstr "Movimientos clientes"
+msgstr "Clientes"
msgctxt "model:ir.ui.menu,name:menu_move_form_supp"
msgid "Moves from Suppliers"
-msgstr "Movimientos proveedores"
+msgstr "Proveedores"
msgctxt "model:ir.ui.menu,name:menu_move_form_supp_proceed"
msgid "Moves from Suppliers Waiting Arrival"
-msgstr "Proveedor esperando llegada"
+msgstr "Esperando llegada"
msgctxt "model:ir.ui.menu,name:menu_period_list"
msgid "Periods"
@@ -1265,7 +1312,7 @@ msgstr "Informes"
msgctxt "model:ir.ui.menu,name:menu_shipment_in_draft"
msgid "Draft Supplier Shipment"
-msgstr "Proveedor borrador"
+msgstr "Borrador"
msgctxt "model:ir.ui.menu,name:menu_shipment_in_form"
msgid "Supplier Shipments"
@@ -1273,19 +1320,19 @@ msgstr "Albaranes proveedor"
msgctxt "model:ir.ui.menu,name:menu_shipment_in_received"
msgid "Received Supplier shipments"
-msgstr "Proveedor recibidos"
+msgstr "Recibidos"
msgctxt "model:ir.ui.menu,name:menu_shipment_in_return_form"
msgid "Supplier Return Shipments"
-msgstr "Proveedor devolución"
+msgstr "Devolución"
msgctxt "model:ir.ui.menu,name:menu_shipment_internal_assigned_form"
msgid "Assigned Internal Shipments"
-msgstr "Internos reservados"
+msgstr "Reservados"
msgctxt "model:ir.ui.menu,name:menu_shipment_internal_draft_form"
msgid "Draft Internal Shipments"
-msgstr "Internos borrador"
+msgstr "Borrador"
msgctxt "model:ir.ui.menu,name:menu_shipment_internal_form"
msgid "Internal Shipments"
@@ -1293,11 +1340,11 @@ msgstr "Albaranes internos"
msgctxt "model:ir.ui.menu,name:menu_shipment_internal_waiting_form"
msgid "Internal Shipments Waiting Assignation"
-msgstr "Internos esperando reserva"
+msgstr "Esperando reserva"
msgctxt "model:ir.ui.menu,name:menu_shipment_out_assigned"
msgid "Assigned Customer Shipments"
-msgstr "Cliente reservados"
+msgstr "Reservados"
msgctxt "model:ir.ui.menu,name:menu_shipment_out_form"
msgid "Customer Shipments"
@@ -1305,15 +1352,15 @@ msgstr "Albaranes cliente"
msgctxt "model:ir.ui.menu,name:menu_shipment_out_ready"
msgid "Customer Shipments Ready for Shipping"
-msgstr "Cliente listos para envÃo"
+msgstr "Listos para envÃo"
msgctxt "model:ir.ui.menu,name:menu_shipment_out_return_form"
msgid "Customer Return Shipments"
-msgstr "Cliente devolución"
+msgstr "Devolución"
msgctxt "model:ir.ui.menu,name:menu_shipment_out_waiting"
msgid "Customer Shipments Waiting Assignation"
-msgstr "Cliente esperando reserva"
+msgstr "Esperando reserva"
msgctxt "model:ir.ui.menu,name:menu_stock"
msgid "Inventory & Stock"
@@ -1329,15 +1376,15 @@ msgstr "Producto por ubicación"
msgctxt "model:res.group,name:group_stock"
msgid "Stock"
-msgstr "Stock"
+msgstr "LogÃstica"
msgctxt "model:res.group,name:group_stock_admin"
msgid "Stock Administration"
-msgstr "Administración de stock"
+msgstr "Administración de logÃstica"
msgctxt "model:res.group,name:group_stock_force_assignment"
msgid "Stock Force Assignment"
-msgstr "Reserva forzada de stock"
+msgstr "Forzar reserva en la logÃstica"
msgctxt "model:stock.configuration,name:"
msgid "Stock Configuration"
@@ -1391,10 +1438,17 @@ msgctxt "model:stock.period,name:"
msgid "Stock Period"
msgstr "PerÃodo de stock"
-#, fuzzy
msgctxt "model:stock.period.cache,name:"
-msgid "stock.period.cache"
-msgstr "stock.period.cache"
+msgid "Stock Period Cache"
+msgstr "PerÃodo stock precalculado"
+
+msgctxt "model:stock.product_quantities_warehouse,name:"
+msgid "Product Quantities By Warehouse"
+msgstr "Unidades de producto por almazén"
+
+msgctxt "model:stock.product_quantities_warehouse.start,name:"
+msgid "Product Quantities By Warehouse"
+msgstr "Unidades de producto por almazén"
msgctxt "model:stock.products_by_locations.start,name:"
msgid "Products by Locations"
@@ -1558,7 +1612,7 @@ msgstr "Fecha:"
msgctxt "odt:stock.shipment.out.delivery_note:"
msgid "Delivery Note"
-msgstr "Notas de envÃo"
+msgstr "Nota de envÃo"
msgctxt "odt:stock.shipment.out.delivery_note:"
msgid "E-Mail:"
@@ -1980,6 +2034,14 @@ msgctxt "view:stock.period:"
msgid "Periods"
msgstr "PerÃodos"
+msgctxt "view:stock.product_quantities_warehouse.start:"
+msgid "Product Quantities By Warehouse"
+msgstr "Unidades de producto por almazén"
+
+msgctxt "view:stock.product_quantities_warehouse:"
+msgid "Product Quantities By Warehouse"
+msgstr "Unidades de producto por almazén"
+
msgctxt "view:stock.products_by_locations.start:"
msgid "Products by Locations"
msgstr "Productos por ubicación"
@@ -2018,7 +2080,7 @@ msgstr "Albarán devolución proveedor"
msgctxt "view:stock.shipment.in.return:"
msgid "Supplier Return Shipments"
-msgstr "Albaranes devolución proveedor"
+msgstr "Albaranes proveedor devolución"
msgctxt "view:stock.shipment.in.return:"
msgid "Wait"
@@ -2118,7 +2180,7 @@ msgstr "Marcar como realizado"
msgctxt "view:stock.shipment.internal:"
msgid "Set Waiting"
-msgstr "Colocar en espera"
+msgstr "Marcar como espera"
msgctxt "view:stock.shipment.internal:"
msgid "Waiting"
@@ -2142,7 +2204,7 @@ msgstr "Albarán devolución cliente"
msgctxt "view:stock.shipment.out.return:"
msgid "Customer Return Shipments"
-msgstr "Albaranes devolución cliente"
+msgstr "Albaranes cliente devolución"
msgctxt "view:stock.shipment.out.return:"
msgid "Done"
@@ -2222,7 +2284,7 @@ msgstr "Marcar como realizado"
msgctxt "view:stock.shipment.out:"
msgid "Set Waiting"
-msgstr "Colocar en espera"
+msgstr "Marcar como espera"
msgctxt "view:stock.shipment.out:"
msgid "Unpack"
@@ -2240,6 +2302,14 @@ msgctxt "wizard_button:product.by_location,start,open:"
msgid "Open"
msgstr "Abrir"
+msgctxt "wizard_button:stock.product_quantities_warehouse,start,end:"
+msgid "Cancel"
+msgstr "Cancelar"
+
+msgctxt "wizard_button:stock.product_quantities_warehouse,start,open_:"
+msgid "Open"
+msgstr "Abrir"
+
msgctxt "wizard_button:stock.products_by_locations,start,end:"
msgid "Cancel"
msgstr "Cancelar"
diff --git a/locale/fr_FR.po b/locale/fr_FR.po
index a954c6d..8424c53 100644
--- a/locale/fr_FR.po
+++ b/locale/fr_FR.po
@@ -263,7 +263,7 @@ msgstr "Emplacement fournisseur"
msgctxt "field:product.by_location.start,forecast_date:"
msgid "At Date"
-msgstr "A la date"
+msgstr "Ã la date"
msgctxt "field:product.by_location.start,id:"
msgid "ID"
@@ -709,9 +709,49 @@ msgctxt "field:stock.period.cache,write_uid:"
msgid "Write User"
msgstr "Mis à jour par"
+msgctxt "field:stock.product_quantities_warehouse,create_date:"
+msgid "Create Date"
+msgstr "Date de création"
+
+msgctxt "field:stock.product_quantities_warehouse,create_uid:"
+msgid "Create User"
+msgstr "Créé par"
+
+msgctxt "field:stock.product_quantities_warehouse,date:"
+msgid "Date"
+msgstr "Date"
+
+msgctxt "field:stock.product_quantities_warehouse,id:"
+msgid "ID"
+msgstr "ID"
+
+msgctxt "field:stock.product_quantities_warehouse,quantity:"
+msgid "Quantity"
+msgstr "Quantité"
+
+msgctxt "field:stock.product_quantities_warehouse,rec_name:"
+msgid "Name"
+msgstr "Nom"
+
+msgctxt "field:stock.product_quantities_warehouse,write_date:"
+msgid "Write Date"
+msgstr "Date de mise à jour"
+
+msgctxt "field:stock.product_quantities_warehouse,write_uid:"
+msgid "Write User"
+msgstr "Mis à jour par"
+
+msgctxt "field:stock.product_quantities_warehouse.start,id:"
+msgid "ID"
+msgstr "ID"
+
+msgctxt "field:stock.product_quantities_warehouse.start,warehouse:"
+msgid "Warehouse"
+msgstr "Entrepôt"
+
msgctxt "field:stock.products_by_locations.start,forecast_date:"
msgid "At Date"
-msgstr "A la date"
+msgstr "Ã la date"
msgctxt "field:stock.products_by_locations.start,id:"
msgid "ID"
@@ -1152,7 +1192,7 @@ msgid "Locations"
msgstr "Ãditer les emplacements"
msgctxt "model:ir.action,name:act_location_quantity_tree"
-msgid "Location Quantity & Cost Value"
+msgid "Locations"
msgstr "Quantités en stock"
msgctxt "model:ir.action,name:act_location_tree"
@@ -1179,13 +1219,17 @@ msgctxt "model:ir.action,name:act_period_list"
msgid "Periods"
msgstr "Périodes"
+msgctxt "model:ir.action,name:act_product_quantities_warehouse"
+msgid "Product Quantities By Warehouse"
+msgstr "Quantités de produit par entrepôt"
+
msgctxt "model:ir.action,name:act_products_by_locations"
-msgid "Products by Locations"
+msgid "Products"
msgstr "Produits par emplacements"
msgctxt "model:ir.action,name:act_shipment_in_draft"
msgid "Draft Supplier Shipment"
-msgstr "Expédition fournisseur en brouillon"
+msgstr "Expédition fournisseur brouillon"
msgctxt "model:ir.action,name:act_shipment_in_form"
msgid "Supplier Shipments"
@@ -1197,7 +1241,7 @@ msgstr "Expéditions fournisseur reçues"
msgctxt "model:ir.action,name:act_shipment_in_return_form"
msgid "Supplier Return Shipments"
-msgstr "Retour d'expéditions fournisseur"
+msgstr "Retours d'expédition fournisseur"
msgctxt "model:ir.action,name:act_shipment_internal_assigned_form"
msgid "Assigned Internal Shipments"
@@ -1241,7 +1285,7 @@ msgstr "Expéditions client en attente d'assignation"
msgctxt "model:ir.action,name:act_shipment_out_return_form"
msgid "Customer Return Shipments"
-msgstr "Retour d'expéditions client"
+msgstr "Retours d'expédition client"
msgctxt "model:ir.action,name:act_stock_configuration_form"
msgid "Stock Configuration"
@@ -1272,9 +1316,13 @@ msgid "Restocking List"
msgstr "Liste de restockage"
msgctxt "model:ir.action,name:wizard_product_by_location"
-msgid "Product by Location"
+msgid "Product by Locations"
msgstr "Produits par emplacement"
+msgctxt "model:ir.action,name:wizard_product_quantities_warehouse"
+msgid "Product Quantities By Warehouse"
+msgstr "Quantités de produit par entrepôt"
+
msgctxt "model:ir.action,name:wizard_products_by_locations"
msgid "Products by Locations"
msgstr "Produits par emplacements"
@@ -1309,7 +1357,7 @@ msgstr "Expédition client"
msgctxt "model:ir.sequence,name:sequence_shipment_out_return"
msgid "Customer Return Shipment"
-msgstr "Retour d'expédition client"
+msgstr "Retours d'expédition client"
msgctxt "model:ir.sequence.type,name:sequence_type_shipment_in"
msgid "Supplier Shipment"
@@ -1377,7 +1425,7 @@ msgstr "Rapports"
msgctxt "model:ir.ui.menu,name:menu_shipment_in_draft"
msgid "Draft Supplier Shipment"
-msgstr "Expédition fournisseur en brouillon"
+msgstr "Expédition fournisseur brouillon"
msgctxt "model:ir.ui.menu,name:menu_shipment_in_form"
msgid "Supplier Shipments"
@@ -1389,7 +1437,7 @@ msgstr "Expéditions fournisseur reçues"
msgctxt "model:ir.ui.menu,name:menu_shipment_in_return_form"
msgid "Supplier Return Shipments"
-msgstr "Retour d'expédition fournisseur"
+msgstr "Retours d'expédition fournisseur"
msgctxt "model:ir.ui.menu,name:menu_shipment_internal_assigned_form"
msgid "Assigned Internal Shipments"
@@ -1421,7 +1469,7 @@ msgstr "Expéditions client prêtes pour la livraison"
msgctxt "model:ir.ui.menu,name:menu_shipment_out_return_form"
msgid "Customer Return Shipments"
-msgstr "Retour d'expédition client"
+msgstr "Retours d'expédition client"
msgctxt "model:ir.ui.menu,name:menu_shipment_out_waiting"
msgid "Customer Shipments Waiting Assignation"
@@ -1504,13 +1552,21 @@ msgid "Stock Period"
msgstr "Période de stock"
msgctxt "model:stock.period.cache,name:"
-msgid "stock.period.cache"
+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."
+msgctxt "model:stock.product_quantities_warehouse,name:"
+msgid "Product Quantities By Warehouse"
+msgstr "Quantités de produit par entrepôt"
+
+msgctxt "model:stock.product_quantities_warehouse.start,name:"
+msgid "Product Quantities By Warehouse"
+msgstr "Quantités de produit par entrepôt"
+
msgctxt "model:stock.products_by_locations.start,name:"
msgid "Products by Locations"
msgstr "Produits par emplacements"
@@ -2595,6 +2651,14 @@ 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"
+
+msgctxt "view:stock.product_quantities_warehouse:"
+msgid "Product Quantities By Warehouse"
+msgstr "Quantités de produit par entrepôt"
+
msgctxt "view:stock.products_by_locations.start:"
msgid "Products by Locations"
msgstr "Produits par emplacements"
@@ -2991,6 +3055,14 @@ msgctxt "wizard_button:product.by_location,start,open:"
msgid "Open"
msgstr "Ouvrir"
+msgctxt "wizard_button:stock.product_quantities_warehouse,start,end:"
+msgid "Cancel"
+msgstr "Annuler"
+
+msgctxt "wizard_button:stock.product_quantities_warehouse,start,open_:"
+msgid "Open"
+msgstr "Ouvrir"
+
msgctxt "wizard_button:stock.products_by_locations,start,end:"
msgid "Cancel"
msgstr "Annuler"
diff --git a/locale/nl_NL.po b/locale/nl_NL.po
index 72e365b..39c443f 100644
--- a/locale/nl_NL.po
+++ b/locale/nl_NL.po
@@ -621,6 +621,50 @@ msgctxt "field:stock.period.cache,write_uid:"
msgid "Write User"
msgstr ""
+msgctxt "field:stock.product_quantities_warehouse,create_date:"
+msgid "Create Date"
+msgstr ""
+
+msgctxt "field:stock.product_quantities_warehouse,create_uid:"
+msgid "Create User"
+msgstr ""
+
+#, fuzzy
+msgctxt "field:stock.product_quantities_warehouse,date:"
+msgid "Date"
+msgstr "Vervaldatum"
+
+msgctxt "field:stock.product_quantities_warehouse,id:"
+msgid "ID"
+msgstr ""
+
+#, fuzzy
+msgctxt "field:stock.product_quantities_warehouse,quantity:"
+msgid "Quantity"
+msgstr "Hoeveelheid"
+
+#, fuzzy
+msgctxt "field:stock.product_quantities_warehouse,rec_name:"
+msgid "Name"
+msgstr "Naam bijlage"
+
+msgctxt "field:stock.product_quantities_warehouse,write_date:"
+msgid "Write Date"
+msgstr ""
+
+msgctxt "field:stock.product_quantities_warehouse,write_uid:"
+msgid "Write User"
+msgstr ""
+
+msgctxt "field:stock.product_quantities_warehouse.start,id:"
+msgid "ID"
+msgstr ""
+
+#, fuzzy
+msgctxt "field:stock.product_quantities_warehouse.start,warehouse:"
+msgid "Warehouse"
+msgstr "Magazijn"
+
msgctxt "field:stock.products_by_locations.start,forecast_date:"
msgid "At Date"
msgstr ""
@@ -1103,7 +1147,7 @@ msgid "Locations"
msgstr ""
msgctxt "model:ir.action,name:act_location_quantity_tree"
-msgid "Location Quantity & Cost Value"
+msgid "Locations"
msgstr ""
msgctxt "model:ir.action,name:act_location_tree"
@@ -1132,10 +1176,15 @@ msgctxt "model:ir.action,name:act_period_list"
msgid "Periods"
msgstr "Perioden"
-msgctxt "model:ir.action,name:act_products_by_locations"
-msgid "Products by Locations"
+msgctxt "model:ir.action,name:act_product_quantities_warehouse"
+msgid "Product Quantities By Warehouse"
msgstr ""
+#, fuzzy
+msgctxt "model:ir.action,name:act_products_by_locations"
+msgid "Products"
+msgstr "Producten"
+
msgctxt "model:ir.action,name:act_shipment_in_draft"
msgid "Draft Supplier Shipment"
msgstr ""
@@ -1225,7 +1274,11 @@ msgid "Restocking List"
msgstr ""
msgctxt "model:ir.action,name:wizard_product_by_location"
-msgid "Product by Location"
+msgid "Product by Locations"
+msgstr ""
+
+msgctxt "model:ir.action,name:wizard_product_quantities_warehouse"
+msgid "Product Quantities By Warehouse"
msgstr ""
msgctxt "model:ir.action,name:wizard_products_by_locations"
@@ -1465,7 +1518,15 @@ msgid "Stock Period"
msgstr ""
msgctxt "model:stock.period.cache,name:"
-msgid "stock.period.cache"
+msgid "Stock Period Cache"
+msgstr ""
+
+msgctxt "model:stock.product_quantities_warehouse,name:"
+msgid "Product Quantities By Warehouse"
+msgstr ""
+
+msgctxt "model:stock.product_quantities_warehouse.start,name:"
+msgid "Product Quantities By Warehouse"
msgstr ""
msgctxt "model:stock.products_by_locations.start,name:"
@@ -2098,6 +2159,14 @@ msgctxt "view:stock.period:"
msgid "Periods"
msgstr "Perioden"
+msgctxt "view:stock.product_quantities_warehouse.start:"
+msgid "Product Quantities By Warehouse"
+msgstr ""
+
+msgctxt "view:stock.product_quantities_warehouse:"
+msgid "Product Quantities By Warehouse"
+msgstr ""
+
msgctxt "view:stock.products_by_locations.start:"
msgid "Products by Locations"
msgstr ""
@@ -2353,6 +2422,16 @@ msgid "Open"
msgstr "Open"
#, fuzzy
+msgctxt "wizard_button:stock.product_quantities_warehouse,start,end:"
+msgid "Cancel"
+msgstr "Annuleren"
+
+#, fuzzy
+msgctxt "wizard_button:stock.product_quantities_warehouse,start,open_:"
+msgid "Open"
+msgstr "Open"
+
+#, fuzzy
msgctxt "wizard_button:stock.products_by_locations,start,end:"
msgid "Cancel"
msgstr "Annuleren"
diff --git a/locale/ru_RU.po b/locale/ru_RU.po
index 1dc9265..cefc00f 100644
--- a/locale/ru_RU.po
+++ b/locale/ru_RU.po
@@ -590,6 +590,50 @@ msgctxt "field:stock.period.cache,write_uid:"
msgid "Write User"
msgstr ""
+msgctxt "field:stock.product_quantities_warehouse,create_date:"
+msgid "Create Date"
+msgstr ""
+
+msgctxt "field:stock.product_quantities_warehouse,create_uid:"
+msgid "Create User"
+msgstr ""
+
+#, fuzzy
+msgctxt "field:stock.product_quantities_warehouse,date:"
+msgid "Date"
+msgstr "ÐаÑа"
+
+msgctxt "field:stock.product_quantities_warehouse,id:"
+msgid "ID"
+msgstr ""
+
+#, fuzzy
+msgctxt "field:stock.product_quantities_warehouse,quantity:"
+msgid "Quantity"
+msgstr "Ðол-во"
+
+#, fuzzy
+msgctxt "field:stock.product_quantities_warehouse,rec_name:"
+msgid "Name"
+msgstr "Ðаименование"
+
+msgctxt "field:stock.product_quantities_warehouse,write_date:"
+msgid "Write Date"
+msgstr ""
+
+msgctxt "field:stock.product_quantities_warehouse,write_uid:"
+msgid "Write User"
+msgstr ""
+
+msgctxt "field:stock.product_quantities_warehouse.start,id:"
+msgid "ID"
+msgstr ""
+
+#, fuzzy
+msgctxt "field:stock.product_quantities_warehouse.start,warehouse:"
+msgid "Warehouse"
+msgstr "ТоваÑнÑй Ñклад"
+
msgctxt "field:stock.products_by_locations.start,forecast_date:"
msgid "At Date"
msgstr ""
@@ -1043,7 +1087,7 @@ msgstr "ÐзмениÑÑ Ð¼ÐµÑÑа Ñ
ÑанениÑ"
#, fuzzy
msgctxt "model:ir.action,name:act_location_quantity_tree"
-msgid "Location Quantity & Cost Value"
+msgid "Locations"
msgstr "Ð¥ÑанилиÑе ТÐЦ"
msgctxt "model:ir.action,name:act_location_tree"
@@ -1070,10 +1114,15 @@ msgctxt "model:ir.action,name:act_period_list"
msgid "Periods"
msgstr ""
-msgctxt "model:ir.action,name:act_products_by_locations"
-msgid "Products by Locations"
+msgctxt "model:ir.action,name:act_product_quantities_warehouse"
+msgid "Product Quantities By Warehouse"
msgstr ""
+#, fuzzy
+msgctxt "model:ir.action,name:act_products_by_locations"
+msgid "Products"
+msgstr "ТÐЦ"
+
msgctxt "model:ir.action,name:act_shipment_in_draft"
msgid "Draft Supplier Shipment"
msgstr ""
@@ -1164,7 +1213,11 @@ msgid "Restocking List"
msgstr "СпиÑок пополнениÑ"
msgctxt "model:ir.action,name:wizard_product_by_location"
-msgid "Product by Location"
+msgid "Product by Locations"
+msgstr ""
+
+msgctxt "model:ir.action,name:wizard_product_quantities_warehouse"
+msgid "Product Quantities By Warehouse"
msgstr ""
msgctxt "model:ir.action,name:wizard_products_by_locations"
@@ -1398,7 +1451,15 @@ msgid "Stock Period"
msgstr ""
msgctxt "model:stock.period.cache,name:"
-msgid "stock.period.cache"
+msgid "Stock Period Cache"
+msgstr ""
+
+msgctxt "model:stock.product_quantities_warehouse,name:"
+msgid "Product Quantities By Warehouse"
+msgstr ""
+
+msgctxt "model:stock.product_quantities_warehouse.start,name:"
+msgid "Product Quantities By Warehouse"
msgstr ""
msgctxt "model:stock.products_by_locations.start,name:"
@@ -2001,6 +2062,14 @@ msgctxt "view:stock.period:"
msgid "Periods"
msgstr ""
+msgctxt "view:stock.product_quantities_warehouse.start:"
+msgid "Product Quantities By Warehouse"
+msgstr ""
+
+msgctxt "view:stock.product_quantities_warehouse:"
+msgid "Product Quantities By Warehouse"
+msgstr ""
+
msgctxt "view:stock.products_by_locations.start:"
msgid "Products by Locations"
msgstr ""
@@ -2233,6 +2302,16 @@ msgid "Open"
msgstr "ÐÑкÑÑÑÑ"
#, fuzzy
+msgctxt "wizard_button:stock.product_quantities_warehouse,start,end:"
+msgid "Cancel"
+msgstr "ÐÑмениÑÑ"
+
+#, fuzzy
+msgctxt "wizard_button:stock.product_quantities_warehouse,start,open_:"
+msgid "Open"
+msgstr "ÐÑкÑÑÑÑ"
+
+#, fuzzy
msgctxt "wizard_button:stock.products_by_locations,start,end:"
msgid "Cancel"
msgstr "ÐÑмениÑÑ"
diff --git a/location.py b/location.py
index 7797d65..657d93a 100644
--- a/location.py
+++ b/location.py
@@ -7,7 +7,11 @@ from trytond.wizard import Wizard, StateView, Button, StateAction
from trytond.backend import TableHandler
from trytond.pyson import Not, Bool, Eval, Equal, PYSONEncoder, Date
from trytond.transaction import Transaction
-from trytond.pool import Pool
+from trytond.pool import Pool, PoolMeta
+
+__all__ = ['Location', 'Party', 'ProductsByLocationsStart',
+ 'ProductsByLocations']
+__metaclass__ = PoolMeta
STATES = {
'readonly': Not(Bool(Eval('active'))),
@@ -17,8 +21,7 @@ DEPENDS = ['active']
class Location(ModelSQL, ModelView):
"Stock Location"
- _name = 'stock.location'
- _description = __doc__
+ __name__ = 'stock.location'
name = fields.Char("Name", size=None, required=True, states=STATES,
depends=DEPENDS, translate=True)
code = fields.Char("Code", size=None, states=STATES, depends=DEPENDS,
@@ -88,109 +91,121 @@ class Location(ModelSQL, ModelView):
cost_value = fields.Function(fields.Numeric('Cost Value'),
'get_cost_value')
- def __init__(self):
- super(Location, self).__init__()
- self._order.insert(0, ('name', 'ASC'))
- self._constraints += [
+ @classmethod
+ def __setup__(cls):
+ super(Location, cls).__setup__()
+ cls._order.insert(0, ('name', 'ASC'))
+ cls._constraints += [
('check_recursion', 'recursive_locations'),
('check_type_for_moves', 'invalid_type_for_moves'),
- ]
- self._error_messages.update({
- 'recursive_locations': 'You can not create recursive locations!',
- 'invalid_type_for_moves': 'A location with existing moves ' \
- 'cannot be changed to a type that does not support moves.',
- 'child_of_warehouse': 'Location "%s" must be a child of ' \
- 'warehouse "%s"!',
- })
-
- def init(self, module_name):
- super(Location, self).init(module_name)
+ ]
+ cls._error_messages.update({
+ 'recursive_locations': \
+ 'You can not create recursive locations!',
+ 'invalid_type_for_moves': 'A location with existing moves ' \
+ 'cannot be changed to a type that does not support moves.',
+ 'child_of_warehouse': 'Location "%s" must be a child of ' \
+ 'warehouse "%s"!',
+ })
+
+ @classmethod
+ def __register__(cls, module_name):
+ super(Location, cls).__register__(module_name)
cursor = Transaction().cursor
- table = TableHandler(cursor, self, module_name)
+ table = TableHandler(cursor, cls, module_name)
table.index_action(['left', 'right'], 'add')
- def check_type_for_moves(self, ids):
+ def check_type_for_moves(self):
""" Check locations with moves have types compatible with moves. """
invalid_move_types = ['warehouse', 'view']
- move_obj = Pool().get('stock.move')
- for location in self.browse(ids):
- if location.type in invalid_move_types and \
- move_obj.search(['OR',
- ('to_location', '=', location.id),
- ('from_location', '=', location.id),
- ]):
- return False
+ Move = Pool().get('stock.move')
+ if (self.type in invalid_move_types
+ and Move.search(['OR',
+ ('to_location', '=', self.id),
+ ('from_location', '=', self.id),
+ ])):
+ return False
return True
- def default_active(self):
+ @staticmethod
+ def default_active():
return True
- def default_left(self):
+ @staticmethod
+ def default_left():
return 0
- def default_right(self):
+ @staticmethod
+ def default_right():
return 0
- def default_type(self):
+ @staticmethod
+ def default_type():
return 'storage'
- def check_xml_record(self, ids, values):
+ @classmethod
+ def check_xml_record(self, records, values):
return True
- def search_rec_name(self, name, clause):
- ids = self.search([
- ('code', '=', clause[2]),
- ], order=[])
- if ids:
- return [('id', 'in', ids)]
- return [(self._rec_name,) + tuple(clause[1:])]
-
- def get_quantity(self, ids, name):
- product_obj = Pool().get('product.product')
- date_obj = Pool().get('ir.date')
+ @classmethod
+ def search_rec_name(cls, name, clause):
+ locations = cls.search([
+ ('code', '=', clause[2]),
+ ], order=[])
+ if locations:
+ return [('id', 'in', [l.id for l in locations])]
+ return [(cls._rec_name,) + tuple(clause[1:])]
+
+ @classmethod
+ def get_quantity(cls, locations, name):
+ pool = Pool()
+ Product = pool.get('product.product')
+ Date_ = pool.get('ir.date')
if (not Transaction().context.get('product')) \
or not (isinstance(Transaction().context['product'],
(int, long))):
- return dict([(i, 0) for i in ids])
+ return dict([(l.id, 0) for l in locations])
with Transaction().set_context(active_test=False):
- if not product_obj.search([
- ('id', '=', Transaction().context['product']),
- ]):
- return dict([(i, 0) for i in ids])
+ if not Product.search([
+ ('id', '=', Transaction().context['product']),
+ ]):
+ return dict([(l.id, 0) for l in locations])
context = {}
if (name == 'quantity'
and Transaction().context.get('stock_date_end') >
- date_obj.today()):
- context['stock_date_end'] = date_obj.today()
+ 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
+ location_ids = [l.id for l in locations]
with Transaction().set_context(context):
- pbl = product_obj.products_by_location(location_ids=ids,
- product_ids=[Transaction().context['product']],
- with_childs=True, skip_zero=False).iteritems()
+ pbl = Product.products_by_location(location_ids=location_ids,
+ product_ids=[Transaction().context['product']],
+ with_childs=True, skip_zero=False).iteritems()
return dict([(loc, qty) for (loc, prod), qty in pbl])
- def get_cost_value(self, ids, name):
- product_obj = Pool().get('product.product')
+ @classmethod
+ def get_cost_value(cls, locations, name):
+ Product = Pool().get('product.product')
trans_context = Transaction().context
product_id = trans_context.get('product')
if not product_id:
- return dict((id, None) for id in ids)
+ return dict((l.id, None) for l in locations)
cost_values, context = {}, {}
if 'stock_date_end' in trans_context:
context['_datetime'] = trans_context['stock_date_end']
with Transaction().set_context(context):
- product = product_obj.browse(product_id)
- for location in self.browse(ids):
+ product = Product(product_id)
+ for location in locations:
# The date could be before the product creation
if not isinstance(product.cost_price, Decimal):
cost_values[location.id] = None
@@ -199,79 +214,68 @@ class Location(ModelSQL, ModelView):
* product.cost_price)
return cost_values
- def _set_warehouse_parent(self, locations):
+ @classmethod
+ def _set_warehouse_parent(cls, locations):
'''
Set the parent of child location of warehouse if not set
-
- :param locations: a BrowseRecordList of locations
- :return: a list with updated location ids
'''
- location_ids = set()
+ to_update = set()
for location in locations:
if location.type == 'warehouse':
if not location.input_location.parent:
- location_ids.add(location.input_location.id)
+ to_update.add(location.input_location)
if not location.output_location.parent:
- location_ids.add(location.output_location.id)
+ to_update.add(location.output_location)
if not location.storage_location.parent:
- location_ids.add(location.storage_location.id)
- location_ids = list(location_ids)
- if location_ids:
- self.write(location_ids, {
+ to_update.add(location.storage_location)
+ if to_update:
+ cls.write(list(to_update), {
'parent': location.id,
})
- def create(self, vals):
- res = super(Location, self).create(vals)
- locations = self.browse([res])
- self._set_warehouse_parent(locations)
- return res
-
- def write(self, ids, vals):
- res = super(Location, self).write(ids, vals)
- if isinstance(ids, (int, long)):
- ids = [ids]
- locations = self.browse(ids)
- self._set_warehouse_parent(locations)
-
- check_wh = self.search([
- ('type', '=', 'warehouse'),
- ['OR',
- ('storage_location', 'in', ids),
- ('input_location', 'in', ids),
- ('output_location', 'in', ids),
- ]])
+ @classmethod
+ def create(cls, vals):
+ location = super(Location, cls).create(vals)
+ cls._set_warehouse_parent([location])
+ return location
+
+ @classmethod
+ def write(cls, locations, vals):
+ super(Location, cls).write(locations, vals)
+ cls._set_warehouse_parent(locations)
+
+ ids = [l.id for l in locations]
+ warehouses = cls.search([
+ ('type', '=', 'warehouse'),
+ ['OR',
+ ('storage_location', 'in', ids),
+ ('input_location', 'in', ids),
+ ('output_location', 'in', ids),
+ ]])
- warehouses = self.browse(check_wh)
fields = ('storage_location', 'input_location', 'output_location')
wh2childs = {}
for warehouse in warehouses:
- in_out_sto = (warehouse[f].id for f in fields)
+ in_out_sto = (getattr(warehouse, f).id for f in fields)
for location in locations:
if location.id not in in_out_sto:
continue
- childs = wh2childs.setdefault(warehouse.id, self.search([
- ('parent', 'child_of', warehouse.id),
- ]))
- if location.id not in childs:
- self.raise_user_error('child_of_warehouse',
+ childs = wh2childs.setdefault(warehouse.id, cls.search([
+ ('parent', 'child_of', warehouse.id),
+ ]))
+ if location not in childs:
+ cls.raise_user_error('child_of_warehouse',
(location.name, warehouse.name))
- return res
-
- def copy(self, ids, default=None):
+ @classmethod
+ def copy(cls, locations, default=None):
if default is None:
default = {}
- int_id = False
- if isinstance(ids, (int, long)):
- int_id = True
- ids = [ids]
default['left'] = 0
default['right'] = 0
res = []
- locations = self.browse(ids)
for location in locations:
if location.type == 'warehouse':
@@ -282,8 +286,8 @@ class Location(ModelSQL, ModelView):
wh_default['storage_location'] = None
wh_default['childs'] = None
- new_id = super(Location, self).copy(location.id,
- default=wh_default)
+ new_location, = super(Location, cls).copy([location],
+ default=wh_default)
with Transaction().set_context(
cp_warehouse_locations={
@@ -291,34 +295,31 @@ class Location(ModelSQL, ModelView):
'output_location': location.output_location.id,
'storage_location': location.storage_location.id,
},
- cp_warehouse_id=new_id):
- self.copy([c.id for c in location.childs],
- default={'parent': new_id})
- self.write(new_id, {
- 'type': 'warehouse',
- })
+ cp_warehouse_id=new_location.id):
+ cls.copy(location.childs,
+ default={'parent': new_location.id})
+ cls.write([new_location], {
+ 'type': 'warehouse',
+ })
else:
- new_id = super(Location, self).copy(location.id,
- default=default)
+ new_location, = super(Location, cls).copy([location],
+ default=default)
warehouse_locations = Transaction().context.get(
- 'cp_warehouse_locations') or {}
+ 'cp_warehouse_locations') or {}
+ cp_warehouse = cls(Transaction().context['cp_warehouse_id'])
if location.id in warehouse_locations.values():
for field, loc_id in warehouse_locations.iteritems():
if loc_id == location.id:
- self.write(
- Transaction().context['cp_warehouse_id'], {
- field: new_id,
+ cls.write([cp_warehouse], {
+ field: new_location.id,
})
- res.append(new_id)
-
- return int_id and res[0] or res
-
-Location()
+ res.append(new_location)
+ return res
-class Party(ModelSQL, ModelView):
- _name = 'party.party'
+class Party:
+ __name__ = 'party.party'
supplier_location = fields.Property(fields.Many2One('stock.location',
'Supplier Location', domain=[('type', '=', 'supplier')],
help='The default source location when receiving products from the '
@@ -328,30 +329,25 @@ class Party(ModelSQL, ModelView):
help='The default destination location when sending products to the '
'party.'))
-Party()
-
class ProductsByLocationsStart(ModelView):
'Products by Locations'
- _name = 'stock.products_by_locations.start'
- _description = __doc__
+ __name__ = 'stock.products_by_locations.start'
forecast_date = fields.Date(
'At Date', help='Allow to compute expected '\
'stock quantities for this date.\n'\
'* An empty value is an infinite date in the future.\n'\
'* A date in the past will provide historical values.')
- def default_forecast_date(self):
- date_obj = Pool().get('ir.date')
- return date_obj.today()
-
-ProductsByLocationsStart()
+ @staticmethod
+ def default_forecast_date():
+ Date_ = Pool().get('ir.date')
+ return Date_.today()
class ProductsByLocations(Wizard):
'Products by Locations'
- _name = 'stock.products_by_locations'
-
+ __name__ = 'stock.products_by_locations'
start = StateView('stock.products_by_locations.start',
'stock.products_by_locations_start_view_form', [
Button('Cancel', 'end', 'tryton-cancel'),
@@ -359,12 +355,28 @@ class ProductsByLocations(Wizard):
])
open = StateAction('stock.act_products_by_locations')
- def do_open(self, session, action):
+ def do_open(self, action):
+ pool = Pool()
+ Location = pool.get('stock.location')
+ Lang = pool.get('ir.lang')
+
context = {}
context['locations'] = Transaction().context.get('active_ids')
- date = session.start.forecast_date or datetime.date.max
+ date = self.start.forecast_date or datetime.date.max
context['stock_date_end'] = Date(date.year, date.month, date.day)
action['pyson_context'] = PYSONEncoder().encode(context)
- return action, {}
-ProductsByLocations()
+ locations = Location.browse(context['locations'])
+
+ for code in [Transaction().language, 'en_US']:
+ langs = Lang.search([
+ ('code', '=', code),
+ ])
+ if langs:
+ break
+ lang = langs[0]
+ date = Lang.strftime(date, lang.code, lang.date)
+
+ action['name'] += ' - (%s) @ %s' % (
+ ','.join(l.name for l in locations), date)
+ return action, {}
diff --git a/location.xml b/location.xml
index e98dcde..f67398f 100644
--- a/location.xml
+++ b/location.xml
@@ -105,10 +105,11 @@ this repository contains the full copyright notices and license terms. -->
action="act_location_form" id="menu_location_form"/>
<record model="ir.action.act_window" id="act_products_by_locations">
- <field name="name">Products by Locations</field>
+ <field name="name">Products</field>
<field name="res_model">product.product</field>
<field name="window_name" eval="False"/>
<field name="domain">['OR', ('quantity', '!=', 0.0), ('forecast_quantity', '!=', 0.0)]</field>
+ <field name="window_name" eval="True"/>
</record>
<record model="ir.action.act_window.view" id="act_product_form_view2">
<field name="sequence" eval="10"/>
diff --git a/move.py b/move.py
index 066af7b..199ad19 100644
--- a/move.py
+++ b/move.py
@@ -8,6 +8,8 @@ from trytond.pyson import In, Eval, Not, Equal, If, Get, Bool
from trytond.transaction import Transaction
from trytond.pool import Pool
+__all__ = ['Move']
+
STATES = {
'readonly': In(Eval('state'), ['cancel', 'assigned', 'done']),
}
@@ -16,8 +18,7 @@ DEPENDS = ['state']
class Move(ModelSQL, ModelView):
"Stock Move"
- _name = 'stock.move'
- _description = __doc__
+ __name__ = 'stock.move'
_order_name = 'product'
product = fields.Many2One("product.product", "Product", required=True,
select=True, states=STATES,
@@ -28,7 +29,7 @@ class Move(ModelSQL, ModelView):
product_uom_category = fields.Function(
fields.Many2One('product.uom.category', 'Product Uom Category',
on_change_with=['product']),
- 'get_product_uom_category')
+ 'on_change_with_product_uom_category')
uom = fields.Many2One("product.uom", "Uom", required=True, states=STATES,
domain=[
('category', '=', Eval('product_uom_category')),
@@ -37,7 +38,7 @@ class Move(ModelSQL, ModelView):
'from_location', 'to_location'],
depends=['state', 'product_uom_category'])
unit_digits = fields.Function(fields.Integer('Unit Digits',
- on_change_with=['uom']), 'get_unit_digits')
+ on_change_with=['uom']), 'on_change_with_unit_digits')
quantity = fields.Float("Quantity", required=True,
digits=(16, Eval('unit_digits', 2)), states=STATES,
depends=['state', 'unit_digits'])
@@ -107,11 +108,12 @@ class Move(ModelSQL, ModelView):
depends=['unit_price_required', 'state'])
unit_price_required = fields.Function(fields.Boolean('Unit Price Required',
on_change_with=['from_location', 'to_location']),
- 'get_unit_price_required')
+ 'on_change_with_unit_price_required')
- def __init__(self):
- super(Move, self).__init__()
- self._sql_constraints += [
+ @classmethod
+ def __setup__(cls):
+ super(Move, cls).__setup__()
+ cls._sql_constraints += [
('check_move_qty_pos',
'CHECK(quantity >= 0.0)', 'Move quantity must be positive'),
('check_move_internal_qty_pos',
@@ -133,11 +135,11 @@ class Move(ModelSQL, ModelView):
'<= 1)',
'Move can be on only one Shipment'),
]
- self._constraints += [
+ cls._constraints += [
('check_period_closed', 'period_closed'),
]
- self._order[0] = ('id', 'DESC')
- self._error_messages.update({
+ cls._order[0] = ('id', 'DESC')
+ cls._error_messages.update({
'set_state_draft': 'You can not set state to draft!',
'set_state_assigned': 'You can not set state to assigned!',
'set_state_done': 'You can not set state to done!',
@@ -148,10 +150,11 @@ class Move(ModelSQL, ModelView):
'in the state: "Assigned", "Done" or "Cancel"'),
})
- def init(self, module_name):
+ @classmethod
+ def __register__(cls, module_name):
cursor = Transaction().cursor
# Migration from 1.2: packing renamed into shipment
- table = TableHandler(cursor, self, module_name)
+ table = TableHandler(cursor, cls, module_name)
table.drop_constraint('check_packing')
for suffix in ('in', 'out', 'in_return', 'out_return', 'internal'):
old_column = 'packing_%s' % suffix
@@ -164,244 +167,190 @@ class Move(ModelSQL, ModelView):
# Migration from 1.8: new field internal_quantity
internal_quantity_exist = table.column_exist('internal_quantity')
- super(Move, self).init(module_name)
+ super(Move, cls).__register__(module_name)
# Migration from 1.8: fill new field internal_quantity
if not internal_quantity_exist:
offset = 0
limit = cursor.IN_MAX
- move_ids = True
- while move_ids:
- move_ids = self.search([], offset=offset, limit=limit)
+ moves = True
+ while moves:
+ moves = cls.search([], offset=offset, limit=limit)
offset += limit
- for move in self.browse(move_ids):
- internal_quantity = self._get_internal_quantity(
+ for move in moves:
+ internal_quantity = cls._get_internal_quantity(
move.quantity, move.uom, move.product)
- self.write(move.id, {
+ cls.write([move], {
'internal_quantity': internal_quantity,
})
- table = TableHandler(cursor, self, module_name)
+ table = TableHandler(cursor, cls, module_name)
table.not_null_action('internal_quantity', action='add')
# Migration from 1.0 check_packing_in_out has been removed
- table = TableHandler(cursor, self, module_name)
+ table = TableHandler(cursor, cls, module_name)
table.drop_constraint('check_packing_in_out')
# Add index on create_date
table.index_action('create_date', action='add')
- def default_planned_date(self):
+ @staticmethod
+ def default_planned_date():
return Transaction().context.get('planned_date')
- def default_state(self):
+ @staticmethod
+ def default_state():
return 'draft'
- def default_company(self):
+ @staticmethod
+ def default_company():
return Transaction().context.get('company')
- def default_currency(self):
- company_obj = Pool().get('company.company')
+ @staticmethod
+ def default_currency():
+ Company = Pool().get('company.company')
company = Transaction().context.get('company')
if company:
- company = company_obj.browse(company)
+ company = Company(company)
return company.currency.id
- def default_unit_digits(self):
+ @staticmethod
+ def default_unit_digits():
return 2
- def on_change_with_unit_digits(self, vals):
- uom_obj = Pool().get('product.uom')
- if vals.get('uom'):
- uom = uom_obj.browse(vals['uom'])
- return uom.digits
+ def on_change_with_unit_digits(self, name=None):
+ if self.uom:
+ return self.uom.digits
return 2
- def get_unit_digits(self, ids, name):
- res = {}
- for move in self.browse(ids):
- res[move.id] = move.uom.digits
- return res
-
- def on_change_product(self, vals):
+ def on_change_product(self):
pool = Pool()
- product_obj = pool.get('product.product')
- uom_obj = pool.get('product.uom')
- currency_obj = pool.get('currency.currency')
- company_obj = pool.get('company.company')
- location_obj = pool.get('stock.location')
+ Uom = pool.get('product.uom')
+ Currency = pool.get('currency.currency')
res = {
'unit_price': Decimal('0.0'),
- }
- if vals.get('product'):
- product = product_obj.browse(vals['product'])
- res['uom'] = product.default_uom.id
- res['uom.rec_name'] = product.default_uom.rec_name
- res['unit_digits'] = product.default_uom.digits
- from_location, to_location = None, None
- if vals.get('from_location'):
- from_location = location_obj.browse(vals['from_location'])
- if vals.get('to_location'):
- to_location = location_obj.browse(vals['to_location'])
+ }
+ if self.product:
+ res['uom'] = self.product.default_uom.id
+ res['uom.rec_name'] = self.product.default_uom.rec_name
+ res['unit_digits'] = self.product.default_uom.digits
unit_price = None
- if from_location and from_location.type in ('supplier',
+ if self.from_location and self.from_location.type in ('supplier',
'production'):
- unit_price = product.cost_price
- elif to_location and to_location.type == 'customer':
- unit_price = product.list_price
+ unit_price = self.product.cost_price
+ elif self.to_location and self.to_location.type == 'customer':
+ unit_price = self.product.list_price
if unit_price:
- if vals.get('uom') and vals['uom'] != product.default_uom.id:
- uom = uom_obj.browse(vals['uom'])
- unit_price = uom_obj.compute_price(product.default_uom,
- unit_price, uom)
- if vals.get('currency') and vals.get('company'):
- currency = currency_obj.browse(vals['currency'])
- company = company_obj.browse(vals['company'])
- unit_price = currency_obj.compute(company.currency,
- unit_price, currency, round=False)
+ if self.uom != self.product.default_uom:
+ unit_price = Uom.compute_price(self.product.default_uom,
+ unit_price, self.uom)
+ if self.currency and self.company:
+ unit_price = Currency.compute(self.company.currency,
+ unit_price, self.currency, round=False)
res['unit_price'] = unit_price
return res
- def on_change_with_product_uom_category(self, values):
- pool = Pool()
- product_obj = pool.get('product.product')
- if values.get('product'):
- product = product_obj.browse(values['product'])
- return product.default_uom_category.id
-
- def get_product_uom_category(self, ids, name):
- categories = {}
- for move in self.browse(ids):
- categories[move.id] = move.product.default_uom_category.id
- return categories
-
- def on_change_uom(self, vals):
+ def on_change_with_product_uom_category(self, name=None):
+ if self.product:
+ return self.product.default_uom_category.id
+
+ def on_change_uom(self):
pool = Pool()
- product_obj = pool.get('product.product')
- uom_obj = pool.get('product.uom')
- currency_obj = pool.get('currency.currency')
- company_obj = pool.get('company.company')
- location_obj = pool.get('stock.location')
+ Uom = pool.get('product.uom')
+ Currency = pool.get('currency.currency')
res = {
'unit_price': Decimal('0.0'),
- }
- if vals.get('product'):
- product = product_obj.browse(vals['product'])
- to_location = None
- if vals.get('to_location'):
- to_location = location_obj.browse(vals['to_location'])
- if to_location and to_location.type == 'storage':
- unit_price = product.cost_price
- if vals.get('uom') and vals['uom'] != product.default_uom.id:
- uom = uom_obj.browse(vals['uom'])
- unit_price = uom_obj.compute_price(product.default_uom,
- unit_price, uom)
- if vals.get('currency') and vals.get('company'):
- currency = currency_obj.browse(vals['currency'])
- company = company_obj.browse(vals['company'])
- unit_price = currency_obj.compute(company.currency,
- unit_price, currency, round=False)
+ }
+ if self.product:
+ if self.to_location and self.to_location.type == 'storage':
+ unit_price = self.product.cost_price
+ if self.uom and self.uom != self.product.default_uom:
+ unit_price = Uom.compute_price(self.product.default_uom,
+ unit_price, self.uom)
+ if self.currency and self.company:
+ unit_price = Currency.compute(self.company.currency,
+ unit_price, self.currency, round=False)
res['unit_price'] = unit_price
return res
- def on_change_with_unit_price_required(self, vals):
- location_obj = Pool().get('stock.location')
- if vals.get('from_location'):
- from_location = location_obj.browse(vals['from_location'])
- if from_location.type in ('supplier', 'production'):
- return True
- if vals.get('to_location'):
- to_location = location_obj.browse(vals['to_location'])
- if to_location.type in ('customer', 'production'):
- return True
+ def on_change_with_unit_price_required(self, name=None):
+ if (self.from_location
+ and self.from_location.type in ('supplier', 'production')):
+ return True
+ if (self.to_location
+ and self.to_location.type == 'customer'):
+ return True
return False
- def get_unit_price_required(self, ids, name):
- res = {}
- for move in self.browse(ids):
- res[move.id] = False
- if move.from_location.type in ('supplier', 'production'):
- res[move.id] = True
- if move.to_location.type == 'customer':
- res[move.id] = True
- return res
-
- def check_period_closed(self, ids):
- period_obj = Pool().get('stock.period')
- period_ids = period_obj.search([
- ('state', '=', 'closed'),
- ], order=[('date', 'DESC')], limit=1)
- if period_ids:
- period, = period_obj.browse(period_ids)
- for move in self.browse(ids):
+ @classmethod
+ def check_period_closed(cls, moves):
+ Period = Pool().get('stock.period')
+ periods = Period.search([
+ ('state', '=', 'closed'),
+ ], order=[('date', 'DESC')], limit=1)
+ if periods:
+ period, = periods
+ for move in moves:
date = (move.effective_date if move.effective_date
else move.planned_date)
if date and date < period.date:
return False
return True
- def get_rec_name(self, ids, name):
- if not ids:
- return {}
- res = {}
- moves = self.browse(ids)
- for m in moves:
- res[m.id] = ("%s%s %s"
- % (m.quantity, m.uom.symbol, m.product.rec_name))
- return res
+ def get_rec_name(self, name):
+ return ("%s%s %s"
+ % (self.quantity, self.uom.symbol, self.product.rec_name))
- def search_rec_name(self, name, clause):
+ @classmethod
+ def search_rec_name(cls, name, clause):
return [('product',) + clause[1:]]
- def _update_product_cost_price(self, product_id, quantity, uom, unit_price,
+ @classmethod
+ def _update_product_cost_price(cls, product_id, quantity, uom, unit_price,
currency, company, date):
"""
- Update the cost price on the given product
-
- :param product_id: the id of the product
- :param quantity: the quantity of the product, positive if incoming and
- negative if outgoing
- :param uom: the uom id or a BrowseRecord of the uom
- :param unit_price: the unit price of the product
- :param currency: the currency of the unit price
- :param company: the company id ot a BrowseRecord of the company
- :param date: the date for the currency rate calculation
+ Update the cost price on the given product.
+ The quantity must be positive if incoming and negative if outgoing.
+ The date is for the currency rate calculation.
"""
pool = Pool()
- uom_obj = pool.get('product.uom')
- product_obj = pool.get('product.product')
- product_template_obj = pool.get('product.template')
- location_obj = pool.get('stock.location')
- currency_obj = pool.get('currency.currency')
- company_obj = pool.get('company.company')
- date_obj = pool.get('ir.date')
+ Uom = pool.get('product.uom')
+ Product = pool.get('product.product')
+ ProductTemplate = pool.get('product.template')
+ Location = pool.get('stock.location')
+ Currency = pool.get('currency.currency')
+ Company = pool.get('company.company')
+ Date = pool.get('ir.date')
if isinstance(uom, (int, long)):
- uom = uom_obj.browse(uom)
+ uom = Uom(uom)
if isinstance(currency, (int, long)):
- currency = currency_obj.browse(currency)
+ currency = Currency(currency)
if isinstance(company, (int, long)):
- company = company_obj.browse(company)
+ company = Company(company)
context = {}
- context['locations'] = location_obj.search([
- ('type', '=', 'storage'),
- ])
- context['stock_date_end'] = date_obj.today()
+ context['locations'] = Location.search([
+ ('type', '=', 'storage'),
+ ])
+ context['stock_date_end'] = Date.today()
with Transaction().set_context(context):
- product = product_obj.browse(product_id)
- qty = uom_obj.compute_qty(uom, quantity, product.default_uom)
+ product = Product(product_id)
+ qty = Uom.compute_qty(uom, quantity, product.default_uom)
qty = Decimal(str(qty))
- product_qty = Decimal(str(product.template.quantity))
+ if hasattr(Product, 'cost_price'):
+ product_qty = product.quantity
+ else:
+ product_qty = product.template.quantity
+ product_qty = Decimal(str(product_qty))
# convert wrt currency
with Transaction().set_context(date=date):
- unit_price = currency_obj.compute(currency.id, unit_price,
- company.currency.id, round=False)
+ unit_price = Currency.compute(currency, unit_price,
+ company.currency, round=False)
# convert wrt to the uom
- unit_price = uom_obj.compute_price(uom, unit_price,
- product.default_uom)
+ unit_price = Uom.compute_price(uom, unit_price, product.default_uom)
if product_qty + qty != Decimal('0.0'):
new_cost_price = (
(product.cost_price * product_qty) + (unit_price * qty)
@@ -409,77 +358,77 @@ class Move(ModelSQL, ModelView):
else:
new_cost_price = product.cost_price
- if hasattr(product_obj, 'cost_price'):
- digits = product_obj.cost_price.digits
+ if hasattr(Product, 'cost_price'):
+ digits = Product.cost_price.digits
else:
- digits = product_template_obj.cost_price.digits
+ digits = ProductTemplate.cost_price.digits
new_cost_price = new_cost_price.quantize(
Decimal(str(10.0 ** -digits[1])))
with Transaction().set_user(0, set_context=True):
- product_obj.write(product.id, {
- 'cost_price': new_cost_price,
- })
-
- def _get_internal_quantity(self, quantity, uom, product):
- uom_obj = Pool().get('product.uom')
- internal_quantity = uom_obj.compute_qty(uom, quantity,
- product.default_uom, round=True)
+ Product.write([product], {
+ 'cost_price': new_cost_price,
+ })
+
+ @staticmethod
+ def _get_internal_quantity(quantity, uom, product):
+ Uom = Pool().get('product.uom')
+ internal_quantity = Uom.compute_qty(uom, quantity,
+ product.default_uom, round=True)
return internal_quantity
- def create(self, vals):
+ @classmethod
+ def create(cls, vals):
pool = Pool()
- location_obj = pool.get('stock.location')
- product_obj = pool.get('product.product')
- uom_obj = pool.get('product.uom')
- date_obj = pool.get('ir.date')
+ Location = pool.get('stock.location')
+ Product = pool.get('product.product')
+ Uom = pool.get('product.uom')
+ Date = pool.get('ir.date')
- today = date_obj.today()
+ today = Date.today()
vals = vals.copy()
effective_date = vals.get('effective_date') or today
- product = product_obj.browse(vals['product'])
+ product = Product(vals['product'])
if vals.get('state') == 'done':
vals['effective_date'] = effective_date
- currency_id = vals.get('currency', self.default_currency())
- company_id = vals.get('company', self.default_company())
- from_location = location_obj.browse(vals['from_location'])
- to_location = location_obj.browse(vals['to_location'])
+ currency_id = vals.get('currency', cls.default_currency())
+ company_id = vals.get('company', cls.default_company())
+ from_location = Location(vals['from_location'])
+ to_location = Location(vals['to_location'])
if (from_location.type in ('supplier', 'production')
and to_location.type == 'storage'
and product.cost_price_method == 'average'):
- self._update_product_cost_price(vals['product'],
+ cls._update_product_cost_price(vals['product'],
vals['quantity'], vals['uom'], vals['unit_price'],
currency_id, company_id, effective_date)
if (to_location.type == 'supplier'
and from_location.type == 'storage'
and product.cost_price_method == 'average'):
- self._update_product_cost_price(vals['product'],
+ cls._update_product_cost_price(vals['product'],
-vals['quantity'], vals['uom'], vals['unit_price'],
currency_id, company_id, effective_date)
if not vals.get('cost_price'):
# Re-read product to get the updated cost_price
- product = product_obj.browse(vals['product'])
+ product = Product(vals['product'])
vals['cost_price'] = product.cost_price
elif vals.get('state') == 'assigned':
vals['effective_date'] = effective_date
- uom = uom_obj.browse(vals['uom'])
- internal_quantity = self._get_internal_quantity(vals['quantity'],
- uom, product)
+ uom = Uom(vals['uom'])
+ internal_quantity = cls._get_internal_quantity(vals['quantity'],
+ uom, product)
vals['internal_quantity'] = internal_quantity
- return super(Move, self).create(vals)
+ return super(Move, cls).create(vals)
- def write(self, ids, vals):
- date_obj = Pool().get('ir.date')
+ @classmethod
+ def write(cls, moves, vals):
+ Date = Pool().get('ir.date')
- if isinstance(ids, (int, long)):
- ids = [ids]
- today = date_obj.today()
+ today = Date.today()
effective_date = vals.get('effective_date') or today
- moves = self.browse(ids)
if 'state' in vals:
for move in moves:
if vals['state'] == 'cancel':
@@ -488,41 +437,41 @@ class Move(ModelSQL, ModelView):
and move.to_location.type == 'storage'
and move.state != 'cancel'
and move.product.cost_price_method == 'average'):
- self._update_product_cost_price(move.product.id,
+ cls._update_product_cost_price(move.product.id,
-move.quantity, move.uom, move.unit_price,
move.currency, move.company, today)
if (move.to_location.type == 'supplier'
and move.from_location.type == 'storage'
and move.state != 'cancel'
and move.product.cost_price_method == 'average'):
- self._update_product_cost_price(move.product.id,
+ cls._update_product_cost_price(move.product.id,
move.quantity, move.uom, move.unit_price,
move.currency, move.company, today)
elif vals['state'] == 'draft':
if move.state == 'done':
- self.raise_user_error('set_state_draft')
+ cls.raise_user_error('set_state_draft')
elif vals['state'] == 'assigned':
if move.state in ('cancel', 'done'):
- self.raise_user_error('set_state_assigned')
+ cls.raise_user_error('set_state_assigned')
vals['effective_date'] = effective_date
elif vals['state'] == 'done':
if move.state in ('cancel'):
- self.raise_user_error('set_state_done')
+ cls.raise_user_error('set_state_done')
vals['effective_date'] = effective_date
if (move.from_location.type in ('supplier', 'production')
and move.to_location.type == 'storage'
and move.state != 'done'
and move.product.cost_price_method == 'average'):
- self._update_product_cost_price(move.product.id,
+ cls._update_product_cost_price(move.product.id,
move.quantity, move.uom, move.unit_price,
move.currency, move.company, effective_date)
if (move.to_location.type == 'supplier'
and move.from_location.type == 'storage'
and move.state != 'done'
and move.product.cost_price_method == 'average'):
- self._update_product_cost_price(move.product.id,
+ cls._update_product_cost_price(move.product.id,
-move.quantity, move.uom, move.unit_price,
move.currency, move.company, effective_date)
@@ -531,54 +480,49 @@ class Move(ModelSQL, ModelView):
'currency'), False):
for move in moves:
if move.state in ('assigned', 'done', 'cancel'):
- self.raise_user_error('modify_assigned_done_cancel')
+ cls.raise_user_error('modify_assigned_done_cancel')
if reduce(lambda x, y: x or y in vals,
('planned_date', 'effective_date'), False):
for move in moves:
if move.state in ('done', 'cancel'):
- self.raise_user_error('modify_assigned_done_cancel')
+ cls.raise_user_error('modify_assigned_done_cancel')
- res = super(Move, self).write(ids, vals)
+ super(Move, cls).write(moves, vals)
if vals.get('state', '') == 'done':
- #Re-read the move because cost_price has been updated
- for move in self.browse(ids):
+ for move in moves:
if not move.cost_price:
- self.write(move.id, {
- 'cost_price': move.product.cost_price,
- })
+ cls.write([move], {
+ 'cost_price': move.product.cost_price,
+ })
- for move in self.browse(ids):
- internal_quantity = self._get_internal_quantity(move.quantity,
+ for move in moves:
+ internal_quantity = cls._get_internal_quantity(move.quantity,
move.uom, move.product)
if internal_quantity != move.internal_quantity:
# Use super to avoid infinite loop
- super(Move, self).write(move.id, {
- 'internal_quantity': internal_quantity,
- })
- return res
+ super(Move, cls).write([move], {
+ 'internal_quantity': internal_quantity,
+ })
- def delete(self, ids):
- for move in self.browse(ids):
+ @classmethod
+ def delete(cls, moves):
+ for move in moves:
if move.state not in ('draft', 'cancel'):
- self.raise_user_error('del_draft_cancel')
- return super(Move, self).delete(ids)
+ cls.raise_user_error('del_draft_cancel')
+ super(Move, cls).delete(moves)
- def pick_product(self, move, location_quantities):
+ def pick_product(self, location_quantities):
"""
Pick the product across the location. Naive (fast) implementation.
-
- :param move: a BrowseRecord of stock.move
- :param location_quantities: a list of tuple (location, available_qty)
- where location is a BrowseRecord of stock.location.
- :return: a list of tuple (location, quantity) for quantities
- that can be picked
+ Return a list of tuple (location, quantity) for quantities that can be
+ picked.
"""
to_pick = []
- needed_qty = move.quantity
+ needed_qty = self.quantity
for location, available_qty in location_quantities.iteritems():
# Ignore available_qty when too small
- if available_qty < move.uom.rounding:
+ if available_qty < self.uom.rounding:
continue
if needed_qty <= available_qty:
to_pick.append((location, needed_qty))
@@ -587,35 +531,35 @@ class Move(ModelSQL, ModelView):
to_pick.append((location, available_qty))
needed_qty -= available_qty
# Force assignation for consumables:
- if move.product.consumable:
- to_pick.append((move.from_location, needed_qty))
+ if self.product.consumable:
+ to_pick.append((self.from_location, needed_qty))
return to_pick
return to_pick
- def assign_try(self, moves):
+ @classmethod
+ def assign_try(cls, moves):
'''
Try to assign moves.
It will split the moves to assign as much possible.
-
- :param moves: a BrowseRecordList of stock.move to assign
- :return: True if succeed or False if not
+ Return True if succeed or False if not.
'''
pool = Pool()
- product_obj = pool.get('product.product')
- uom_obj = pool.get('product.uom')
- date_obj = pool.get('ir.date')
- location_obj = pool.get('stock.location')
+ Product = pool.get('product.product')
+ Uom = pool.get('product.uom')
+ Date = pool.get('ir.date')
+ Location = pool.get('stock.location')
- Transaction().cursor.lock(self._table)
+ Transaction().cursor.lock(cls._table)
- location_ids = location_obj.search([
- ('parent', 'child_of', [x.from_location.id for x in moves]),
- ])
+ locations = Location.search([
+ ('parent', 'child_of', [x.from_location.id for x in moves]),
+ ])
with Transaction().set_context(
- stock_date_end=date_obj.today(),
+ stock_date_end=Date.today(),
stock_assign=True):
- pbl = product_obj.products_by_location(location_ids=location_ids,
- product_ids=[m.product.id for m in moves])
+ pbl = Product.products_by_location(
+ location_ids=[l.id for l in locations],
+ product_ids=[m.product.id for m in moves])
success = True
for move in moves:
@@ -623,17 +567,17 @@ class Move(ModelSQL, ModelView):
continue
to_location = move.to_location
location_qties = {}
- child_ids = location_obj.search([
- ('parent', 'child_of', [move.from_location.id]),
- ])
- for location in location_obj.browse(child_ids):
+ childs = Location.search([
+ ('parent', 'child_of', [move.from_location.id]),
+ ])
+ for location in childs:
if (location.id, move.product.id) in pbl:
- location_qties[location] = uom_obj.compute_qty(
+ location_qties[location] = Uom.compute_qty(
move.product.default_uom,
pbl[(location.id, move.product.id)], move.uom,
round=False)
- to_pick = self.pick_product(move, location_qties)
+ to_pick = move.pick_product(location_qties)
picked_qties = 0.0
for _, qty in to_pick:
@@ -642,7 +586,7 @@ class Move(ModelSQL, ModelView):
if picked_qties < move.quantity:
success = False
first = False
- self.write(move.id, {
+ cls.write([move], {
'quantity': move.quantity - picked_qties,
})
else:
@@ -654,12 +598,12 @@ class Move(ModelSQL, ModelView):
'state': 'assigned',
}
if first:
- self.write(move.id, values)
+ cls.write([move], values)
first = False
else:
- self.copy(move.id, default=values)
+ cls.copy([move], default=values)
- qty_default_uom = uom_obj.compute_qty(move.uom, qty,
+ qty_default_uom = Uom.compute_qty(move.uom, qty,
move.product.default_uom, round=False)
pbl[(from_location.id, move.product.id)] = (
@@ -669,5 +613,3 @@ class Move(ModelSQL, ModelView):
pbl.get((to_location.id, move.product.id), 0.0)
+ qty_default_uom)
return success
-
-Move()
diff --git a/period.py b/period.py
index 3ca6831..0178dda 100644
--- a/period.py
+++ b/period.py
@@ -6,11 +6,12 @@ from trytond.pyson import Equal, Eval, If, In, Get
from trytond.transaction import Transaction
from trytond.pool import Pool
+__all__ = ['Period', 'Cache']
+
class Period(ModelSQL, ModelView):
'Stock Period'
- _name = 'stock.period'
- _description = __doc__
+ __name__ = 'stock.period'
_rec_name = 'date'
date = fields.Date('Date', required=True, states={
'readonly': Equal(Eval('state'), 'closed'),
@@ -26,15 +27,16 @@ class Period(ModelSQL, ModelView):
('closed', 'Closed'),
], 'State', select=True, readonly=True)
- def __init__(self):
- super(Period, self).__init__()
- self._error_messages.update({
+ @classmethod
+ def __setup__(cls):
+ super(Period, cls).__setup__()
+ 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 '
'there is still assigned moves!'),
})
- self._buttons.update({
+ cls._buttons.update({
'draft': {
'invisible': Eval('state') == 'draft',
},
@@ -43,68 +45,68 @@ class Period(ModelSQL, ModelView):
},
})
+ @classmethod
@ModelView.button
- def draft(self, ids):
- cache_obj = Pool().get('stock.period.cache')
- cache_ids = []
- for i in xrange(0, len(ids), Transaction().cursor.IN_MAX):
- cache_ids.append(cache_obj.search([
- ('period', 'in', ids[i:i + Transaction().cursor.IN_MAX]),
- ], order=[]))
- cache_obj.delete(list(chain(*cache_ids)))
- self.write(ids, {
- 'state': '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',
+ })
+ @classmethod
@ModelView.button
- def close(self, ids):
+ def close(cls, periods):
pool = Pool()
- product_obj = pool.get('product.product')
- location_obj = pool.get('stock.location')
- cache_obj = pool.get('stock.period.cache')
- move_obj = pool.get('stock.move')
- date_obj = pool.get('ir.date')
+ 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')
- location_ids = location_obj.search([
- ('type', 'not in', ['warehouse', 'view']),
- ], order=[])
- today = date_obj.today()
- periods = self.browse(ids)
+ locations = Location.search([
+ ('type', 'not in', ['warehouse', 'view']),
+ ], order=[])
+ today = Date.today()
recent_date = max(period.date for period in periods)
if recent_date >= today:
- self.raise_user_error('close_period_future_today')
- if move_obj.search([
- ('state', '=', 'assigned'),
- ['OR', [
- ('effective_date', '=', None),
- ('planned_date', '<=', recent_date),
- ],
- ('effective_date', '<=', recent_date),
- ]]):
- self.raise_user_error('close_period_assigned_move')
+ cls.raise_user_error('close_period_future_today')
+ if Move.search([
+ ('state', '=', 'assigned'),
+ ['OR', [
+ ('effective_date', '=', None),
+ ('planned_date', '<=', recent_date),
+ ],
+ ('effective_date', '<=', recent_date),
+ ]]):
+ cls.raise_user_error('close_period_assigned_move')
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_obj.products_by_location(location_ids)
+ 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():
- cache_obj.create({
- 'period': period.id,
- 'location': location_id,
- 'product': product_id,
- 'internal_quantity': quantity,
+ Cache.create({
+ 'period': period.id,
+ 'location': location_id,
+ 'product': product_id,
+ 'internal_quantity': quantity,
+ })
+ cls.write(periods, {
+ 'state': 'closed',
})
- self.write(ids, {
- 'state': 'closed',
- })
-
-Period()
class Cache(ModelSQL, ModelView):
@@ -113,9 +115,7 @@ class Cache(ModelSQL, ModelView):
It is used to store cached computation of stock quantities.
'''
- _name = 'stock.period.cache'
- _description = __doc__.splitlines()[0]
-
+ __name__ = 'stock.period.cache'
period = fields.Many2One('stock.period', 'Period', required=True,
readonly=True, select=True, ondelete='CASCADE')
location = fields.Many2One('stock.location', 'Location', required=True,
@@ -123,5 +123,3 @@ class Cache(ModelSQL, ModelView):
product = fields.Many2One('product.product', 'Product', required=True,
readonly=True, select=True, ondelete='CASCADE')
internal_quantity = fields.Float('Internal Quantity', readonly=True)
-
-Cache()
diff --git a/period.xml b/period.xml
index 40e2706..7c107cd 100644
--- a/period.xml
+++ b/period.xml
@@ -16,9 +16,9 @@ this repository contains the full copyright notices and license terms. -->
<label name="state"/>
<field name="state"/>
<group col="2" colspan="2" id="buttons">
- <button name="draft" type="object" string="Draft"
+ <button name="draft" string="Draft"
icon="tryton-clear"/>
- <button name="close" type="object" string="Close"
+ <button name="close" string="Close"
icon="tryton-ok"/>
</group>
</form>
diff --git a/product.py b/product.py
index 6e01df6..24555fe 100644
--- a/product.py
+++ b/product.py
@@ -1,80 +1,76 @@
#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 copy
import datetime
from decimal import Decimal
-from trytond.model import ModelView, ModelSQL, fields
+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.pool import Pool
+from trytond.pool import Pool, PoolMeta
+__all__ = ['Template', 'Product',
+ 'ProductByLocationStart', 'ProductByLocation',
+ 'ProductQuantitiesByWarehouse', 'ProductQuantitiesByWarehouseStart',
+ 'OpenProductQuantitiesByWarehouse']
+__metaclass__ = PoolMeta
-class Template(ModelSQL, ModelView):
- _name = "product.template"
+class Template:
+ __name__ = "product.template"
quantity = fields.Function(fields.Float('Quantity'), 'sum_product')
forecast_quantity = fields.Function(fields.Float('Forecast Quantity'),
'sum_product')
cost_value = fields.Function(fields.Numeric('Cost Value'),
'sum_product')
- def sum_product(self, ids, name):
- res = {}
+ def sum_product(self, name):
if name not in ('quantity', 'forecast_quantity', 'cost_value'):
raise Exception('Bad argument')
-
- for template in self.browse(ids):
- res[template.id] = 0. if name != 'cost_value' else Decimal(0)
- for product in template.products:
- res[template.id] += product[name]
- return res
-
- def __init__(self):
- super(Template, self).__init__()
- self._error_messages.update({
+ sum_ = 0. if name != 'cost_value' else Decimal(0)
+ for product in self.products:
+ sum_ += getattr(product, name)
+ return sum_
+
+ @classmethod
+ def __setup__(cls):
+ super(Template, cls).__setup__()
+ cls._error_messages.update({
'change_default_uom': 'You cannot change the default uom for '\
'a product which is associated to stock moves.',
})
- self.cost_price = copy.copy(self.cost_price)
- self.cost_price.states = copy.copy(self.cost_price.states)
- self.cost_price.states['required'] = Or(
- self.cost_price.states.get('required', True),
+ cls.cost_price.states['required'] = Or(
+ cls.cost_price.states.get('required', True),
Eval('type').in_(['goods', 'assets']))
- self.cost_price.depends = copy.copy(self.cost_price.depends)
- self.cost_price.depends.append('type')
- self._reset_columns()
+ cls.cost_price.depends.append('type')
- def write(self, ids, vals):
- move_obj = Pool().get('stock.move')
+ @classmethod
+ def write(cls, templates, vals):
+ Move = Pool().get('stock.move')
cursor = Transaction().cursor
- if not vals.get("default_uom"):
- return super(Template, self).write(ids, vals)
+ if not vals.get("default_uom"):
+ super(Template, cls).write(templates, vals)
+ return
- for i in range(0, len(ids), cursor.IN_MAX):
- sub_ids = ids[i:i + cursor.IN_MAX]
- res = self.search([
+ for i in range(0, len(templates), cursor.IN_MAX):
+ sub_ids = [t.id for t in templates[i:i + cursor.IN_MAX]]
+ templates_to_check = cls.search([
('id', 'in', sub_ids),
('default_uom', '!=', vals['default_uom']),
])
- if res:
- res = move_obj.search([
- ('product.template', 'in', res),
- ], limit=1)
- if res:
- self.raise_user_error('change_default_uom')
-
- return super(Template, self).write(ids, vals)
-
+ if templates_to_check:
+ if Move.search([
+ ('product.template', 'in',
+ [t.id for t in templates_to_check]),
+ ], limit=1):
+ cls.raise_user_error('change_default_uom')
-Template()
+ super(Template, cls).write(templates, vals)
-class Product(ModelSQL, ModelView):
- _name = "product.product"
-
+class Product:
+ __name__ = "product.product"
quantity = fields.Function(fields.Float('Quantity'), 'get_quantity',
searcher='search_quantity')
forecast_quantity = fields.Function(fields.Float('Forecast Quantity'),
@@ -82,35 +78,37 @@ class Product(ModelSQL, ModelView):
cost_value = fields.Function(fields.Numeric('Cost Value'),
'get_cost_value')
- def get_quantity(self, ids, name):
- date_obj = Pool().get('ir.date')
+ @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 dict((id, 0.0) for id in ids)
+ return quantities
context = {}
if (name == 'quantity'
and Transaction().context.get('stock_date_end')
and Transaction().context.get('stock_date_end') >
- date_obj.today()):
- context['stock_date_end'] = date_obj.today()
+ 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 = self.products_by_location(
- location_ids=Transaction().context['locations'],
- product_ids=ids, with_childs=True)
+ pbl = cls.products_by_location(
+ location_ids=Transaction().context['locations'],
+ product_ids=[p.id for p in products], with_childs=True)
- res = {}.fromkeys(ids, 0.0)
for location in Transaction().context['locations']:
- for product in ids:
- res[product] += pbl.get((location, product), 0.0)
- return res
+ for product in products:
+ quantities[product.id] += pbl.get((location, product.id), 0.0)
+ return quantities
- def _search_quantity_eval_domain(self, line, domain):
+ @staticmethod
+ def _search_quantity_eval_domain(line, domain):
field, operator, operand = domain
value = line.get(field)
if value == None:
@@ -121,8 +119,9 @@ class Product(ModelSQL, ModelView):
operator = "=="
return (safe_eval(str(value) + operator + str(operand)))
- def search_quantity(self, name, domain=None):
- date_obj = Pool().get('ir.date')
+ @classmethod
+ def search_quantity(cls, name, domain=None):
+ Date = Pool().get('ir.date')
if not (Transaction().context.get('locations') and domain):
return []
@@ -131,8 +130,8 @@ class Product(ModelSQL, ModelView):
if (name == 'quantity'
and Transaction().context.get('stock_date_end')
and Transaction().context.get('stock_date_end') >
- date_obj.today()):
- context['stock_date_end'] = date_obj.today()
+ Date.today()):
+ context['stock_date_end'] = Date.today()
if name == 'forecast_quantity':
context['forecast'] = True
@@ -140,7 +139,7 @@ class Product(ModelSQL, ModelView):
context['stock_date_end'] = datetime.date.max
with Transaction().set_context(context):
- pbl = self.products_by_location(
+ pbl = cls.products_by_location(
location_ids=Transaction().context['locations'],
with_childs=True, skip_zero=False).iteritems()
@@ -153,17 +152,18 @@ class Product(ModelSQL, ModelView):
})
res = [line['product'] for line in processed_lines
- if self._search_quantity_eval_domain(line, domain)]
+ if cls._search_quantity_eval_domain(line, domain)]
return [('id', 'in', res)]
- def get_cost_value(self, ids, name):
+ @classmethod
+ def get_cost_value(cls, products, name):
cost_values = {}
context = {}
trans_context = Transaction().context
if 'stock_date_end' in context:
context['_datetime'] = trans_context['stock_date_end']
with Transaction().set_context(context):
- for product in self.browse(ids):
+ for product in products:
# The date could be before the product creation
if not isinstance(product.cost_price, Decimal):
cost_values[product.id] = None
@@ -172,7 +172,8 @@ class Product(ModelSQL, ModelView):
* product.cost_price)
return cost_values
- def products_by_location(self, location_ids, product_ids=None,
+ @classmethod
+ def products_by_location(cls, location_ids, product_ids=None,
with_childs=False, skip_zero=True):
"""
Compute for each location and product the stock quantity in the default
@@ -190,23 +191,21 @@ class Product(ModelSQL, ModelView):
stock_skip_warehouse: if set, quantities on a warehouse are no
more quantities of all child locations but quantities of
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
- :param location_ids: the ids of locations
- :param product_ids: the ids of the products
- if None all products are used
- :param with_childs: a boolean to compute also for child locations
- :param skip_zero: a boolean to list also items with zero quantity
- :return: a dictionary with (location id, product id) as key
- and quantity as value
+ Return a dictionary with (location id, product id) as key
+ and quantity as value.
"""
pool = Pool()
- uom_obj = pool.get('product.uom')
- rule_obj = pool.get('ir.rule')
- location_obj = pool.get('stock.location')
- date_obj = pool.get('ir.date')
- period_obj = pool.get('stock.period')
+ Uom = pool.get('product.uom')
+ Rule = pool.get('ir.rule')
+ Location = pool.get('stock.location')
+ Date = pool.get('ir.date')
+ Period = pool.get('stock.period')
- today = date_obj.today()
+ today = Date.today()
if not location_ids:
return {}
@@ -218,7 +217,7 @@ class Product(ModelSQL, ModelView):
location_ids = set(location_ids)
storage_to_remove = set()
wh_to_add = {}
- for location in location_obj.browse(list(location_ids)):
+ for location in Location.browse(list(location_ids)):
if (location.type == 'warehouse'
and Transaction().context.get('stock_skip_warehouse')):
location_ids.remove(location.id)
@@ -228,7 +227,7 @@ class Product(ModelSQL, ModelView):
wh_to_add[location.id] = location.storage_location.id
location_ids = list(location_ids)
- move_rule_query, move_rule_val = rule_obj.domain_get('stock.move')
+ move_rule_query, move_rule_val = Rule.domain_get('stock.move')
period_clause, period_vals = 'period = %s', [0]
@@ -385,21 +384,20 @@ class Product(ModelSQL, ModelView):
context['stock_date_start'], today,
])
else:
- period_ids = period_obj.search([
- ('date', '<', context['stock_date_end']),
- ], order=[('date', 'DESC')], limit=1)
- if period_ids:
- period_id, = period_ids
- period = period_obj.browse(period_id)
+ periods = Period.search([
+ ('date', '<', context['stock_date_end']),
+ ], order=[('date', 'DESC')], limit=1)
+ if periods:
+ period, = periods
state_date_clause += (' AND '
'(COALESCE(effective_date, planned_date) > %s)')
state_date_vals.append(period.date)
period_vals[0] = period.id
if with_childs:
- query, args = location_obj.search([
- ('parent', 'child_of', location_ids),
- ], query_string=True, order=[])
+ query, args = Location.search([
+ ('parent', 'child_of', location_ids),
+ ], query_string=True, order=[])
where_clause = " IN (" + query + ") "
where_vals = args
else:
@@ -494,13 +492,12 @@ class Product(ModelSQL, ModelView):
# Propagate quantities on from child locations to their parents
if with_childs:
# Fetch all child locations
- all_location_ids = location_obj.search([
- ('parent', 'child_of', location_ids),
- ])
- locations = location_obj.browse(all_location_ids)
+ locations = Location.search([
+ ('parent', 'child_of', location_ids),
+ ])
# Generate a set of locations without childs and a dict
# giving the parent of each location.
- leafs = set(all_location_ids)
+ leafs = set([l.id for l in locations])
parent = {}
for location in locations:
if not location.parent:
@@ -508,16 +505,21 @@ class Product(ModelSQL, ModelView):
if location.parent.id in leafs:
leafs.remove(location.parent.id)
parent[location.id] = location.parent.id
-
+ locations = set((l.id for l in locations))
while leafs:
- next_leafs = set()
for l in leafs:
+ locations.remove(l)
if l not in parent:
continue
- next_leafs.add(parent[l])
for product in res_product_ids:
res.setdefault((parent[l], product), 0)
res[(parent[l], product)] += res.get((l, product), 0)
+ next_leafs = set(locations)
+ for l in locations:
+ if l not in parent:
+ continue
+ if parent[l] in next_leafs and parent[l] in locations:
+ next_leafs.remove(parent[l])
leafs = next_leafs
# clean result
@@ -527,11 +529,11 @@ class Product(ModelSQL, ModelView):
# Round quantities
default_uom = dict((p.id, p.default_uom) for p in
- self.browse(list(res_product_ids)))
+ cls.browse(list(res_product_ids)))
for key, quantity in res.iteritems():
location, product = key
uom = default_uom[product]
- res[key] = uom_obj.round(quantity, uom.rounding)
+ res[key] = Uom.round(quantity, uom.rounding)
# Complete result with missing products if asked
if not skip_zero:
@@ -539,7 +541,7 @@ class Product(ModelSQL, ModelView):
if product_ids:
all_product_ids = product_ids
else:
- all_product_ids = Pool().get("product.product").search([])
+ 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:
@@ -555,39 +557,25 @@ class Product(ModelSQL, ModelView):
return res
- def view_header_get(self, value, view_type='form'):
- value = super(Product, self).view_header_get(value,
- view_type=view_type)
- if not Transaction().context.get('locations'):
- return value
- location_obj = Pool().get('stock.location')
- locations = location_obj.browse(Transaction().context.get('locations'))
- return value + " (" + ",".join(l.name for l in locations) + ")"
-
-Product()
-
class ProductByLocationStart(ModelView):
'Product by Location'
- _name = 'product.by_location.start'
- _description = __doc__
+ __name__ = 'product.by_location.start'
forecast_date = fields.Date(
'At Date', help='Allow to compute expected '\
'stock quantities for this date.\n'\
'* An empty value is an infinite date in the future.\n'\
'* A date in the past will provide historical values.')
- def default_forecast_date(self):
- date_obj = Pool().get('ir.date')
- return date_obj.today()
-
-ProductByLocationStart()
+ @staticmethod
+ def default_forecast_date():
+ Date = Pool().get('ir.date')
+ return Date.today()
class ProductByLocation(Wizard):
'Product by Location'
- _name = 'product.by_location'
-
+ __name__ = 'product.by_location'
start = StateView('product.by_location.start',
'stock.product_by_location_start_view_form', [
Button('Cancel', 'end', 'tryton-cancel'),
@@ -595,32 +583,133 @@ class ProductByLocation(Wizard):
])
open = StateAction('stock.act_location_quantity_tree')
- def do_open(self, session, action):
- product_obj = Pool().get('product.product')
- lang_obj = Pool().get('ir.lang')
+ def do_open(self, action):
+ pool = Pool()
+ Product = pool.get('product.product')
+ Lang = pool.get('ir.lang')
context = {}
product_id = Transaction().context['active_id']
context['product'] = product_id
- if session.start.forecast_date:
- context['stock_date_end'] = session.start.forecast_date
+ if self.start.forecast_date:
+ context['stock_date_end'] = self.start.forecast_date
else:
context['stock_date_end'] = datetime.date.max
action['pyson_context'] = PYSONEncoder().encode(context)
- product = product_obj.browse(product_id)
+ product = Product(product_id)
for code in [Transaction().language, 'en_US']:
- lang_ids = lang_obj.search([
+ langs = Lang.search([
('code', '=', code),
])
- if lang_ids:
+ if langs:
break
- lang = lang_obj.browse(lang_ids[0])
- date = lang_obj.strftime(context['stock_date_end'],
+ lang, = langs
+ date = Lang.strftime(context['stock_date_end'],
lang.code, lang.date)
action['name'] += ' - %s (%s) @ %s' % (product.rec_name,
product.default_uom.rec_name, date)
return action, {}
-ProductByLocation()
+
+class ProductQuantitiesByWarehouse(ModelSQL, ModelView):
+ 'Product Quantities By Warehouse'
+ __name__ = 'stock.product_quantities_warehouse'
+ date = fields.Date('Date')
+ quantity = fields.Function(fields.Float('Quantity'), 'get_quantity')
+
+ @classmethod
+ def __setup__(cls):
+ super(ProductQuantitiesByWarehouse, cls).__setup__()
+ cls._order.insert(0, ('date', 'ASC'))
+
+ @staticmethod
+ def table_query():
+ pool = Pool()
+ Move = pool.get('stock.move')
+ Location = pool.get('stock.location')
+
+ product_id = Transaction().context.get('product')
+ warehouse_id = Transaction().context.get('warehouse', -1)
+ warehouse_clause, warehouse_params = 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)
+
+ @classmethod
+ def get_quantity(cls, lines, name):
+ Product = Pool().get('product.product')
+
+ product_id = Transaction().context.get('product')
+ warehouse_id = Transaction().context.get('warehouse')
+
+ dates = sorted(l.date for l in lines)
+ quantities = {}
+ date_start = None
+ for date in dates:
+ context = {
+ 'stock_date_start': date_start,
+ 'stock_date_end': date,
+ }
+ 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)]
+ date_start = date + datetime.timedelta(1)
+ cumulate = 0
+ for date in dates:
+ cumulate += quantities[date]
+ quantities[date] = cumulate
+
+ return dict((l.id, quantities[l.date]) for l in lines)
+
+
+class ProductQuantitiesByWarehouseStart(ModelView):
+ 'Product Quantities By Warehouse'
+ __name__ = 'stock.product_quantities_warehouse.start'
+ warehouse = fields.Many2One('stock.location', 'Warehouse', domain=[
+ ('type', '=', 'warehouse'),
+ ])
+
+ @staticmethod
+ def default_warehouse():
+ Location = Pool().get('stock.location')
+ warehouses = Location.search([
+ ('type', '=', 'warehouse'),
+ ])
+ if len(warehouses) == 1:
+ return warehouses[0].id
+
+
+class OpenProductQuantitiesByWarehouse(Wizard):
+ 'Product Quantities By Warehouse'
+ __name__ = 'stock.product_quantities_warehouse'
+ start = StateView('stock.product_quantities_warehouse.start',
+ 'stock.product_quantities_warehouse_start_view_form', [
+ Button('Cancel', 'end', 'tryton-cancel'),
+ Button('Open', 'open_', 'tryton-ok', default=True),
+ ])
+ open_ = StateAction('stock.act_product_quantities_warehouse')
+
+ def do_open_(self, action):
+ Date = Pool().get('ir.date')
+ action['pyson_context'] = PYSONEncoder().encode({
+ 'product': Transaction().context['active_id'],
+ 'warehouse': self.start.warehouse.id,
+ })
+ action['pyson_search_value'] = PYSONEncoder().encode([
+ ('date', '>=', Date.today()),
+ ])
+ return action, {}
diff --git a/product.xml b/product.xml
index d73374c..f3b6801 100644
--- a/product.xml
+++ b/product.xml
@@ -43,7 +43,7 @@ this repository contains the full copyright notices and license terms. -->
</record>
<record model="ir.action.act_window" id="act_location_quantity_tree">
- <field name="name">Location Quantity & Cost Value</field>
+ <field name="name">Locations</field>
<field name="res_model">stock.location</field>
<field name="domain">[('parent', '=', False)]</field>
<field name="window_name" eval="True"/>
@@ -54,7 +54,7 @@ this repository contains the full copyright notices and license terms. -->
<field name="act_window" ref="act_location_quantity_tree"/>
</record>
<record model="ir.action.wizard" id="wizard_product_by_location">
- <field name="name">Product by Location</field>
+ <field name="name">Product by Locations</field>
<field name="wiz_name">product.by_location</field>
<field name="model">product.product</field>
</record>
@@ -83,5 +83,86 @@ this repository contains the full copyright notices and license terms. -->
</field>
</record>
+ <record model="ir.ui.view" id="product_quantities_warehouse_view_graph">
+ <field name="model">stock.product_quantities_warehouse</field>
+ <field name="type">graph</field>
+ <field name="arch" type="xml">
+ <![CDATA[
+ <graph string="Product Quantities By Warehouse" type="line"
+ legend="0">
+ <x>
+ <field name="date"/>
+ </x>
+ <y>
+ <field name="quantity" empty="0" interpolation="constant-left" fill="1"/>
+ </y>
+ </graph>
+ ]]>
+ </field>
+ </record>
+
+ <record model="ir.ui.view" id="product_quantities_warehouse_view_list">
+ <field name="model">stock.product_quantities_warehouse</field>
+ <field name="type">tree</field>
+ <field name="arch" type="xml">
+ <![CDATA[
+ <tree string="Product Quantities By Warehouse">
+ <field name="date"/>
+ <field name="quantity"/>
+ </tree>
+ ]]>
+ </field>
+ </record>
+
+ <record model="ir.action.act_window"
+ id="act_product_quantities_warehouse">
+ <field name="name">Product Quantities By Warehouse</field>
+ <field name="res_model">stock.product_quantities_warehouse</field>
+ </record>
+ <record model="ir.action.act_window.view"
+ id="act_product_quantities_warehouse_graph_view">
+ <field name="sequence" eval="10"/>
+ <field name="view" ref="product_quantities_warehouse_view_graph"/>
+ <field name="act_window" ref="act_product_quantities_warehouse"/>
+ </record>
+ <record model="ir.action.act_window.view"
+ id="act_product_quantities_warehouse_list_view">
+ <field name="sequence" eval="20"/>
+ <field name="view" ref="product_quantities_warehouse_view_list"/>
+ <field name="act_window" ref="act_product_quantities_warehouse"/>
+ </record>
+
+ <record model="ir.ui.view" id="product_quantities_warehouse_start_view_form">
+ <field
+ name="model">stock.product_quantities_warehouse.start</field>
+ <field name="type">form</field>
+ <field name="arch" type="xml">
+ <![CDATA[
+ <form string="Product Quantities By Warehouse">
+ <label name="warehouse"/>
+ <field name="warehouse"/>
+ </form>
+ ]]>
+ </field>
+ </record>
+
+ <record model="ir.action.wizard"
+ id="wizard_product_quantities_warehouse">
+ <field name="name">Product Quantities By Warehouse</field>
+ <field name="wiz_name">stock.product_quantities_warehouse</field>
+ <field name="model">product.product</field>
+ </record>
+ <record model="ir.action.keyword"
+ id="act_product_quantities_warehouse_keyword1">
+ <field name="keyword">form_relate</field>
+ <field name="model">product.product,-1</field>
+ <field name="action" ref="wizard_product_quantities_warehouse"/>
+ </record>
+ <record model="ir.action-res.group"
+ id="wizard_product_quantities_warehouse-group_stock">
+ <field name="action" ref="wizard_product_quantities_warehouse"/>
+ <field name="group" ref="group_stock"/>
+ </record>
+
</data>
</tryton>
diff --git a/setup.py b/setup.py
index e616980..249acba 100644
--- a/setup.py
+++ b/setup.py
@@ -4,8 +4,19 @@
from setuptools import setup
import re
+import os
+import ConfigParser
-info = eval(open('__tryton__.py').read())
+
+def read(fname):
+ return open(os.path.join(os.path.dirname(__file__), fname)).read()
+
+config = ConfigParser.ConfigParser()
+config.readfp(open('tryton.cfg'))
+info = dict(config.items('tryton'))
+for key in ('depends', 'extras_depend', 'xml'):
+ if key in info:
+ info[key] = info[key].strip().splitlines()
major_version, minor_version, _ = info.get('version', '0.0.1').split('.', 2)
major_version = int(major_version)
minor_version = int(minor_version)
@@ -23,22 +34,22 @@ tests_require = ['proteus >= %s.%s, < %s.%s' %
setup(name='trytond_stock',
version=info.get('version', '0.0.1'),
- description=info.get('description', ''),
- author=info.get('author', ''),
- author_email=info.get('email', ''),
- url=info.get('website', ''),
+ description='Tryton module for stock and inventory',
+ long_description=read('README'),
+ author='Tryton',
+ url='http://www.tryton.org/',
download_url="http://downloads.tryton.org/" + \
- info.get('version', '0.0.1').rsplit('.', 1)[0] + '/',
+ info.get('version', '0.0.1').rsplit('.', 1)[0] + '/',
package_dir={'trytond.modules.stock': '.'},
packages=[
'trytond.modules.stock',
'trytond.modules.stock.tests',
- ],
+ ],
package_data={
'trytond.modules.stock': info.get('xml', []) \
- + info.get('translation', []) \
- + ['*.odt', 'icons/*.svg'],
- },
+ + ['tryton.cfg', 'locale/*.po', '*.odt', 'icons/*.svg',
+ 'tests/*.rst'],
+ },
classifiers=[
'Development Status :: 5 - Production/Stable',
'Environment :: Plugins',
@@ -60,7 +71,7 @@ setup(name='trytond_stock',
'Programming Language :: Python :: 2.6',
'Programming Language :: Python :: 2.7',
'Topic :: Office/Business',
- ],
+ ],
license='GPL-3',
install_requires=requires,
zip_safe=False,
@@ -71,4 +82,4 @@ setup(name='trytond_stock',
test_suite='tests',
test_loader='trytond.test_loader:Loader',
tests_require=tests_require,
-)
+ )
diff --git a/shipment.py b/shipment.py
index 1aede63..52e63e1 100644
--- a/shipment.py
+++ b/shipment.py
@@ -9,9 +9,22 @@ from trytond.wizard import Wizard, StateTransition, StateView, StateAction, \
from trytond.backend import TableHandler
from trytond.pyson import Eval, Not, Equal, If, Or, And, Bool, In, Get, Id
from trytond.transaction import Transaction
-from trytond.pool import Pool
+from trytond.pool import Pool, PoolMeta
from trytond.tools import reduce_ids
+__all__ = ['ShipmentIn', 'ShipmentInReturn',
+ 'ShipmentOut', 'ShipmentOutReturn',
+ 'AssignShipmentOutAssignFailed', 'AssignShipmentOut',
+ 'ShipmentInternal',
+ 'Address',
+ 'AssignShipmentInternalAssignFailed', 'AssignShipmentInternal',
+ 'AssignShipmentInReturnAssignFailed', 'AssignShipmentInReturn',
+ 'CreateShipmentOutReturn',
+ 'DeliveryNote', 'PickingList',
+ 'SupplierRestockingList', 'CustomerReturnRestockingList',
+ 'InteralShipmentReport']
+__metaclass__ = PoolMeta
+
STATES = {
'readonly': "state in ('cancel', 'done')",
}
@@ -19,10 +32,8 @@ STATES = {
class ShipmentIn(Workflow, ModelSQL, ModelView):
"Supplier Shipment"
- _name = 'stock.shipment.in'
- _description = __doc__
+ __name__ = 'stock.shipment.in'
_rec_name = 'code'
-
effective_date = fields.Date('Effective Date', readonly=True)
planned_date = fields.Date('Planned Date', states={
'readonly': Not(Equal(Eval('state'), 'draft')),
@@ -48,7 +59,7 @@ class ShipmentIn(Workflow, ModelSQL, ModelView):
depends=['state', 'incoming_moves', 'supplier'])
supplier_location = fields.Function(fields.Many2One('stock.location',
'Supplier Location', on_change_with=['supplier']),
- 'get_supplier_location')
+ 'on_change_with_supplier_location')
contact_address = fields.Many2One('party.address', 'Contact Address',
states={
'readonly': Not(Equal(Eval('state'), 'draft')),
@@ -62,10 +73,10 @@ class ShipmentIn(Workflow, ModelSQL, ModelView):
}, depends=['state', 'incoming_moves'])
warehouse_input = fields.Function(fields.Many2One('stock.location',
'Warehouse Input', on_change_with=['warehouse']),
- 'get_warehouse_input')
+ 'on_change_with_warehouse_input')
warehouse_storage = fields.Function(fields.Many2One('stock.location',
'Warehouse Storage', on_change_with=['warehouse']),
- 'get_warehouse_storage')
+ 'on_change_with_warehouse_storage')
incoming_moves = fields.Function(fields.One2Many('stock.move', None,
'Incoming Moves',
add_remove=[
@@ -111,10 +122,11 @@ class ShipmentIn(Workflow, ModelSQL, ModelView):
('received', 'Received'),
], 'State', readonly=True)
- def __init__(self):
- super(ShipmentIn, self).__init__()
- self._order[0] = ('id', 'DESC')
- self._error_messages.update({
+ @classmethod
+ def __setup__(cls):
+ super(ShipmentIn, cls).__setup__()
+ cls._order[0] = ('id', 'DESC')
+ cls._error_messages.update({
'incoming_move_input_dest': 'Incoming Moves must have ' \
'the warehouse input location as destination location!',
'inventory_move_input_source': 'Inventory Moves must ' \
@@ -122,14 +134,14 @@ class ShipmentIn(Workflow, ModelSQL, ModelView):
'delete_cancel': 'Supplier Shipment "%s" must be cancelled '\
'before deletion!',
})
- self._transitions |= set((
+ cls._transitions |= set((
('draft', 'received'),
('received', 'done'),
('draft', 'cancel'),
('received', 'cancel'),
('cancel', 'draft'),
))
- self._buttons.update({
+ cls._buttons.update({
'cancel': {
'invisible': Eval('state').in_(['cancel', 'done']),
},
@@ -144,7 +156,8 @@ class ShipmentIn(Workflow, ModelSQL, ModelView):
},
})
- def init(self, module_name):
+ @classmethod
+ def __register__(cls, module_name):
cursor = Transaction().cursor
# Migration from 1.2: packing renamed into shipment
cursor.execute("UPDATE ir_model_data "\
@@ -164,8 +177,8 @@ class ShipmentIn(Workflow, ModelSQL, ModelView):
old_table = 'stock_packing_in'
if TableHandler.table_exist(cursor, old_table):
- TableHandler.table_rename(cursor, old_table, self._table)
- table = TableHandler(cursor, self, module_name)
+ TableHandler.table_rename(cursor, old_table, cls._table)
+ table = TableHandler(cursor, cls, module_name)
for field in ('create_uid', 'write_uid', 'contact_address',
'warehouse', 'supplier'):
table.drop_fk(field, table=old_table)
@@ -175,190 +188,163 @@ class ShipmentIn(Workflow, ModelSQL, ModelView):
# Migration from 2.0:
created_company = table.column_exist('company')
- super(ShipmentIn, self).init(module_name)
+ super(ShipmentIn, cls).__register__(module_name)
# Migration from 2.0:
- move_obj = Pool().get('stock.move')
+ Move = Pool().get('stock.move')
if (not created_company
- and TableHandler.table_exist(cursor, move_obj._table)):
+ 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 shipment.id = move.shipment_in '
'GROUP BY shipment.id '
'ORDER BY MAX(move.company)'
- % (self._table, move_obj._table))
+ % (cls._table, Move._table))
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 "' + self._table + '" '
+ cursor.execute('UPDATE "' + cls._table + '" '
'SET company = %s WHERE ' + red_sql,
[company_id] + red_ids)
table.not_null_action('company', action='add')
# Add index on create_date
- table = TableHandler(cursor, self, module_name)
+ table = TableHandler(cursor, cls, module_name)
table.index_action('create_date', action='add')
- def default_state(self):
+ @staticmethod
+ def default_state():
return 'draft'
- def default_warehouse(self):
- location_obj = Pool().get('stock.location')
- location_ids = location_obj.search(self.warehouse.domain)
- if len(location_ids) == 1:
- return location_ids[0]
+ @classmethod
+ def default_warehouse(cls):
+ Location = Pool().get('stock.location')
+ locations = Location.search(cls.warehouse.domain)
+ if len(locations) == 1:
+ return locations[0].id
- def default_company(self):
+ @staticmethod
+ def default_company():
return Transaction().context.get('company')
- def on_change_supplier(self, values):
- if not values.get('supplier'):
+ def on_change_supplier(self):
+ if not self.supplier:
return {'contact_address': None}
- party_obj = Pool().get("party.party")
- address_id = party_obj.address_get(values['supplier'])
- return {'contact_address': address_id}
+ address = self.supplier.address_get()
+ return {'contact_address': address.id}
- def on_change_with_supplier_location(self, values):
- pool = Pool()
- party_obj = pool.get('party.party')
- if values.get('supplier'):
- supplier = party_obj.browse(values['supplier'])
- return supplier.supplier_location.id
-
- def get_supplier_location(self, ids, name):
- locations = {}
- for shipment in self.browse(ids):
- locations[shipment.id] = shipment.supplier.supplier_location.id
- return locations
-
- def default_warehouse_input(self):
- warehouse = self.default_warehouse()
+ def on_change_with_supplier_location(self, name=None):
+ if self.supplier:
+ return self.supplier.supplier_location.id
+
+ @classmethod
+ def default_warehouse_input(cls):
+ warehouse = cls.default_warehouse()
if warehouse:
- value = self.on_change_with_warehouse_input({
- 'warehouse': warehouse,
- })
- return value
+ return cls(warehouse=warehouse).on_change_with_warehouse_input()
- def on_change_with_warehouse_input(self, values):
- pool = Pool()
- location_obj = pool.get('stock.location')
- if values.get('warehouse'):
- warehouse = location_obj.browse(values['warehouse'])
- return warehouse.input_location.id
-
- def get_warehouse_input(self, ids, name):
- inputs = {}
- for shipment in self.browse(ids):
- inputs[shipment.id] = shipment.warehouse.input_location.id
- return inputs
-
- def default_warehouse_storage(self):
- warehouse = self.default_warehouse()
+ def on_change_with_warehouse_input(self, name=None):
+ if self.warehouse:
+ return self.warehouse.input_location.id
+
+ @classmethod
+ def default_warehouse_storage(cls):
+ warehouse = cls.default_warehouse()
if warehouse:
- value = self.on_change_with_warehouse_storage({
- 'warehouse': warehouse,
- })
- return value
+ return cls(warehouse=warehouse).on_change_with_warehouse_storage()
- def on_change_with_warehouse_storage(self, values):
- pool = Pool()
- location_obj = pool.get('stock.location')
- if values.get('warehouse'):
- warehouse = location_obj.browse(values['warehouse'])
- return warehouse.storage_location.id
-
- def get_warehouse_storage(self, ids, name):
- storages = {}
- for shipment in self.browse(ids):
- storages[shipment.id] = shipment.warehouse.storage_location.id
- return storages
-
- def get_incoming_moves(self, ids, name):
- res = {}
- for shipment in self.browse(ids):
- res[shipment.id] = []
- for move in shipment.moves:
- if move.to_location.id == shipment.warehouse.input_location.id:
- res[shipment.id].append(move.id)
- return res
+ def on_change_with_warehouse_storage(self, name=None):
+ if self.warehouse:
+ return self.warehouse.storage_location.id
+
+ def get_incoming_moves(self, name):
+ moves = []
+ for move in self.moves:
+ if move.to_location.id == self.warehouse.input_location.id:
+ moves.append(move.id)
+ return moves
- def set_incoming_moves(self, ids, name, value):
+ @classmethod
+ def set_incoming_moves(cls, shipments, name, value):
if not value:
return
- self.write(ids, {
- 'moves': value,
- })
+ cls.write(shipments, {
+ 'moves': value,
+ })
- def get_inventory_moves(self, ids, name):
- res = {}
- for shipment in self.browse(ids):
- res[shipment.id] = []
- for move in shipment.moves:
- if (move.from_location.id ==
- shipment.warehouse.input_location.id):
- res[shipment.id].append(move.id)
- return res
+ def get_inventory_moves(self, name):
+ moves = []
+ for move in self.moves:
+ if (move.from_location.id ==
+ self.warehouse.input_location.id):
+ moves.append(move.id)
+ return moves
- def set_inventory_moves(self, ids, name, value):
+ @classmethod
+ def set_inventory_moves(cls, shipments, name, value):
if not value:
return
- self.write(ids, {
- 'moves': value,
- })
+ cls.write(shipments, {
+ 'moves': value,
+ })
- def _get_move_planned_date(self, shipment):
+ @property
+ def _move_planned_date(self):
'''
Return the planned date for incoming moves and inventory_moves
'''
- return shipment.planned_date, shipment.planned_date
+ return self.planned_date, self.planned_date
- def _set_move_planned_date(self, shipment_ids):
+ @classmethod
+ def _set_move_planned_date(cls, shipments):
'''
Set planned date of moves for the shipments
'''
- move_obj = Pool().get('stock.move')
- if isinstance(shipment_ids, (int, long)):
- shipment_ids = [shipment_ids]
- for shipment in self.browse(shipment_ids):
- dates = self._get_move_planned_date(shipment)
+ Move = Pool().get('stock.move')
+ for shipment in shipments:
+ dates = shipment._move_planned_date
incoming_date, inventory_date = dates
- move_obj.write([x.id for x in shipment.incoming_moves
- if x.state not in ('assigned', 'done', 'cancel')], {
+ Move.write([m for m in shipment.incoming_moves
+ if m.state not in ('assigned', 'done', 'cancel')], {
'planned_date': incoming_date,
})
- move_obj.write([x.id for x in shipment.inventory_moves
- if x.state not in ('assigned', 'done', 'cancel')], {
+ Move.write([m for m in shipment.inventory_moves
+ if m.state not in ('assigned', 'done', 'cancel')], {
'planned_date': inventory_date,
})
- def create(self, values):
- sequence_obj = Pool().get('ir.sequence')
- config_obj = Pool().get('stock.configuration')
+ @classmethod
+ def create(cls, values):
+ pool = Pool()
+ Sequence = pool.get('ir.sequence')
+ Config = pool.get('stock.configuration')
values = values.copy()
- config = config_obj.browse(1)
- values['code'] = sequence_obj.get_id(config.shipment_in_sequence.id)
- shipment_id = super(ShipmentIn, self).create(values)
- self._set_move_planned_date(shipment_id)
- return shipment_id
-
- def write(self, ids, values):
- result = super(ShipmentIn, self).write(ids, values)
- self._set_move_planned_date(ids)
- return result
-
- def copy(self, ids, default=None):
+ config = Config(1)
+ values['code'] = Sequence.get_id(config.shipment_in_sequence)
+ shipment = super(ShipmentIn, cls).create(values)
+ cls._set_move_planned_date([shipment])
+ return shipment
+
+ @classmethod
+ def write(cls, shipments, values):
+ super(ShipmentIn, cls).write(shipments, values)
+ cls._set_move_planned_date(shipments)
+
+ @classmethod
+ def copy(cls, shipments, default=None):
if default is None:
default = {}
default = default.copy()
default['inventory_moves'] = None
default['incoming_moves'] = None
- return super(ShipmentIn, self).copy(ids, default=default)
+ return super(ShipmentIn, cls).copy(shipments, default=default)
- def _get_inventory_moves(self, incoming_move):
+ @classmethod
+ def _get_inventory_moves(cls, incoming_move):
res = {}
if incoming_move.quantity <= 0.0:
return None
@@ -375,82 +361,82 @@ class ShipmentIn(Workflow, ModelSQL, ModelView):
res['company'] = incoming_move.company.id
return res
- def create_inventory_moves(self, shipments):
+ @classmethod
+ def create_inventory_moves(cls, shipments):
for shipment in shipments:
+ inventory_moves = []
for incoming_move in shipment.incoming_moves:
- vals = self._get_inventory_moves(incoming_move)
+ vals = cls._get_inventory_moves(incoming_move)
if vals:
- self.write(shipment.id, {
- 'inventory_moves': [('create', vals)],
- })
+ inventory_moves.append(('create', vals))
+ if inventory_moves:
+ cls.write([shipment], {
+ 'inventory_moves': inventory_moves,
+ })
- def delete(self, ids):
- if isinstance(ids, (int, long)):
- ids = [ids]
+ @classmethod
+ def delete(cls, shipments):
# Cancel before delete
- self.cancel(ids)
- for shipment in self.browse(ids):
+ cls.cancel(shipments)
+ for shipment in shipments:
if shipment.state != 'cancel':
- self.raise_user_error('delete_cancel', shipment.rec_name)
- return super(ShipmentIn, self).delete(ids)
+ cls.raise_user_error('delete_cancel', shipment.rec_name)
+ super(ShipmentIn, cls).delete(shipments)
+ @classmethod
@ModelView.button
@Workflow.transition('cancel')
- def cancel(self, ids):
- move_obj = Pool().get('stock.move')
- shipments = self.browse(ids)
- move_obj.write([m.id for s in shipments
+ def cancel(cls, shipments):
+ Move = Pool().get('stock.move')
+ Move.write([m for s in shipments
for m in s.incoming_moves + s.inventory_moves
if m.state not in ('cancel', 'done')], {
'state': 'cancel',
})
+ @classmethod
@ModelView.button
@Workflow.transition('draft')
- def draft(self, ids):
- move_obj = Pool().get('stock.move')
- shipments = self.browse(ids)
- move_obj.write([m.id for s in shipments for m in s.incoming_moves
+ def draft(cls, shipments):
+ Move = Pool().get('stock.move')
+ Move.write([m for s in shipments for m in s.incoming_moves
if m.state not in ('draft', 'done')], {
'state': 'draft',
})
- move_obj.delete([m.id for s in shipments for m in s.inventory_moves
+ Move.delete([m for s in shipments for m in s.inventory_moves
if m.state in ('draft', 'cancel')])
+ @classmethod
@ModelView.button
@Workflow.transition('received')
- def receive(self, ids):
- move_obj = Pool().get('stock.move')
- shipments = self.browse(ids)
- move_obj.write([m.id for s in shipments for m in s.incoming_moves
+ def receive(cls, shipments):
+ Move = Pool().get('stock.move')
+ Move.write([m for s in shipments for m in s.incoming_moves
if m.state not in ('done', 'cancel')], {
'state': 'done',
})
- self.create_inventory_moves(shipments)
+ cls.create_inventory_moves(shipments)
+ @classmethod
@ModelView.button
@Workflow.transition('done')
- def done(self, ids):
- move_obj = Pool().get('stock.move')
- date_obj = Pool().get('ir.date')
- shipments = self.browse(ids)
- move_obj.write([m.id for s in shipments for m in s.inventory_moves
+ def done(cls, shipments):
+ pool = Pool()
+ Move = pool.get('stock.move')
+ Date = pool.get('ir.date')
+ Move.write([m for s in shipments for m in s.inventory_moves
if m.state not in ('done', 'cancel')], {
'state': 'done',
})
- self.write(ids, {
- 'effective_date': date_obj.today(),
+ cls.write(shipments, {
+ 'effective_date': Date.today(),
})
-ShipmentIn()
-
class ShipmentInReturn(Workflow, ModelSQL, ModelView):
"Supplier Return Shipment"
- _name = 'stock.shipment.in.return'
- _description = __doc__
+ __name__ = 'stock.shipment.in.return'
_rec_name = 'code'
-
effective_date = fields.Date('Effective Date', readonly=True)
planned_date = fields.Date('Planned Date',
states={
@@ -502,14 +488,15 @@ class ShipmentInReturn(Workflow, ModelSQL, ModelView):
('done', 'Done'),
], 'State', readonly=True)
- def __init__(self):
- super(ShipmentInReturn, self).__init__()
- self._order[0] = ('id', 'DESC')
- self._error_messages.update({
+ @classmethod
+ def __setup__(cls):
+ super(ShipmentInReturn, cls).__setup__()
+ cls._order[0] = ('id', 'DESC')
+ cls._error_messages.update({
'delete_cancel': 'Supplier Return Shipment "%s" must be '\
'cancelled before deletion!',
})
- self._transitions |= set((
+ cls._transitions |= set((
('draft', 'waiting'),
('waiting', 'assigned'),
('waiting', 'draft'),
@@ -520,7 +507,7 @@ class ShipmentInReturn(Workflow, ModelSQL, ModelView):
('assigned', 'cancel'),
('cancel', 'draft'),
))
- self._buttons.update({
+ cls._buttons.update({
'cancel': {
'invisible': Eval('state').in_(['cancel', 'done']),
},
@@ -537,17 +524,23 @@ class ShipmentInReturn(Workflow, ModelSQL, ModelView):
'done': {
'invisible': Eval('state') != 'assigned',
},
+ 'assign_wizard': {
+ 'invisible': Eval('state') != 'waiting',
+ 'readonly': ~Eval('groups', []).contains(
+ Id('stock', 'group_stock')),
+ },
'assign_try': {},
'assign_force': {},
})
- def init(self, module_name):
+ @classmethod
+ def __register__(cls, module_name):
cursor = Transaction().cursor
# Migration from 1.2: packing renamed into shipment
old_table = 'stock_packing_in_return'
if TableHandler.table_exist(cursor, old_table):
- TableHandler.table_rename(cursor, old_table, self._table)
- table = TableHandler(cursor, self, module_name)
+ TableHandler.table_rename(cursor, old_table, cls._table)
+ table = TableHandler(cursor, cls, module_name)
for field in ('create_uid', 'write_uid', 'from_location',
'to_location'):
table.drop_fk(field, table=old_table)
@@ -557,169 +550,177 @@ class ShipmentInReturn(Workflow, ModelSQL, ModelView):
# Migration from 2.0:
created_company = table.column_exist('company')
- super(ShipmentInReturn, self).init(module_name)
+ super(ShipmentInReturn, cls).__register__(module_name)
# Migration from 2.0:
- move_obj = Pool().get('stock.move')
+ Move = Pool().get('stock.move')
if (not created_company
- and TableHandler.table_exist(cursor, move_obj._table)):
+ 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 shipment.id = move.shipment_in_return '
'GROUP BY shipment.id '
'ORDER BY MAX(move.company)'
- % (self._table, move_obj._table))
+ % (cls._table, Move._table))
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 "' + self._table + '" '
+ cursor.execute('UPDATE "' + cls._table + '" '
'SET company = %s WHERE ' + red_sql,
[company_id] + red_ids)
table.not_null_action('company', action='add')
# Add index on create_date
- table = TableHandler(cursor, self, module_name)
+ table = TableHandler(cursor, cls, module_name)
table.index_action('create_date', action='add')
- def default_state(self):
+ @staticmethod
+ def default_state():
return 'draft'
- def default_company(self):
+ @staticmethod
+ def default_company():
return Transaction().context.get('company')
- def _get_move_planned_date(self, shipment):
+ @property
+ def _move_planned_date(self):
'''
Return the planned date for the moves
'''
- return shipment.planned_date
+ return self.planned_date
- def _set_move_planned_date(self, shipment_ids):
+ @classmethod
+ def _set_move_planned_date(cls, shipments):
'''
Set planned date of moves for the shipments
'''
- move_obj = Pool().get('stock.move')
- if isinstance(shipment_ids, (int, long)):
- shipment_ids = [shipment_ids]
- for shipment in self.browse(shipment_ids):
- date = self._get_move_planned_date(shipment)
- move_obj.write([x.id for x in shipment.moves
- if x.state not in ('assigned', 'done', 'cancel')], {
- 'planned_date': date,
+ Move = Pool().get('stock.move')
+ for shipment in shipments:
+ Move.write([m for m in shipment.moves
+ if m.state not in ('assigned', 'done', 'cancel')], {
+ 'planned_date': shipment._move_planned_date,
})
- def create(self, values):
- sequence_obj = Pool().get('ir.sequence')
- config_obj = Pool().get('stock.configuration')
+ @classmethod
+ def create(cls, values):
+ pool = Pool()
+ Sequence = pool.get('ir.sequence')
+ Config = pool.get('stock.configuration')
values = values.copy()
- config = config_obj.browse(1)
- values['code'] = sequence_obj.get_id(
- config.shipment_in_return_sequence.id)
- shipment_id = super(ShipmentInReturn, self).create(values)
- self._set_move_planned_date(shipment_id)
- return shipment_id
-
- def write(self, ids, values):
- result = super(ShipmentInReturn, self).write(ids, values)
- self._set_move_planned_date(ids)
- return result
-
- def delete(self, ids):
- if isinstance(ids, (int, long)):
- ids = [ids]
+ config = Config(1)
+ values['code'] = Sequence.get_id(
+ config.shipment_in_return_sequence.id)
+ shipment = super(ShipmentInReturn, cls).create(values)
+ cls._set_move_planned_date([shipment])
+ return shipment
+
+ @classmethod
+ def write(cls, shipments, values):
+ super(ShipmentInReturn, cls).write(shipments, values)
+ cls._set_move_planned_date(shipments)
+
+ @classmethod
+ def delete(cls, shipments):
# Cancel before delete
- self.cancel(ids)
- for shipment in self.browse(ids):
+ cls.cancel(shipments)
+ for shipment in shipments:
if shipment.state != 'cancel':
- self.raise_user_error('delete_cancel', shipment.rec_name)
- return super(ShipmentInReturn, self).delete(ids)
+ cls.raise_user_error('delete_cancel', shipment.rec_name)
+ super(ShipmentInReturn, cls).delete(shipments)
+ @classmethod
@ModelView.button
@Workflow.transition('draft')
- def draft(self, ids):
- move_obj = Pool().get('stock.move')
- shipments = self.browse(ids)
- move_obj.write([m.id for s in shipments for m in s.moves
+ def draft(cls, shipments):
+ Move = Pool().get('stock.move')
+ Move.write([m for s in shipments for m in s.moves
if m.state not in ('draft', 'done')], {
'state': 'draft',
})
+ @classmethod
@ModelView.button
@Workflow.transition('waiting')
- def wait(self, ids):
- move_obj = Pool().get('stock.move')
- shipments = self.browse(ids)
+ def wait(cls, shipments):
+ Move = Pool().get('stock.move')
for shipment in shipments:
- move_obj.write([m.id for m in shipment.moves
+ Move.write([m for m in shipment.moves
if m.state not in ('cancel', 'draft', 'done')], {
'state': 'draft',
- 'planned_date': shipment.planned_date,
+ 'planned_date': shipment._move_planned_date,
})
+ @classmethod
@Workflow.transition('assigned')
- def assign(self, ids):
- move_obj = Pool().get('stock.move')
- shipments = self.browse(ids)
- move_obj.write([m.id for s in shipments for m in s.moves
+ def assign(cls, shipments):
+ Move = Pool().get('stock.move')
+ Move.write([m for s in shipments for m in s.moves
if m.state not in ('assigned', 'cancel', 'done')], {
'state': 'assigned',
})
+ @classmethod
@ModelView.button
@Workflow.transition('done')
- def done(self, ids):
- move_obj = Pool().get('stock.move')
- date_obj = Pool().get('ir.date')
+ def done(cls, shipments):
+ pool = Pool()
+ Move = pool.get('stock.move')
+ Date = pool.get('ir.date')
- shipments = self.browse(ids)
- move_obj.write([m.id for s in shipments for m in s.moves
+ Move.write([m for s in shipments for m in s.moves
if m.state not in ('done', 'cancel')], {
'state': 'done',
})
- self.write(ids, {
- 'effective_date': date_obj.today(),
+ cls.write(shipments, {
+ 'effective_date': Date.today(),
})
+ @classmethod
@ModelView.button
@Workflow.transition('cancel')
- def cancel(self, ids):
- move_obj = Pool().get('stock.move')
- shipments = self.browse(ids)
- move_obj.write([m.id for s in shipments for m in s.moves
+ def cancel(cls, shipments):
+ Move = Pool().get('stock.move')
+ Move.write([m for s in shipments for m in s.moves
if m.state not in ('cancel', 'done')], {
'state': 'cancel',
})
+ @classmethod
+ @ModelView.button_action('stock.wizard_shipment_in_return_assign')
+ def assign_wizard(cls, shipments):
+ pass
+
+ @classmethod
@ModelView.button
- def assign_try(self, ids):
+ def assign_try(cls, shipments):
pool = Pool()
- product_obj = pool.get('product.product')
- uom_obj = pool.get('product.uom')
- date_obj = pool.get('ir.date')
- move_obj = pool.get('stock.move')
+ Product = pool.get('product.product')
+ Uom = pool.get('product.uom')
+ Date = pool.get('ir.date')
+ Move = pool.get('stock.move')
- Transaction().cursor.lock(move_obj._table)
+ Transaction().cursor.lock(Move._table)
- shipments = self.browse(ids)
moves = [m for s in shipments for m in s.moves]
location_ids = [m.from_location.id for m in moves]
with Transaction().set_context(
- stock_date_end=date_obj.today(),
+ stock_date_end=Date.today(),
stock_assign=True):
- pbl = product_obj.products_by_location(location_ids=location_ids,
- product_ids=[m.product.id for m in moves])
+ pbl = Product.products_by_location(location_ids=location_ids,
+ product_ids=[m.product.id for m in moves])
for move in moves:
if move.state != 'draft':
continue
if (move.from_location.id, move.product.id) in pbl:
qty_default_uom = pbl[(move.from_location.id, move.product.id)]
- qty = uom_obj.compute_qty(move.product.default_uom,
- qty_default_uom, move.uom, round=False)
+ qty = Uom.compute_qty(move.product.default_uom,
+ qty_default_uom, move.uom, round=False)
if qty < move.quantity:
return False
pbl[(move.from_location.id, move.product.id)] = (
@@ -727,22 +728,19 @@ class ShipmentInReturn(Workflow, ModelSQL, ModelView):
- qty_default_uom)
else:
return False
- self.assign(ids)
+ cls.assign(shipments)
return True
+ @classmethod
@ModelView.button
- def assign_force(self, ids):
- self.assign(ids)
-
-ShipmentInReturn()
+ def assign_force(cls, shipments):
+ cls.assign(shipments)
class ShipmentOut(Workflow, ModelSQL, ModelView):
"Customer Shipment"
- _name = 'stock.shipment.out'
- _description = __doc__
+ __name__ = 'stock.shipment.out'
_rec_name = 'code'
-
effective_date = fields.Date('Effective Date', readonly=True)
planned_date = fields.Date('Planned Date',
states={
@@ -765,7 +763,7 @@ class ShipmentOut(Workflow, ModelSQL, ModelView):
depends=['state', 'outgoing_moves'])
customer_location = fields.Function(fields.Many2One('stock.location',
'Customer Location', on_change_with=['customer']),
- 'get_customer_location')
+ 'on_change_with_customer_location')
delivery_address = fields.Many2One('party.address',
'Delivery Address', required=True,
states={
@@ -784,10 +782,10 @@ class ShipmentOut(Workflow, ModelSQL, ModelView):
depends=['state', 'outgoing_moves'])
warehouse_storage = fields.Function(fields.Many2One('stock.location',
'Warehouse Storage', on_change_with=['warehouse']),
- 'get_warehouse_storage')
+ 'on_change_with_warehouse_storage')
warehouse_output = fields.Function(fields.Many2One('stock.location',
'Warehouse Output', on_change_with=['warehouse']),
- 'get_warehouse_output')
+ 'on_change_with_warehouse_output')
outgoing_moves = fields.Function(fields.One2Many('stock.move', None,
'Outgoing Moves',
domain=[
@@ -830,14 +828,15 @@ class ShipmentOut(Workflow, ModelSQL, ModelView):
('waiting', 'Waiting'),
], 'State', readonly=True)
- def __init__(self):
- super(ShipmentOut, self).__init__()
- self._order[0] = ('id', 'DESC')
- self._error_messages.update({
+ @classmethod
+ def __setup__(cls):
+ super(ShipmentOut, cls).__setup__()
+ cls._order[0] = ('id', 'DESC')
+ cls._error_messages.update({
'delete_cancel': 'Customer Shipment "%s" must be cancelled '\
'before deletion!',
})
- self._transitions |= set((
+ cls._transitions |= set((
('draft', 'waiting'),
('waiting', 'assigned'),
('assigned', 'packed'),
@@ -851,7 +850,7 @@ class ShipmentOut(Workflow, ModelSQL, ModelView):
('packed', 'cancel'),
('cancel', 'draft'),
))
- self._buttons.update({
+ cls._buttons.update({
'cancel': {
'invisible': Eval('state').in_(['cancel', 'done']),
},
@@ -875,18 +874,24 @@ class ShipmentOut(Workflow, ModelSQL, ModelView):
'done': {
'invisible': Eval('state') != 'packed',
},
+ 'assign_wizard': {
+ 'invisible': Eval('state') != 'waiting',
+ 'readonly': ~Eval('groups', []).contains(
+ Id('stock', 'group_stock')),
+ },
'assign_try': {},
'assign_force': {},
})
- def init(self, module_name):
+ @classmethod
+ def __register__(cls, module_name):
cursor = Transaction().cursor
# Migration from 1.2: packing renamed into shipment
old_table = 'stock_packing_out'
if TableHandler.table_exist(cursor, old_table):
- TableHandler.table_rename(cursor, old_table, self._table)
+ TableHandler.table_rename(cursor, old_table, cls._table)
- table = TableHandler(cursor, self, module_name)
+ table = TableHandler(cursor, cls, module_name)
for field in ('create_uid', 'write_uid', 'delivery_address',
'warehouse', 'customer'):
table.drop_fk(field, table=old_table)
@@ -896,181 +901,144 @@ class ShipmentOut(Workflow, ModelSQL, ModelView):
# Migration from 2.0:
created_company = table.column_exist('company')
- super(ShipmentOut, self).init(module_name)
+ super(ShipmentOut, cls).__register__(module_name)
# Migration from 2.0:
- move_obj = Pool().get('stock.move')
+ Move = Pool().get('stock.move')
if (not created_company
- and TableHandler.table_exist(cursor, move_obj._table)):
- move_obj = Pool().get('stock.move')
+ 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 shipment.id = move.shipment_out '
'GROUP BY shipment.id '
'ORDER BY MAX(move.company)'
- % (self._table, move_obj._table))
+ % (cls._table, Move._table))
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 "' + self._table + '" '
+ cursor.execute('UPDATE "' + cls._table + '" '
'SET company = %s WHERE ' + red_sql,
[company_id] + red_ids)
table.not_null_action('company', action='add')
# Migration from 1.0 customer_location is no more used
- table = TableHandler(cursor, self, module_name)
+ table = TableHandler(cursor, cls, module_name)
table.drop_column('customer_location', exception=True)
# Add index on create_date
table.index_action('create_date', action='add')
- def default_state(self):
+ @staticmethod
+ def default_state():
return 'draft'
- def default_warehouse(self):
- location_obj = Pool().get('stock.location')
- location_ids = location_obj.search(self.warehouse.domain)
- if len(location_ids) == 1:
- return location_ids[0]
+ @classmethod
+ def default_warehouse(cls):
+ Location = Pool().get('stock.location')
+ locations = Location.search(cls.warehouse.domain)
+ if len(locations) == 1:
+ return locations[0].id
- def default_company(self):
+ @staticmethod
+ def default_company():
return Transaction().context.get('company')
- def on_change_customer(self, values):
- if not values.get('customer'):
+ def on_change_customer(self):
+ if not self.customer:
return {'delivery_address': None}
- party_obj = Pool().get("party.party")
- address_id = party_obj.address_get(values['customer'], type='delivery')
- return {'delivery_address': address_id}
+ address = self.customer.address_get(type='delivery')
+ return {'delivery_address': address.id}
- def on_change_with_customer_location(self, values):
- pool = Pool()
- party_obj = pool.get('party.party')
- if values.get('customer'):
- customer = party_obj.browse(values['customer'])
- return customer.customer_location.id
-
- def get_customer_location(self, ids, name):
- locations = {}
- for shipment in self.browse(ids):
- locations[shipment.id] = shipment.customer.customer_location.id
- return locations
-
- def default_warehouse_storage(self):
- warehouse = self.default_warehouse()
+ def on_change_with_customer_location(self, name=None):
+ if self.customer:
+ return self.customer.customer_location.id
+
+ @classmethod
+ def default_warehouse_storage(cls):
+ warehouse = cls.default_warehouse()
if warehouse:
- value = self.on_change_with_warehouse_storage({
- 'warehouse': warehouse,
- })
- return value
+ return cls(warehouse=warehouse).on_change_with_warehouse_storage()
- def on_change_with_warehouse_storage(self, values):
- pool = Pool()
- location_obj = pool.get('stock.location')
- if values.get('warehouse'):
- warehouse = location_obj.browse(values['warehouse'])
- return warehouse.storage_location.id
-
- def get_warehouse_storage(self, ids, name):
- storages = {}
- for shipment in self.browse(ids):
- storages[shipment.id] = shipment.warehouse.storage_location.id
- return storages
-
- def default_warehouse_output(self):
- warehouse = self.default_warehouse()
+ def on_change_with_warehouse_storage(self, name=None):
+ if self.warehouse:
+ return self.warehouse.storage_location.id
+
+ @classmethod
+ def default_warehouse_output(cls):
+ warehouse = cls.default_warehouse()
if warehouse:
- value = self.on_change_with_warehouse_output({
- 'warehouse': warehouse,
- })
- return value
+ return cls(warehouse=warehouse).on_change_with_warehouse_output()
- def on_change_with_warehouse_output(self, values):
- pool = Pool()
- location_obj = pool.get('stock.location')
- if values.get('warehouse'):
- warehouse = location_obj.browse(values['warehouse'])
- return warehouse.output_location.id
-
- def get_warehouse_output(self, ids, name):
- outputs = {}
- for shipment in self.browse(ids):
- outputs[shipment.id] = shipment.warehouse.output_location.id
- return outputs
-
- def get_outgoing_moves(self, ids, name):
- res = {}
- for shipment in self.browse(ids):
- res[shipment.id] = []
- for move in shipment.moves:
- if move.from_location.id == \
- shipment.warehouse.output_location.id:
- res[shipment.id].append(move.id)
- return res
+ def on_change_with_warehouse_output(self, name=None):
+ if self.warehouse:
+ return self.warehouse.output_location.id
- def set_outgoing_moves(self, ids, name, value):
+ def get_outgoing_moves(self, name):
+ moves = []
+ for move in self.moves:
+ if move.from_location.id == self.warehouse.output_location.id:
+ moves.append(move.id)
+ return moves
+
+ @classmethod
+ def set_outgoing_moves(cls, shipments, name, value):
if not value:
return
- self.write(ids, {
- 'moves': value,
- })
+ cls.write(shipments, {
+ 'moves': value,
+ })
- def get_inventory_moves(self, ids, name):
- res = {}
- for shipment in self.browse(ids):
- res[shipment.id] = []
- for move in shipment.moves:
- if move.to_location.id == \
- shipment.warehouse.output_location.id:
- res[shipment.id].append(move.id)
- return res
+ def get_inventory_moves(self, name):
+ moves = []
+ for move in self.moves:
+ if move.to_location.id == self.warehouse.output_location.id:
+ moves.append(move.id)
+ return moves
- def set_inventory_moves(self, ids, name, value):
+ @classmethod
+ def set_inventory_moves(cls, shipments, name, value):
if not value:
return
- self.write(ids, {
- 'moves': value,
- })
+ cls.write(shipments, {
+ 'moves': value,
+ })
+ @classmethod
@ModelView.button
@Workflow.transition('draft')
- def draft(self, ids):
- move_obj = Pool().get('stock.move')
- shipments = self.browse(ids)
- move_obj.write([m.id for s in shipments
+ def draft(cls, shipments):
+ Move = Pool().get('stock.move')
+ Move.write([m for s in shipments
for m in s.inventory_moves + s.outgoing_moves
if m.state not in ('draft', 'done')], {
'state': 'draft',
})
+ @classmethod
@ModelView.button
@Workflow.transition('waiting')
- def wait(self, ids):
+ def wait(cls, shipments):
"""
Complete inventory moves to match the products and quantities
that are in the outgoing moves.
"""
- move_obj = Pool().get('stock.move')
+ Move = Pool().get('stock.move')
- shipments = self.browse(ids)
- move_obj.write([m.id for s in shipments for m in s.inventory_moves
+ Move.write([m for s in shipments for m in s.inventory_moves
if m.state not in ('draft', 'done')], {
'state': 'draft',
})
- move_obj.delete([m.id for s in shipments for m in s.inventory_moves
+ Move.delete([m for s in shipments for m in s.inventory_moves
if m.state in ('draft', 'cancel')])
- # Re-Browse because moves have been deleted
- shipments = self.browse(ids)
-
for shipment in shipments:
for move in shipment.outgoing_moves:
if move.state in ('cancel', 'done'):
continue
- move_obj.create({
+ Move.create({
'from_location': \
move.shipment_out.warehouse.storage_location.id,
'to_location': move.from_location.id,
@@ -1085,17 +1053,19 @@ class ShipmentOut(Workflow, ModelSQL, ModelView):
'unit_price': move.unit_price,
})
+ @classmethod
@Workflow.transition('assigned')
- def assign(self, ids):
+ def assign(cls, shipments):
pass
+ @classmethod
@ModelView.button
@Workflow.transition('packed')
- def pack(self, ids):
- move_obj = Pool().get('stock.move')
- uom_obj = Pool().get('product.uom')
- shipments = self.browse(ids)
- move_obj.write([m.id for s in shipments for m in s.inventory_moves
+ def pack(cls, shipments):
+ pool = Pool()
+ Move = pool.get('stock.move')
+ Uom = pool.get('product.uom')
+ Move.write([m for s in shipments for m in s.inventory_moves
if m.state not in ('done', 'cancel')], {
'state': 'done',
})
@@ -1106,7 +1076,7 @@ class ShipmentOut(Workflow, ModelSQL, ModelView):
for move in shipment.outgoing_moves:
if move.state == 'cancel':
continue
- quantity = uom_obj.compute_qty(move.uom, move.quantity,
+ quantity = Uom.compute_qty(move.uom, move.quantity,
move.product.default_uom, round=False)
outgoing_qty.setdefault(move.product.id, 0.0)
outgoing_qty[move.product.id] += quantity
@@ -1114,7 +1084,7 @@ class ShipmentOut(Workflow, ModelSQL, ModelView):
for move in shipment.inventory_moves:
if move.state == 'cancel':
continue
- qty_default_uom = uom_obj.compute_qty(move.uom, move.quantity,
+ qty_default_uom = Uom.compute_qty(move.uom, move.quantity,
move.product.default_uom, round=False)
# Check if the outgoing move doesn't exist already
if outgoing_qty.get(move.product.id):
@@ -1126,15 +1096,15 @@ class ShipmentOut(Workflow, ModelSQL, ModelView):
else:
out_quantity = (qty_default_uom
- outgoing_qty[move.product.id])
- out_quantity = uom_obj.compute_qty(
+ out_quantity = Uom.compute_qty(
move.product.default_uom, out_quantity, move.uom)
outgoing_qty[move.product.id] = 0.0
else:
out_quantity = move.quantity
- unit_price = uom_obj.compute_price(move.product.default_uom,
+ unit_price = Uom.compute_price(move.product.default_uom,
move.product.list_price, move.uom)
- move_obj.create({
+ Move.create({
'from_location': move.to_location.id,
'to_location': shipment.customer.customer_location.id,
'product': move.product.id,
@@ -1153,148 +1123,152 @@ class ShipmentOut(Workflow, ModelSQL, ModelView):
if move.state == 'cancel':
continue
if outgoing_qty.get(move.product.id, 0.0) > 0.0:
- exc_qty = uom_obj.compute_qty(move.product.default_uom,
+ exc_qty = Uom.compute_qty(move.product.default_uom,
outgoing_qty[move.product.id], move.uom)
- removed_qty = uom_obj.compute_qty(move.uom,
+ removed_qty = Uom.compute_qty(move.uom,
min(exc_qty, move.quantity), move.product.default_uom,
round=False)
- move_obj.write(move.id, {
+ Move.write([move], {
'quantity': max(0.0, move.quantity - exc_qty),
})
outgoing_qty[move.product.id] -= removed_qty
- move_obj.write([m.id for s in shipments for m in s.outgoing_moves
+ Move.write([m for s in shipments for m in s.outgoing_moves
if m.state not in ('cancel', 'done')], {
'state': 'assigned',
})
+ @classmethod
@ModelView.button
@Workflow.transition('done')
- def done(self, ids):
- move_obj = Pool().get('stock.move')
- date_obj = Pool().get('ir.date')
+ def done(cls, shipments):
+ pool = Pool()
+ Move = pool.get('stock.move')
+ Date = pool.get('ir.date')
- shipments = self.browse(ids)
- move_obj.write([m.id for s in shipments for m in s.outgoing_moves
+ Move.write([m for s in shipments for m in s.outgoing_moves
if m.state not in ('done', 'cancel')], {
'state': 'done',
})
- self.write(ids, {
- 'effective_date': date_obj.today(),
+ cls.write(shipments, {
+ 'effective_date': Date.today(),
})
+ @classmethod
@ModelView.button
@Workflow.transition('cancel')
- def cancel(self, ids):
- move_obj = Pool().get('stock.move')
- shipments = self.browse(ids)
- move_obj.write([m.id for s in shipments
+ def cancel(cls, shipments):
+ Move = Pool().get('stock.move')
+ Move.write([m for s in shipments
for m in s.outgoing_moves + s.inventory_moves
if m.state not in ('cancel', 'done')], {
'state': 'cancel',
})
- def _get_move_planned_date(self, shipment):
+ @property
+ def _move_planned_date(self):
'''
Return the planned date for outgoing moves and inventory moves
'''
- return shipment.planned_date, shipment.planned_date
+ return self.planned_date, self.planned_date
- def _set_move_planned_date(self, shipment_ids):
+ @classmethod
+ def _set_move_planned_date(self, shipments):
'''
Set planned date of moves for the shipments
'''
- move_obj = Pool().get('stock.move')
- if isinstance(shipment_ids, (int, long)):
- shipment_ids = [shipment_ids]
- for shipment in self.browse(shipment_ids):
- dates = self._get_move_planned_date(shipment)
- outgoing_date, inventory_date = dates
- move_obj.write([x.id for x in shipment.outgoing_moves
+ Move = Pool().get('stock.move')
+ for shipment in shipments:
+ outgoing_date, inventory_date = shipment._move_planned_date
+ Move.write([x for x in shipment.outgoing_moves
if x.state not in ('assigned', 'done', 'cancel')], {
'planned_date': outgoing_date,
})
- move_obj.write([x.id for x in shipment.inventory_moves
+ Move.write([x for x in shipment.inventory_moves
if x.state not in ('assigned', 'done', 'cancel')], {
'planned_date': inventory_date,
})
- def create(self, values):
- sequence_obj = Pool().get('ir.sequence')
- config_obj = Pool().get('stock.configuration')
+ @classmethod
+ def create(cls, values):
+ pool = Pool()
+ Sequence = pool.get('ir.sequence')
+ Config = pool.get('stock.configuration')
values = values.copy()
- config = config_obj.browse(1)
- values['code'] = sequence_obj.get_id(config.shipment_out_sequence.id)
- shipment_id = super(ShipmentOut, self).create(values)
- self._set_move_planned_date(shipment_id)
- return shipment_id
-
- def write(self, ids, values):
- result = super(ShipmentOut, self).write(ids, values)
- self._set_move_planned_date(ids)
- return result
-
- def copy(self, ids, default=None):
+ config = Config(1)
+ values['code'] = Sequence.get_id(config.shipment_out_sequence.id)
+ shipment = super(ShipmentOut, cls).create(values)
+ cls._set_move_planned_date([shipment])
+ return shipment
+
+ @classmethod
+ def write(cls, shipments, values):
+ super(ShipmentOut, cls).write(shipments, values)
+ cls._set_move_planned_date(shipments)
+
+ @classmethod
+ def copy(cls, shipments, default=None):
if default is None:
default = {}
default = default.copy()
default['inventory_moves'] = None
default['outgoing_moves'] = None
- return super(ShipmentOut, self).copy(ids, default=default)
+ return super(ShipmentOut, cls).copy(shipments, default=default)
- def delete(self, ids):
- if isinstance(ids, (int, long)):
- ids = [ids]
+ @classmethod
+ def delete(cls, shipments):
# Cancel before delete
- self.cancel(ids)
- for shipment in self.browse(ids):
+ cls.cancel(shipments)
+ for shipment in shipments:
if shipment.state != 'cancel':
- self.raise_user_error('delete_cancel', shipment.rec_name)
- return super(ShipmentOut, self).delete(ids)
+ cls.raise_user_error('delete_cancel', shipment.rec_name)
+ super(ShipmentOut, cls).delete(shipments)
- def _location_amount(self, target_uom, qty_uom, uom_index):
+ @staticmethod
+ def _location_amount(target_uom, qty_uom, uom_index):
"""
Take a raw list of quantities and uom and convert it to
the target uom.
"""
- uom_obj = Pool().get('product.uom')
+ Uom = Pool().get('product.uom')
res = 0
for uom, qty in qty_uom:
- res += uom_obj.compute_qty(uom_index[uom], qty,
+ res += Uom.compute_qty(uom_index[uom], qty,
uom_index[target_uom])
return res
+ @classmethod
+ @ModelView.button_action('stock.wizard_shipment_out_assign')
+ def assign_wizard(cls, shipments):
+ pass
+
+ @classmethod
@ModelView.button
- def assign_try(self, ids):
- move_obj = Pool().get('stock.move')
- shipments = self.browse(ids)
- if move_obj.assign_try([m for s in shipments
+ def assign_try(cls, shipments):
+ Move = Pool().get('stock.move')
+ if Move.assign_try([m for s in shipments
for m in s.inventory_moves]):
- self.assign(ids)
+ cls.assign(shipments)
return True
else:
return False
+ @classmethod
@ModelView.button
- def assign_force(self, ids):
- move_obj = Pool().get('stock.move')
- shipments = self.browse(ids)
- move_obj.write([m.id for s in shipments for m in s.inventory_moves
+ def assign_force(cls, shipments):
+ Move = Pool().get('stock.move')
+ Move.write([m for s in shipments for m in s.inventory_moves
if m.state not in ('cancel', 'done')], {
'state': 'assigned',
})
- self.assign(ids)
-
-ShipmentOut()
+ cls.assign(shipments)
class ShipmentOutReturn(Workflow, ModelSQL, ModelView):
"Customer Return Shipment"
- _name = 'stock.shipment.out.return'
- _description = __doc__
+ __name__ = 'stock.shipment.out.return'
_rec_name = 'code'
-
effective_date = fields.Date('Effective Date', readonly=True)
planned_date = fields.Date('Planned Date',
states={
@@ -1317,7 +1291,7 @@ class ShipmentOutReturn(Workflow, ModelSQL, ModelView):
depends=['state', 'incoming_moves'])
customer_location = fields.Function(fields.Many2One('stock.location',
'Customer Location', on_change_with=['customer']),
- 'get_customer_location')
+ 'on_change_with_customer_location')
delivery_address = fields.Many2One('party.address',
'Delivery Address', required=True,
states={
@@ -1336,10 +1310,10 @@ class ShipmentOutReturn(Workflow, ModelSQL, ModelView):
depends=['state', 'incoming_moves'])
warehouse_storage = fields.Function(fields.Many2One('stock.location',
'Warehouse Storage', on_change_with=['warehouse']),
- 'get_warehouse_storage')
+ 'on_change_with_warehouse_storage')
warehouse_input = fields.Function(fields.Many2One('stock.location',
'Warehouse Input', on_change_with=['warehouse']),
- 'get_warehouse_input')
+ 'on_change_with_warehouse_input')
incoming_moves = fields.Function(fields.One2Many('stock.move', None,
'Incoming Moves',
domain=[
@@ -1379,14 +1353,15 @@ class ShipmentOutReturn(Workflow, ModelSQL, ModelView):
('received', 'Received'),
], 'State', readonly=True)
- def __init__(self):
- super(ShipmentOutReturn, self).__init__()
- self._order[0] = ('id', 'DESC')
- self._error_messages.update({
+ @classmethod
+ def __setup__(cls):
+ super(ShipmentOutReturn, cls).__setup__()
+ cls._order[0] = ('id', 'DESC')
+ cls._error_messages.update({
'delete_cancel': 'Customer Return Shipment "%s" must be '\
'cancelled before deletion!',
})
- self._transitions |= set((
+ cls._transitions |= set((
('draft', 'received'),
('received', 'done'),
('received', 'draf'),
@@ -1394,7 +1369,7 @@ class ShipmentOutReturn(Workflow, ModelSQL, ModelView):
('received', 'cancel'),
('cancel', 'draft'),
))
- self._buttons.update({
+ cls._buttons.update({
'cancel': {
'invisible': Eval('state').in_(['cancel', 'done']),
},
@@ -1409,14 +1384,15 @@ class ShipmentOutReturn(Workflow, ModelSQL, ModelView):
},
})
- def init(self, module_name):
+ @classmethod
+ def __register__(cls, module_name):
cursor = Transaction().cursor
# Migration from 1.2: packing renamed into shipment
old_table = 'stock_packing_out_return'
if TableHandler.table_exist(cursor, old_table):
- TableHandler.table_rename(cursor, old_table, self._table)
+ TableHandler.table_rename(cursor, old_table, cls._table)
- table = TableHandler(cursor, self, module_name)
+ table = TableHandler(cursor, cls, module_name)
for field in ('create_uid', 'write_uid', 'delivery_address',
'warehouse', 'customer'):
table.drop_fk(field, table=old_table)
@@ -1426,253 +1402,223 @@ class ShipmentOutReturn(Workflow, ModelSQL, ModelView):
# Migration from 2.0:
created_company = table.column_exist('company')
- super(ShipmentOutReturn, self).init(module_name)
+ super(ShipmentOutReturn, cls).__register__(module_name)
# Migration from 2.0:
- move_obj = Pool().get('stock.move')
+ Move = Pool().get('stock.move')
if (not created_company
- and TableHandler.table_exist(cursor, move_obj._table)):
+ 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 shipment.id = move.shipment_out_return '
'GROUP BY shipment.id '
'ORDER BY MAX(move.company)'
- % (self._table, move_obj._table))
+ % (cls._table, Move._table))
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 "' + self._table + '" '
+ cursor.execute('UPDATE "' + cls._table + '" '
'SET company = %s WHERE ' + red_sql,
[company_id] + red_ids)
table.not_null_action('company', action='add')
# Add index on create_date
- table = TableHandler(cursor, self, module_name)
+ table = TableHandler(cursor, cls, module_name)
table.index_action('create_date', action='add')
- def default_state(self):
+ @staticmethod
+ def default_state():
return 'draft'
- def default_warehouse(self):
- location_obj = Pool().get('stock.location')
- location_ids = location_obj.search(self.warehouse.domain)
- if len(location_ids) == 1:
- return location_ids[0]
+ @classmethod
+ def default_warehouse(cls):
+ Location = Pool().get('stock.location')
+ locations = Location.search(cls.warehouse.domain)
+ if len(locations) == 1:
+ return locations[0].id
- def default_company(self):
+ @staticmethod
+ def default_company():
return Transaction().context.get('company')
- def on_change_customer(self, values):
- if not values.get('customer'):
+ def on_change_customer(self):
+ if not self.customer:
return {'delivery_address': None}
- party_obj = Pool().get("party.party")
- address_id = party_obj.address_get(values['customer'], type='delivery')
+ address = self.customer.address_get(type='delivery')
return {
- 'delivery_address': address_id,
+ 'delivery_address': address.id,
}
- def on_change_with_customer_location(self, values):
- pool = Pool()
- party_obj = pool.get('party.party')
- if values.get('customer'):
- customer = party_obj.browse(values['customer'])
- return customer.customer_location.id
-
- def get_customer_location(self, ids, name):
- locations = {}
- for shipment in self.browse(ids):
- locations[shipment.id] = shipment.customer.customer_location.id
- return locations
-
- def default_warehouse_storage(self):
- warehouse = self.default_warehouse()
+ def on_change_with_customer_location(self, name=None):
+ if self.customer:
+ return self.customer.customer_location.id
+
+ @classmethod
+ def default_warehouse_storage(cls):
+ warehouse = cls.default_warehouse()
if warehouse:
- value = self.on_change_with_warehouse_storage({
- 'warehouse': warehouse,
- })
- return value
+ return cls(warehouse=warehouse).on_change_with_warehouse_storage()
- def on_change_with_warehouse_storage(self, values):
- pool = Pool()
- location_obj = pool.get('stock.location')
- if values.get('warehouse'):
- warehouse = location_obj.browse(values['warehouse'])
- return warehouse.storage_location.id
-
- def get_warehouse_storage(self, ids, name):
- storages = {}
- for shipment in self.browse(ids):
- storages[shipment.id] = shipment.warehouse.storage_location.id
- return storages
-
- def default_warehouse_input(self):
- warehouse = self.default_warehouse()
+ def on_change_with_warehouse_storage(self, name=None):
+ if self.warehouse:
+ return self.warehouse.storage_location.id
+
+ @classmethod
+ def default_warehouse_input(cls):
+ warehouse = cls.default_warehouse()
if warehouse:
- value = self.on_change_with_warehouse_input({
- 'warehouse': warehouse,
- })
- return value
+ return cls(warehouse=warehouse).on_change_with_warehouse_input()
- def on_change_with_warehouse_input(self, values):
- pool = Pool()
- location_obj = pool.get('stock.location')
- if values.get('warehouse'):
- warehouse = location_obj.browse(values['warehouse'])
- return warehouse.input_location.id
-
- def get_warehouse_input(self, ids, name):
- inputs = {}
- for shipment in self.browse(ids):
- inputs[shipment.id] = shipment.warehouse.input_location.id
- return inputs
-
- def get_incoming_moves(self, ids, name):
- res = {}
- for shipment in self.browse(ids):
- res[shipment.id] = []
- for move in shipment.moves:
- if move.to_location.id == \
- shipment.warehouse.input_location.id:
- res[shipment.id].append(move.id)
- return res
+ def on_change_with_warehouse_input(self, name=None):
+ if self.warehouse:
+ return self.warehouse.input_location.id
- def set_incoming_moves(self, ids, name, value):
+ def get_incoming_moves(self, name):
+ moves = []
+ for move in self.moves:
+ if move.to_location.id == self.warehouse.input_location.id:
+ moves.append(move.id)
+ return moves
+
+ @classmethod
+ def set_incoming_moves(cls, shipments, name, value):
if not value:
return
- self.write(ids, {
- 'moves': value,
- })
+ cls.write(shipments, {
+ 'moves': value,
+ })
- def get_inventory_moves(self, ids, name):
- res = {}
- for shipment in self.browse(ids):
- res[shipment.id] = []
- for move in shipment.moves:
- if move.from_location.id == \
- shipment.warehouse.input_location.id:
- res[shipment.id].append(move.id)
- return res
+ def get_inventory_moves(self, name):
+ moves = []
+ for move in self.moves:
+ if move.from_location.id == self.warehouse.input_location.id:
+ moves.append(move.id)
+ return moves
- def set_inventory_moves(self, ids, name, value):
+ @classmethod
+ def set_inventory_moves(cls, shipments, name, value):
if not value:
return
- self.write(ids, {
- 'moves': value,
- })
+ cls.write(shipments, {
+ 'moves': value,
+ })
- def _get_move_planned_date(self, shipment):
+ def _get_move_planned_date(self):
'''
Return the planned date for incoming moves and inventory moves
'''
- return shipment.planned_date, shipment.planned_date
+ return self.planned_date, self.planned_date
- def _set_move_planned_date(self, shipment_ids):
+ @classmethod
+ def _set_move_planned_date(cls, shipments):
'''
Set planned date of moves for the shipments
'''
- move_obj = Pool().get('stock.move')
- if isinstance(shipment_ids, (int, long)):
- shipment_ids = [shipment_ids]
- for shipment in self.browse(shipment_ids):
- dates = self._get_move_planned_date(shipment)
+ Move = Pool().get('stock.move')
+ for shipment in shipments:
+ dates = shipment._get_move_planned_date()
incoming_date, inventory_date = dates
- move_obj.write([x.id for x in shipment.incoming_moves
+ Move.write([x for x in shipment.incoming_moves
if x.state not in ('assigned', 'done', 'cancel')], {
'planned_date': incoming_date,
})
- move_obj.write([x.id for x in shipment.inventory_moves
+ Move.write([x for x in shipment.inventory_moves
if x.state not in ('assigned', 'done', 'cancel')], {
'planned_date': inventory_date,
})
- def create(self, values):
- sequence_obj = Pool().get('ir.sequence')
- config_obj = Pool().get('stock.configuration')
+ @classmethod
+ def create(cls, values):
+ pool = Pool()
+ Sequence = pool.get('ir.sequence')
+ Config = pool.get('stock.configuration')
values = values.copy()
- config = config_obj.browse(1)
- values['code'] = sequence_obj.get_id(
+ config = Config(1)
+ values['code'] = Sequence.get_id(
config.shipment_out_return_sequence.id)
- shipment_id = super(ShipmentOutReturn, self).create(values)
- self._set_move_planned_date(shipment_id)
- return shipment_id
+ shipment = super(ShipmentOutReturn, cls).create(values)
+ cls._set_move_planned_date([shipment])
+ return shipment
- def write(self, ids, values):
- result = super(ShipmentOutReturn, self).write(ids, values)
- self._set_move_planned_date(ids)
- return result
+ @classmethod
+ def write(cls, shipments, values):
+ super(ShipmentOutReturn, cls).write(shipments, values)
+ cls._set_move_planned_date(shipments)
- def copy(self, ids, default=None):
+ @classmethod
+ def copy(cls, shipments, default=None):
if default is None:
default = {}
default = default.copy()
default['inventory_moves'] = None
default['incoming_moves'] = None
- return super(ShipmentOutReturn, self).copy(ids, default=default)
+ return super(ShipmentOutReturn, cls).copy(shipments, default=default)
- def delete(self, ids):
- if isinstance(ids, (int, long)):
- ids = [ids]
+ @classmethod
+ def delete(cls, shipments):
# Cance before delete
- self.cancel(ids)
- for shipment in self.browse(ids):
+ cls.cancel(shipments)
+ for shipment in shipments:
if shipment.state != 'cancel':
- self.raise_user_error('delete_cancel', shipment.rec_name)
- return super(ShipmentOutReturn, self).delete(ids)
+ cls.raise_user_error('delete_cancel', shipment.rec_name)
+ super(ShipmentOutReturn, cls).delete(shipments)
+ @classmethod
@ModelView.button
@Workflow.transition('draft')
- def draft(self, ids):
- move_obj = Pool().get('stock.move')
- shipments = self.browse(ids)
- move_obj.write([m.id for s in shipments for m in s.incoming_moves
+ def draft(cls, shipments):
+ Move = Pool().get('stock.move')
+ Move.write([m for s in shipments for m in s.incoming_moves
if m.state not in ('draft', 'done')], {
'state': 'draft',
})
- move_obj.delete([m.id for s in shipments for m in s.inventory_moves
+ Move.delete([m for s in shipments for m in s.inventory_moves
if m.state in ('draft', 'cancel')])
+ @classmethod
@ModelView.button
@Workflow.transition('received')
- def receive(self, ids):
- move_obj = Pool().get('stock.move')
- shipments = self.browse(ids)
- move_obj.write([m.id for s in shipments for m in s.incoming_moves
+ def receive(cls, shipments):
+ Move = Pool().get('stock.move')
+ Move.write([m for s in shipments for m in s.incoming_moves
if m.state not in ('done', 'cancel')], {
'state': 'done',
})
- self.create_inventory_moves(shipments)
+ cls.create_inventory_moves(shipments)
+ @classmethod
@ModelView.button
@Workflow.transition('done')
- def done(self, ids):
- move_obj = Pool().get('stock.move')
- date_obj = Pool().get('ir.date')
- shipments = self.browse(ids)
- move_obj.write([m.id for s in shipments for m in s.inventory_moves
+ def done(cls, shipments):
+ pool = Pool()
+ Move = pool.get('stock.move')
+ Date = pool.get('ir.date')
+ Move.write([m for s in shipments for m in s.inventory_moves
if m.state not in ('done', 'cancel')], {
'state': 'done',
})
- self.write(ids, {
- 'effective_date': date_obj.today(),
+ cls.write(shipments, {
+ 'effective_date': Date.today(),
})
+ @classmethod
@ModelView.button
@Workflow.transition('cancel')
- def cancel(self, ids):
- move_obj = Pool().get('stock.move')
- shipments = self.browse(ids)
- move_obj.write([m.id for s in shipments
+ def cancel(cls, shipments):
+ Move = Pool().get('stock.move')
+ Move.write([m for s in shipments
for m in s.incoming_moves + s.inventory_moves
if m.state not in ('cancel', 'done')], {
'state': 'cancel',
})
- def _get_inventory_moves(self, incoming_move):
+ @staticmethod
+ def _get_inventory_moves(incoming_move):
res = {}
if incoming_move.quantity <= 0.0:
return None
@@ -1689,41 +1635,36 @@ class ShipmentOutReturn(Workflow, ModelSQL, ModelView):
res['company'] = incoming_move.company.id
return res
- def create_inventory_moves(self, shipments):
+ @classmethod
+ def create_inventory_moves(cls, shipments):
for shipment in shipments:
for incoming_move in shipment.incoming_moves:
- vals = self._get_inventory_moves(incoming_move)
+ vals = cls._get_inventory_moves(incoming_move)
if vals:
- self.write(shipment.id, {
+ cls.write([shipment], {
'inventory_moves': [('create', vals)],
})
-ShipmentOutReturn()
-
class AssignShipmentOutAssignFailed(ModelView):
'Assign Shipment Out'
- _name = 'stock.shipment.out.assign.failed'
- _description = __doc__
-
+ __name__ = 'stock.shipment.out.assign.failed'
inventory_moves = fields.Many2Many('stock.move', None, None,
- 'Inventory Moves', readonly=True)
+ 'Inventory Moves', readonly=True)
- def default_inventory_moves(self):
- shipment_out_obj = Pool().get('stock.shipment.out')
+ @staticmethod
+ def default_inventory_moves():
+ ShipmentOut = Pool().get('stock.shipment.out')
shipment_id = Transaction().context.get('active_id')
if not shipment_id:
return []
- shipment = shipment_out_obj.browse(shipment_id)
+ shipment = ShipmentOut(shipment_id)
return [x.id for x in shipment.inventory_moves if x.state == 'draft']
-AssignShipmentOutAssignFailed()
-
class AssignShipmentOut(Wizard):
'Assign Shipment Out'
- _name = 'stock.shipment.out.assign'
-
+ __name__ = 'stock.shipment.out.assign'
start = StateTransition()
failed = StateView('stock.shipment.out.assign.failed',
'stock.shipment_out_assign_failed_view_form', [
@@ -1737,30 +1678,26 @@ class AssignShipmentOut(Wizard):
])
force = StateTransition()
- def transition_start(self, session):
+ def transition_start(self):
pool = Pool()
- shipment_obj = pool.get('stock.shipment.out')
+ Shipment = pool.get('stock.shipment.out')
- if shipment_obj.assign_try([Transaction().context['active_id']]):
+ if Shipment.assign_try([Shipment(Transaction().context['active_id'])]):
return 'end'
else:
return 'failed'
- def transition_force(self, session):
- shipment_obj = Pool().get('stock.shipment.out')
+ def transition_force(self):
+ Shipment = Pool().get('stock.shipment.out')
- shipment_obj.assign_force([Transaction().context['active_id']])
+ Shipment.assign_force([Shipment(Transaction().context['active_id'])])
return 'end'
-AssignShipmentOut()
-
class ShipmentInternal(Workflow, ModelSQL, ModelView):
"Internal Shipment"
- _name = 'stock.shipment.internal'
- _description = __doc__
+ __name__ = 'stock.shipment.internal'
_rec_name = 'code'
-
effective_date = fields.Date('Effective Date', readonly=True)
planned_date = fields.Date('Planned Date',
states={
@@ -1817,14 +1754,15 @@ class ShipmentInternal(Workflow, ModelSQL, ModelView):
('done', 'Done'),
], 'State', readonly=True)
- def __init__(self):
- super(ShipmentInternal, self).__init__()
- self._order[0] = ('id', 'DESC')
- self._error_messages.update({
+ @classmethod
+ def __setup__(cls):
+ super(ShipmentInternal, cls).__setup__()
+ cls._order[0] = ('id', 'DESC')
+ cls._error_messages.update({
'delete_cancel': 'Internal Shipment "%s" must be cancelled '\
'before deletion!',
})
- self._transitions |= set((
+ cls._transitions |= set((
('draft', 'waiting'),
('waiting', 'waiting'),
('waiting', 'assigned'),
@@ -1836,7 +1774,7 @@ class ShipmentInternal(Workflow, ModelSQL, ModelView):
('assigned', 'cancel'),
('cancel', 'draft'),
))
- self._buttons.update({
+ cls._buttons.update({
'cancel': {
'invisible': Eval('state').in_(['cancel', 'done']),
},
@@ -1858,17 +1796,23 @@ class ShipmentInternal(Workflow, ModelSQL, ModelView):
'done': {
'invisible': Eval('state') != 'assigned',
},
+ 'assign_wizard': {
+ 'invisible': Eval('state') != 'waiting',
+ 'readonly': ~Eval('groups', []).contains(
+ Id('stock', 'group_stock')),
+ },
'assign_try': {},
'assign_force': {},
})
- def init(self, module_name):
+ @classmethod
+ def __register__(cls, module_name):
cursor = Transaction().cursor
# Migration from 1.2: packing renamed into shipment
old_table = 'stock_packing_internal'
if TableHandler.table_exist(cursor, old_table):
- TableHandler.table_rename(cursor, old_table, self._table)
- table = TableHandler(cursor, self, module_name)
+ TableHandler.table_rename(cursor, old_table, cls._table)
+ table = TableHandler(cursor, cls, module_name)
for field in ('create_uid', 'write_uid', 'from_location',
'to_location'):
table.drop_fk(field, table=old_table)
@@ -1878,170 +1822,172 @@ class ShipmentInternal(Workflow, ModelSQL, ModelView):
# Migration from 2.0:
created_company = table.column_exist('company')
- super(ShipmentInternal, self).init(module_name)
+ super(ShipmentInternal, cls).__register__(module_name)
# Migration from 2.0:
- move_obj = Pool().get('stock.move')
+ Move = Pool().get('stock.move')
if (not created_company
- and TableHandler.table_exist(cursor, move_obj._table)):
+ 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 shipment.id = move.shipment_internal '
'GROUP BY shipment.id '
'ORDER BY MAX(move.company)'
- % (self._table, move_obj._table))
+ % (cls._table, Move._table))
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 "' + self._table + '" '
+ cursor.execute('UPDATE "' + cls._table + '" '
'SET company = %s WHERE ' + red_sql,
[company_id] + red_ids)
table.not_null_action('company', action='add')
# Add index on create_date
- table = TableHandler(cursor, self, module_name)
+ table = TableHandler(cursor, cls, module_name)
table.index_action('create_date', action='add')
- def default_state(self):
+ @staticmethod
+ def default_state():
return 'draft'
- def default_company(self):
+ @staticmethod
+ def default_company():
return Transaction().context.get('company')
- def create(self, values):
- sequence_obj = Pool().get('ir.sequence')
- config_obj = Pool().get('stock.configuration')
+ @classmethod
+ def create(cls, values):
+ pool = Pool()
+ Sequence = pool.get('ir.sequence')
+ Config = pool.get('stock.configuration')
values = values.copy()
- config = config_obj.browse(1)
- values['code'] = sequence_obj.get_id(
+ config = Config(1)
+ values['code'] = Sequence.get_id(
config.shipment_internal_sequence.id)
- return super(ShipmentInternal, self).create(values)
+ return super(ShipmentInternal, cls).create(values)
- def delete(self, ids):
- if isinstance(ids, (int, long)):
- ids = [ids]
+ @classmethod
+ def delete(cls, shipments):
# Cancel before delete
- self.cancel(ids)
- for shipment in self.browse(ids):
+ cls.cancel(shipments)
+ for shipment in shipments:
if shipment.state != 'cancel':
- self.raise_user_error('delete_cancel', shipment.rec_name)
- return super(ShipmentInternal, self).delete(ids)
+ cls.raise_user_error('delete_cancel', shipment.rec_name)
+ super(ShipmentInternal, cls).delete(shipments)
+ @classmethod
@ModelView.button
@Workflow.transition('draft')
- def draft(self, ids):
- move_obj = Pool().get('stock.move')
- shipments = self.browse(ids)
- move_obj.write([m.id for s in shipments for m in s.moves
+ def draft(cls, shipments):
+ Move = Pool().get('stock.move')
+ Move.write([m for s in shipments for m in s.moves
if m.state not in ('draft', 'done')], {
'state': 'draft',
})
+ @classmethod
@ModelView.button
@Workflow.transition('waiting')
- def wait(self, ids):
- move_obj = Pool().get('stock.move')
- shipments = self.browse(ids)
+ def wait(cls, shipments):
+ Move = Pool().get('stock.move')
# First reset state to draft to allow update from and to location
- move_obj.write([m.id for s in shipments for m in s.moves
+ Move.write([m for s in shipments for m in s.moves
if m.state not in ('draft', 'done')], {
'state': 'draft',
})
for shipment in shipments:
- move_obj.write([m.id for m in shipment.moves
+ Move.write([m for m in shipment.moves
if m.state != 'done'], {
'from_location': shipment.from_location.id,
'to_location': shipment.to_location.id,
'planned_date': shipment.planned_date,
})
+ @classmethod
@Workflow.transition('assigned')
- def assign(self, ids):
+ def assign(cls, shipments):
pass
+ @classmethod
@ModelView.button
@Workflow.transition('done')
- def done(self, ids):
- move_obj = Pool().get('stock.move')
- date_obj = Pool().get('ir.date')
- shipments = self.browse(ids)
- move_obj.write([m.id for s in shipments for m in s.moves
+ def done(cls, shipments):
+ pool = Pool()
+ Move = pool.get('stock.move')
+ Date = pool.get('ir.date')
+ Move.write([m for s in shipments for m in s.moves
if m.state not in ('done', 'cancel')], {
'state': 'done',
})
- self.write(ids, {
- 'effective_date': date_obj.today(),
+ cls.write(shipments, {
+ 'effective_date': Date.today(),
})
+ @classmethod
@ModelView.button
@Workflow.transition('cancel')
- def cancel(self, ids):
- move_obj = Pool().get('stock.move')
- shipments = self.browse(ids)
- move_obj.write([m.id for s in shipments for m in s.moves
+ def cancel(cls, shipments):
+ Move = Pool().get('stock.move')
+ Move.write([m for s in shipments for m in s.moves
if m.state not in ('cancel', 'done')], {
'state': 'cancel',
})
+ @classmethod
+ @ModelView.button_action('stock.wizard_shipment_internal_assign')
+ def assign_wizard(cls, shipments):
+ pass
+
+ @classmethod
@ModelView.button
- def assign_try(self, ids):
- move_obj = Pool().get('stock.move')
- shipments = self.browse(ids)
- if move_obj.assign_try([m for s in shipments
+ def assign_try(cls, shipments):
+ Move = Pool().get('stock.move')
+ if Move.assign_try([m for s in shipments
for m in s.moves]):
- self.assign(ids)
+ cls.assign(shipments)
return True
else:
return False
+ @classmethod
@ModelView.button
- def assign_force(self, ids):
- move_obj = Pool().get('stock.move')
- shipments = self.browse(ids)
- move_obj.write([m.id for s in shipments for m in s.moves
+ def assign_force(cls, shipments):
+ Move = Pool().get('stock.move')
+ Move.write([m for s in shipments for m in s.moves
if m.state not in ('assigned', 'done')], {
'state': 'assigned',
})
- self.assign(ids)
+ cls.assign(shipments)
-ShipmentInternal()
-
-class Address(ModelSQL, ModelView):
- _name = 'party.address'
+class Address:
+ __name__ = 'party.address'
delivery = fields.Boolean('Delivery')
-Address()
-
class AssignShipmentInternalAssignFailed(ModelView):
'Assign Shipment Internal'
- _name = 'stock.shipment.internal.assign.failed'
- _description = __doc__
-
+ __name__ = 'stock.shipment.internal.assign.failed'
moves = fields.Many2Many('stock.move', None, None, 'Moves',
- readonly=True)
+ readonly=True)
- def default_moves(self):
- shipment_internal_obj = Pool().get('stock.shipment.internal')
+ @staticmethod
+ def default_moves():
+ ShipmentInternal = Pool().get('stock.shipment.internal')
shipment_id = Transaction().context.get('active_id')
if not shipment_id:
return []
- shipment = shipment_internal_obj.browse(shipment_id)
+ shipment = ShipmentInternal(shipment_id)
return [x.id for x in shipment.moves if x.state == 'draft']
-AssignShipmentInternalAssignFailed()
-
class AssignShipmentInternal(Wizard):
'Assign Shipment Internal'
- _name = 'stock.shipment.internal.assign'
-
+ __name__ = 'stock.shipment.internal.assign'
start = StateTransition()
failed = StateView('stock.shipment.internal.assign.failed',
'stock.shipment_internal_assign_failed_view_form', [
@@ -2055,47 +2001,41 @@ class AssignShipmentInternal(Wizard):
])
force = StateTransition()
- def transition_start(self, session):
+ def transition_start(self):
pool = Pool()
- shipment_obj = pool.get('stock.shipment.internal')
+ Shipment = pool.get('stock.shipment.internal')
- if shipment_obj.assign_try([Transaction().context['active_id']]):
+ if Shipment.assign_try([Shipment(Transaction().context['active_id'])]):
return 'end'
else:
return 'failed'
- def transition_force(self, session):
- shipment_obj = Pool().get('stock.shipment.internal')
+ def transition_force(self):
+ Shipment = Pool().get('stock.shipment.internal')
- shipment_obj.assign_force([Transaction().context['active_id']])
+ Shipment.assign_force([Shipment(Transaction().context['active_id'])])
return 'end'
-AssignShipmentInternal()
-
class AssignShipmentInReturnAssignFailed(ModelView):
'Assign Supplier Return Shipment'
- _name = 'stock.shipment.in.return.assign.failed'
- _description = __doc__
-
+ __name__ = 'stock.shipment.in.return.assign.failed'
moves = fields.Many2Many('stock.move', None, None, 'Moves',
readonly=True)
- def default_moves(self):
- shipment_internal_obj = Pool().get('stock.shipment.in.return')
+ @staticmethod
+ def default_moves():
+ ShipmentInternal = Pool().get('stock.shipment.in.return')
shipment_id = Transaction().context.get('active_id')
if not shipment_id:
return []
- shipment = shipment_internal_obj.browse(shipment_id)
+ shipment = ShipmentInternal(shipment_id)
return [x.id for x in shipment.moves if x.state == 'draft']
-AssignShipmentInReturnAssignFailed()
-
class AssignShipmentInReturn(Wizard):
'Assign Supplier Return Shipment'
- _name = 'stock.shipment.in.return.assign'
-
+ __name__ = 'stock.shipment.in.return.assign'
start = StateTransition()
failed = StateView('stock.shipment.in.return.assign.failed',
'stock.shipment_in_return_assign_failed_view_form', [
@@ -2109,44 +2049,42 @@ class AssignShipmentInReturn(Wizard):
])
force = StateTransition()
- def transition_start(self, session):
+ def transition_start(self):
pool = Pool()
- shipment_obj = pool.get('stock.shipment.in.return')
+ Shipment = pool.get('stock.shipment.in.return')
- if shipment_obj.assign_try([Transaction().context['active_id']]):
+ if Shipment.assign_try([Shipment(Transaction().context['active_id'])]):
return 'end'
else:
return 'failed'
- def transition_force(self, session):
- shipment_obj = Pool().get('stock.shipment.in.return')
+ def transition_force(self):
+ Shipment = Pool().get('stock.shipment.in.return')
- shipment_obj.assign_force([Transaction().context['active_id']])
+ Shipment.assign_force([Shipment(Transaction().context['active_id'])])
return 'end'
-AssignShipmentInReturn()
-
class CreateShipmentOutReturn(Wizard):
'Create Customer Return Shipment'
- _name = 'stock.shipment.out.return.create'
-
+ __name__ = 'stock.shipment.out.return.create'
start = StateAction('stock.act_shipment_out_return_form')
- def __init__(self):
- super(CreateShipmentOutReturn, self).__init__()
- self._error_messages.update({
+ @classmethod
+ def __setup__(cls):
+ super(CreateShipmentOutReturn, cls).__setup__()
+ cls._error_messages.update({
'shipment_done_title': 'You can not create return shipment',
'shipment_done_msg': 'The shipment with code %s is not yet sent.',
})
- def do_start(self, session, action):
+ def do_start(self, action):
pool = Pool()
- shipment_out_obj = pool.get('stock.shipment.out')
- shipment_out_return_obj = pool.get('stock.shipment.out.return')
+ ShipmentOut = pool.get('stock.shipment.out')
+ ShipmentOutReturn = pool.get('stock.shipment.out.return')
shipment_ids = Transaction().context['active_ids']
- shipment_outs = shipment_out_obj.browse(shipment_ids)
+ shipment_outs = ShipmentOut.browse(shipment_ids)
shipment_out_return_ids = []
for shipment_out in shipment_outs:
@@ -2167,12 +2105,12 @@ class CreateShipmentOutReturn(Wizard):
'company': move.company.id,
}))
shipment_out_return_ids.append(
- shipment_out_return_obj.create({
+ ShipmentOutReturn.create({
'customer': shipment_out.customer.id,
'delivery_address': shipment_out.delivery_address.id,
'warehouse': shipment_out.warehouse.id,
'incoming_moves': incoming_moves,
- })
+ }).id
)
data = {'res_id': shipment_out_return_ids}
@@ -2180,50 +2118,52 @@ class CreateShipmentOutReturn(Wizard):
action['views'].reverse()
return action, data
- def transition_start(self, session):
+ def transition_start(self):
return 'end'
-CreateShipmentOutReturn()
-
class DeliveryNote(CompanyReport):
- _name = 'stock.shipment.out.delivery_note'
+ 'Delivery Note'
+ __name__ = 'stock.shipment.out.delivery_note'
- def parse(self, report, objects, datas, localcontext):
+ @classmethod
+ def parse(cls, report, objects, data, localcontext):
localcontext['product_name'] = lambda product_id, language: \
- self.product_name(product_id, language)
- return super(DeliveryNote, self).parse(report, objects, datas,
+ cls.product_name(product_id, language)
+ return super(DeliveryNote, cls).parse(report, objects, data,
localcontext)
- def product_name(self, product_id, language):
- product_obj = Pool().get('product.product')
+ @classmethod
+ def product_name(cls, product_id, language):
+ Product = Pool().get('product.product')
with Transaction().set_context(language=language):
- return product_obj.browse(product_id).rec_name
-
-DeliveryNote()
+ return Product(product_id).rec_name
class PickingList(CompanyReport):
- _name = 'stock.shipment.out.picking_list'
+ 'Picking List'
+ __name__ = 'stock.shipment.out.picking_list'
- def parse(self, report, objects, datas, localcontext):
- compare_context = self.get_compare_context(report, objects, datas)
+ @classmethod
+ def parse(cls, report, objects, data, localcontext):
+ compare_context = cls.get_compare_context(report, objects, data)
sorted_moves = {}
for shipment in objects:
sorted_moves[shipment.id] = sorted(
shipment.inventory_moves,
- lambda x, y: cmp(self.get_compare_key(x, compare_context),
- self.get_compare_key(y, compare_context))
+ lambda x, y: cmp(cls.get_compare_key(x, compare_context),
+ cls.get_compare_key(y, compare_context))
)
localcontext['moves'] = sorted_moves
- return super(PickingList, self).parse(report, objects, datas,
- localcontext)
+ return super(PickingList, cls).parse(report, objects, data,
+ localcontext)
- def get_compare_context(self, report, objects, datas):
- location_obj = Pool().get('stock.location')
+ @staticmethod
+ def get_compare_context(report, objects, data):
+ Location = Pool().get('stock.location')
from_location_ids = set()
to_location_ids = set()
for obj in objects:
@@ -2231,44 +2171,46 @@ class PickingList(CompanyReport):
from_location_ids.add(move.from_location.id)
to_location_ids.add(move.to_location.id)
- from_location_ids = location_obj.search(list(from_location_ids))
- to_location_ids = location_obj.search(list(to_location_ids))
+ from_locations = Location.search(list(from_location_ids))
+ to_locations = Location.search(list(to_location_ids))
return {
- 'from_location_ids': from_location_ids,
- 'to_location_ids': to_location_ids,
+ 'from_location_ids': [l.id for l in from_locations],
+ 'to_location_ids': [l.id for l in to_locations],
}
- def get_compare_key(self, move, compare_context):
+ @staticmethod
+ def get_compare_key(move, compare_context):
from_location_ids = compare_context['from_location_ids']
to_location_ids = compare_context['to_location_ids']
return [from_location_ids.index(move.from_location.id),
to_location_ids.index(move.to_location.id)]
-PickingList()
-
class SupplierRestockingList(CompanyReport):
- _name = 'stock.shipment.in.restocking_list'
+ 'Supplier Restocking List'
+ __name__ = 'stock.shipment.in.restocking_list'
- def parse(self, report, objects, datas, localcontext):
- compare_context = self.get_compare_context(report, objects, datas)
+ @classmethod
+ def parse(cls, report, objects, data, localcontext):
+ compare_context = cls.get_compare_context(report, objects, data)
sorted_moves = {}
for shipment in objects:
sorted_moves[shipment.id] = sorted(
shipment.inventory_moves,
- lambda x, y: cmp(self.get_compare_key(x, compare_context),
- self.get_compare_key(y, compare_context))
+ lambda x, y: cmp(cls.get_compare_key(x, compare_context),
+ cls.get_compare_key(y, compare_context))
)
localcontext['moves'] = sorted_moves
- return super(SupplierRestockingList, self).parse(report, objects,
- datas, localcontext)
+ return super(SupplierRestockingList, cls).parse(report, objects,
+ data, localcontext)
- def get_compare_context(self, report, objects, datas):
- location_obj = Pool().get('stock.location')
+ @staticmethod
+ def get_compare_context(report, objects, data):
+ Location = Pool().get('stock.location')
from_location_ids = set()
to_location_ids = set()
for obj in objects:
@@ -2276,44 +2218,46 @@ class SupplierRestockingList(CompanyReport):
from_location_ids.add(move.from_location.id)
to_location_ids.add(move.to_location.id)
- from_location_ids = location_obj.search(list(from_location_ids))
- to_location_ids = location_obj.search(list(to_location_ids))
+ from_locations = Location.search(list(from_location_ids))
+ to_locations = Location.search(list(to_location_ids))
return {
- 'from_location_ids': from_location_ids,
- 'to_location_ids': to_location_ids,
+ 'from_location_ids': [l.id for l in from_locations],
+ 'to_location_ids': [l.id for l in to_locations],
}
- def get_compare_key(self, move, compare_context):
+ @staticmethod
+ def get_compare_key(move, compare_context):
from_location_ids = compare_context['from_location_ids']
to_location_ids = compare_context['to_location_ids']
return [from_location_ids.index(move.from_location.id),
to_location_ids.index(move.to_location.id)]
-SupplierRestockingList()
-
class CustomerReturnRestockingList(CompanyReport):
- _name = 'stock.shipment.out.return.restocking_list'
+ 'Customer Return Restocking List'
+ __name__ = 'stock.shipment.out.return.restocking_list'
- def parse(self, report, objects, datas, localcontext):
- compare_context = self.get_compare_context(report, objects, datas)
+ @classmethod
+ def parse(cls, report, objects, data, localcontext):
+ compare_context = cls.get_compare_context(report, objects, data)
sorted_moves = {}
for shipment in objects:
sorted_moves[shipment.id] = sorted(
shipment.inventory_moves,
- lambda x, y: cmp(self.get_compare_key(x, compare_context),
- self.get_compare_key(y, compare_context))
+ lambda x, y: cmp(cls.get_compare_key(x, compare_context),
+ cls.get_compare_key(y, compare_context))
)
localcontext['moves'] = sorted_moves
- return super(CustomerReturnRestockingList, self).parse(report,
- objects, datas, localcontext)
+ return super(CustomerReturnRestockingList, cls).parse(report,
+ objects, data, localcontext)
- def get_compare_context(self, report, objects, datas):
- location_obj = Pool().get('stock.location')
+ @staticmethod
+ def get_compare_context(report, objects, data):
+ Location = Pool().get('stock.location')
from_location_ids = set()
to_location_ids = set()
for obj in objects:
@@ -2321,44 +2265,46 @@ class CustomerReturnRestockingList(CompanyReport):
from_location_ids.add(move.from_location.id)
to_location_ids.add(move.to_location.id)
- from_location_ids = location_obj.search(list(from_location_ids))
- to_location_ids = location_obj.search(list(to_location_ids))
+ from_locations = Location.search(list(from_location_ids))
+ to_locations = Location.search(list(to_location_ids))
return {
- 'from_location_ids': from_location_ids,
- 'to_location_ids': to_location_ids,
+ 'from_location_ids': [l.id for l in from_locations],
+ 'to_location_ids': [l.id for l in to_locations],
}
- def get_compare_key(self, move, compare_context):
+ @staticmethod
+ def get_compare_key(move, compare_context):
from_location_ids = compare_context['from_location_ids']
to_location_ids = compare_context['to_location_ids']
return [from_location_ids.index(move.from_location.id),
to_location_ids.index(move.to_location.id)]
-CustomerReturnRestockingList()
-
class InteralShipmentReport(CompanyReport):
- _name = 'stock.shipment.internal.report'
+ 'Interal Shipment Report'
+ __name__ = 'stock.shipment.internal.report'
- def parse(self, report, objects, datas, localcontext=None):
- compare_context = self.get_compare_context(report, objects, datas)
+ @classmethod
+ def parse(cls, report, objects, data, localcontext=None):
+ compare_context = cls.get_compare_context(report, objects, data)
sorted_moves = {}
for shipment in objects:
sorted_moves[shipment.id] = sorted(
shipment.moves,
- lambda x, y: cmp(self.get_compare_key(x, compare_context),
- self.get_compare_key(y, compare_context))
+ lambda x, y: cmp(cls.get_compare_key(x, compare_context),
+ cls.get_compare_key(y, compare_context))
)
localcontext['moves'] = sorted_moves
- return super(InteralShipmentReport, self).parse(report, objects,
- datas, localcontext)
+ return super(InteralShipmentReport, cls).parse(report, objects,
+ data, localcontext)
- def get_compare_context(self, report, objects, datas):
- location_obj = Pool().get('stock.location')
+ @staticmethod
+ def get_compare_context(report, objects, data):
+ Location = Pool().get('stock.location')
from_location_ids = set()
to_location_ids = set()
for obj in objects:
@@ -2366,18 +2312,17 @@ class InteralShipmentReport(CompanyReport):
from_location_ids.add(move.from_location.id)
to_location_ids.add(move.to_location.id)
- from_location_ids = location_obj.search(list(from_location_ids))
- to_location_ids = location_obj.search(list(to_location_ids))
+ from_locations = Location.search(list(from_location_ids))
+ to_locations = Location.search(list(to_location_ids))
return {
- 'from_location_ids': from_location_ids,
- 'to_location_ids': to_location_ids,
+ 'from_location_ids': [l.id for l in from_locations],
+ 'to_location_ids': [l.id for l in to_locations],
}
- def get_compare_key(self, move, compare_context):
+ @staticmethod
+ def get_compare_key(move, compare_context):
from_location_ids = compare_context['from_location_ids']
to_location_ids = compare_context['to_location_ids']
return [from_location_ids.index(move.from_location.id),
to_location_ids.index(move.to_location.id)]
-
-InteralShipmentReport()
diff --git a/shipment.xml b/shipment.xml
index 6f6c110..5c09f53 100644
--- a/shipment.xml
+++ b/shipment.xml
@@ -40,13 +40,13 @@ this repository contains the full copyright notices and license terms. -->
<field name="state"/>
<group col="5" colspan="2" id="buttons">
<button string="Cancel" name="cancel"
- type="object" icon="tryton-cancel"/>
+ icon="tryton-cancel"/>
<button string="Receive" name="receive"
- type="object" icon="tryton-go-next"/>
- <button string="Done" name="done" type="object"
+ icon="tryton-go-next"/>
+ <button string="Done" name="done"
icon="tryton-ok"/>
<button string="Reset to Draft" name="draft"
- type="object" icon="tryton-clear"/>
+ icon="tryton-clear"/>
</group>
</group>
</form>
@@ -162,16 +162,13 @@ this repository contains the full copyright notices and license terms. -->
<field name="state"/>
<group col="5" colspan="2" id="buttons">
<button string="Cancel" name="cancel"
- type="object" icon="tryton-cancel"/>
- <button string="Draft" name="draft" type="object"
+ icon="tryton-cancel"/>
+ <button string="Draft" name="draft"
icon="tryton-go-previous"/>
- <button string="Wait" name="wait"
- type="object"/>
- <button string="Assign" name="%(wizard_shipment_in_return_assign)d"
- type="action"
- states="{'invisible': Not(Equal(Eval('state'), 'waiting')), 'readonly': Not(In(%(group_stock)d, Eval('groups', [])))}"
+ <button string="Wait" name="wait"/>
+ <button string="Assign" name="assign_wizard"
icon="tryton-go-next"/>
- <button string="Done" name="done" type="object"
+ <button string="Done" name="done"
icon="tryton-ok"/>
</group>
</form>
@@ -275,18 +272,14 @@ this repository contains the full copyright notices and license terms. -->
<field name="state"/>
<group col="6" colspan="2" id="buttons">
<button string="Cancel" name="cancel"
- type="object" icon="tryton-cancel"/>
- <button string="Draft" name="draft"
- type="object"/>
- <button string="Waiting" name="wait"
- type="object"/>
- <button string="Assign" name="%(wizard_shipment_out_assign)d"
- type="action"
- states="{'invisible': Not(Equal(Eval('state'), 'waiting')), 'readonly': Not(In(%(group_stock)d, Eval('groups', [])))}"
- icon="tryton-go-next"/>
+ icon="tryton-cancel"/>
+ <button string="Draft" name="draft"/>
+ <button string="Waiting" name="wait"/>
+ <button string="Assign" name="assign_wizard"
+ icon="tryton-go-next"/>
<button string="Make shipment" name="pack"
- type="object" icon="tryton-go-next"/>
- <button string="Done" name="done" type="object"
+ icon="tryton-go-next"/>
+ <button string="Done" name="done"
icon="tryton-ok"/>
</group>
</group>
@@ -454,16 +447,13 @@ this repository contains the full copyright notices and license terms. -->
<label name="state"/>
<field name="state"/>
<group col="5" colspan="2" id="buttons">
- <button string="Cancel" name="cancel" type="object"
+ <button string="Cancel" name="cancel"
icon="tryton-cancel"/>
- <button string="Draft" name="draft" type="object"/>
- <button string="Waiting" name="wait"
- type="object"/>
- <button string="Assign" name="%(wizard_shipment_internal_assign)d"
- type="action"
- states="{'invisible': Not(Equal(Eval('state'), 'waiting')), 'readonly': Not(In(%(group_stock)d, Eval('groups', [])))}"
+ <button string="Draft" name="draft"/>
+ <button string="Waiting" name="wait"/>
+ <button string="Assign" name="assign_wizard"
icon="tryton-go-next"/>
- <button string="Done" name="done" type="object"
+ <button string="Done" name="done"
icon="tryton-ok"/>
</group>
</form>
@@ -624,13 +614,12 @@ this repository contains the full copyright notices and license terms. -->
<field name="state"/>
<group col="5" colspan="2" id="buttons">
<button string="Cancel" name="cancel"
- type="object" icon="tryton-cancel"/>
+ icon="tryton-cancel"/>
<button string="Draft" name="draft"
- type="object" icon="tryton-clear"/>
+ icon="tryton-clear"/>
<button string="Received" name="receive"
- type="object" icon="tryton-go-next"/>
+ icon="tryton-go-next"/>
<button string="Done" name="done"
- type="object"
icon="tryton-ok"/>
</group>
</group>
diff --git a/tests/scenario_stock_shipment_out.rst b/tests/scenario_stock_shipment_out.rst
new file mode 100644
index 0000000..62d2c06
--- /dev/null
+++ b/tests/scenario_stock_shipment_out.rst
@@ -0,0 +1,192 @@
+===========================
+Stock Shipment Out Scenario
+===========================
+
+=============
+General Setup
+=============
+
+Imports::
+
+ >>> import datetime
+ >>> from dateutil.relativedelta import relativedelta
+ >>> from decimal import Decimal
+ >>> from proteus import config, Model, Wizard
+ >>> today = datetime.date.today()
+
+Create database::
+
+ >>> config = config.set_trytond()
+ >>> config.pool.test = True
+
+Install stock Module::
+
+ >>> Module = Model.get('ir.module.module')
+ >>> modules = Module.find([('name', '=', 'stock')])
+ >>> Module.install([x.id for x in modules], config.context)
+ >>> Wizard('ir.module.module.install_upgrade').execute('upgrade')
+
+Create company::
+
+ >>> Currency = Model.get('currency.currency')
+ >>> CurrencyRate = Model.get('currency.currency.rate')
+ >>> Company = Model.get('company.company')
+ >>> company_config = Wizard('company.company.config')
+ >>> company_config.execute('company')
+ >>> company = company_config.form
+ >>> company.name = 'OPENLABS'
+ >>> currencies = Currency.find([('code', '=', 'EUR')])
+ >>> if not currencies:
+ ... currency = Currency(name='Euro', symbol=u'â¬', code='EUR',
+ ... rounding=Decimal('0.01'), mon_grouping='[3, 3, 0]',
+ ... mon_decimal_point=',')
+ ... currency.save()
+ ... CurrencyRate(date=today + relativedelta(month=1, day=1),
+ ... rate=Decimal('1.0'), currency=currency).save()
+ ... else:
+ ... currency, = currencies
+ >>> company.currency = currency
+ >>> company_config.execute('add')
+ >>> company, = Company.find()
+
+Reload the context::
+
+ >>> User = Model.get('res.user')
+ >>> config._context = User.get_preferences(True, config.context)
+
+Create customer::
+
+ >>> Party = Model.get('party.party')
+ >>> customer = Party(name='Customer')
+ >>> customer.save()
+
+Create category::
+
+ >>> ProductCategory = Model.get('product.category')
+ >>> category = ProductCategory(name='Category')
+ >>> category.save()
+
+Create product::
+
+ >>> ProductUom = Model.get('product.uom')
+ >>> Product = Model.get('product.product')
+ >>> unit, = ProductUom.find([('name', '=', 'Unit')])
+ >>> product = Product()
+ >>> product.name = 'Product'
+ >>> product.category = category
+ >>> product.default_uom = unit
+ >>> product.type = 'goods'
+ >>> product.list_price = Decimal('20')
+ >>> product.cost_price = Decimal('8')
+ >>> product.save()
+
+Get stock locations::
+
+ >>> Location = Model.get('stock.location')
+ >>> warehouse_loc, = Location.find([('code', '=', 'WH')])
+ >>> supplier_loc, = Location.find([('code', '=', 'SUP')])
+ >>> customer_loc, = Location.find([('code', '=', 'CUS')])
+ >>> output_loc, = Location.find([('code', '=', 'OUT')])
+ >>> storage_loc, = Location.find([('code', '=', 'STO')])
+
+Create Shipment Out::
+
+ >>> ShipmentOut = Model.get('stock.shipment.out')
+ >>> shipment_out = ShipmentOut()
+ >>> shipment_out.planned_date = today
+ >>> shipment_out.customer = customer
+ >>> shipment_out.warehouse = warehouse_loc
+ >>> shipment_out.company = company
+
+Add two shipment lines of same product::
+
+ >>> StockMove = Model.get('stock.move')
+ >>> shipment_out.outgoing_moves.extend([StockMove(), StockMove()])
+ >>> for move in shipment_out.outgoing_moves:
+ ... move.product = product
+ ... move.uom =unit
+ ... move.quantity = 1
+ ... move.from_location = output_loc
+ ... move.to_location = customer_loc
+ ... move.company = company
+ ... move.unit_price = Decimal('1')
+ ... move.currency = currency
+ >>> shipment_out.save()
+
+Set the shipment state to waiting::
+
+ >>> ShipmentOut.wait([shipment_out.id], config.context)
+ >>> shipment_out.reload()
+ >>> len(shipment_out.outgoing_moves)
+ 2
+ >>> len(shipment_out.inventory_moves)
+ 2
+
+Make 1 unit of the product available::
+
+ >>> incoming_move = StockMove()
+ >>> incoming_move.product = product
+ >>> incoming_move.uom = unit
+ >>> incoming_move.quantity = 1
+ >>> incoming_move.from_location = supplier_loc
+ >>> incoming_move.to_location = storage_loc
+ >>> incoming_move.planned_date = today
+ >>> incoming_move.effective_date = today
+ >>> incoming_move.state = 'done'
+ >>> incoming_move.company = company
+ >>> incoming_move.unit_price = Decimal('1')
+ >>> incoming_move.currency = currency
+ >>> incoming_move.save()
+
+Assign the shipment now::
+
+ >>> ShipmentOut.assign_try([shipment_out.id], config.context)
+ False
+ >>> shipment_out.reload()
+ >>> len(shipment_out.outgoing_moves)
+ 2
+ >>> len(shipment_out.inventory_moves)
+ 2
+ >>> states = [m.state for m in shipment_out.inventory_moves]
+ >>> states.sort()
+ >>> states
+ [u'assigned', u'draft']
+
+Delete the draft move, assign and pack shipment::
+
+ >>> for move in shipment_out.inventory_moves:
+ ... if move.state == 'draft':
+ ... break
+ >>> shipment_out.inventory_moves.remove(move)
+ >>> shipment_out.save()
+ >>> ShipmentOut.assign_try([shipment_out.id], config.context)
+ True
+ >>> ShipmentOut.pack([shipment_out.id], config.context)
+ >>> shipment_out.reload()
+ >>> set([m.state for m in shipment_out.outgoing_moves])
+ set([u'assigned'])
+ >>> len(shipment_out.outgoing_moves)
+ 2
+ >>> len(shipment_out.inventory_moves)
+ 1
+ >>> shipment_out.inventory_moves[0].state
+ u'done'
+ >>> sum([m.quantity for m in shipment_out.inventory_moves]) == \
+ ... sum([m.quantity for m in shipment_out.outgoing_moves])
+ True
+
+Set the state as Done::
+
+ >>> ShipmentOut.done([shipment_out.id], config.context)
+ >>> shipment_out.reload()
+ >>> set([m.state for m in shipment_out.outgoing_moves])
+ set([u'done'])
+ >>> len(shipment_out.outgoing_moves)
+ 2
+ >>> len(shipment_out.inventory_moves)
+ 1
+ >>> shipment_out.inventory_moves[0].state
+ u'done'
+ >>> sum([m.quantity for m in shipment_out.inventory_moves]) == \
+ ... sum([m.quantity for m in shipment_out.outgoing_moves])
+ True
diff --git a/tests/test_stock.py b/tests/test_stock.py
index db6e945..548fd35 100644
--- a/tests/test_stock.py
+++ b/tests/test_stock.py
@@ -56,58 +56,53 @@ class StockTestCase(unittest.TestCase):
Test Move.internal_quantity.
'''
with Transaction().start(DB_NAME, USER, context=CONTEXT):
- category_id = self.category.create({
- 'name': 'Test Move.internal_quantity',
- })
- kg_id, = self.uom.search([('name', '=', 'Kilogram')])
- g_id, = self.uom.search([('name', '=', 'Gram')])
- product_id = self.product.create({
+ category = self.category.create({
+ 'name': 'Test Move.internal_quantity',
+ })
+ kg, = self.uom.search([('name', '=', 'Kilogram')])
+ g, = self.uom.search([('name', '=', 'Gram')])
+ product = self.product.create({
'name': 'Test Move.internal_quantity',
'type': 'goods',
- 'list_price': Decimal(0),
+ 'list_price': Decimal(1),
'cost_price': Decimal(0),
- 'category': category_id,
+ 'category': category.id,
'cost_price_method': 'fixed',
- 'default_uom': kg_id,
+ 'default_uom': kg.id,
})
- supplier_id, = self.location.search([('code', '=', 'SUP')])
- storage_id, = self.location.search([('code', '=', 'STO')])
- company_id, = self.company.search([('name', '=', 'B2CK')])
- currency_id = self.company.read(company_id,
- ['currency'])['currency']
- self.user.write(USER, {
- 'main_company': company_id,
- 'company': company_id,
+ supplier, = self.location.search([('code', '=', 'SUP')])
+ storage, = self.location.search([('code', '=', 'STO')])
+ company, = self.company.search([('name', '=', 'B2CK')])
+ currency = company.currency
+ self.user.write([self.user(USER)], {
+ 'main_company': company.id,
+ 'company': company.id,
})
tests = [
- (kg_id, 10, 10),
- (g_id, 100, 0.1),
- (g_id, 1, 0), # rounded
+ (kg, 10, 10),
+ (g, 100, 0.1),
+ (g, 1, 0), # rounded
]
- for uom_id, quantity, internal_quantity in tests:
- move_id = self.move.create({
- 'product': product_id,
- 'uom': uom_id,
+ for uom, quantity, internal_quantity in tests:
+ move = self.move.create({
+ 'product': product.id,
+ 'uom': uom.id,
'quantity': quantity,
- 'from_location': supplier_id,
- 'to_location': storage_id,
- 'company': company_id,
+ 'from_location': supplier.id,
+ 'to_location': storage.id,
+ 'company': company.id,
'unit_price': Decimal('1'),
- 'currency': currency_id,
+ 'currency': currency.id,
})
- self.assertEqual(self.move.read(move_id,
- ['internal_quantity'])['internal_quantity'],
- internal_quantity)
+ self.assertEqual(move.internal_quantity, internal_quantity)
- for uom_id, quantity, internal_quantity in tests:
- self.move.write(move_id, {
- 'uom': uom_id,
+ for uom, quantity, internal_quantity in tests:
+ self.move.write([move], {
+ 'uom': uom.id,
'quantity': quantity,
})
- self.assertEqual(self.move.read(move_id,
- ['internal_quantity'])['internal_quantity'],
- internal_quantity)
+ self.assertEqual(move.internal_quantity, internal_quantity)
def test0020products_by_location(self):
'''
@@ -115,113 +110,112 @@ class StockTestCase(unittest.TestCase):
'''
with Transaction().start(DB_NAME, USER,
context=CONTEXT) as transaction:
- category_id = self.category.create({
- 'name': 'Test products_by_location',
- })
- kg_id, = self.uom.search([('name', '=', 'Kilogram')])
- g_id, = self.uom.search([('name', '=', 'Gram')])
- product_id = self.product.create({
+ category = self.category.create({
+ 'name': 'Test products_by_location',
+ })
+ kg, = self.uom.search([('name', '=', 'Kilogram')])
+ g, = self.uom.search([('name', '=', 'Gram')])
+ product = self.product.create({
'name': 'Test products_by_location',
'type': 'goods',
'list_price': Decimal(0),
'cost_price': Decimal(0),
- 'category': category_id,
+ 'category': category.id,
'cost_price_method': 'fixed',
- 'default_uom': kg_id,
+ 'default_uom': kg.id,
})
- supplier_id, = self.location.search([('code', '=', 'SUP')])
- customer_id, = self.location.search([('code', '=', 'CUS')])
- storage_id, = self.location.search([('code', '=', 'STO')])
- company_id, = self.company.search([('name', '=', 'B2CK')])
- currency_id = self.company.read(company_id,
- ['currency'])['currency']
- self.user.write(USER, {
- 'main_company': company_id,
- 'company': company_id,
+ supplier, = self.location.search([('code', '=', 'SUP')])
+ customer, = self.location.search([('code', '=', 'CUS')])
+ storage, = self.location.search([('code', '=', 'STO')])
+ company, = self.company.search([('name', '=', 'B2CK')])
+ currency = company.currency
+ self.user.write([self.user(USER)], {
+ 'main_company': company.id,
+ 'company': company.id,
})
today = datetime.date.today()
self.move.create({
- 'product': product_id,
- 'uom': kg_id,
+ 'product': product.id,
+ 'uom': kg.id,
'quantity': 5,
- 'from_location': supplier_id,
- 'to_location': storage_id,
+ 'from_location': supplier.id,
+ 'to_location': storage.id,
'planned_date': today + relativedelta(days=-5),
'effective_date': today + relativedelta(days=-5),
'state': 'done',
- 'company': company_id,
+ 'company': company.id,
'unit_price': Decimal('1'),
- 'currency': currency_id,
+ 'currency': currency.id,
})
self.move.create({
- 'product': product_id,
- 'uom': kg_id,
+ 'product': product.id,
+ 'uom': kg.id,
'quantity': 1,
- 'from_location': supplier_id,
- 'to_location': storage_id,
+ 'from_location': supplier.id,
+ 'to_location': storage.id,
'planned_date': today + relativedelta(days=-4),
'state': 'draft',
- 'company': company_id,
+ 'company': company.id,
'unit_price': Decimal('1'),
- 'currency': currency_id,
+ 'currency': currency.id,
})
self.move.create({
- 'product': product_id,
- 'uom': kg_id,
+ 'product': product.id,
+ 'uom': kg.id,
'quantity': 1,
- 'from_location': storage_id,
- 'to_location': customer_id,
+ 'from_location': storage.id,
+ 'to_location': customer.id,
'planned_date': today,
'effective_date': today,
'state': 'done',
- 'company': company_id,
+ 'company': company.id,
'unit_price': Decimal('1'),
- 'currency': currency_id,
+ 'currency': currency.id,
})
self.move.create({
- 'product': product_id,
- 'uom': kg_id,
+ 'product': product.id,
+ 'uom': kg.id,
'quantity': 1,
- 'from_location': storage_id,
- 'to_location': customer_id,
+ 'from_location': storage.id,
+ 'to_location': customer.id,
'planned_date': today,
'state': 'draft',
- 'company': company_id,
+ 'company': company.id,
'unit_price': Decimal('1'),
- 'currency': currency_id,
+ 'currency': currency.id,
})
self.move.create({
- 'product': product_id,
- 'uom': kg_id,
+ 'product': product.id,
+ 'uom': kg.id,
'quantity': 2,
- 'from_location': storage_id,
- 'to_location': customer_id,
+ 'from_location': storage.id,
+ 'to_location': customer.id,
'planned_date': today + relativedelta(days=5),
'state': 'draft',
- 'company': company_id,
+ 'company': company.id,
'unit_price': Decimal('1'),
- 'currency': currency_id,
+ 'currency': currency.id,
})
self.move.create({
- 'product': product_id,
- 'uom': kg_id,
+ 'product': product.id,
+ 'uom': kg.id,
'quantity': 5,
- 'from_location': supplier_id,
- 'to_location': storage_id,
+ 'from_location': supplier.id,
+ 'to_location': storage.id,
'planned_date': today + relativedelta(days=7),
'state': 'draft',
- 'company': company_id,
+ 'company': company.id,
'unit_price': Decimal('1'),
- 'currency': currency_id,
+ 'currency': currency.id,
})
products_by_location = partial(self.product.products_by_location,
- [storage_id], [product_id])
+ [storage.id], [product.id])
products_by_location_zero = partial(
self.product.products_by_location,
- [storage_id], [product_id], skip_zero=False)
+ [storage.id], [product.id], skip_zero=False)
tests = [
({'stock_date_end': today + relativedelta(days=-6),
@@ -284,10 +278,10 @@ class StockTestCase(unittest.TestCase):
if not quantity:
self.assertEqual(products_by_location(), {})
self.assertEqual(products_by_location_zero(),
- {(storage_id, product_id): quantity})
+ {(storage.id, product.id): quantity})
else:
self.assertEqual(products_by_location(),
- {(storage_id, product_id): quantity})
+ {(storage.id, product.id): quantity})
test_products_by_location()
@@ -300,172 +294,222 @@ class StockTestCase(unittest.TestCase):
]
self.move.create({
- 'product': product_id,
- 'uom': g_id,
+ 'product': product.id,
+ 'uom': g.id,
'quantity': 1,
- 'from_location': supplier_id,
- 'to_location': storage_id,
+ 'from_location': supplier.id,
+ 'to_location': storage.id,
'planned_date': today + relativedelta(days=-5),
'effective_date': today + relativedelta(days=-5),
'state': 'done',
- 'company': company_id,
+ 'company': company.id,
'unit_price': Decimal('1'),
- 'currency': currency_id,
+ 'currency': currency.id,
})
# Nothing should change when adding a small quantity
test_products_by_location()
for period_date in periods:
- period_id = self.period.create({
+ period = self.period.create({
'date': period_date,
- 'company': company_id,
- })
- self.period.close([period_id])
+ 'company': company.id,
+ })
+ self.period.close([period])
test_products_by_location()
+ # Test with_childs
+ with Transaction().start(DB_NAME, USER,
+ context=CONTEXT) as transaction:
+ company, = self.company.search([('name', '=', 'B2CK')])
+ self.user.write([self.user(USER)], {
+ 'main_company': company.id,
+ 'company': company.id,
+ })
+
+ unit, = self.uom.search([('name', '=', 'Unit')])
+ product = self.product.create({
+ 'name': 'Test products_by_location',
+ 'type': 'goods',
+ 'list_price': Decimal(0),
+ 'cost_price': Decimal(0),
+ 'cost_price_method': 'fixed',
+ 'default_uom': unit.id,
+ })
+
+ lost_found, = self.location.search([('type', '=', 'lost_found')])
+ warehouse, = self.location.search([('type', '=', 'warehouse')])
+ storage, = self.location.search([('code', '=', 'STO')])
+ storage1 = self.location.create({
+ 'name': 'Storage 1',
+ 'type': 'view',
+ 'parent': storage.id,
+ })
+ self.location.create({
+ 'name': 'Storage 1.1',
+ 'type': 'storage',
+ 'parent': storage1.id,
+ })
+ self.location.create({
+ 'name': 'Storage 2',
+ 'type': 'view',
+ 'parent': storage.id,
+ })
+
+ self.move.create({
+ 'product': product.id,
+ 'uom': unit.id,
+ 'quantity': 1,
+ 'from_location': lost_found.id,
+ 'to_location': storage.id,
+ 'planned_date': today,
+ 'effective_date': today,
+ 'state': 'done',
+ 'company': company.id,
+ })
+
+ products_by_location = self.product.products_by_location(
+ [warehouse.id], [product.id], with_childs=True)
+ self.assertEqual(products_by_location[(warehouse.id, product.id)],
+ 1)
+
def test0030period(self):
'''
Test period.
'''
with Transaction().start(DB_NAME, USER, context=CONTEXT):
- category_id = self.category.create({
- 'name': 'Test period',
- })
- unit_id, = self.uom.search([('name', '=', 'Unit')])
- product_id = self.product.create({
+ category = self.category.create({
+ 'name': 'Test period',
+ })
+ unit, = self.uom.search([('name', '=', 'Unit')])
+ product = self.product.create({
'name': 'Test period',
'type': 'goods',
- 'category': category_id,
+ 'category': category.id,
'cost_price_method': 'fixed',
- 'default_uom': unit_id,
+ 'default_uom': unit.id,
'list_price': Decimal(0),
'cost_price': Decimal(0),
})
- supplier_id, = self.location.search([('code', '=', 'SUP')])
- customer_id, = self.location.search([('code', '=', 'CUS')])
- storage_id, = self.location.search([('code', '=', 'STO')])
- company_id, = self.company.search([('name', '=', 'B2CK')])
- currency_id = self.company.read(company_id,
- ['currency'])['currency']
- self.user.write(USER, {
- 'main_company': company_id,
- 'company': company_id,
+ supplier, = self.location.search([('code', '=', 'SUP')])
+ customer, = self.location.search([('code', '=', 'CUS')])
+ storage, = self.location.search([('code', '=', 'STO')])
+ company, = self.company.search([('name', '=', 'B2CK')])
+ currency = company.currency
+ self.user.write([self.user(USER)], {
+ 'main_company': company.id,
+ 'company': company.id,
})
today = datetime.date.today()
self.move.create({
- 'product': product_id,
- 'uom': unit_id,
+ 'product': product.id,
+ 'uom': unit.id,
'quantity': 10,
- 'from_location': supplier_id,
- 'to_location': storage_id,
+ 'from_location': supplier.id,
+ 'to_location': storage.id,
'planned_date': today + relativedelta(days=-5),
'effective_date': today + relativedelta(days=-5),
'state': 'done',
- 'company': company_id,
+ 'company': company.id,
'unit_price': Decimal('1'),
- 'currency': currency_id,
+ 'currency': currency.id,
})
self.move.create({
- 'product': product_id,
- 'uom': unit_id,
+ 'product': product.id,
+ 'uom': unit.id,
'quantity': 15,
- 'from_location': supplier_id,
- 'to_location': storage_id,
+ 'from_location': supplier.id,
+ 'to_location': storage.id,
'planned_date': today + relativedelta(days=-4),
'effective_date': today + relativedelta(days=-4),
'state': 'done',
- 'company': company_id,
+ 'company': company.id,
'unit_price': Decimal('1'),
- 'currency': currency_id,
+ 'currency': currency.id,
})
self.move.create({
- 'product': product_id,
- 'uom': unit_id,
+ 'product': product.id,
+ 'uom': unit.id,
'quantity': 5,
- 'from_location': storage_id,
- 'to_location': customer_id,
+ 'from_location': storage.id,
+ 'to_location': customer.id,
'planned_date': today + relativedelta(days=-3),
'effective_date': today + relativedelta(days=-3),
'state': 'done',
- 'company': company_id,
+ 'company': company.id,
'unit_price': Decimal('1'),
- 'currency': currency_id,
+ 'currency': currency.id,
})
tests = [
(-5, {
- supplier_id: -10,
- storage_id: 10,
+ supplier.id: -10,
+ storage.id: 10,
}),
(-3, {
- supplier_id: -25,
- storage_id: 20,
- customer_id: 5,
+ supplier.id: -25,
+ storage.id: 20,
+ customer.id: 5,
})
]
for days, quantities in tests:
- period_id = self.period.create({
+ period = self.period.create({
'date': today + relativedelta(days=days),
- 'company': company_id,
+ 'company': company.id,
})
- self.period.close([period_id])
+ self.period.close([period])
- period = self.period.read(period_id, ['state', 'caches'])
- self.assertEqual(period['state'], 'closed')
+ self.assertEqual(period.state, 'closed')
- cache_ids = period['caches']
- caches = self.cache.read(cache_ids,
- ['location', 'product', 'internal_quantity'])
+ caches = period.caches
for cache in caches:
- location_id = cache['location']
- self.assertEqual(cache['product'], product_id)
- self.assertEqual(cache['internal_quantity'],
- quantities[location_id])
+ self.assertEqual(cache.product, product)
+ self.assertEqual(cache.internal_quantity,
+ quantities[cache.location.id])
# Test check_period_closed
self.move.create({
- 'product': product_id,
- 'uom': unit_id,
+ 'product': product.id,
+ 'uom': unit.id,
'quantity': 10,
- 'from_location': supplier_id,
- 'to_location': storage_id,
+ 'from_location': supplier.id,
+ 'to_location': storage.id,
'planned_date': today,
'effective_date': today,
'state': 'done',
- 'company': company_id,
+ 'company': company.id,
'unit_price': Decimal('1'),
- 'currency': currency_id,
+ 'currency': currency.id,
})
self.assertRaises(Exception, self.move.create, {
- 'product': product_id,
- 'uom': unit_id,
+ 'product': product.id,
+ 'uom': unit.id,
'quantity': 10,
- 'from_location': supplier_id,
- 'to_location': storage_id,
+ 'from_location': supplier.id,
+ 'to_location': storage.id,
'planned_date': today + relativedelta(days=-5),
'effective_date': today + relativedelta(days=-5),
'state': 'done',
- 'company': company_id,
+ 'company': company.id,
'unit_price': Decimal('1'),
- 'currency': currency_id,
+ 'currency': currency.id,
})
# Test close period check
- period_id = self.period.create({
+ period = self.period.create({
'date': today,
- 'company': company_id,
+ 'company': company.id,
})
- self.assertRaises(Exception, self.period.close, [period_id])
+ self.assertRaises(Exception, self.period.close, [period])
- period_id = self.period.create({
+ period = self.period.create({
'date': today + relativedelta(days=1),
- 'company': company_id,
+ 'company': company.id,
})
- self.assertRaises(Exception, self.period.close, [period_id])
+ self.assertRaises(Exception, self.period.close, [period])
def doctest_dropdb(test):
diff --git a/tryton.cfg b/tryton.cfg
new file mode 100644
index 0000000..45c5753
--- /dev/null
+++ b/tryton.cfg
@@ -0,0 +1,18 @@
+[tryton]
+version=2.6.0
+depends:
+ company
+ currency
+ ir
+ party
+ product
+xml:
+ stock.xml
+ product.xml
+ location.xml
+ shipment.xml
+ move.xml
+ inventory.xml
+ party.xml
+ configuration.xml
+ period.xml
diff --git a/trytond_stock.egg-info/PKG-INFO b/trytond_stock.egg-info/PKG-INFO
index a6f3819..ea381e0 100644
--- a/trytond_stock.egg-info/PKG-INFO
+++ b/trytond_stock.egg-info/PKG-INFO
@@ -1,24 +1,48 @@
Metadata-Version: 1.0
Name: trytond-stock
-Version: 2.4.1
-Summary: Stock Management and Inventory Control with:
- - Location definition
- - Stock move
- - Supplier, Customer and Internal Shipments. Customer and Supplier Return Shipments.
- - Stock Inventory
-
-And with reports:
- - Delivery Note
- - Picking List
- - Restocking List (on Supplier Shipment and Customer Return Shipment)
- - Products by Locations
-
+Version: 2.6.0
+Summary: Tryton module for stock and inventory
Home-page: http://www.tryton.org/
-Author: B2CK
-Author-email: info at b2ck.com
+Author: Tryton
+Author-email: UNKNOWN
License: GPL-3
-Download-URL: http://downloads.tryton.org/2.4/
-Description: UNKNOWN
+Download-URL: http://downloads.tryton.org/2.6/
+Description: trytond_stock
+ =============
+
+ The stock module of the Tryton application platform.
+
+ Installing
+ ----------
+
+ See INSTALL
+
+ Support
+ -------
+
+ If you encounter any problems with Tryton, please don't hesitate to ask
+ questions on the Tryton bug tracker, mailing list, wiki or IRC channel:
+
+ http://bugs.tryton.org/
+ http://groups.tryton.org/
+ http://wiki.tryton.org/
+ irc://irc.freenode.net/tryton
+
+ License
+ -------
+
+ See LICENSE
+
+ Copyright
+ ---------
+
+ See COPYRIGHT
+
+
+ For more information please visit the Tryton web site:
+
+ http://www.tryton.org/
+
Platform: UNKNOWN
Classifier: Development Status :: 5 - Production/Stable
Classifier: Environment :: Plugins
diff --git a/trytond_stock.egg-info/SOURCES.txt b/trytond_stock.egg-info/SOURCES.txt
index 0957302..e9badc4 100644
--- a/trytond_stock.egg-info/SOURCES.txt
+++ b/trytond_stock.egg-info/SOURCES.txt
@@ -20,8 +20,8 @@ setup.py
shipment.xml
stock.xml
supplier_restocking_list.odt
+tryton.cfg
./__init__.py
-./__tryton__.py
./configuration.py
./inventory.py
./location.py
@@ -43,6 +43,7 @@ locale/es_ES.po
locale/fr_FR.po
locale/nl_NL.po
locale/ru_RU.po
+tests/scenario_stock_shipment_out.rst
trytond_stock.egg-info/PKG-INFO
trytond_stock.egg-info/SOURCES.txt
trytond_stock.egg-info/dependency_links.txt
diff --git a/trytond_stock.egg-info/requires.txt b/trytond_stock.egg-info/requires.txt
index 17f9b89..238adba 100644
--- a/trytond_stock.egg-info/requires.txt
+++ b/trytond_stock.egg-info/requires.txt
@@ -1,5 +1,5 @@
-trytond_party >= 2.4, < 2.5
-trytond_product >= 2.4, < 2.5
-trytond_company >= 2.4, < 2.5
-trytond_currency >= 2.4, < 2.5
-trytond >= 2.4, < 2.5
\ No newline at end of file
+trytond_company >= 2.6, < 2.7
+trytond_currency >= 2.6, < 2.7
+trytond_party >= 2.6, < 2.7
+trytond_product >= 2.6, < 2.7
+trytond >= 2.6, < 2.7
\ No newline at end of file
commit 8a62515002e6928eb1667991cdd0a5bbfb9778da
Author: Mathias Behrle <mathiasb at m9s.biz>
Date: Tue Sep 11 13:16:50 2012 +0200
Adding upstream version 2.4.1.
diff --git a/CHANGELOG b/CHANGELOG
index ada0be3..84d5b02 100644
--- a/CHANGELOG
+++ b/CHANGELOG
@@ -1,3 +1,6 @@
+Version 2.4.1 - 2012-09-02
+* Bug fixes (see mercurial logs for details)
+
Version 2.4.0 - 2012-04-24
* Bug fixes (see mercurial logs for details)
* Remove special to_location_warehouse search clause
diff --git a/PKG-INFO b/PKG-INFO
index 4a30862..1889b8a 100644
--- a/PKG-INFO
+++ b/PKG-INFO
@@ -1,6 +1,6 @@
Metadata-Version: 1.0
Name: trytond_stock
-Version: 2.4.0
+Version: 2.4.1
Summary: Stock Management and Inventory Control with:
- Location definition
- Stock move
diff --git a/__tryton__.py b/__tryton__.py
index 99a454c..b1ba926 100644
--- a/__tryton__.py
+++ b/__tryton__.py
@@ -10,7 +10,7 @@
'name_es_ES': 'Stocks',
'name_fr_FR': 'Gestion des stocks',
'name_ru_RU': 'УпÑавление Ñкладами',
- 'version': '2.4.0',
+ 'version': '2.4.1',
'author': 'B2CK',
'email': 'info at b2ck.com',
'website': 'http://www.tryton.org/',
diff --git a/location.py b/location.py
index cc185dd..7797d65 100644
--- a/location.py
+++ b/location.py
@@ -144,7 +144,7 @@ class Location(ModelSQL, ModelView):
], order=[])
if ids:
return [('id', 'in', ids)]
- return [(self._rec_name,) + clause[1:]]
+ return [(self._rec_name,) + tuple(clause[1:])]
def get_quantity(self, ids, name):
product_obj = Pool().get('product.product')
@@ -191,8 +191,12 @@ class Location(ModelSQL, ModelView):
with Transaction().set_context(context):
product = product_obj.browse(product_id)
for location in self.browse(ids):
- cost_values[location.id] = (Decimal(str(location.quantity))
- * product.cost_price)
+ # The date could be before the product creation
+ if not isinstance(product.cost_price, Decimal):
+ cost_values[location.id] = None
+ else:
+ cost_values[location.id] = (Decimal(str(location.quantity))
+ * product.cost_price)
return cost_values
def _set_warehouse_parent(self, locations):
diff --git a/product.py b/product.py
index f3d36d7..6e01df6 100644
--- a/product.py
+++ b/product.py
@@ -164,8 +164,12 @@ class Product(ModelSQL, ModelView):
context['_datetime'] = trans_context['stock_date_end']
with Transaction().set_context(context):
for product in self.browse(ids):
- cost_values[product.id] = (Decimal(str(product.quantity))
- * product.cost_price)
+ # The date could be before the product creation
+ if not isinstance(product.cost_price, Decimal):
+ cost_values[product.id] = None
+ else:
+ cost_values[product.id] = (Decimal(str(product.quantity))
+ * product.cost_price)
return cost_values
def products_by_location(self, location_ids, product_ids=None,
diff --git a/shipment.py b/shipment.py
index 9862050..1aede63 100644
--- a/shipment.py
+++ b/shipment.py
@@ -1834,6 +1834,7 @@ class ShipmentInternal(Workflow, ModelSQL, ModelView):
('draft', 'cancel'),
('waiting', 'cancel'),
('assigned', 'cancel'),
+ ('cancel', 'draft'),
))
self._buttons.update({
'cancel': {
diff --git a/trytond_stock.egg-info/PKG-INFO b/trytond_stock.egg-info/PKG-INFO
index 861f8c9..a6f3819 100644
--- a/trytond_stock.egg-info/PKG-INFO
+++ b/trytond_stock.egg-info/PKG-INFO
@@ -1,6 +1,6 @@
Metadata-Version: 1.0
Name: trytond-stock
-Version: 2.4.0
+Version: 2.4.1
Summary: Stock Management and Inventory Control with:
- Location definition
- Stock move
commit 05815688fcf3ab75f858508c021cd8817ed36202
Author: Mathias Behrle <mathiasb at m9s.biz>
Date: Tue Apr 24 19:31:04 2012 +0200
Adding upstream version 2.4.0.
diff --git a/CHANGELOG b/CHANGELOG
index e8e2ee7..ada0be3 100644
--- a/CHANGELOG
+++ b/CHANGELOG
@@ -1,5 +1,8 @@
-Version 2.2.1 - 2011-12-26
+Version 2.4.0 - 2012-04-24
* Bug fixes (see mercurial logs for details)
+* Remove special to_location_warehouse search clause
+* Remove default from and to location and instead use domain
+* Update cost_price only from supplier to storage
Version 2.2.0 - 2011-10-25
* Bug fixes (see mercurial logs for details)
diff --git a/COPYRIGHT b/COPYRIGHT
index a9feb41..2eaddc3 100644
--- a/COPYRIGHT
+++ b/COPYRIGHT
@@ -1,6 +1,7 @@
-Copyright (C) 2008-2011 Cédric Krier.
-Copyright (C) 2008-2011 Bertrand Chenal.
-Copyright (C) 2008-2011 B2CK SPRL.
+Copyright (C) 2012 Openlabs Technologies & Consulting (P) LTD.
+Copyright (C) 2008-2012 Cédric Krier.
+Copyright (C) 2008-2012 Bertrand Chenal.
+Copyright (C) 2008-2012 B2CK SPRL.
Copyright (C) 2004-2008 Tiny SPRL.
This program is free software: you can redistribute it and/or modify
diff --git a/INSTALL b/INSTALL
index 0be4770..0f555d0 100644
--- a/INSTALL
+++ b/INSTALL
@@ -4,7 +4,7 @@ Installing trytond_stock
Prerequisites
-------------
- * Python 2.5 or later (http://www.python.org/)
+ * Python 2.6 or later (http://www.python.org/)
* trytond (http://www.tryton.org/)
* trytond_party (http://www.tryton.org/)
* trytond_product (http://www.tryton.org/)
diff --git a/PKG-INFO b/PKG-INFO
index 3fdd532..4a30862 100644
--- a/PKG-INFO
+++ b/PKG-INFO
@@ -1,6 +1,6 @@
-Metadata-Version: 1.1
+Metadata-Version: 1.0
Name: trytond_stock
-Version: 2.2.1
+Version: 2.4.0
Summary: Stock Management and Inventory Control with:
- Location definition
- Stock move
@@ -17,7 +17,7 @@ Home-page: http://www.tryton.org/
Author: B2CK
Author-email: info at b2ck.com
License: GPL-3
-Download-URL: http://downloads.tryton.org/2.2/
+Download-URL: http://downloads.tryton.org/2.4/
Description: UNKNOWN
Platform: UNKNOWN
Classifier: Development Status :: 5 - Production/Stable
diff --git a/__init__.py b/__init__.py
index c258741..a3f9c7d 100644
--- a/__init__.py
+++ b/__init__.py
@@ -1,10 +1,10 @@
#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 location import *
-from shipment import *
-from period import *
-from move import *
-from product import *
-from inventory import *
-from configuration import *
+from .location import *
+from .shipment import *
+from .period import *
+from .move import *
+from .product import *
+from .inventory import *
+from .configuration import *
diff --git a/__tryton__.py b/__tryton__.py
index 432f5c7..99a454c 100644
--- a/__tryton__.py
+++ b/__tryton__.py
@@ -3,12 +3,14 @@
{
'name': 'Stock Management',
'name_bg_BG': 'УпÑавление на налиÑноÑÑи',
+ 'name_ca_ES': 'Estocs',
'name_de_DE': 'Lagerverwaltung',
+ 'name_es_AR': 'Gestión de existencias',
'name_es_CO': 'Inventarios',
- 'name_es_ES': 'Gestión de existencias',
+ 'name_es_ES': 'Stocks',
'name_fr_FR': 'Gestion des stocks',
'name_ru_RU': 'УпÑавление Ñкладами',
- 'version': '2.2.1',
+ 'version': '2.4.0',
'author': 'B2CK',
'email': 'info at b2ck.com',
'website': 'http://www.tryton.org/',
@@ -36,6 +38,18 @@ And with reports:
- ÐÑеизÑиÑлÑване на инвенÑаÑен Ð¾Ð¿Ð¸Ñ (пÑи пÑаÑка на доÑÑавÑик и пÑаÑка вÑÑнаÑа Ð¾Ñ ÐºÐ»Ð¸ÐµÐ½Ñ)
- ÐÑодÑкÑи по меÑÑонаÑ
ождение
''',
+ 'description_ca_ES': '''Gestió d'estocs i control d'inventaris amb:
+ - Definició d'ubicacions
+ - Moviments d'estoc
+ - Albarans de proveïdors, clients i interns. Albarans de devolució a client i proveïdor.
+ - Inventaris d'estoc
+
+Amb informes:
+ - Albarà de lliurament
+ - Albarà intern o de picking
+ - Llista de recà lcul d'estocs (en recepcions de proveïdors i de devolucions de clients)
+ - Productes per ubiació
+''',
'description_de_DE': '''Lagerverwaltung und Bestandskontrolle mit:
- Definition von Lagerorten
- Lagerbewegungen
@@ -48,6 +62,18 @@ Mit den Berichten:
- Einlagerungsliste (für Lieferposten von Lieferanten und Warenrücknahmen)
- Artikel nach Lagerorten
''',
+ 'description_es_AR': '''Gestión de Existencias y control de inventarios con:
+ - Definición de ubicaciones
+ - Movimiento de existencias
+ - Envios de proveedores, clientes e internos. Envio de devoluciones de clientes y proveedores.
+ - Inventario de existencias
+
+Y con los informes:
+ - Notas de envio
+ - Lista de selección
+ - Lista de recálculo de existencias (con envios de proveedores y envios de devoluciones de clientes)
+ - Productos por ubicación
+''',
'description_es_CO': '''Administración de Inventarios y bodegas:
- Definición de sitios
- Movimiento de Bodega
@@ -58,19 +84,19 @@ Y con los reportes:
- Empaques de Clientes
- Productos por Lugar
''',
- 'description_es_ES': '''Gestión de Existencias y control de inventarios con:
+ 'description_es_ES': '''Gestión de stocks y control de inventarios con:
- Definición de ubicaciones
- - Movimiento de existencias
- - Envios de proveedores, clientes e internos. Envio de devoluciones de clientes y proveedores.
- - Inventario de existencias
+ - Movimientos de stock
+ - Albaranes de proveedores, clientes e internos. Albaranes de devolución de clientes y proveedores.
+ - Inventario de stock
Y con los informes:
- - Notas de envio
- - Lista de selección
- - Lista de recálculo de existencias (con envios de proveedores y envios de devoluciones de clientes)
+ - Albarán de entrega
+ - Albarán interno o de picking
+ - Lista de recálculo de stocks (en recepciones de proveedores y devoluciones de clientes)
- Productos por ubicación
''',
- 'description_fr_FR':'''Gestion des stocks et contrôle de l'inventaire avec:
+ 'description_fr_FR': '''Gestion des stocks et contrôle de l'inventaire avec:
- Emplacement
- Mouvement de stock
- Expédition client, fournisseur et interne. Retour d'expédition client et founisseur.
@@ -96,7 +122,6 @@ Et les rapports:
''',
'depends': [
'ir',
- 'workflow',
'party',
'product',
'company',
@@ -116,7 +141,9 @@ Et les rapports:
'translation': [
'locale/cs_CZ.po',
'locale/bg_BG.po',
+ 'locale/ca_ES.po',
'locale/de_DE.po',
+ 'locale/es_AR.po',
'locale/es_CO.po',
'locale/es_ES.po',
'locale/fr_FR.po',
diff --git a/configuration.py b/configuration.py
index b63fadb..7b06ed7 100644
--- a/configuration.py
+++ b/configuration.py
@@ -12,31 +12,31 @@ class Configuration(ModelSingleton, ModelSQL, ModelView):
shipment_in_sequence = fields.Property(fields.Many2One('ir.sequence',
'Supplier Shipment Sequence', domain=[
('company', 'in',
- [Get(Eval('context', {}), 'company'), False]),
+ [Get(Eval('context', {}), 'company'), 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'), False]),
+ [Get(Eval('context', {}), 'company'), None]),
('code', '=', 'stock.shipment.in.return'),
], required=True))
- shipment_out_sequence = fields.Property(fields.Many2One( 'ir.sequence',
+ shipment_out_sequence = fields.Property(fields.Many2One('ir.sequence',
'Customer Shipment Sequence', domain=[
('company', 'in',
- [Get(Eval('context', {}), 'company'), False]),
+ [Get(Eval('context', {}), 'company'), 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'), False]),
+ [Get(Eval('context', {}), 'company'), 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'), False]),
+ [Get(Eval('context', {}), 'company'), None]),
('code', '=', 'stock.shipment.internal'),
], required=True))
diff --git a/configuration.xml b/configuration.xml
index bfe9fda..94c9a9b 100644
--- a/configuration.xml
+++ b/configuration.xml
@@ -38,35 +38,30 @@ this repository contains the full copyright notices and license terms. -->
id="menu_stock_configuration" icon="tryton-list"/>
<record model="ir.property" id="property_shipment_in_sequence">
- <field name="name">shipment_in_sequence</field>
<field name="field"
search="[('model.model', '=', 'stock.configuration'), ('name', '=', 'shipment_in_sequence')]"/>
<field name="value" eval="'ir.sequence,' + str(ref('sequence_shipment_in'))"/>
</record>
<record model="ir.property" id="property_shipment_in_return_sequence">
- <field name="name">shipment_int_return_sequence</field>
<field name="field"
search="[('model.model', '=', 'stock.configuration'), ('name', '=', 'shipment_in_return_sequence')]"/>
<field name="value" eval="'ir.sequence,' + str(ref('sequence_shipment_in_return'))"/>
</record>
<record model="ir.property" id="property_shipment_out_sequence">
- <field name="name">shipment_out_sequence</field>
<field name="field"
search="[('model.model', '=', 'stock.configuration'), ('name', '=', 'shipment_out_sequence')]"/>
<field name="value" eval="'ir.sequence,' + str(ref('sequence_shipment_out'))"/>
</record>
<record model="ir.property" id="property_shipment_out_return_sequence">
- <field name="name">shipment_out_return_sequence</field>
<field name="field"
search="[('model.model', '=', 'stock.configuration'), ('name', '=', 'shipment_out_return_sequence')]"/>
<field name="value" eval="'ir.sequence,' + str(ref('sequence_shipment_out_return'))"/>
</record>
<record model="ir.property" id="property_shipment_internal_sequence">
- <field name="name">shipment_internal_sequence</field>
<field name="field"
search="[('model.model', '=', 'stock.configuration'), ('name', '=', 'shipment_internal_sequence')]"/>
<field name="value" eval="'ir.sequence,' + str(ref('sequence_shipment_internal'))"/>
diff --git a/doc/index.rst b/doc/index.rst
index f014a5a..8c92d51 100644
--- a/doc/index.rst
+++ b/doc/index.rst
@@ -55,7 +55,7 @@ compute stock value at any time (and to update the cost prices if the
choosen cost price method is *Average*). A move also defines a planned
date (when one plan to do the move) and an effective date (when the
move is actually made). Products that are used in stock move must of
-of type *Stockable* or *Consumable*. Stock levels are ignored for
+of type *Goods* or *Assets*. Stock levels are ignored for
consumable, this means that they can be always assigned. *Service*
products are ignored by the stock module.
diff --git a/inventory.py b/inventory.py
index 80d02bf..bde1835 100644
--- a/inventory.py
+++ b/inventory.py
@@ -1,7 +1,6 @@
#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 trytond.model import ModelWorkflow, ModelView, ModelSQL, fields
-from trytond.wizard import Wizard
+from trytond.model import Workflow, ModelView, ModelSQL, fields
from trytond.pyson import Not, Equal, Eval, Or, Bool
from trytond.backend import TableHandler
from trytond.transaction import Transaction
@@ -13,11 +12,10 @@ STATES = {
DEPENDS = ['state']
-class Inventory(ModelWorkflow, ModelSQL, ModelView):
+class Inventory(Workflow, ModelSQL, ModelView):
'Stock Inventory'
_name = 'stock.inventory'
_description = __doc__
- _rec_name = 'location'
location = fields.Many2One(
'stock.location', 'Location', required=True,
@@ -47,11 +45,30 @@ class Inventory(ModelWorkflow, ModelSQL, ModelView):
('draft', 'Draft'),
('done', 'Done'),
('cancel', 'Canceled'),
- ], 'State', readonly=True, select=1)
+ ], 'State', readonly=True, select=True)
def __init__(self):
super(Inventory, self).__init__()
self._order.insert(0, ('date', 'DESC'))
+ self._error_messages.update({
+ 'delete_cancel': 'Inventory "%s" must be cancelled before ' \
+ 'deletion!',
+ })
+ self._transitions |= set((
+ ('draft', 'done'),
+ ('draft', 'cancel'),
+ ))
+ self._buttons.update({
+ 'confirm': {
+ 'invisible': Eval('state').in_(['done', 'cancel']),
+ },
+ 'cancel': {
+ 'invisible': Eval('state').in_(['cancel', 'done']),
+ },
+ 'complete_lines': {
+ 'readonly': Eval('state') != 'draft',
+ },
+ })
def init(self, module_name):
super(Inventory, self).init(module_name)
@@ -69,36 +86,38 @@ class Inventory(ModelWorkflow, ModelSQL, ModelView):
return date_obj.today()
def default_company(self):
- return Transaction().context.get('company') or False
+ return Transaction().context.get('company')
def default_lost_found(self):
location_obj = Pool().get('stock.location')
location_ids = location_obj.search(self.lost_found.domain)
if len(location_ids) == 1:
return location_ids[0]
- return False
- def wkf_draft(self, inventory):
- self.write(inventory.id, {
- 'state': 'draft',
- })
-
- def wkf_cancel(self, inventory):
- line_obj = Pool().get("stock.inventory.line")
- line_obj.cancel_move(inventory.lines)
- self.write(inventory.id, {
- 'state': 'cancel',
- })
+ def delete(self, ids):
+ if isinstance(ids, (int, long)):
+ ids = [ids]
+ # Cancel before delete
+ self.cancel(ids)
+ for inventory in self.browse(ids):
+ if inventory.state != 'cancel':
+ self.raise_user_error('delete_cancel', inventory.rec_name)
+ return super(Inventory, self).delete(ids)
- def wkf_done(self, inventory):
- date_obj = Pool().get('ir.date')
+ @ModelView.button
+ @Workflow.transition('done')
+ def confirm(self, ids):
line_obj = Pool().get('stock.inventory.line')
+ for inventory in self.browse(ids):
+ for line in inventory.lines:
+ line_obj.create_move(line)
- for line in inventory.lines:
- line_obj.create_move(line)
- self.write(inventory.id, {
- 'state': 'done',
- })
+ @ModelView.button
+ @Workflow.transition('cancel')
+ def cancel(self, ids):
+ line_obj = Pool().get("stock.inventory.line")
+ inventories = self.browse(ids)
+ line_obj.cancel_move([l for i in inventories for l in i.lines])
def copy(self, ids, default=None):
date_obj = Pool().get('ir.date')
@@ -113,7 +132,7 @@ class Inventory(ModelWorkflow, ModelSQL, ModelView):
default = {}
default = default.copy()
default['date'] = date_obj.today()
- default['lines'] = False
+ default['lines'] = None
new_ids = []
for inventory in self.browse(ids):
@@ -121,7 +140,7 @@ class Inventory(ModelWorkflow, ModelSQL, ModelView):
line_obj.copy([x.id for x in inventory.lines],
default={
'inventory': new_id,
- 'move': False,
+ 'move': None,
})
self.complete_lines(new_id)
new_ids.append(new_id)
@@ -140,7 +159,6 @@ class Inventory(ModelWorkflow, ModelSQL, ModelView):
pool = Pool()
line_obj = pool.get('stock.inventory.line')
product_obj = pool.get('product.product')
- uom_obj = pool.get('product.uom')
if isinstance(ids, (int, long)):
ids = [ids]
@@ -156,9 +174,11 @@ class Inventory(ModelWorkflow, ModelSQL, ModelView):
# Index some data
product2uom = {}
product2type = {}
+ product2consumable = {}
for product in product_obj.browse([line[1] for line in pbl]):
product2uom[product.id] = product.default_uom.id
product2type[product.id] = product.type
+ product2consumable[product.id] = product.consumable
product_qty = {}
for (location, product), quantity in pbl.iteritems():
@@ -167,7 +187,8 @@ class Inventory(ModelWorkflow, ModelSQL, ModelView):
# Update existing lines
for line in inventory.lines:
if not (line.product.active and
- line.product.type == 'stockable'):
+ line.product.type == 'goods'
+ and not line.product.consumable):
line_obj.delete(line.id)
continue
if line.product.id in product_qty:
@@ -176,13 +197,15 @@ class Inventory(ModelWorkflow, ModelSQL, ModelView):
quantity, uom_id = 0.0, product2uom[line.product.id]
else:
quantity, uom_id = 0.0, line.product.default_uom.id
- values = line_obj.update_values4complete(line, quantity, uom_id)
+ values = line_obj.update_values4complete(line, quantity,
+ uom_id)
if values:
line_obj.write(line.id, values)
# Create lines if needed
for product_id in product_qty:
- if product2type[product_id] != 'stockable':
+ if (product2type[product_id] != 'goods'
+ and not product2consumable[product_id]):
continue
quantity, uom_id = product_qty[product_id]
values = line_obj.create_values4complete(product_id, inventory,
@@ -199,15 +222,19 @@ class InventoryLine(ModelSQL, ModelView):
_rec_name = 'product'
product = fields.Many2One('product.product', 'Product', required=True,
- domain=[('type', '=', 'stockable')], on_change=['product'])
+ domain=[
+ ('type', '=', 'goods'),
+ ('consumable', '=', False),
+ ],
+ on_change=['product'])
uom = fields.Function(fields.Many2One('product.uom', 'UOM'), 'get_uom')
unit_digits = fields.Function(fields.Integer('Unit Digits'),
'get_unit_digits')
- expected_quantity = fields.Float('Expected Quantity',
+ expected_quantity = fields.Float('Expected Quantity', required=True,
digits=(16, Eval('unit_digits', 2)), readonly=True,
depends=['unit_digits'])
- quantity = fields.Float('Quantity', digits=(16, Eval('unit_digits', 2)),
- depends=['unit_digits'])
+ quantity = fields.Float('Quantity', required=True,
+ digits=(16, Eval('unit_digits', 2)), depends=['unit_digits'])
move = fields.Many2One('stock.move', 'Move', readonly=True)
inventory = fields.Many2One('stock.inventory', 'Inventory', required=True,
ondelete='CASCADE')
@@ -225,9 +252,11 @@ class InventoryLine(ModelSQL, ModelView):
def default_unit_digits(self):
return 2
+ def default_expected_quantity(self):
+ return 0.
+
def on_change_product(self, vals):
product_obj = Pool().get('product.product')
- uom_obj = Pool().get('product.uom')
res = {}
res['unit_digits'] = 2
if vals.get('product'):
@@ -251,12 +280,12 @@ class InventoryLine(ModelSQL, ModelView):
def cancel_move(self, lines):
move_obj = Pool().get('stock.move')
- move_obj.write( [l.move.id for l in lines if l.move], {
+ move_obj.write([l.move.id for l in lines if l.move], {
'state': 'cancel',
})
move_obj.delete([l.move.id for l in lines if l.move])
self.write([l.id for l in lines if l.move], {
- 'move': False,
+ 'move': None,
})
def create_move(self, line):
@@ -335,25 +364,3 @@ class InventoryLine(ModelSQL, ModelView):
}
InventoryLine()
-
-
-class CompleteInventory(Wizard):
- 'Complete Inventory'
- _name = 'stock.inventory.complete'
- states = {
- 'init': {
- 'result': {
- 'type': 'action',
- 'action': '_complete',
- 'state': 'end',
- },
- },
- }
-
- def _complete(self, data):
- inventory_obj = Pool().get('stock.inventory')
- inventory_obj.complete_lines(data['ids'])
-
- return {}
-
-CompleteInventory()
diff --git a/inventory.xml b/inventory.xml
index 0ff605c..39818cb 100644
--- a/inventory.xml
+++ b/inventory.xml
@@ -3,16 +3,6 @@
this repository contains the full copyright notices and license terms. -->
<tryton>
<data>
- <record model="ir.action.wizard" id="wizard_complete_inventory">
- <field name="name">Complete Inventory</field>
- <field name="wiz_name">stock.inventory.complete</field>
- <field name="model">stock.inventory</field>
- </record>
- <record model="ir.action-res.group"
- id="wizard_complete_inventory_group_stock">
- <field name="action" ref="wizard_complete_inventory"/>
- <field name="group" ref="group_stock"/>
- </record>
<record model="ir.ui.view" id="inventory_view_form">
<field name="model">stock.inventory</field>
@@ -29,24 +19,18 @@ this repository contains the full copyright notices and license terms. -->
<label name="company"/>
<field name="company"/>
<label colspan="2" id="empty"/>
- <button string="Complete Inventory" type="action"
- name="%(wizard_complete_inventory)d"
- states="{'readonly': Not(Equal(Eval('state'), 'draft'))}"
- colspan="2"
+ <button string="Complete Inventory"
+ name="complete_lines" type="object" colspan="2"
help="Add an inventory line for each missing products"/>
<field name="lines" colspan="4"/>
<group col="4" colspan="4" id="group_buttons">
<label name="state"/>
<field name="state"/>
<group colspan="2" col="3" id="buttons">
- <button string="Cancel"
- name="cancel"
- states="{'invisible': In(Eval('state'), ['cancel', 'done']), 'readonly': Not(In(%(group_stock)d, Eval('groups', [])))}"
- icon="tryton-cancel" />
- <button string="Confirm"
- name="done"
- states="{'invisible': In(Eval('state'), ['done','cancel']), 'readonly': Not(In(%(group_stock)d, Eval('groups', [])))}"
- icon="tryton-ok"/>
+ <button string="Cancel" name="cancel"
+ type="object" icon="tryton-cancel" />
+ <button string="Confirm" name="confirm"
+ type="object" icon="tryton-ok"/>
</group>
</group>
</form>
@@ -148,45 +132,6 @@ this repository contains the full copyright notices and license terms. -->
</field>
</record>
- <!-- Workflow inventory -->
- <record model="workflow" id="wkf_inventory">
- <field name="name">Inventory</field>
- <field name="model">stock.inventory</field>
- <field name="on_create">True</field>
- </record>
- <record model="workflow.activity" id="inventory_act_draft">
- <field name="workflow" ref="wkf_inventory"/>
- <field name="flow_start">True</field>
- <field name="method">wkf_draft</field>
- <field name="name">Draft</field>
- </record>
- <record model="workflow.activity" id="inventory_act_cancel">
- <field name="workflow" ref="wkf_inventory"/>
- <field name="flow_stop">True</field>
- <field name="name">Canceled</field>
- <field name="method">wkf_cancel</field>
- </record>
- <record model="workflow.activity" id="inventory_act_done">
- <field name="workflow" ref="wkf_inventory"/>
- <field name="flow_stop">True</field>
- <field name="name">Done</field>
- <field name="method">wkf_done</field>
- </record>
- <record model="workflow.transition"
- id="inventory_trans_draft_cancel">
- <field name="act_from" ref="inventory_act_draft"/>
- <field name="act_to" ref="inventory_act_cancel"/>
- <field name="group" ref="group_stock"/>
- <field name="signal">cancel</field>
- </record>
- <record model="workflow.transition"
- id="inventory_trans_draft_done">
- <field name="act_from" ref="inventory_act_draft"/>
- <field name="act_to" ref="inventory_act_done"/>
- <field name="group" ref="group_stock"/>
- <field name="signal">done</field>
- </record>
-
<record model="ir.model.access" id="access_inventory">
<field name="model" search="[('model', '=', 'stock.inventory')]"/>
<field name="perm_read" eval="False"/>
@@ -219,5 +164,25 @@ this repository contains the full copyright notices and license terms. -->
<field name="perm_delete" eval="True"/>
</record>
+ <record model="ir.model.button" id="inventory_confirm_button">
+ <field name="name">confirm</field>
+ <field name="model" search="[('model', '=', 'stock.inventory')]"/>
+ </record>
+ <record model="ir.model.button-res.group"
+ id="inventory_confirm_button_group_stock">
+ <field name="button" ref="inventory_confirm_button"/>
+ <field name="group" ref="group_stock"/>
+ </record>
+
+ <record model="ir.model.button" id="inventory_cancel_button">
+ <field name="name">cancel</field>
+ <field name="model" search="[('model', '=', 'stock.inventory')]"/>
+ </record>
+ <record model="ir.model.button-res.group"
+ id="inventory_cancel_button_group_stock">
+ <field name="button" ref="inventory_cancel_button"/>
+ <field name="group" ref="group_stock"/>
+ </record>
+
</data>
</tryton>
diff --git a/locale/bg_BG.po b/locale/bg_BG.po
index a537aaa..b9901e6 100644
--- a/locale/bg_BG.po
+++ b/locale/bg_BG.po
@@ -2,7 +2,7 @@
msgid ""
msgstr "Content-Type: text/plain; charset=utf-8\n"
-msgctxt "error:product.template:0"
+msgctxt "error:product.template:"
msgid ""
"You cannot change the default uom for a product which is associated to stock"
" moves."
@@ -10,15 +10,19 @@ msgstr ""
"Ðе може да пÑоменÑÑе меÑ. ед. на пÑодÑÐºÑ ÐºÐ¾Ð¹Ñо е ÑвÑÑзан Ñ Ð´Ð²Ð¸Ð¶ÐµÐ½Ð¸Ñ Ð½Ð° "
"налиÑноÑÑ."
-msgctxt "error:stock.inventory.line:0"
+msgctxt "error:stock.inventory.line:"
msgid "Line quantity must be positive!"
msgstr "ÐолиÑеÑÑвоÑо на Ñеда ÑÑÑбва да е положиÑелно ÑиÑло!"
-msgctxt "error:stock.inventory.line:0"
+msgctxt "error:stock.inventory.line:"
msgid "Product must be unique by inventory!"
msgstr "ÐÑодÑкÑа ÑÑÑбва да е Ñникален по инвенÑаÑизаÑиÑ!"
-msgctxt "error:stock.location:0"
+msgctxt "error:stock.inventory:"
+msgid "Inventory \"%s\" must be cancelled before deletion!"
+msgstr ""
+
+msgctxt "error:stock.location:"
msgid ""
"A location with existing moves cannot be changed to a type that does not "
"support moves."
@@ -26,69 +30,71 @@ msgstr ""
"ÐеÑÑонаÑ
ождение ÑÑÑ ÑÑÑеÑÑвÑваÑи Ð´Ð²Ð¸Ð¶ÐµÐ½Ð¸Ñ Ð½Ðµ може да бÑде пÑоменено Ñ Ñакова"
" коеÑо не поддÑÑжа движениÑ"
-msgctxt "error:stock.location:0"
+msgctxt "error:stock.location:"
msgid "Location \"%s\" must be a child of warehouse \"%s\"!"
msgstr "ÐеÑÑонаÑ
ождение \"%s\" ÑÑÑбва да е подÑинен на Ñклад \"%s\" !"
-msgctxt "error:stock.location:0"
+msgctxt "error:stock.location:"
msgid "You can not create recursive locations!"
msgstr "Ðе може да ÑÑздаваÑе взаимновложени меÑÑонаÑ
ождениÑ!"
-msgctxt "error:stock.move:0"
+msgctxt "error:stock.move:"
msgid "Internal move quantity must be positive"
msgstr "ÐолиÑеÑÑваÑа на движение ÑÑÑбва да Ñа положиÑелно ÑиÑло"
-msgctxt "error:stock.move:0"
+msgctxt "error:stock.move:"
msgid "Move can be on only one Shipment"
msgstr "ÐвижениеÑо ÑÑÑбва да Ñамо вÑÑÑ
Ñ ÐµÐ´Ð½Ð¾ изпÑаÑане"
-msgctxt "error:stock.move:0"
+msgctxt "error:stock.move:"
msgid "Move quantity must be positive"
msgstr "ÐолиÑеÑÑвоÑо на движение ÑÑÑбва да е положиÑелно ÑиÑло"
-msgctxt "error:stock.move:0"
+msgctxt "error:stock.move:"
msgid "Source and destination location must be different"
msgstr "ÐзÑоÑника и ÑелÑа на меÑÑонаÑ
ождениеÑо ÑÑÑбва да Ñа ÑазлиÑни"
-msgctxt "error:stock.move:0"
+msgctxt "error:stock.move:"
msgid "You can not modify a move in the state: \"Assigned\", \"Done\" or \"Cancel\""
msgstr ""
"Ðе може да пÑоменÑÑе движение в ÑÑÑÑоÑние: \"ÐазнаÑен\", \"ÐÑиклÑÑен\" или "
"\"ÐÑказ\""
-msgctxt "error:stock.move:0"
+msgctxt "error:stock.move:"
msgid "You can not modify move in closed period!"
msgstr "Ðе може да пÑоменÑÑе заÑвоÑен пеÑиод!"
-msgctxt "error:stock.move:0"
+msgctxt "error:stock.move:"
msgid "You can not set state to assigned!"
msgstr "Ðе може да пÑомениÑе ÑÑÑÑоÑниеÑо в назнаÑен!"
-msgctxt "error:stock.move:0"
+msgctxt "error:stock.move:"
msgid "You can not set state to done!"
msgstr "Ðе може да пÑеÑ
вÑÑлиÑе в ÑÑÑÑоÑние ÐоÑов!"
-msgctxt "error:stock.move:0"
+msgctxt "error:stock.move:"
msgid "You can not set state to draft!"
msgstr "Ðе може да пÑаÑиÑе ÑÑаÑÑÑа в пÑоекÑ!"
-msgctxt "error:stock.move:0"
-msgid "You can not use service products for a move!"
-msgstr "Рдвижение не може да използваÑе пÑодÑкÑи коиÑо Ñа ÑÑлÑги! "
-
-msgctxt "error:stock.move:0"
+msgctxt "error:stock.move:"
msgid "You can only delete draft or cancelled moves!"
msgstr "Ðе може да изÑÑиваÑе Ð´Ð²Ð¸Ð¶ÐµÐ½Ð¸Ñ Ð² ÑÑаÑÑÑ Ð¿ÑÐ¾ÐµÐºÑ Ð¸Ð»Ð¸ оÑказан!"
-msgctxt "error:stock.period:0"
+msgctxt "error:stock.period:"
msgid "You can not close a period in the future or today!"
msgstr "Ðе може да заÑваÑÑÑе пеÑиод Ð¾Ñ Ð´Ð½ÐµÑ Ð¸Ð»Ð¸ в бедеÑеÑо!"
-msgctxt "error:stock.period:0"
+msgctxt "error:stock.period:"
msgid "You can not close a period when there is still assigned moves!"
msgstr "Ðе може да заÑваÑÑÑе пеÑиод когаÑо ÑÑдÑÑжа назнаÑени движениÑ!"
-msgctxt "error:stock.shipment.in:0"
+msgctxt "error:stock.shipment.in.return:"
+msgid "Supplier Return Shipment \"%s\" must be cancelled before deletion!"
+msgstr ""
+"ÐÑаÑка вÑÑнаÑа Ð¾Ñ Ð´Ð¾ÑÑавÑик \"%s\" ÑÑÑбва да бÑде оÑказана пÑеди да бÑде "
+"изÑÑиÑа!"
+
+msgctxt "error:stock.shipment.in:"
msgid ""
"Incoming Moves must have the warehouse input location as destination "
"location!"
@@ -96,621 +102,914 @@ msgstr ""
"ÐÑ
одÑÑиÑе Ð´Ð²Ð¸Ð¶ÐµÐ½Ð¸Ñ ÑÑÑбва да Ð¸Ð¼Ð°Ñ Ð¼ÐµÑÑонаÑ
ождение-вÑ
од на Ñклад каÑо "
"меÑÑонаÑ
ождение-Ñел!"
-msgctxt "error:stock.shipment.in:0"
+msgctxt "error:stock.shipment.in:"
msgid ""
"Inventory Moves must have the warehouse input location as source location!"
msgstr ""
"Ðвижение на инвенÑаÑизаÑÐ¸Ñ ÑÑÑбва да Ð¸Ð¼Ð°Ñ Ð¼ÐµÑÑонаÑ
ождение-вÑ
од на Ñклад каÑо"
" меÑÑонаÑ
ождение-изÑоÑник!"
-msgctxt "error:stock.shipment.out.return.create:0"
+msgctxt "error:stock.shipment.in:"
+msgid "Supplier Shipment \"%s\" must be cancelled before deletion!"
+msgstr "ÐÑаÑка на доÑÑавÑик \"%s\" ÑÑÑбва да бÑде оÑказана пÑеди да бÑде изÑÑиÑа!"
+
+msgctxt "error:stock.shipment.internal:"
+msgid "Internal Shipment \"%s\" must be cancelled before deletion!"
+msgstr ""
+
+msgctxt "error:stock.shipment.out.return.create:"
msgid "The shipment with code %s is not yet sent."
msgstr "ÐÑаÑкаÑа Ñ ÐºÐ¾Ð´ %s оÑе не е изпÑаÑена"
-msgctxt "error:stock.shipment.out.return.create:0"
+msgctxt "error:stock.shipment.out.return.create:"
msgid "You can not create return shipment"
msgstr "Ðе може да ÑÑздадеÑе вÑÑÑане на пÑаÑка"
-msgctxt "error:stock.shipment.out.return:0"
-msgid ""
-"Incoming Moves must have the warehouse input location as destination "
-"location!"
+msgctxt "error:stock.shipment.out.return:"
+msgid "Customer Return Shipment \"%s\" must be cancelled before deletion!"
msgstr ""
-"ÐÑ
одÑÑиÑе Ð´Ð²Ð¸Ð¶ÐµÐ½Ð¸Ñ ÑÑÑбва да Ð¸Ð¼Ð°Ñ ÐºÐ°Ñо меÑÑонаÑ
ождение-Ñел деÑÑонаÑиÑ-вÑ
од "
-"на Ñклад!"
-msgctxt "error:stock.shipment.out.return:0"
-msgid ""
-"Inventory Moves must have the warehouse input location as source location!"
-msgstr ""
-"Ðвижение на инвенÑаÑизаÑÐ¸Ñ ÑÑÑбва да Ð¸Ð¼Ð°Ñ Ð¼ÐµÑÑонаÑ
ождение-вÑ
од на Ñклад каÑо"
-" меÑÑонаÑ
ождение-изÑоÑник!"
-
-msgctxt "error:stock.shipment.out:0"
-msgid ""
-"Inventory Moves must have the warehouse output location as destination "
-"location!"
+msgctxt "error:stock.shipment.out:"
+msgid "Customer Shipment \"%s\" must be cancelled before deletion!"
msgstr ""
-"Ðвижение на инвенÑаÑизаÑÐ¸Ñ ÑÑÑбва да Ð¸Ð¼Ð°Ñ Ð¼ÐµÑÑонаÑ
ождение-изÑ
од на Ñклад "
-"каÑо меÑÑонаÑ
ождение-Ñел!"
-msgctxt "error:stock.shipment.out:0"
-msgid ""
-"Outgoing Moves must have the warehouse output location as source location!"
-msgstr ""
-"ÐзÑ
одÑÑиÑе Ð´Ð²Ð¸Ð¶ÐµÐ½Ð¸Ñ ÑÑÑбва да Ð¸Ð¼Ð°Ñ Ð¼ÐµÑÑонаÑ
ождение-изÑ
од на Ñклад каÑо "
-"меÑÑонаÑ
ождение-изÑоÑник!"
-
-msgctxt "field:party.address,delivery:0"
+msgctxt "field:party.address,delivery:"
msgid "Delivery"
msgstr "ÐоÑÑавка"
-msgctxt "field:party.party,customer_location:0"
+msgctxt "field:party.party,customer_location:"
msgid "Customer Location"
msgstr "ÐеÑÑонаÑ
ождение на клиенÑ"
-msgctxt "field:party.party,supplier_location:0"
+msgctxt "field:party.party,supplier_location:"
msgid "Supplier Location"
msgstr "ÐеÑÑонаÑ
ождение на доÑÑавÑик"
-msgctxt "field:product.product,forecast_quantity:0"
+msgctxt "field:product.by_location.start,forecast_date:"
+msgid "At Date"
+msgstr "Ðа даÑа"
+
+msgctxt "field:product.by_location.start,id:"
+msgid "ID"
+msgstr "ID"
+
+msgctxt "field:product.product,cost_value:"
+msgid "Cost Value"
+msgstr ""
+
+msgctxt "field:product.product,forecast_quantity:"
msgid "Forecast Quantity"
msgstr "ÐланиÑано колиÑеÑÑво"
-msgctxt "field:product.product,quantity:0"
+msgctxt "field:product.product,quantity:"
msgid "Quantity"
msgstr "ÐолиÑеÑÑво"
-msgctxt "field:product.template,forecast_quantity:0"
+msgctxt "field:product.template,cost_value:"
+msgid "Cost Value"
+msgstr ""
+
+msgctxt "field:product.template,forecast_quantity:"
msgid "Forecast Quantity"
msgstr "ÐланиÑано колиÑеÑÑво"
-msgctxt "field:product.template,quantity:0"
+msgctxt "field:product.template,quantity:"
msgid "Quantity"
msgstr "ÐолиÑеÑÑво"
-msgctxt "field:stock.configuration,rec_name:0"
+msgctxt "field:stock.configuration,create_date:"
+msgid "Create Date"
+msgstr "СÑздадено на"
+
+msgctxt "field:stock.configuration,create_uid:"
+msgid "Create User"
+msgstr "СÑздадено оÑ"
+
+msgctxt "field:stock.configuration,id:"
+msgid "ID"
+msgstr "ID"
+
+msgctxt "field:stock.configuration,rec_name:"
msgid "Name"
msgstr "Ðме"
-msgctxt "field:stock.configuration,shipment_in_return_sequence:0"
+msgctxt "field:stock.configuration,shipment_in_return_sequence:"
msgid "Supplier Return Shipment Sequence"
msgstr "ÐоÑледоваÑелноÑÑ Ð·Ð° пÑаÑка вÑÑнаÑа на доÑÑавик"
-msgctxt "field:stock.configuration,shipment_in_sequence:0"
+msgctxt "field:stock.configuration,shipment_in_sequence:"
msgid "Supplier Shipment Sequence"
msgstr "ÐоÑледоваÑелноÑÑ Ð·Ð° пÑаÑка на доÑÑавÑик"
-msgctxt "field:stock.configuration,shipment_internal_sequence:0"
+msgctxt "field:stock.configuration,shipment_internal_sequence:"
msgid "Internal Shipment Sequence"
msgstr "ÐоÑледоваÑелноÑÑ Ð½Ð° вÑÑÑеÑна пÑаÑка"
-msgctxt "field:stock.configuration,shipment_out_return_sequence:0"
+msgctxt "field:stock.configuration,shipment_out_return_sequence:"
msgid "Customer Return Shipment Sequence"
msgstr "ÐоÑледоваÑелноÑÑ Ð·Ð° пÑаÑка вÑÑнаÑа Ð¾Ñ ÐºÐ»Ð¸ÐµÐ½Ñ"
-msgctxt "field:stock.configuration,shipment_out_sequence:0"
+msgctxt "field:stock.configuration,shipment_out_sequence:"
msgid "Customer Shipment Sequence"
msgstr "ÐоÑледоваÑелноÑÑ Ð½Ð° пÑаÑка за клиенÑ"
-msgctxt "field:stock.inventory,company:0"
+msgctxt "field:stock.configuration,write_date:"
+msgid "Write Date"
+msgstr "ÐÑоменено на"
+
+msgctxt "field:stock.configuration,write_uid:"
+msgid "Write User"
+msgstr "ÐÑоменено оÑ"
+
+msgctxt "field:stock.inventory,company:"
msgid "Company"
msgstr "ФиÑма"
-msgctxt "field:stock.inventory,date:0"
+msgctxt "field:stock.inventory,create_date:"
+msgid "Create Date"
+msgstr "СÑздадено на"
+
+msgctxt "field:stock.inventory,create_uid:"
+msgid "Create User"
+msgstr "СÑздадено оÑ"
+
+msgctxt "field:stock.inventory,date:"
msgid "Date"
msgstr "ÐаÑа"
-msgctxt "field:stock.inventory,lines:0"
+msgctxt "field:stock.inventory,id:"
+msgid "ID"
+msgstr "ID"
+
+msgctxt "field:stock.inventory,lines:"
msgid "Lines"
msgstr "Редове"
-msgctxt "field:stock.inventory,location:0"
+msgctxt "field:stock.inventory,location:"
msgid "Location"
msgstr "ÐеÑÑоположение"
-msgctxt "field:stock.inventory,lost_found:0"
+msgctxt "field:stock.inventory,lost_found:"
msgid "Lost and Found"
msgstr "ÐагÑбени и намеÑени"
-msgctxt "field:stock.inventory,rec_name:0"
+msgctxt "field:stock.inventory,rec_name:"
msgid "Name"
msgstr "Ðме"
-msgctxt "field:stock.inventory,state:0"
+msgctxt "field:stock.inventory,state:"
msgid "State"
msgstr "СÑÑÑоÑние"
-msgctxt "field:stock.inventory.line,expected_quantity:0"
+msgctxt "field:stock.inventory,write_date:"
+msgid "Write Date"
+msgstr "ÐÑоменено на"
+
+msgctxt "field:stock.inventory,write_uid:"
+msgid "Write User"
+msgstr "ÐÑоменено оÑ"
+
+msgctxt "field:stock.inventory.line,create_date:"
+msgid "Create Date"
+msgstr "СÑздадено на"
+
+msgctxt "field:stock.inventory.line,create_uid:"
+msgid "Create User"
+msgstr "СÑздадено оÑ"
+
+msgctxt "field:stock.inventory.line,expected_quantity:"
msgid "Expected Quantity"
msgstr "ÐÑаквано колиÑеÑÑво"
-msgctxt "field:stock.inventory.line,inventory:0"
+msgctxt "field:stock.inventory.line,id:"
+msgid "ID"
+msgstr "ID"
+
+msgctxt "field:stock.inventory.line,inventory:"
msgid "Inventory"
msgstr "ÐнвенÑаÑизаÑиÑ"
-msgctxt "field:stock.inventory.line,move:0"
+msgctxt "field:stock.inventory.line,move:"
msgid "Move"
msgstr "Ðвижение"
-msgctxt "field:stock.inventory.line,product:0"
+msgctxt "field:stock.inventory.line,product:"
msgid "Product"
msgstr "ÐÑодÑкÑ"
-msgctxt "field:stock.inventory.line,quantity:0"
+msgctxt "field:stock.inventory.line,quantity:"
msgid "Quantity"
msgstr "ÐолиÑеÑÑво"
-msgctxt "field:stock.inventory.line,rec_name:0"
+msgctxt "field:stock.inventory.line,rec_name:"
msgid "Name"
msgstr "Ðме"
-msgctxt "field:stock.inventory.line,unit_digits:0"
+msgctxt "field:stock.inventory.line,unit_digits:"
msgid "Unit Digits"
msgstr "ÐеÑеÑиÑни единиÑи"
-msgctxt "field:stock.inventory.line,uom:0"
+msgctxt "field:stock.inventory.line,uom:"
msgid "UOM"
msgstr "ÐеÑ. ед."
-msgctxt "field:stock.location,active:0"
+msgctxt "field:stock.inventory.line,write_date:"
+msgid "Write Date"
+msgstr "ÐÑоменено на"
+
+msgctxt "field:stock.inventory.line,write_uid:"
+msgid "Write User"
+msgstr "ÐÑоменено оÑ"
+
+msgctxt "field:stock.location,active:"
msgid "Active"
msgstr "ÐкÑивен"
-msgctxt "field:stock.location,address:0"
+msgctxt "field:stock.location,address:"
msgid "Address"
msgstr "ÐдÑеÑ"
-msgctxt "field:stock.location,childs:0"
+msgctxt "field:stock.location,childs:"
msgid "Children"
msgstr "ÐеÑа"
-msgctxt "field:stock.location,code:0"
+msgctxt "field:stock.location,code:"
msgid "Code"
msgstr "Ðод"
-msgctxt "field:stock.location,forecast_quantity:0"
+msgctxt "field:stock.location,cost_value:"
+msgid "Cost Value"
+msgstr ""
+
+msgctxt "field:stock.location,create_date:"
+msgid "Create Date"
+msgstr "СÑздадено на"
+
+msgctxt "field:stock.location,create_uid:"
+msgid "Create User"
+msgstr "СÑздадено оÑ"
+
+msgctxt "field:stock.location,forecast_quantity:"
msgid "Forecast Quantity"
msgstr "ÐланиÑани колиÑеÑÑва"
-msgctxt "field:stock.location,input_location:0"
+msgctxt "field:stock.location,id:"
+msgid "ID"
+msgstr "ID"
+
+msgctxt "field:stock.location,input_location:"
msgid "Input"
msgstr "ÐÑ
од"
-msgctxt "field:stock.location,left:0"
+msgctxt "field:stock.location,left:"
msgid "Left"
msgstr "ÐÑв"
-msgctxt "field:stock.location,name:0"
+msgctxt "field:stock.location,name:"
msgid "Name"
msgstr "Ðме"
-msgctxt "field:stock.location,output_location:0"
+msgctxt "field:stock.location,output_location:"
msgid "Output"
msgstr "ÐзÑ
од"
-msgctxt "field:stock.location,parent:0"
+msgctxt "field:stock.location,parent:"
msgid "Parent"
msgstr "РодиÑел"
-msgctxt "field:stock.location,quantity:0"
+msgctxt "field:stock.location,quantity:"
msgid "Quantity"
msgstr "ÐолиÑеÑÑво"
-msgctxt "field:stock.location,rec_name:0"
+msgctxt "field:stock.location,rec_name:"
msgid "Name"
msgstr "Ðме"
-msgctxt "field:stock.location,right:0"
+msgctxt "field:stock.location,right:"
msgid "Right"
msgstr "ÐеÑен"
-msgctxt "field:stock.location,storage_location:0"
+msgctxt "field:stock.location,storage_location:"
msgid "Storage"
msgstr "Склад"
-msgctxt "field:stock.location,type:0"
+msgctxt "field:stock.location,type:"
msgid "Location type"
msgstr "Ðид меÑÑонаÑ
ождение"
-msgctxt "field:stock.location_stock_date.init,forecast_date:0"
-msgid "At Date"
-msgstr "Ðа даÑа"
+msgctxt "field:stock.location,write_date:"
+msgid "Write Date"
+msgstr "ÐÑоменено на"
+
+msgctxt "field:stock.location,write_uid:"
+msgid "Write User"
+msgstr "ÐÑоменено оÑ"
-msgctxt "field:stock.move,company:0"
+msgctxt "field:stock.move,company:"
msgid "Company"
msgstr "ФиÑма"
-msgctxt "field:stock.move,cost_price:0"
+msgctxt "field:stock.move,cost_price:"
msgid "Cost Price"
msgstr "ФабÑиÑна Ñена"
-msgctxt "field:stock.move,currency:0"
+msgctxt "field:stock.move,create_date:"
+msgid "Create Date"
+msgstr "СÑздадено на"
+
+msgctxt "field:stock.move,create_uid:"
+msgid "Create User"
+msgstr "СÑздадено оÑ"
+
+msgctxt "field:stock.move,currency:"
msgid "Currency"
msgstr "ÐалÑÑа"
-msgctxt "field:stock.move,effective_date:0"
+msgctxt "field:stock.move,effective_date:"
msgid "Effective Date"
msgstr "ÐÑекÑивна даÑа"
-msgctxt "field:stock.move,from_location:0"
+msgctxt "field:stock.move,from_location:"
msgid "From Location"
msgstr "ÐÑ Ð¼ÐµÑÑонаÑ
ождение"
-msgctxt "field:stock.move,internal_quantity:0"
+msgctxt "field:stock.move,id:"
+msgid "ID"
+msgstr "ID"
+
+msgctxt "field:stock.move,internal_quantity:"
msgid "Internal Quantity"
msgstr "ÐÑÑÑеÑно колиÑеÑÑво"
-msgctxt "field:stock.move,planned_date:0"
+msgctxt "field:stock.move,planned_date:"
msgid "Planned Date"
msgstr "ÐланиÑана даÑа"
-msgctxt "field:stock.move,product:0"
+msgctxt "field:stock.move,product:"
msgid "Product"
msgstr "ÐÑодÑкÑ"
-msgctxt "field:stock.move,quantity:0"
+msgctxt "field:stock.move,product_uom_category:"
+msgid "Product Uom Category"
+msgstr ""
+
+msgctxt "field:stock.move,quantity:"
msgid "Quantity"
msgstr "ÐолиÑеÑÑво"
-msgctxt "field:stock.move,rec_name:0"
+msgctxt "field:stock.move,rec_name:"
msgid "Name"
msgstr "Ðме"
-msgctxt "field:stock.move,shipment_in:0"
+msgctxt "field:stock.move,shipment_in:"
msgid "Supplier Shipment"
msgstr "ÐÑаÑка на доÑÑавÑик"
-msgctxt "field:stock.move,shipment_in_return:0"
+msgctxt "field:stock.move,shipment_in_return:"
msgid "Supplier Return Shipment"
-msgstr "ÐÑаÑка вÑÑнаÑа Ð¾Ñ Ð´Ð¾ÑÑавÑик'"
+msgstr "ÐÑаÑка вÑÑнаÑа Ð¾Ñ Ð´Ð¾ÑÑавÑик"
-msgctxt "field:stock.move,shipment_internal:0"
+msgctxt "field:stock.move,shipment_internal:"
msgid "Internal Shipment"
msgstr "ÐÑÑÑеÑно изпÑаÑане"
-msgctxt "field:stock.move,shipment_out:0"
+msgctxt "field:stock.move,shipment_out:"
msgid "Customer Shipment"
msgstr "ÐÑаÑка за клиенÑ"
-msgctxt "field:stock.move,shipment_out_return:0"
+msgctxt "field:stock.move,shipment_out_return:"
msgid "Customer Return Shipment"
msgstr "ÐÑаÑка вÑÑнаÑа Ð¾Ñ ÐºÐ»Ð¸ÐµÐ½Ñ"
-msgctxt "field:stock.move,state:0"
+msgctxt "field:stock.move,state:"
msgid "State"
msgstr "СÑÑÑоÑние"
-msgctxt "field:stock.move,to_location:0"
+msgctxt "field:stock.move,to_location:"
msgid "To Location"
msgstr "ÐÑм меÑÑонаÑ
ождение"
-msgctxt "field:stock.move,unit_digits:0"
+msgctxt "field:stock.move,unit_digits:"
msgid "Unit Digits"
msgstr "ÐеÑеÑиÑни единиÑи"
-msgctxt "field:stock.move,unit_price:0"
+msgctxt "field:stock.move,unit_price:"
msgid "Unit Price"
msgstr "ÐдиниÑна Ñена"
-msgctxt "field:stock.move,unit_price_required:0"
+msgctxt "field:stock.move,unit_price_required:"
msgid "Unit Price Required"
msgstr "ÐдиниÑнаÑа Ñена е задÑлжиÑелна"
-msgctxt "field:stock.move,uom:0"
+msgctxt "field:stock.move,uom:"
msgid "Uom"
msgstr "ÐеÑ. ед."
-msgctxt "field:stock.period,caches:0"
+msgctxt "field:stock.move,write_date:"
+msgid "Write Date"
+msgstr "ÐÑоменено на"
+
+msgctxt "field:stock.move,write_uid:"
+msgid "Write User"
+msgstr "ÐÑоменено оÑ"
+
+msgctxt "field:stock.period,caches:"
msgid "Caches"
msgstr "ÐаÑи в налиÑноÑÑ"
-msgctxt "field:stock.period,company:0"
+msgctxt "field:stock.period,company:"
msgid "Company"
msgstr "ФиÑма"
-msgctxt "field:stock.period,date:0"
+msgctxt "field:stock.period,create_date:"
+msgid "Create Date"
+msgstr "СÑздадено на"
+
+msgctxt "field:stock.period,create_uid:"
+msgid "Create User"
+msgstr "СÑздадено оÑ"
+
+msgctxt "field:stock.period,date:"
msgid "Date"
msgstr "ÐаÑа"
-msgctxt "field:stock.period,rec_name:0"
+msgctxt "field:stock.period,id:"
+msgid "ID"
+msgstr "ID"
+
+msgctxt "field:stock.period,rec_name:"
msgid "Name"
msgstr "Ðме на пÑикаÑен Ñайл"
-msgctxt "field:stock.period,state:0"
+msgctxt "field:stock.period,state:"
msgid "State"
-msgstr "ЩаÑ"
+msgstr "СÑÑÑоÑние"
-msgctxt "field:stock.period.cache,internal_quantity:0"
+msgctxt "field:stock.period,write_date:"
+msgid "Write Date"
+msgstr "ÐÑоменено на"
+
+msgctxt "field:stock.period,write_uid:"
+msgid "Write User"
+msgstr "ÐÑоменено оÑ"
+
+msgctxt "field:stock.period.cache,create_date:"
+msgid "Create Date"
+msgstr "СÑздадено на"
+
+msgctxt "field:stock.period.cache,create_uid:"
+msgid "Create User"
+msgstr "СÑздадено оÑ"
+
+msgctxt "field:stock.period.cache,id:"
+msgid "ID"
+msgstr "ID"
+
+msgctxt "field:stock.period.cache,internal_quantity:"
msgid "Internal Quantity"
msgstr "ÐÑÑÑеÑно колиÑеÑÑво"
-msgctxt "field:stock.period.cache,location:0"
+msgctxt "field:stock.period.cache,location:"
msgid "Location"
msgstr "ÐеÑÑоположение"
-msgctxt "field:stock.period.cache,period:0"
+msgctxt "field:stock.period.cache,period:"
msgid "Period"
msgstr "ÐеÑиод"
-msgctxt "field:stock.period.cache,product:0"
+msgctxt "field:stock.period.cache,product:"
msgid "Product"
msgstr "ÐÑодÑкÑ"
-msgctxt "field:stock.period.cache,rec_name:0"
+msgctxt "field:stock.period.cache,rec_name:"
msgid "Name"
msgstr "Ðме на пÑикаÑен Ñайл"
-msgctxt "field:stock.product_stock_date.init,forecast_date:0"
+msgctxt "field:stock.period.cache,write_date:"
+msgid "Write Date"
+msgstr "ÐÑоменено на"
+
+msgctxt "field:stock.period.cache,write_uid:"
+msgid "Write User"
+msgstr "ÐÑоменено оÑ"
+
+msgctxt "field:stock.products_by_locations.start,forecast_date:"
msgid "At Date"
msgstr "Ðа даÑа"
-msgctxt "field:stock.shipment.in,code:0"
+msgctxt "field:stock.products_by_locations.start,id:"
+msgid "ID"
+msgstr "ID"
+
+msgctxt "field:stock.shipment.in,code:"
msgid "Code"
msgstr "Ðод"
-#, fuzzy
-msgctxt "field:stock.shipment.in,company:0"
+msgctxt "field:stock.shipment.in,company:"
msgid "Company"
msgstr "ФиÑма"
-msgctxt "field:stock.shipment.in,contact_address:0"
+msgctxt "field:stock.shipment.in,contact_address:"
msgid "Contact Address"
msgstr "ÐдÑÐµÑ Ð·Ð° конÑакÑ"
-msgctxt "field:stock.shipment.in,effective_date:0"
+msgctxt "field:stock.shipment.in,create_date:"
+msgid "Create Date"
+msgstr "СÑздадено на"
+
+msgctxt "field:stock.shipment.in,create_uid:"
+msgid "Create User"
+msgstr "СÑздадено оÑ"
+
+msgctxt "field:stock.shipment.in,effective_date:"
msgid "Effective Date"
msgstr "ÐÑекÑивна даÑа"
-msgctxt "field:stock.shipment.in,incoming_moves:0"
+msgctxt "field:stock.shipment.in,id:"
+msgid "ID"
+msgstr "ID"
+
+msgctxt "field:stock.shipment.in,incoming_moves:"
msgid "Incoming Moves"
msgstr "ÐÑ
одÑÑи движениÑ"
-msgctxt "field:stock.shipment.in,inventory_moves:0"
+msgctxt "field:stock.shipment.in,inventory_moves:"
msgid "Inventory Moves"
msgstr "ÐÐ²Ð¸Ð¶ÐµÐ½Ð¸Ñ Ð½Ð° инвенÑаÑизаÑиÑ"
-msgctxt "field:stock.shipment.in,moves:0"
+msgctxt "field:stock.shipment.in,moves:"
msgid "Moves"
msgstr "ÐвижениÑ"
-msgctxt "field:stock.shipment.in,planned_date:0"
+msgctxt "field:stock.shipment.in,planned_date:"
msgid "Planned Date"
msgstr "ÐланиÑана даÑа"
-msgctxt "field:stock.shipment.in,rec_name:0"
+msgctxt "field:stock.shipment.in,rec_name:"
msgid "Name"
msgstr "Ðме"
-msgctxt "field:stock.shipment.in,reference:0"
+msgctxt "field:stock.shipment.in,reference:"
msgid "Reference"
msgstr "ÐÑпÑаÑка"
-msgctxt "field:stock.shipment.in,state:0"
+msgctxt "field:stock.shipment.in,state:"
msgid "State"
msgstr "СÑÑÑоÑние"
-msgctxt "field:stock.shipment.in,supplier:0"
+msgctxt "field:stock.shipment.in,supplier:"
msgid "Supplier"
msgstr "ÐоÑÑавÑик"
-msgctxt "field:stock.shipment.in,warehouse:0"
+msgctxt "field:stock.shipment.in,supplier_location:"
+msgid "Supplier Location"
+msgstr "ÐеÑÑонаÑ
ождение на доÑÑавÑик"
+
+msgctxt "field:stock.shipment.in,warehouse:"
msgid "Warehouse"
msgstr "Склад"
-msgctxt "field:stock.shipment.in.return,code:0"
+msgctxt "field:stock.shipment.in,warehouse_input:"
+msgid "Warehouse Input"
+msgstr ""
+
+msgctxt "field:stock.shipment.in,warehouse_storage:"
+msgid "Warehouse Storage"
+msgstr ""
+
+msgctxt "field:stock.shipment.in,write_date:"
+msgid "Write Date"
+msgstr "ÐÑоменено на"
+
+msgctxt "field:stock.shipment.in,write_uid:"
+msgid "Write User"
+msgstr "ÐÑоменено оÑ"
+
+msgctxt "field:stock.shipment.in.return,code:"
msgid "Code"
msgstr "Ðод"
-#, fuzzy
-msgctxt "field:stock.shipment.in.return,company:0"
+msgctxt "field:stock.shipment.in.return,company:"
msgid "Company"
msgstr "ФиÑма"
-msgctxt "field:stock.shipment.in.return,effective_date:0"
+msgctxt "field:stock.shipment.in.return,create_date:"
+msgid "Create Date"
+msgstr "СÑздадено на"
+
+msgctxt "field:stock.shipment.in.return,create_uid:"
+msgid "Create User"
+msgstr "СÑздадено оÑ"
+
+msgctxt "field:stock.shipment.in.return,effective_date:"
msgid "Effective Date"
msgstr "ÐÑекÑивна даÑа"
-msgctxt "field:stock.shipment.in.return,from_location:0"
+msgctxt "field:stock.shipment.in.return,from_location:"
msgid "From Location"
msgstr "ÐÑ Ð¼ÐµÑÑонаÑ
ождение"
-msgctxt "field:stock.shipment.in.return,moves:0"
+msgctxt "field:stock.shipment.in.return,id:"
+msgid "ID"
+msgstr "ID"
+
+msgctxt "field:stock.shipment.in.return,moves:"
msgid "Moves"
msgstr "ÐвижениÑ"
-msgctxt "field:stock.shipment.in.return,planned_date:0"
+msgctxt "field:stock.shipment.in.return,planned_date:"
msgid "Planned Date"
msgstr "ÐланиÑана даÑа"
-msgctxt "field:stock.shipment.in.return,rec_name:0"
+msgctxt "field:stock.shipment.in.return,rec_name:"
msgid "Name"
msgstr "Ðме"
-msgctxt "field:stock.shipment.in.return,reference:0"
+msgctxt "field:stock.shipment.in.return,reference:"
msgid "Reference"
msgstr "ÐÑпÑаÑка"
-msgctxt "field:stock.shipment.in.return,state:0"
+msgctxt "field:stock.shipment.in.return,state:"
msgid "State"
msgstr "СÑÑÑоÑние"
-msgctxt "field:stock.shipment.in.return,to_location:0"
+msgctxt "field:stock.shipment.in.return,to_location:"
msgid "To Location"
msgstr "ÐÑм меÑÑонаÑ
ождение"
-msgctxt "field:stock.shipment.in.return.assign.assign_failed,moves:0"
+msgctxt "field:stock.shipment.in.return,write_date:"
+msgid "Write Date"
+msgstr "ÐÑоменено на"
+
+msgctxt "field:stock.shipment.in.return,write_uid:"
+msgid "Write User"
+msgstr "ÐÑоменено оÑ"
+
+msgctxt "field:stock.shipment.in.return.assign.failed,id:"
+msgid "ID"
+msgstr "ID"
+
+msgctxt "field:stock.shipment.in.return.assign.failed,moves:"
msgid "Moves"
msgstr "ÐвижениÑ"
-msgctxt "field:stock.shipment.internal,code:0"
+msgctxt "field:stock.shipment.internal,code:"
msgid "Code"
msgstr "Ðод"
-#, fuzzy
-msgctxt "field:stock.shipment.internal,company:0"
+msgctxt "field:stock.shipment.internal,company:"
msgid "Company"
msgstr "ФиÑма"
-msgctxt "field:stock.shipment.internal,effective_date:0"
+msgctxt "field:stock.shipment.internal,create_date:"
+msgid "Create Date"
+msgstr "СÑздадено на"
+
+msgctxt "field:stock.shipment.internal,create_uid:"
+msgid "Create User"
+msgstr "СÑздадено оÑ"
+
+msgctxt "field:stock.shipment.internal,effective_date:"
msgid "Effective Date"
msgstr "ÐÑекÑивна даÑа"
-msgctxt "field:stock.shipment.internal,from_location:0"
+msgctxt "field:stock.shipment.internal,from_location:"
msgid "From Location"
msgstr "ÐÑ Ð¼ÐµÑÑонаÑ
ождение"
-msgctxt "field:stock.shipment.internal,moves:0"
+msgctxt "field:stock.shipment.internal,id:"
+msgid "ID"
+msgstr "ID"
+
+msgctxt "field:stock.shipment.internal,moves:"
msgid "Moves"
msgstr "ÐвижениÑ"
-msgctxt "field:stock.shipment.internal,planned_date:0"
+msgctxt "field:stock.shipment.internal,planned_date:"
msgid "Planned Date"
msgstr "ÐланиÑана даÑа"
-msgctxt "field:stock.shipment.internal,rec_name:0"
+msgctxt "field:stock.shipment.internal,rec_name:"
msgid "Name"
msgstr "Ðме"
-msgctxt "field:stock.shipment.internal,reference:0"
+msgctxt "field:stock.shipment.internal,reference:"
msgid "Reference"
msgstr "ÐÑпÑаÑка"
-msgctxt "field:stock.shipment.internal,state:0"
+msgctxt "field:stock.shipment.internal,state:"
msgid "State"
msgstr "СÑÑÑоÑние"
-msgctxt "field:stock.shipment.internal,to_location:0"
+msgctxt "field:stock.shipment.internal,to_location:"
msgid "To Location"
msgstr "ÐÑм меÑÑонаÑ
ождение"
-msgctxt "field:stock.shipment.internal.assign.assign_failed,moves:0"
+msgctxt "field:stock.shipment.internal,write_date:"
+msgid "Write Date"
+msgstr "ÐÑоменено на"
+
+msgctxt "field:stock.shipment.internal,write_uid:"
+msgid "Write User"
+msgstr "ÐÑоменено оÑ"
+
+msgctxt "field:stock.shipment.internal.assign.failed,id:"
+msgid "ID"
+msgstr "ID"
+
+msgctxt "field:stock.shipment.internal.assign.failed,moves:"
msgid "Moves"
msgstr "ÐвижениÑ"
-msgctxt "field:stock.shipment.out,code:0"
+msgctxt "field:stock.shipment.out,code:"
msgid "Code"
msgstr "Ðод"
-#, fuzzy
-msgctxt "field:stock.shipment.out,company:0"
+msgctxt "field:stock.shipment.out,company:"
msgid "Company"
msgstr "ФиÑма"
-msgctxt "field:stock.shipment.out,customer:0"
+msgctxt "field:stock.shipment.out,create_date:"
+msgid "Create Date"
+msgstr "СÑздадено на"
+
+msgctxt "field:stock.shipment.out,create_uid:"
+msgid "Create User"
+msgstr "СÑздадено оÑ"
+
+msgctxt "field:stock.shipment.out,customer:"
msgid "Customer"
msgstr "ÐлиенÑ"
-msgctxt "field:stock.shipment.out,delivery_address:0"
+msgctxt "field:stock.shipment.out,customer_location:"
+msgid "Customer Location"
+msgstr "ÐеÑÑонаÑ
ождение на клиенÑ"
+
+msgctxt "field:stock.shipment.out,delivery_address:"
msgid "Delivery Address"
msgstr "ÐдÑÐµÑ Ð·Ð° доÑÑвка"
-msgctxt "field:stock.shipment.out,effective_date:0"
+msgctxt "field:stock.shipment.out,effective_date:"
msgid "Effective Date"
msgstr "ÐÑекÑивна даÑа"
-msgctxt "field:stock.shipment.out,inventory_moves:0"
+msgctxt "field:stock.shipment.out,id:"
+msgid "ID"
+msgstr "ID"
+
+msgctxt "field:stock.shipment.out,inventory_moves:"
msgid "Inventory Moves"
msgstr "ÐÐ²Ð¸Ð¶ÐµÐ½Ð¸Ñ Ð½Ð° инвенÑаÑизаÑиÑ"
-msgctxt "field:stock.shipment.out,moves:0"
+msgctxt "field:stock.shipment.out,moves:"
msgid "Moves"
msgstr "ÐвижениÑ"
-msgctxt "field:stock.shipment.out,outgoing_moves:0"
+msgctxt "field:stock.shipment.out,outgoing_moves:"
msgid "Outgoing Moves"
msgstr "ÐзÑ
одÑÑи движениÑ"
-msgctxt "field:stock.shipment.out,planned_date:0"
+msgctxt "field:stock.shipment.out,planned_date:"
msgid "Planned Date"
msgstr "ÐланиÑана даÑа"
-msgctxt "field:stock.shipment.out,rec_name:0"
+msgctxt "field:stock.shipment.out,rec_name:"
msgid "Name"
msgstr "Ðме"
-msgctxt "field:stock.shipment.out,reference:0"
+msgctxt "field:stock.shipment.out,reference:"
msgid "Reference"
msgstr "ÐÑпÑаÑка"
-msgctxt "field:stock.shipment.out,state:0"
+msgctxt "field:stock.shipment.out,state:"
msgid "State"
msgstr "СÑÑÑоÑние"
-msgctxt "field:stock.shipment.out,warehouse:0"
+msgctxt "field:stock.shipment.out,warehouse:"
msgid "Warehouse"
msgstr "Склад"
-msgctxt "field:stock.shipment.out.assign.assign_failed,inventory_moves:0"
+msgctxt "field:stock.shipment.out,warehouse_output:"
+msgid "Warehouse Output"
+msgstr ""
+
+msgctxt "field:stock.shipment.out,warehouse_storage:"
+msgid "Warehouse Storage"
+msgstr ""
+
+msgctxt "field:stock.shipment.out,write_date:"
+msgid "Write Date"
+msgstr "ÐÑоменено на"
+
+msgctxt "field:stock.shipment.out,write_uid:"
+msgid "Write User"
+msgstr "ÐÑоменено оÑ"
+
+msgctxt "field:stock.shipment.out.assign.failed,id:"
+msgid "ID"
+msgstr "ID"
+
+msgctxt "field:stock.shipment.out.assign.failed,inventory_moves:"
msgid "Inventory Moves"
msgstr "ÐÐ²Ð¸Ð¶ÐµÐ½Ð¸Ñ Ð½Ð° инвенÑаÑизаÑиÑ"
-msgctxt "field:stock.shipment.out.return,code:0"
+msgctxt "field:stock.shipment.out.return,code:"
msgid "Code"
msgstr "Ðод"
-#, fuzzy
-msgctxt "field:stock.shipment.out.return,company:0"
+msgctxt "field:stock.shipment.out.return,company:"
msgid "Company"
msgstr "ФиÑма"
-msgctxt "field:stock.shipment.out.return,customer:0"
+msgctxt "field:stock.shipment.out.return,create_date:"
+msgid "Create Date"
+msgstr "СÑздадено на"
+
+msgctxt "field:stock.shipment.out.return,create_uid:"
+msgid "Create User"
+msgstr "СÑздадено оÑ"
+
+msgctxt "field:stock.shipment.out.return,customer:"
msgid "Customer"
msgstr "ÐлиенÑ"
-msgctxt "field:stock.shipment.out.return,delivery_address:0"
+msgctxt "field:stock.shipment.out.return,customer_location:"
+msgid "Customer Location"
+msgstr "ÐеÑÑонаÑ
ождение на клиенÑ"
+
+msgctxt "field:stock.shipment.out.return,delivery_address:"
msgid "Delivery Address"
msgstr "ÐдÑÐµÑ Ð·Ð° доÑÑвка"
-msgctxt "field:stock.shipment.out.return,effective_date:0"
+msgctxt "field:stock.shipment.out.return,effective_date:"
msgid "Effective Date"
msgstr "ÐÑекÑивна даÑа"
-msgctxt "field:stock.shipment.out.return,incoming_moves:0"
+msgctxt "field:stock.shipment.out.return,id:"
+msgid "ID"
+msgstr "ID"
+
+msgctxt "field:stock.shipment.out.return,incoming_moves:"
msgid "Incoming Moves"
msgstr "ÐÑ
одÑÑи движениÑ"
-msgctxt "field:stock.shipment.out.return,inventory_moves:0"
+msgctxt "field:stock.shipment.out.return,inventory_moves:"
msgid "Inventory Moves"
msgstr "ÐÐ²Ð¸Ð¶ÐµÐ½Ð¸Ñ Ð½Ð° инвенÑаÑизаÑиÑ"
-msgctxt "field:stock.shipment.out.return,moves:0"
+msgctxt "field:stock.shipment.out.return,moves:"
msgid "Moves"
msgstr "ÐвижениÑ"
-msgctxt "field:stock.shipment.out.return,planned_date:0"
+msgctxt "field:stock.shipment.out.return,planned_date:"
msgid "Planned Date"
msgstr "ÐланиÑана даÑа"
-msgctxt "field:stock.shipment.out.return,rec_name:0"
+msgctxt "field:stock.shipment.out.return,rec_name:"
msgid "Name"
msgstr "Ðме"
-msgctxt "field:stock.shipment.out.return,reference:0"
+msgctxt "field:stock.shipment.out.return,reference:"
msgid "Reference"
msgstr "ÐÑпÑаÑка"
-msgctxt "field:stock.shipment.out.return,state:0"
+msgctxt "field:stock.shipment.out.return,state:"
msgid "State"
msgstr "СÑÑÑоÑние"
-msgctxt "field:stock.shipment.out.return,warehouse:0"
+msgctxt "field:stock.shipment.out.return,warehouse:"
msgid "Warehouse"
msgstr "Склад"
-msgctxt "help:party.party,customer_location:0"
+msgctxt "field:stock.shipment.out.return,warehouse_input:"
+msgid "Warehouse Input"
+msgstr ""
+
+msgctxt "field:stock.shipment.out.return,warehouse_storage:"
+msgid "Warehouse Storage"
+msgstr ""
+
+msgctxt "field:stock.shipment.out.return,write_date:"
+msgid "Write Date"
+msgstr "ÐÑоменено на"
+
+msgctxt "field:stock.shipment.out.return,write_uid:"
+msgid "Write User"
+msgstr "ÐÑоменено оÑ"
+
+msgctxt "help:party.party,customer_location:"
msgid "The default destination location when sending products to the party."
msgstr ""
"ЦелÑа-меÑÑонаÑ
ождение по подÑазбиÑане когаÑо Ñе изпÑаÑÐ°Ñ Ð¿ÑодÑкÑи на "
"паÑÑнÑоÑа."
-msgctxt "help:party.party,supplier_location:0"
+msgctxt "help:party.party,supplier_location:"
msgid "The default source location when receiving products from the party."
msgstr ""
"ÐзÑоÑник-меÑÑонаÑ
Ð¾Ð¶Ð´ÐµÐ½Ð¸Ñ Ð¿Ð¾ подÑазбиÑане когаÑо Ñе полÑÑÐ°Ð²Ð°Ñ Ð¿ÑодÑкÑи Ð¾Ñ "
"паÑÑнÑоÑа."
-msgctxt "help:stock.location_stock_date.init,forecast_date:0"
+msgctxt "help:product.by_location.start,forecast_date:"
msgid ""
"Allow to compute expected stock quantities for this date.\n"
"* An empty value is an infinite date in the future.\n"
@@ -720,7 +1019,7 @@ msgstr ""
"* ÐÑазна даÑа е неизвеÑÑна даÑа в бÑдеÑеÑо.\n"
"* ÐаÑа Ð¾Ñ Ð¼Ð¸Ð½Ð°Ð» пеÑиод показва иÑÑоÑиÑеÑки данни."
-msgctxt "help:stock.product_stock_date.init,forecast_date:0"
+msgctxt "help:stock.products_by_locations.start,forecast_date:"
msgid ""
"Allow to compute expected stock quantities for this date.\n"
"* An empty value is an infinite date in the future.\n"
@@ -742,9 +1041,10 @@ msgctxt "model:ir.action,name:act_location_form"
msgid "Locations"
msgstr "ÐеÑÑонаÑ
ождениÑ"
+#, fuzzy
msgctxt "model:ir.action,name:act_location_quantity_tree"
-msgid "Product Stock"
-msgstr "ÐалиÑноÑÑ Ð½Ð° пÑодÑкÑ"
+msgid "Location Quantity & Cost Value"
+msgstr "ÐолиÑеÑÑво в меÑÑонаÑ
ождение & ÑÑойноÑÑ Ð½Ð° ÑазÑ
од"
msgctxt "model:ir.action,name:act_location_tree"
msgid "Locations"
@@ -766,18 +1066,17 @@ msgctxt "model:ir.action,name:act_move_form_supp_proceed"
msgid "Moves from Suppliers Waiting Arrival"
msgstr "ÐÐ²Ð¸Ð¶ÐµÐ½Ð¸Ñ Ð¾Ñ Ð´Ð¾ÑÑавÑик оÑакваÑи пÑиÑÑигане"
-#, fuzzy
msgctxt "model:ir.action,name:act_period_list"
msgid "Periods"
msgstr "ÐеÑиоди"
-msgctxt "model:ir.action,name:act_product_by_location"
+msgctxt "model:ir.action,name:act_products_by_locations"
msgid "Products by Locations"
-msgstr "ÐÑодÑкÑи по меÑÑонаÑ
ождение"
+msgstr ""
msgctxt "model:ir.action,name:act_shipment_in_draft"
msgid "Draft Supplier Shipment"
-msgstr ""
+msgstr "ЧеÑнова на пÑаÑка на доÑÑавÑик"
msgctxt "model:ir.action,name:act_shipment_in_form"
msgid "Supplier Shipments"
@@ -863,17 +1162,13 @@ msgctxt "model:ir.action,name:report_shipment_out_return_restocking_list"
msgid "Restocking List"
msgstr "СпиÑÑк за ÑвелиÑаване налиÑноÑÑ Ð½Ð° пÑодÑкÑ"
-msgctxt "model:ir.action,name:wizard_complete_inventory"
-msgid "Complete Inventory"
-msgstr "ÐÑлна инвенÑаÑизаÑиÑ"
-
-msgctxt "model:ir.action,name:wizard_location_open"
+msgctxt "model:ir.action,name:wizard_product_by_location"
msgid "Product by Location"
-msgstr "ÐÑодÑкÑа по меÑÑонаÑ
ождение"
+msgstr "ÐÑодÑÐºÑ Ð¿Ð¾ меÑÑонаÑ
ождение"
-msgctxt "model:ir.action,name:wizard_product_open"
-msgid "Product Quantities"
-msgstr "ÐолиÑеÑÑва на пÑодÑкÑ"
+msgctxt "model:ir.action,name:wizard_products_by_locations"
+msgid "Products by Locations"
+msgstr ""
msgctxt "model:ir.action,name:wizard_shipment_in_return_assign"
msgid "Assign Purchase Return Shipment"
@@ -893,7 +1188,7 @@ msgstr "ÐзпÑаÑане на доÑÑавÑик"
msgctxt "model:ir.sequence,name:sequence_shipment_in_return"
msgid "Supplier Return Shipment"
-msgstr "ÐÑаÑка вÑÑнаÑа Ð¾Ñ Ð´Ð¾ÑÑавÑик'"
+msgstr "ÐÑаÑка вÑÑнаÑа Ð¾Ñ Ð´Ð¾ÑÑавÑик"
msgctxt "model:ir.sequence,name:sequence_shipment_internal"
msgid "Internal Shipment"
@@ -913,7 +1208,7 @@ msgstr "ÐÑаÑка на доÑÑавÑик"
msgctxt "model:ir.sequence.type,name:sequence_type_shipment_in_return"
msgid "Supplier Return Shipment"
-msgstr "ÐÑаÑка вÑÑнаÑа Ð¾Ñ Ð´Ð¾ÑÑавÑик'"
+msgstr "ÐÑаÑка вÑÑнаÑа Ð¾Ñ Ð´Ð¾ÑÑавÑик"
msgctxt "model:ir.sequence.type,name:sequence_type_shipment_internal"
msgid "Internal Shipment"
@@ -963,7 +1258,6 @@ msgctxt "model:ir.ui.menu,name:menu_move_form_supp_proceed"
msgid "Moves from Suppliers Waiting Arrival"
msgstr "ÐÐ²Ð¸Ð¶ÐµÐ½Ð¸Ñ Ð¾Ñ Ð´Ð¾ÑÑавÑик оÑакваÑи пÑиÑÑигане"
-#, fuzzy
msgctxt "model:ir.ui.menu,name:menu_period_list"
msgid "Periods"
msgstr "ÐеÑиоди"
@@ -974,7 +1268,7 @@ msgstr "СпÑавки"
msgctxt "model:ir.ui.menu,name:menu_shipment_in_draft"
msgid "Draft Supplier Shipment"
-msgstr ""
+msgstr "ЧеÑнова на пÑаÑка на доÑÑавÑик"
msgctxt "model:ir.ui.menu,name:menu_shipment_in_form"
msgid "Supplier Shipments"
@@ -1024,15 +1318,18 @@ msgctxt "model:ir.ui.menu,name:menu_shipment_out_waiting"
msgid "Customer Shipments Waiting Assignation"
msgstr "ÐÑаÑки за клиенÑи ÑакаÑи назнаÑаване"
-#, fuzzy
msgctxt "model:ir.ui.menu,name:menu_stock"
msgid "Inventory & Stock"
-msgstr "УпÑавление на инвенÑаÑизаÑиÑ"
+msgstr "ÐнвенÑаÑизаÑÐ¸Ñ & налиÑноÑÑ"
msgctxt "model:ir.ui.menu,name:menu_stock_configuration"
msgid "Stock Configuration"
msgstr "ÐонÑигÑÑиÑане на налиÑноÑÑ"
+msgctxt "model:product.by_location.start,name:"
+msgid "Product by Location"
+msgstr "ÐÑодÑÐºÑ Ð¿Ð¾ меÑÑонаÑ
ождение"
+
msgctxt "model:res.group,name:group_stock"
msgid "Stock"
msgstr "ÐалиÑноÑÑ"
@@ -1045,19 +1342,19 @@ msgctxt "model:res.group,name:group_stock_force_assignment"
msgid "Stock Force Assignment"
msgstr "ÐаÑоÑно назнаÑване на налиÑноÑÑ"
-msgctxt "model:stock.configuration,name:0"
+msgctxt "model:stock.configuration,name:"
msgid "Stock Configuration"
msgstr "ÐонÑигÑÑиÑане на налиÑноÑÑ"
-msgctxt "model:stock.inventory,name:0"
+msgctxt "model:stock.inventory,name:"
msgid "Stock Inventory"
msgstr "ÐнвенÑаÑизаÑÐ¸Ñ Ð½Ð° налиÑноÑÑ"
-msgctxt "model:stock.inventory.line,name:0"
+msgctxt "model:stock.inventory.line,name:"
msgid "Stock Inventory Line"
msgstr "Ред Ð¾Ñ Ð½Ð°Ð»Ð¸ÑноÑÑ Ð½Ð° пÑодÑкÑ"
-msgctxt "model:stock.location,name:0"
+msgctxt "model:stock.location,name:"
msgid "Stock Location"
msgstr "ÐеÑÑонаÑ
ождение на налиÑноÑÑ"
@@ -1089,991 +1386,834 @@ msgctxt "model:stock.location,name:location_warehouse"
msgid "Warehouse"
msgstr "Склад"
-msgctxt "model:stock.location_stock_date.init,name:0"
-msgid "Compute stock quantities"
-msgstr "ÐзÑиÑлÑване на колиÑеÑÑва на налиÑноÑÑ"
-
-msgctxt "model:stock.move,name:0"
+msgctxt "model:stock.move,name:"
msgid "Stock Move"
msgstr "Ðвижение на налиÑноÑÑ"
-msgctxt "model:stock.period,name:0"
+msgctxt "model:stock.period,name:"
msgid "Stock Period"
msgstr "ÐеÑиод на налиÑноÑÑ"
-msgctxt "model:stock.period.cache,name:0"
-msgid ""
-"\n"
-" Stock Period Cache\n"
-"\n"
-" It is used to store cached computation of stock quantities.\n"
-" "
+msgctxt "model:stock.period.cache,name:"
+msgid "stock.period.cache"
msgstr ""
-"\n"
-" ÐеÑиод на налиÑноÑÑ Ð² паÑи в бÑой\n"
-"\n"
-" Ðзползва Ñе за Ð·Ð°Ð¿Ð¸Ñ Ð½Ð° изÑиÑлениÑе паÑи в бÑой на налиÑниÑе колиÑеÑÑва."
-msgctxt "model:stock.product_stock_date.init,name:0"
-msgid "Compute stock quantities"
-msgstr "ÐзÑиÑлÑване на колиÑеÑÑва на налиÑноÑÑ"
+msgctxt "model:stock.products_by_locations.start,name:"
+msgid "Products by Locations"
+msgstr ""
-msgctxt "model:stock.shipment.in,name:0"
+msgctxt "model:stock.shipment.in,name:"
msgid "Supplier Shipment"
msgstr "ÐÑаÑка на доÑÑавÑик"
-msgctxt "model:stock.shipment.in.return,name:0"
+msgctxt "model:stock.shipment.in.return,name:"
msgid "Supplier Return Shipment"
-msgstr "ÐÑаÑка вÑÑнаÑа Ð¾Ñ Ð´Ð¾ÑÑавÑик'"
+msgstr "ÐÑаÑка вÑÑнаÑа Ð¾Ñ Ð´Ð¾ÑÑавÑик"
-msgctxt "model:stock.shipment.in.return.assign.assign_failed,name:0"
-msgid "Assign Supplier Return Shipment Assign Failed"
-msgstr "ÐеÑÑпеÑно назнаÑаване на доÑÑавÑик за вÑÑнаÑа пÑаÑка"
+msgctxt "model:stock.shipment.in.return.assign.failed,name:"
+msgid "Assign Supplier Return Shipment"
+msgstr "ÐазнаÑаване на пÑаÑка вÑÑнаÑа Ð¾Ñ Ð´Ð¾ÑÑавÑик"
-msgctxt "model:stock.shipment.internal,name:0"
+msgctxt "model:stock.shipment.internal,name:"
msgid "Internal Shipment"
msgstr "ÐÑÑÑеÑно изпÑаÑане"
-msgctxt "model:stock.shipment.internal.assign.assign_failed,name:0"
-msgid "Assign Shipment Internal Assign Failed"
-msgstr "ÐеÑÑпеÑно назнаÑаване на вÑÑÑеÑно пÑаÑка"
+msgctxt "model:stock.shipment.internal.assign.failed,name:"
+msgid "Assign Shipment Internal"
+msgstr "ÐазнаÑаване на вÑÑÑеÑна пÑаÑка"
-msgctxt "model:stock.shipment.out,name:0"
+msgctxt "model:stock.shipment.out,name:"
msgid "Customer Shipment"
msgstr "ÐÑаÑка за клиенÑ"
-msgctxt "model:stock.shipment.out.assign.assign_failed,name:0"
-msgid "Assign Shipment Out Assign Failed"
-msgstr "ÐеÑÑпеÑно назнаÑаване на пÑаÑка за навÑн"
-
-msgctxt "model:stock.shipment.out.return,name:0"
-msgid "Customer Return Shipment"
-msgstr "ÐÑаÑка вÑÑнаÑа Ð¾Ñ ÐºÐ»Ð¸ÐµÐ½Ñ"
-
-msgctxt "model:workflow,name:wkf_inventory"
-msgid "Inventory"
-msgstr "ÐнвенÑаÑизаÑиÑ"
-
-msgctxt "model:workflow,name:wkf_shipment_in_return"
-msgid "Supplier Return Shipment"
-msgstr "ÐÑаÑка вÑÑнаÑа Ð¾Ñ Ð´Ð¾ÑÑавÑик'"
+msgctxt "model:stock.shipment.out.assign.failed,name:"
+msgid "Assign Shipment Out"
+msgstr "ÐазнаÑаване на пÑаÑка за навÑн"
-msgctxt "model:workflow,name:wkf_shipment_out_return"
+msgctxt "model:stock.shipment.out.return,name:"
msgid "Customer Return Shipment"
msgstr "ÐÑаÑка вÑÑнаÑа Ð¾Ñ ÐºÐ»Ð¸ÐµÐ½Ñ"
-msgctxt "model:workflow,name:wkf_shipmentin"
-msgid "Supplier Shipment"
-msgstr "ÐÑаÑка на доÑÑавÑик"
-
-msgctxt "model:workflow,name:wkf_shipmentinternal"
-msgid "Internal Shipment"
-msgstr "ÐÑÑÑеÑно изпÑаÑане"
-
-msgctxt "model:workflow,name:wkf_shipmentout"
-msgid "Customer Shipment"
-msgstr "ÐÑаÑка за клиенÑ"
-
-msgctxt "model:workflow.activity,name:inventory_act_cancel"
-msgid "Canceled"
-msgstr "ÐÑказан"
-
-msgctxt "model:workflow.activity,name:inventory_act_done"
-msgid "Done"
-msgstr "ÐÑиклÑÑен"
-
-msgctxt "model:workflow.activity,name:inventory_act_draft"
-msgid "Draft"
-msgstr "ÐÑоекÑ"
-
-msgctxt "model:workflow.activity,name:shipment_in_return_act_assigned"
-msgid "Assigned"
-msgstr "ÐазнаÑен"
-
-msgctxt "model:workflow.activity,name:shipment_in_return_act_cancel"
-msgid "Canceled"
-msgstr "ÐÑказан"
-
-msgctxt "model:workflow.activity,name:shipment_in_return_act_done"
-msgid "Done"
-msgstr "ÐÑиклÑÑен"
-
-msgctxt "model:workflow.activity,name:shipment_in_return_act_draft"
-msgid "Draft"
-msgstr "ÐÑоекÑ"
-
-msgctxt "model:workflow.activity,name:shipment_in_return_act_waiting"
-msgid "Waiting"
-msgstr "ÐзÑакваÑ"
-
-msgctxt "model:workflow.activity,name:shipment_out_return_act_cancel"
-msgid "Canceled"
-msgstr "ÐÑказан"
-
-msgctxt "model:workflow.activity,name:shipment_out_return_act_done"
-msgid "Done"
-msgstr "ÐÑиклÑÑен"
-
-msgctxt "model:workflow.activity,name:shipment_out_return_act_draft"
-msgid "Draft"
-msgstr "ÐÑоекÑ"
-
-msgctxt "model:workflow.activity,name:shipment_out_return_act_received"
-msgid "Received"
-msgstr "ÐолÑÑен"
-
-msgctxt "model:workflow.activity,name:shipmentin_act_cancel"
-msgid "Canceled"
-msgstr "ÐÑказан"
-
-msgctxt "model:workflow.activity,name:shipmentin_act_done"
-msgid "Done"
-msgstr "ÐÑиклÑÑен"
-
-msgctxt "model:workflow.activity,name:shipmentin_act_draft"
-msgid "Draft"
-msgstr "ÐÑоекÑ"
-
-msgctxt "model:workflow.activity,name:shipmentin_act_received"
-msgid "Received"
-msgstr "ÐолÑÑен"
-
-msgctxt "model:workflow.activity,name:shipmentinternal_act_assigned"
-msgid "Assigned"
-msgstr "ÐазнаÑен"
-
-msgctxt "model:workflow.activity,name:shipmentinternal_act_cancel"
-msgid "Canceled"
-msgstr "ÐÑказан"
-
-msgctxt "model:workflow.activity,name:shipmentinternal_act_done"
-msgid "Done"
-msgstr "ÐÑиклÑÑен"
-
-msgctxt "model:workflow.activity,name:shipmentinternal_act_draft"
-msgid "Draft"
-msgstr "ÐÑоекÑ"
-
-msgctxt "model:workflow.activity,name:shipmentinternal_act_waiting"
-msgid "Waiting"
-msgstr "ÐзÑакваÑ"
-
-msgctxt "model:workflow.activity,name:shipmentout_act_assigned"
-msgid "Assigned"
-msgstr "ÐазнаÑен"
-
-msgctxt "model:workflow.activity,name:shipmentout_act_cancel"
-msgid "Canceled"
-msgstr "ÐÑказан"
-
-msgctxt "model:workflow.activity,name:shipmentout_act_done"
-msgid "Done"
-msgstr "ÐÑиклÑÑен"
-
-msgctxt "model:workflow.activity,name:shipmentout_act_draft"
-msgid "Draft"
-msgstr "ÐÑоекÑ"
-
-msgctxt "model:workflow.activity,name:shipmentout_act_packed"
-msgid "Packed"
-msgstr "Ðпакован"
-
-msgctxt "model:workflow.activity,name:shipmentout_act_waiting"
-msgid "Waiting"
-msgstr "ÐзÑакваÑ"
-
-msgctxt "odt:stock.shipment.in.restocking_list:0"
+msgctxt "odt:stock.shipment.in.restocking_list:"
msgid "/"
msgstr "/"
-msgctxt "odt:stock.shipment.in.restocking_list:0"
+msgctxt "odt:stock.shipment.in.restocking_list:"
msgid "Code:"
msgstr "Ðод:"
-msgctxt "odt:stock.shipment.in.restocking_list:0"
+msgctxt "odt:stock.shipment.in.restocking_list:"
msgid "E-Mail:"
msgstr "E-Mail:"
-msgctxt "odt:stock.shipment.in.restocking_list:0"
+msgctxt "odt:stock.shipment.in.restocking_list:"
msgid "From Location"
msgstr "ÐÑ Ð¼ÐµÑÑонаÑ
ождение"
-msgctxt "odt:stock.shipment.in.restocking_list:0"
+msgctxt "odt:stock.shipment.in.restocking_list:"
msgid "Phone:"
msgstr "ТелеÑон:"
-msgctxt "odt:stock.shipment.in.restocking_list:0"
+msgctxt "odt:stock.shipment.in.restocking_list:"
msgid "Planned Date:"
msgstr "ÐланиÑана даÑа:"
-msgctxt "odt:stock.shipment.in.restocking_list:0"
+msgctxt "odt:stock.shipment.in.restocking_list:"
msgid "Product"
msgstr "ÐÑодÑкÑ"
-msgctxt "odt:stock.shipment.in.restocking_list:0"
+msgctxt "odt:stock.shipment.in.restocking_list:"
msgid "Quantity"
msgstr "ÐолиÑеÑÑво"
-msgctxt "odt:stock.shipment.in.restocking_list:0"
+msgctxt "odt:stock.shipment.in.restocking_list:"
msgid "Reference:"
msgstr "ÐÑпÑаÑка:"
-msgctxt "odt:stock.shipment.in.restocking_list:0"
+msgctxt "odt:stock.shipment.in.restocking_list:"
msgid "Restocking List"
msgstr "СпиÑÑк за ÑвелиÑаване налиÑноÑÑ Ð½Ð° пÑодÑкÑ"
-msgctxt "odt:stock.shipment.in.restocking_list:0"
+msgctxt "odt:stock.shipment.in.restocking_list:"
msgid "Supplier:"
msgstr "ÐоÑÑавÑик:"
-msgctxt "odt:stock.shipment.in.restocking_list:0"
+msgctxt "odt:stock.shipment.in.restocking_list:"
msgid "To Location"
msgstr "ÐÑм меÑÑонаÑ
ождение"
-msgctxt "odt:stock.shipment.in.restocking_list:0"
+msgctxt "odt:stock.shipment.in.restocking_list:"
msgid "VAT Number:"
-msgstr ""
+msgstr "ÐÐС номеÑ:"
-msgctxt "odt:stock.shipment.in.restocking_list:0"
+msgctxt "odt:stock.shipment.in.restocking_list:"
msgid "Warehouse:"
msgstr "Склад:"
-msgctxt "odt:stock.shipment.internal.report:0"
+msgctxt "odt:stock.shipment.internal.report:"
msgid "/"
msgstr "/"
-msgctxt "odt:stock.shipment.internal.report:0"
+msgctxt "odt:stock.shipment.internal.report:"
msgid "Code:"
msgstr "Ðод:"
-msgctxt "odt:stock.shipment.internal.report:0"
+msgctxt "odt:stock.shipment.internal.report:"
msgid "E-Mail:"
msgstr "E-Mail:"
-msgctxt "odt:stock.shipment.internal.report:0"
+msgctxt "odt:stock.shipment.internal.report:"
msgid "From Location"
msgstr "ÐÑ Ð¼ÐµÑÑонаÑ
ождение"
-msgctxt "odt:stock.shipment.internal.report:0"
+msgctxt "odt:stock.shipment.internal.report:"
msgid "From Location:"
msgstr "ÐÑ Ð¼ÐµÑÑонаÑ
ождение:"
-msgctxt "odt:stock.shipment.internal.report:0"
+msgctxt "odt:stock.shipment.internal.report:"
msgid "Internal Shipment"
msgstr "ÐÑÑÑеÑно пÑаÑка"
-msgctxt "odt:stock.shipment.internal.report:0"
+msgctxt "odt:stock.shipment.internal.report:"
msgid "Phone:"
msgstr "ТелеÑон:"
-msgctxt "odt:stock.shipment.internal.report:0"
+msgctxt "odt:stock.shipment.internal.report:"
msgid "Planned Date:"
msgstr "ÐланиÑана даÑа:"
-msgctxt "odt:stock.shipment.internal.report:0"
+msgctxt "odt:stock.shipment.internal.report:"
msgid "Product"
msgstr "ÐÑодÑкÑ"
-msgctxt "odt:stock.shipment.internal.report:0"
+msgctxt "odt:stock.shipment.internal.report:"
msgid "Quantity"
msgstr "ÐолиÑеÑÑво"
-msgctxt "odt:stock.shipment.internal.report:0"
+msgctxt "odt:stock.shipment.internal.report:"
msgid "Reference:"
msgstr "ÐÑпÑаÑка:"
-msgctxt "odt:stock.shipment.internal.report:0"
+msgctxt "odt:stock.shipment.internal.report:"
msgid "To Location"
msgstr "ÐÑм меÑÑонаÑ
ождение"
-msgctxt "odt:stock.shipment.internal.report:0"
+msgctxt "odt:stock.shipment.internal.report:"
msgid "To Location:"
msgstr "ÐÑм меÑÑонаÑ
ождение:"
-msgctxt "odt:stock.shipment.internal.report:0"
+msgctxt "odt:stock.shipment.internal.report:"
msgid "VAT Number:"
-msgstr ""
+msgstr "ÐÐС номеÑ:"
-msgctxt "odt:stock.shipment.out.delivery_note:0"
+msgctxt "odt:stock.shipment.out.delivery_note:"
msgid "/"
msgstr "/"
-msgctxt "odt:stock.shipment.out.delivery_note:0"
+msgctxt "odt:stock.shipment.out.delivery_note:"
msgid "Customer Code:"
msgstr "Ðод на клиенÑ:"
-msgctxt "odt:stock.shipment.out.delivery_note:0"
+msgctxt "odt:stock.shipment.out.delivery_note:"
msgid "Date:"
msgstr "ÐаÑа:"
-msgctxt "odt:stock.shipment.out.delivery_note:0"
+msgctxt "odt:stock.shipment.out.delivery_note:"
msgid "Delivery Note"
msgstr "Ðележка кÑм доÑÑавка"
-msgctxt "odt:stock.shipment.out.delivery_note:0"
+msgctxt "odt:stock.shipment.out.delivery_note:"
msgid "E-Mail:"
msgstr "E-Mail:"
-msgctxt "odt:stock.shipment.out.delivery_note:0"
+msgctxt "odt:stock.shipment.out.delivery_note:"
msgid "Phone:"
msgstr "ТелеÑон:"
-msgctxt "odt:stock.shipment.out.delivery_note:0"
+msgctxt "odt:stock.shipment.out.delivery_note:"
msgid "Product"
msgstr "ÐÑодÑкÑ"
-msgctxt "odt:stock.shipment.out.delivery_note:0"
+msgctxt "odt:stock.shipment.out.delivery_note:"
msgid "Quantity"
msgstr "ÐолиÑеÑÑво"
-msgctxt "odt:stock.shipment.out.delivery_note:0"
+msgctxt "odt:stock.shipment.out.delivery_note:"
msgid "Reference:"
msgstr "ÐÑпÑаÑка:"
-msgctxt "odt:stock.shipment.out.delivery_note:0"
+msgctxt "odt:stock.shipment.out.delivery_note:"
msgid "Shipment Number:"
msgstr "ÐÐ¾Ð¼ÐµÑ Ð½Ð° пÑаÑка:"
-msgctxt "odt:stock.shipment.out.delivery_note:0"
+msgctxt "odt:stock.shipment.out.delivery_note:"
msgid "VAT Number:"
-msgstr ""
+msgstr "ÐÐС номеÑ:"
-msgctxt "odt:stock.shipment.out.picking_list:0"
+msgctxt "odt:stock.shipment.out.picking_list:"
msgid "/"
msgstr "/"
-msgctxt "odt:stock.shipment.out.picking_list:0"
+msgctxt "odt:stock.shipment.out.picking_list:"
msgid "Code:"
msgstr "Ðод:"
-msgctxt "odt:stock.shipment.out.picking_list:0"
+msgctxt "odt:stock.shipment.out.picking_list:"
msgid "Customer:"
msgstr "ÐлиенÑ:"
-msgctxt "odt:stock.shipment.out.picking_list:0"
+msgctxt "odt:stock.shipment.out.picking_list:"
msgid "E-Mail:"
msgstr "E-Mail:"
-msgctxt "odt:stock.shipment.out.picking_list:0"
+msgctxt "odt:stock.shipment.out.picking_list:"
msgid "From Location"
msgstr "ÐÑ Ð¼ÐµÑÑонаÑ
ождение"
-msgctxt "odt:stock.shipment.out.picking_list:0"
+msgctxt "odt:stock.shipment.out.picking_list:"
msgid "Phone:"
msgstr "ТелеÑон:"
-msgctxt "odt:stock.shipment.out.picking_list:0"
+msgctxt "odt:stock.shipment.out.picking_list:"
msgid "Picking List"
msgstr "СпиÑÑк за опаковане"
-msgctxt "odt:stock.shipment.out.picking_list:0"
+msgctxt "odt:stock.shipment.out.picking_list:"
msgid "Planned Date:"
msgstr "ÐланиÑана даÑа:"
-msgctxt "odt:stock.shipment.out.picking_list:0"
+msgctxt "odt:stock.shipment.out.picking_list:"
msgid "Product"
msgstr "ÐÑодÑкÑ"
-msgctxt "odt:stock.shipment.out.picking_list:0"
+msgctxt "odt:stock.shipment.out.picking_list:"
msgid "Quantity"
msgstr "ÐолиÑеÑÑво"
-msgctxt "odt:stock.shipment.out.picking_list:0"
+msgctxt "odt:stock.shipment.out.picking_list:"
msgid "Reference:"
msgstr "ÐÑпÑаÑка:"
-msgctxt "odt:stock.shipment.out.picking_list:0"
+msgctxt "odt:stock.shipment.out.picking_list:"
msgid "To Location"
msgstr "ÐÑм меÑÑонаÑ
ождение"
-msgctxt "odt:stock.shipment.out.picking_list:0"
+msgctxt "odt:stock.shipment.out.picking_list:"
msgid "VAT Number:"
-msgstr ""
+msgstr "ÐÐС номеÑ:"
-msgctxt "odt:stock.shipment.out.picking_list:0"
+msgctxt "odt:stock.shipment.out.picking_list:"
msgid "Warehouse:"
msgstr "Склад:"
-msgctxt "odt:stock.shipment.out.return.restocking_list:0"
+msgctxt "odt:stock.shipment.out.return.restocking_list:"
msgid "/"
msgstr "/"
-msgctxt "odt:stock.shipment.out.return.restocking_list:0"
+msgctxt "odt:stock.shipment.out.return.restocking_list:"
msgid "Code:"
msgstr "Ðод:"
-msgctxt "odt:stock.shipment.out.return.restocking_list:0"
+msgctxt "odt:stock.shipment.out.return.restocking_list:"
msgid "E-Mail:"
msgstr "E-Mail:"
-msgctxt "odt:stock.shipment.out.return.restocking_list:0"
+msgctxt "odt:stock.shipment.out.return.restocking_list:"
msgid "From Location"
msgstr "ÐÑ Ð¼ÐµÑÑонаÑ
ождение"
-msgctxt "odt:stock.shipment.out.return.restocking_list:0"
+msgctxt "odt:stock.shipment.out.return.restocking_list:"
msgid "Phone:"
msgstr "ТелеÑон:"
-msgctxt "odt:stock.shipment.out.return.restocking_list:0"
+msgctxt "odt:stock.shipment.out.return.restocking_list:"
msgid "Planned Date:"
msgstr "ÐланиÑана даÑа:"
-msgctxt "odt:stock.shipment.out.return.restocking_list:0"
+msgctxt "odt:stock.shipment.out.return.restocking_list:"
msgid "Product"
msgstr "ÐÑодÑкÑ"
-msgctxt "odt:stock.shipment.out.return.restocking_list:0"
+msgctxt "odt:stock.shipment.out.return.restocking_list:"
msgid "Quantity"
msgstr "ÐолиÑеÑÑво"
-msgctxt "odt:stock.shipment.out.return.restocking_list:0"
+msgctxt "odt:stock.shipment.out.return.restocking_list:"
msgid "Reference:"
msgstr "ÐÑпÑаÑка:"
-msgctxt "odt:stock.shipment.out.return.restocking_list:0"
+msgctxt "odt:stock.shipment.out.return.restocking_list:"
msgid "Restocking List"
msgstr "СпиÑÑк за ÑвелиÑаване налиÑноÑÑ Ð½Ð° пÑодÑкÑ"
-msgctxt "odt:stock.shipment.out.return.restocking_list:0"
+msgctxt "odt:stock.shipment.out.return.restocking_list:"
msgid "Supplier:"
msgstr "ÐоÑÑавÑик:"
-msgctxt "odt:stock.shipment.out.return.restocking_list:0"
+msgctxt "odt:stock.shipment.out.return.restocking_list:"
msgid "To Location"
msgstr "ÐÑм меÑÑонаÑ
ождение"
-msgctxt "odt:stock.shipment.out.return.restocking_list:0"
+msgctxt "odt:stock.shipment.out.return.restocking_list:"
msgid "VAT Number:"
-msgstr ""
+msgstr "ÐÐС номеÑ:"
-msgctxt "odt:stock.shipment.out.return.restocking_list:0"
+msgctxt "odt:stock.shipment.out.return.restocking_list:"
msgid "Warehouse:"
msgstr "Склад:"
-msgctxt "selection:stock.inventory,state:0"
+msgctxt "selection:stock.inventory,state:"
msgid "Canceled"
msgstr "ÐÑказан"
-msgctxt "selection:stock.inventory,state:0"
+msgctxt "selection:stock.inventory,state:"
msgid "Done"
msgstr "ÐÑиклÑÑен"
-msgctxt "selection:stock.inventory,state:0"
+msgctxt "selection:stock.inventory,state:"
msgid "Draft"
msgstr "ÐÑоекÑ"
-msgctxt "selection:stock.location,type:0"
+msgctxt "selection:stock.location,type:"
msgid "Customer"
msgstr "ÐлиенÑ"
-msgctxt "selection:stock.location,type:0"
+msgctxt "selection:stock.location,type:"
msgid "Lost and Found"
msgstr "ÐагÑбени и намеÑени"
-msgctxt "selection:stock.location,type:0"
+msgctxt "selection:stock.location,type:"
msgid "Production"
msgstr "ÐÑоизводÑÑво"
-msgctxt "selection:stock.location,type:0"
+msgctxt "selection:stock.location,type:"
msgid "Storage"
msgstr "Склад"
-msgctxt "selection:stock.location,type:0"
+msgctxt "selection:stock.location,type:"
msgid "Supplier"
msgstr "ÐоÑÑавÑик"
-msgctxt "selection:stock.location,type:0"
+msgctxt "selection:stock.location,type:"
msgid "View"
msgstr "Ðзглед"
-msgctxt "selection:stock.location,type:0"
+msgctxt "selection:stock.location,type:"
msgid "Warehouse"
msgstr "Склад"
-msgctxt "selection:stock.move,state:0"
+msgctxt "selection:stock.move,state:"
msgid "Assigned"
msgstr "ÐазнаÑен"
-msgctxt "selection:stock.move,state:0"
+msgctxt "selection:stock.move,state:"
msgid "Canceled"
msgstr "ÐÑказан"
-msgctxt "selection:stock.move,state:0"
+msgctxt "selection:stock.move,state:"
msgid "Done"
msgstr "ÐÑиклÑÑен"
-msgctxt "selection:stock.move,state:0"
+msgctxt "selection:stock.move,state:"
msgid "Draft"
msgstr "ÐÑоекÑ"
-msgctxt "selection:stock.period,state:0"
+msgctxt "selection:stock.period,state:"
msgid "Closed"
msgstr "ÐÑиклÑÑен"
-msgctxt "selection:stock.period,state:0"
+msgctxt "selection:stock.period,state:"
msgid "Draft"
msgstr "ÐÑоекÑ"
-msgctxt "selection:stock.shipment.in,state:0"
+msgctxt "selection:stock.shipment.in,state:"
msgid "Canceled"
msgstr "ÐÑказан"
-msgctxt "selection:stock.shipment.in,state:0"
+msgctxt "selection:stock.shipment.in,state:"
msgid "Done"
msgstr "ÐÑиклÑÑен"
-msgctxt "selection:stock.shipment.in,state:0"
+msgctxt "selection:stock.shipment.in,state:"
msgid "Draft"
msgstr "ÐÑоекÑ"
-msgctxt "selection:stock.shipment.in,state:0"
+msgctxt "selection:stock.shipment.in,state:"
msgid "Received"
msgstr "ÐолÑÑен"
-msgctxt "selection:stock.shipment.in.return,state:0"
+msgctxt "selection:stock.shipment.in.return,state:"
msgid "Assigned"
msgstr "ÐазнаÑен"
-msgctxt "selection:stock.shipment.in.return,state:0"
+msgctxt "selection:stock.shipment.in.return,state:"
msgid "Canceled"
msgstr "ÐÑказан"
-msgctxt "selection:stock.shipment.in.return,state:0"
+msgctxt "selection:stock.shipment.in.return,state:"
msgid "Done"
msgstr "ÐÑиклÑÑен"
-msgctxt "selection:stock.shipment.in.return,state:0"
+msgctxt "selection:stock.shipment.in.return,state:"
msgid "Draft"
msgstr "ÐÑоекÑ"
-msgctxt "selection:stock.shipment.in.return,state:0"
+msgctxt "selection:stock.shipment.in.return,state:"
msgid "Waiting"
msgstr "ÐзÑакваÑ"
-msgctxt "selection:stock.shipment.internal,state:0"
+msgctxt "selection:stock.shipment.internal,state:"
msgid "Assigned"
msgstr "ÐазнаÑен"
-msgctxt "selection:stock.shipment.internal,state:0"
+msgctxt "selection:stock.shipment.internal,state:"
msgid "Canceled"
msgstr "ÐÑказан"
-msgctxt "selection:stock.shipment.internal,state:0"
+msgctxt "selection:stock.shipment.internal,state:"
msgid "Done"
msgstr "ÐÑиклÑÑен"
-msgctxt "selection:stock.shipment.internal,state:0"
+msgctxt "selection:stock.shipment.internal,state:"
msgid "Draft"
msgstr "ÐÑоекÑ"
-msgctxt "selection:stock.shipment.internal,state:0"
+msgctxt "selection:stock.shipment.internal,state:"
msgid "Waiting"
msgstr "ÐзÑакваÑ"
-msgctxt "selection:stock.shipment.out,state:0"
+msgctxt "selection:stock.shipment.out,state:"
msgid "Assigned"
msgstr "ÐазнаÑен"
-msgctxt "selection:stock.shipment.out,state:0"
+msgctxt "selection:stock.shipment.out,state:"
msgid "Canceled"
msgstr "ÐÑказан"
-msgctxt "selection:stock.shipment.out,state:0"
+msgctxt "selection:stock.shipment.out,state:"
msgid "Done"
msgstr "ÐÑиклÑÑен"
-msgctxt "selection:stock.shipment.out,state:0"
+msgctxt "selection:stock.shipment.out,state:"
msgid "Draft"
msgstr "ÐÑоекÑ"
-msgctxt "selection:stock.shipment.out,state:0"
+msgctxt "selection:stock.shipment.out,state:"
msgid "Packed"
msgstr "Ðпакован"
-msgctxt "selection:stock.shipment.out,state:0"
+msgctxt "selection:stock.shipment.out,state:"
msgid "Waiting"
msgstr "ÐзÑакваÑ"
-msgctxt "selection:stock.shipment.out.return,state:0"
+msgctxt "selection:stock.shipment.out.return,state:"
msgid "Canceled"
msgstr "ÐÑказан"
-msgctxt "selection:stock.shipment.out.return,state:0"
+msgctxt "selection:stock.shipment.out.return,state:"
msgid "Done"
msgstr "ÐÑиклÑÑен"
-msgctxt "selection:stock.shipment.out.return,state:0"
+msgctxt "selection:stock.shipment.out.return,state:"
msgid "Draft"
msgstr "ÐÑоекÑ"
-msgctxt "selection:stock.shipment.out.return,state:0"
+msgctxt "selection:stock.shipment.out.return,state:"
msgid "Received"
msgstr "ÐолÑÑен"
-msgctxt "view:party.party:0"
+msgctxt "view:party.party:"
msgid "Stock"
msgstr "ÐалиÑноÑÑ"
-msgctxt "view:product.product:0"
+msgctxt "view:product.by_location.start:"
+msgid "Product by Location"
+msgstr "ÐÑодÑÐºÑ Ð¿Ð¾ меÑÑонаÑ
ождение"
+
+msgctxt "view:product.product:"
msgid "Products"
msgstr "ÐÑодÑкÑи"
-msgctxt "view:stock.configuration:0"
+msgctxt "view:stock.configuration:"
msgid "Stock Configuration"
msgstr "ÐонÑигÑÑиÑане на налиÑноÑÑ"
-msgctxt "view:stock.inventory.line:0"
+msgctxt "view:stock.inventory.line:"
msgid "Inventory Line"
msgstr "Ред Ð¾Ñ Ð¸Ð½Ð²ÐµÐ½ÑаÑизаÑиÑ"
-msgctxt "view:stock.inventory.line:0"
+msgctxt "view:stock.inventory.line:"
msgid "Inventory Lines"
msgstr "Редове Ð¾Ñ Ð¸Ð½Ð²ÐµÐ½ÑаÑизаÑиÑ"
-msgctxt "view:stock.inventory:0"
+msgctxt "view:stock.inventory:"
msgid "Add an inventory line for each missing products"
msgstr "ÐобавÑне на Ñед Ð¾Ñ Ð¸Ð½Ð²ÐµÐ½ÑаÑизаÑÐ¸Ñ Ð·Ð° вÑеки липÑÐ²Ð°Ñ Ð¿ÑодÑкÑ"
-msgctxt "view:stock.inventory:0"
+msgctxt "view:stock.inventory:"
msgid "Cancel"
msgstr "ÐÑказ"
-msgctxt "view:stock.inventory:0"
+msgctxt "view:stock.inventory:"
msgid "Complete Inventory"
msgstr "ÐÑлна инвенÑаÑизаÑиÑ"
-msgctxt "view:stock.inventory:0"
+msgctxt "view:stock.inventory:"
msgid "Confirm"
msgstr "ÐоÑвÑÑждаване"
-msgctxt "view:stock.inventory:0"
+msgctxt "view:stock.inventory:"
msgid "Inventories"
msgstr "ÐнвенÑаÑизаÑии"
-msgctxt "view:stock.inventory:0"
+msgctxt "view:stock.inventory:"
msgid "Inventory"
msgstr "ÐнвенÑаÑизаÑиÑ"
-msgctxt "view:stock.location:0"
+msgctxt "view:stock.location:"
msgid "Location"
msgstr "ÐеÑÑоположение"
-msgctxt "view:stock.location:0"
+msgctxt "view:stock.location:"
+msgid "Location Quantity"
+msgstr ""
+
+msgctxt "view:stock.location:"
msgid "Locations"
msgstr "ÐеÑÑонаÑ
ождениÑ"
-msgctxt "view:stock.location:0"
+msgctxt "view:stock.location:"
msgid "Product Stock"
msgstr "ÐалиÑноÑÑ Ð½Ð° пÑодÑкÑ"
-msgctxt "view:stock.location_stock_date.init:0"
-msgid "Product Quantity."
-msgstr "ÐолиÑеÑÑво пÑодÑкÑ"
-
-msgctxt "view:stock.move:0"
+msgctxt "view:stock.move:"
msgid "Move"
msgstr "Ðвижение"
-msgctxt "view:stock.move:0"
+msgctxt "view:stock.move:"
msgid "Moves"
msgstr "ÐвижениÑ"
-msgctxt "view:stock.period.cache:0"
+msgctxt "view:stock.period.cache:"
msgid "Period Cache"
-msgstr ""
+msgstr "РбÑой за пеÑиод"
-msgctxt "view:stock.period.cache:0"
+msgctxt "view:stock.period.cache:"
msgid "Period Caches"
-msgstr ""
+msgstr "РбÑой за пеÑиод"
-#, fuzzy
-msgctxt "view:stock.period:0"
+msgctxt "view:stock.period:"
msgid "Close"
msgstr "ÐаÑваÑÑне"
-#, fuzzy
-msgctxt "view:stock.period:0"
+msgctxt "view:stock.period:"
msgid "Draft"
msgstr "ÐÑоекÑ"
-#, fuzzy
-msgctxt "view:stock.period:0"
+msgctxt "view:stock.period:"
msgid "Period"
msgstr "ÐеÑиод"
-#, fuzzy
-msgctxt "view:stock.period:0"
+msgctxt "view:stock.period:"
msgid "Periods"
msgstr "ÐеÑиоди"
-msgctxt "view:stock.product_stock_date.init:0"
-msgid "Product Quantity."
-msgstr "ÐолиÑеÑÑво пÑодÑкÑ"
-
-msgctxt "view:stock.shipment.in.return.assign.assign_failed:0"
-msgid "Moves"
-msgstr "ÐвижениÑ"
+msgctxt "view:stock.products_by_locations.start:"
+msgid "Products by Locations"
+msgstr ""
-msgctxt "view:stock.shipment.in.return.assign.assign_failed:0"
+msgctxt "view:stock.shipment.in.return.assign.failed:"
msgid "Unable to Assign"
-msgstr "ÐевÑзможен доÑÑÑп"
+msgstr "ÐевÑзможено назнаÑение"
-msgctxt "view:stock.shipment.in.return.assign.assign_failed:0"
+msgctxt "view:stock.shipment.in.return.assign.failed:"
msgid "Unable to assign those products:"
msgstr "Ðе Ð¼Ð¾Ð³Ð°Ñ Ð´Ð° бÑÐ´Ð°Ñ Ð½Ð°Ð·Ð½Ð°Ñени ÑледниÑе пÑодÑкÑи:"
-msgctxt "view:stock.shipment.in.return:0"
+msgctxt "view:stock.shipment.in.return:"
msgid "Assign"
msgstr "ÐазнаÑаване"
-msgctxt "view:stock.shipment.in.return:0"
+msgctxt "view:stock.shipment.in.return:"
msgid "Cancel"
msgstr "ÐÑказ"
-msgctxt "view:stock.shipment.in.return:0"
+msgctxt "view:stock.shipment.in.return:"
msgid "Done"
msgstr "ÐÑиклÑÑен"
-msgctxt "view:stock.shipment.in.return:0"
+msgctxt "view:stock.shipment.in.return:"
msgid "Draft"
msgstr "ÐÑоекÑ"
-msgctxt "view:stock.shipment.in.return:0"
+msgctxt "view:stock.shipment.in.return:"
msgid "Reset to Draft"
msgstr "ÐзпÑаÑане в пÑоекÑ"
-msgctxt "view:stock.shipment.in.return:0"
+msgctxt "view:stock.shipment.in.return:"
msgid "Supplier Return Shipment"
msgstr "ÐÑаÑка вÑÑнаÑа на доÑÑавÑик"
-msgctxt "view:stock.shipment.in.return:0"
+msgctxt "view:stock.shipment.in.return:"
msgid "Supplier Return Shipments"
msgstr "ÐÑаÑка вÑÑнаÑа на доÑÑавÑик"
-msgctxt "view:stock.shipment.in.return:0"
+msgctxt "view:stock.shipment.in.return:"
+msgid "Wait"
+msgstr ""
+
+msgctxt "view:stock.shipment.in.return:"
msgid "Waiting"
msgstr "ÐзÑакваÑ"
-msgctxt "view:stock.shipment.in:0"
+msgctxt "view:stock.shipment.in:"
msgid "Cancel"
msgstr "ÐÑказ"
-msgctxt "view:stock.shipment.in:0"
+msgctxt "view:stock.shipment.in:"
msgid "Done"
msgstr "ÐÑиклÑÑен"
-msgctxt "view:stock.shipment.in:0"
+msgctxt "view:stock.shipment.in:"
msgid "Incoming Moves"
msgstr "ÐÑ
одÑÑи движениÑ"
-msgctxt "view:stock.shipment.in:0"
+msgctxt "view:stock.shipment.in:"
msgid "Inventory Moves"
msgstr "ÐÐ²Ð¸Ð¶ÐµÐ½Ð¸Ñ Ð½Ð° инвенÑаÑизаÑиÑ"
-msgctxt "view:stock.shipment.in:0"
+msgctxt "view:stock.shipment.in:"
msgid "Moves"
msgstr "ÐвижениÑ"
-msgctxt "view:stock.shipment.in:0"
+msgctxt "view:stock.shipment.in:"
+msgid "Receive"
+msgstr ""
+
+msgctxt "view:stock.shipment.in:"
msgid "Received"
msgstr "ÐолÑÑен"
-msgctxt "view:stock.shipment.in:0"
+msgctxt "view:stock.shipment.in:"
msgid "Reset to Draft"
msgstr "ÐзпÑаÑане в пÑоекÑ"
-msgctxt "view:stock.shipment.in:0"
+msgctxt "view:stock.shipment.in:"
msgid "Supplier Shipment"
msgstr "ÐÑаÑка на доÑÑавÑик"
-msgctxt "view:stock.shipment.in:0"
+msgctxt "view:stock.shipment.in:"
msgid "Supplier Shipments"
msgstr "ÐÑаÑки на доÑÑавÑик"
-msgctxt "view:stock.shipment.internal.assign.assign_failed:0"
-msgid "Moves"
-msgstr "ÐвижениÑ"
-
-msgctxt "view:stock.shipment.internal.assign.assign_failed:0"
+msgctxt "view:stock.shipment.internal.assign.failed:"
msgid "Unable to Assign"
-msgstr "ÐевÑзможен доÑÑÑп"
+msgstr "ÐевÑзможено назнаÑение"
-msgctxt "view:stock.shipment.internal.assign.assign_failed:0"
+msgctxt "view:stock.shipment.internal.assign.failed:"
msgid "Unable to assign those products:"
msgstr "Ðе Ð¼Ð¾Ð³Ð°Ñ Ð´Ð° бÑÐ´Ð°Ñ Ð½Ð°Ð·Ð½Ð°Ñени ÑледниÑе пÑодÑкÑи:"
-msgctxt "view:stock.shipment.internal:0"
+msgctxt "view:stock.shipment.internal:"
msgid "Assign"
msgstr "ÐазнаÑаване"
-msgctxt "view:stock.shipment.internal:0"
+msgctxt "view:stock.shipment.internal:"
msgid "Cancel"
msgstr "ÐÑказ"
-msgctxt "view:stock.shipment.internal:0"
+msgctxt "view:stock.shipment.internal:"
msgid "Done"
msgstr "ÐÑиклÑÑен"
-msgctxt "view:stock.shipment.internal:0"
+msgctxt "view:stock.shipment.internal:"
msgid "Draft"
msgstr "ÐÑоекÑ"
-msgctxt "view:stock.shipment.internal:0"
+msgctxt "view:stock.shipment.internal:"
msgid "Internal Shipment"
msgstr "ÐÑÑÑеÑна пÑаÑка"
-msgctxt "view:stock.shipment.internal:0"
+msgctxt "view:stock.shipment.internal:"
msgid "Internal Shipments"
msgstr "ÐÑÑÑеÑни пÑаÑки"
-msgctxt "view:stock.shipment.internal:0"
+msgctxt "view:stock.shipment.internal:"
msgid "Reset to Draft"
msgstr "ÐзпÑаÑане в пÑоекÑ"
-msgctxt "view:stock.shipment.internal:0"
+msgctxt "view:stock.shipment.internal:"
msgid "Waiting"
msgstr "ÐзÑакваÑ"
-msgctxt "view:stock.shipment.out.assign.assign_failed:0"
-msgid "Inventory Moves"
-msgstr "ÐÐ²Ð¸Ð¶ÐµÐ½Ð¸Ñ Ð½Ð° инвенÑаÑизаÑиÑ"
-
-msgctxt "view:stock.shipment.out.assign.assign_failed:0"
+msgctxt "view:stock.shipment.out.assign.failed:"
msgid "Unable to Assign"
-msgstr "ÐевÑзможен доÑÑÑп"
+msgstr "ÐевÑзможено назнаÑение"
-msgctxt "view:stock.shipment.out.assign.assign_failed:0"
+msgctxt "view:stock.shipment.out.assign.failed:"
msgid "Unable to assign those products:"
msgstr "Ðе Ð¼Ð¾Ð³Ð°Ñ Ð´Ð° бÑÐ´Ð°Ñ Ð½Ð°Ð·Ð½Ð°Ñени ÑледниÑе пÑодÑкÑи:"
-msgctxt "view:stock.shipment.out.return:0"
+msgctxt "view:stock.shipment.out.return:"
msgid "Cancel"
msgstr "ÐÑказ"
-msgctxt "view:stock.shipment.out.return:0"
+msgctxt "view:stock.shipment.out.return:"
msgid "Customer Return Shipment"
msgstr "ÐÑаÑка вÑÑнаÑа Ð¾Ñ ÐºÐ»Ð¸ÐµÐ½Ñ"
-msgctxt "view:stock.shipment.out.return:0"
+msgctxt "view:stock.shipment.out.return:"
msgid "Customer Return Shipments"
msgstr "ÐÑаÑки вÑÑнаÑи Ð¾Ñ ÐºÐ»Ð¸ÐµÐ½Ñ"
-msgctxt "view:stock.shipment.out.return:0"
+msgctxt "view:stock.shipment.out.return:"
msgid "Done"
msgstr "ÐÑиклÑÑен"
-msgctxt "view:stock.shipment.out.return:0"
+msgctxt "view:stock.shipment.out.return:"
+msgid "Draft"
+msgstr "ÐÑоекÑ"
+
+msgctxt "view:stock.shipment.out.return:"
msgid "Incoming Moves"
msgstr "ÐÑ
одÑÑи движениÑ"
-msgctxt "view:stock.shipment.out.return:0"
+msgctxt "view:stock.shipment.out.return:"
msgid "Inventory Moves"
msgstr "ÐÐ²Ð¸Ð¶ÐµÐ½Ð¸Ñ Ð½Ð° инвенÑаÑизаÑиÑ"
-msgctxt "view:stock.shipment.out.return:0"
+msgctxt "view:stock.shipment.out.return:"
msgid "Moves"
msgstr "ÐвижениÑ"
-msgctxt "view:stock.shipment.out.return:0"
+msgctxt "view:stock.shipment.out.return:"
msgid "Received"
msgstr "ÐолÑÑен"
-msgctxt "view:stock.shipment.out.return:0"
+msgctxt "view:stock.shipment.out.return:"
msgid "Reset to Draft"
msgstr "ÐзпÑаÑане в пÑоекÑ"
-msgctxt "view:stock.shipment.out:0"
+msgctxt "view:stock.shipment.out:"
msgid "Assign"
msgstr "ÐазнаÑаване"
-msgctxt "view:stock.shipment.out:0"
+msgctxt "view:stock.shipment.out:"
msgid "Cancel"
msgstr "ÐÑказ"
-msgctxt "view:stock.shipment.out:0"
+msgctxt "view:stock.shipment.out:"
msgid "Customer Shipment"
msgstr "ÐÑаÑка за клиенÑ"
-msgctxt "view:stock.shipment.out:0"
+msgctxt "view:stock.shipment.out:"
msgid "Customer Shipments"
msgstr "ÐÑаÑки за клиенÑи"
-msgctxt "view:stock.shipment.out:0"
+msgctxt "view:stock.shipment.out:"
msgid "Done"
msgstr "ÐÑиклÑÑен"
-msgctxt "view:stock.shipment.out:0"
+msgctxt "view:stock.shipment.out:"
msgid "Draft"
msgstr "ÐÑоекÑ"
-msgctxt "view:stock.shipment.out:0"
+msgctxt "view:stock.shipment.out:"
msgid "Inventory Moves"
msgstr "ÐÐ²Ð¸Ð¶ÐµÐ½Ð¸Ñ Ð½Ð° инвенÑаÑизаÑиÑ"
-msgctxt "view:stock.shipment.out:0"
+msgctxt "view:stock.shipment.out:"
msgid "Make shipment"
msgstr "СÑздаване на изпÑаÑане"
-msgctxt "view:stock.shipment.out:0"
+msgctxt "view:stock.shipment.out:"
msgid "Outgoing Moves"
msgstr "ÐзÑ
одÑÑи движениÑ"
-msgctxt "view:stock.shipment.out:0"
+msgctxt "view:stock.shipment.out:"
msgid "Reset to Draft"
msgstr "ÐзпÑаÑане в пÑоекÑ"
-msgctxt "view:stock.shipment.out:0"
+msgctxt "view:stock.shipment.out:"
msgid "Waiting"
msgstr "ÐзÑакваÑ"
-msgctxt "wizard_button:stock.location.open,init,end:0"
+msgctxt "wizard_button:product.by_location,start,end:"
msgid "Cancel"
msgstr "ÐÑказ"
-msgctxt "wizard_button:stock.location.open,init,open:0"
+msgctxt "wizard_button:product.by_location,start,open:"
msgid "Open"
msgstr "ÐÑваÑÑне"
-msgctxt "wizard_button:stock.product.open,init,end:0"
+msgctxt "wizard_button:stock.products_by_locations,start,end:"
msgid "Cancel"
msgstr "ÐÑказ"
-msgctxt "wizard_button:stock.product.open,init,open:0"
+msgctxt "wizard_button:stock.products_by_locations,start,open:"
msgid "Open"
msgstr "ÐÑваÑÑне"
-msgctxt "wizard_button:stock.shipment.in.return.assign,ask_force,end:0"
+msgctxt "wizard_button:stock.shipment.in.return.assign,failed,end:"
msgid "Ok"
msgstr "ÐобÑе"
-msgctxt "wizard_button:stock.shipment.in.return.assign,ask_force,force:0"
+msgctxt "wizard_button:stock.shipment.in.return.assign,failed,force:"
msgid "Force Assign"
msgstr "СÑздай изÑиÑно назнаÑение"
-msgctxt "wizard_button:stock.shipment.in.return.assign,assign_failed,end:0"
+msgctxt "wizard_button:stock.shipment.internal.assign,failed,end:"
msgid "Ok"
msgstr "ÐобÑе"
-msgctxt "wizard_button:stock.shipment.internal.assign,ask_force,end:0"
-msgid "Ok"
-msgstr "ÐобÑе"
-
-msgctxt "wizard_button:stock.shipment.internal.assign,ask_force,force:0"
+msgctxt "wizard_button:stock.shipment.internal.assign,failed,force:"
msgid "Force Assign"
msgstr "СÑздай изÑиÑно назнаÑение"
-msgctxt "wizard_button:stock.shipment.internal.assign,assign_failed,end:0"
+msgctxt "wizard_button:stock.shipment.out.assign,failed,end:"
msgid "Ok"
msgstr "ÐобÑе"
-msgctxt "wizard_button:stock.shipment.out.assign,ask_force,end:0"
-msgid "Ok"
-msgstr "ÐобÑе"
-
-msgctxt "wizard_button:stock.shipment.out.assign,ask_force,force:0"
+msgctxt "wizard_button:stock.shipment.out.assign,failed,force:"
msgid "Force Assign"
msgstr "СÑздай изÑиÑно назнаÑение"
-
-msgctxt "wizard_button:stock.shipment.out.assign,assign_failed,end:0"
-msgid "Ok"
-msgstr "ÐобÑе"
diff --git a/locale/ca_ES.po b/locale/ca_ES.po
new file mode 100644
index 0000000..444e486
--- /dev/null
+++ b/locale/ca_ES.po
@@ -0,0 +1,2319 @@
+#
+msgid ""
+msgstr "Content-Type: text/plain; charset=utf-8\n"
+
+msgctxt "error:product.template:"
+msgid ""
+"You cannot change the default uom for a product which is associated to stock"
+" moves."
+msgstr ""
+"No pot canviar la UdM predeterminada d'un producte que està associat amb "
+"moviments d'existències."
+
+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 ""
+
+msgctxt "error:stock.location:"
+msgid ""
+"A location with existing moves cannot be changed to a type that does not "
+"support moves."
+msgstr ""
+"Una ubicació amb moviments no pot ser canviat a un tipus que no suporti "
+"moviments."
+
+msgctxt "error:stock.location:"
+msgid "Location \"%s\" must be a child of warehouse \"%s\"!"
+msgstr "La ubicació «%s» ha de ser filla del magatzem «%s»"
+
+msgctxt "error:stock.location:"
+msgid "You can not create recursive locations!"
+msgstr "No pot crear ubicacions recursives"
+
+msgctxt "error:stock.move:"
+msgid "Internal move quantity must be positive"
+msgstr ""
+
+msgctxt "error:stock.move:"
+msgid "Move can be on only one Shipment"
+msgstr "Un moviment només pot estar en un enviament."
+
+msgctxt "error:stock.move:"
+msgid "Move quantity must be positive"
+msgstr "La quantitat a moure ha de ser positiva"
+
+msgctxt "error:stock.move:"
+msgid "Source and destination location must be different"
+msgstr "Els llocs origen i destà han de ser diferents"
+
+msgctxt "error:stock.move:"
+msgid "You can not modify a move in the state: \"Assigned\", \"Done\" or \"Cancel\""
+msgstr ""
+
+msgctxt "error:stock.move:"
+msgid "You can not modify move in closed period!"
+msgstr ""
+
+msgctxt "error:stock.move:"
+msgid "You can not set state to assigned!"
+msgstr "No pot establir l'estat com a assignat"
+
+msgctxt "error:stock.move:"
+msgid "You can not set state to done!"
+msgstr "No pot establir l'estat com a acabat"
+
+msgctxt "error:stock.move:"
+msgid "You can not set state to draft!"
+msgstr "No pot establir l'estat com a esborrany"
+
+msgctxt "error:stock.move:"
+msgid "You can only delete draft or cancelled moves!"
+msgstr "Només pot esborrar moviments en esborrany o cancel·lats"
+
+msgctxt "error:stock.period:"
+msgid "You can not close a period in the future or today!"
+msgstr ""
+
+msgctxt "error:stock.period:"
+msgid "You can not close a period when there is still assigned moves!"
+msgstr ""
+
+msgctxt "error:stock.shipment.in.return:"
+msgid "Supplier Return Shipment \"%s\" must be cancelled before deletion!"
+msgstr ""
+
+msgctxt "error:stock.shipment.in:"
+msgid ""
+"Incoming Moves must have the warehouse input location as destination "
+"location!"
+msgstr ""
+"Els moviments d'entrada han de tenir la ubicació del magatzem d'entrada com "
+"la ubicació de destinació"
+
+msgctxt "error:stock.shipment.in:"
+msgid ""
+"Inventory Moves must have the warehouse input location as source location!"
+msgstr ""
+"Els moviments d'inventari han de tenir la ubicació del magatzem d'entrada "
+"com la ubicació d'origen"
+
+msgctxt "error:stock.shipment.in:"
+msgid "Supplier Shipment \"%s\" must be cancelled before deletion!"
+msgstr ""
+
+msgctxt "error:stock.shipment.internal:"
+msgid "Internal Shipment \"%s\" must be cancelled before deletion!"
+msgstr ""
+
+msgctxt "error:stock.shipment.out.return.create:"
+msgid "The shipment with code %s is not yet sent."
+msgstr "El paquet amb codi %s no ha estat enviat encara."
+
+msgctxt "error:stock.shipment.out.return.create:"
+msgid "You can not create return shipment"
+msgstr "No pot crear paquets de tornada"
+
+msgctxt "error:stock.shipment.out.return:"
+msgid "Customer Return Shipment \"%s\" must be cancelled before deletion!"
+msgstr ""
+
+msgctxt "error:stock.shipment.out:"
+msgid "Customer Shipment \"%s\" must be cancelled before deletion!"
+msgstr ""
+
+msgctxt "field:party.address,delivery:"
+msgid "Delivery"
+msgstr "Enviament"
+
+msgctxt "field:party.party,customer_location:"
+msgid "Customer Location"
+msgstr "Ubicació del client"
+
+msgctxt "field:party.party,supplier_location:"
+msgid "Supplier Location"
+msgstr "Ubicació del proveïdor"
+
+msgctxt "field:product.by_location.start,forecast_date:"
+msgid "At Date"
+msgstr ""
+
+msgctxt "field:product.by_location.start,id:"
+msgid "ID"
+msgstr ""
+
+msgctxt "field:product.product,cost_value:"
+msgid "Cost Value"
+msgstr ""
+
+msgctxt "field:product.product,forecast_quantity:"
+msgid "Forecast Quantity"
+msgstr "Quantitat prevista"
+
+msgctxt "field:product.product,quantity:"
+msgid "Quantity"
+msgstr "Quantitat"
+
+msgctxt "field:product.template,cost_value:"
+msgid "Cost Value"
+msgstr ""
+
+msgctxt "field:product.template,forecast_quantity:"
+msgid "Forecast Quantity"
+msgstr "Quantitat prevista"
+
+msgctxt "field:product.template,quantity:"
+msgid "Quantity"
+msgstr "Quantitat"
+
+msgctxt "field:stock.configuration,create_date:"
+msgid "Create Date"
+msgstr ""
+
+#, fuzzy
+msgctxt "field:stock.configuration,create_uid:"
+msgid "Create User"
+msgstr "Crear usuari"
+
+msgctxt "field:stock.configuration,id:"
+msgid "ID"
+msgstr ""
+
+#, fuzzy
+msgctxt "field:stock.configuration,rec_name:"
+msgid "Name"
+msgstr "Nom del camp"
+
+msgctxt "field:stock.configuration,shipment_in_return_sequence:"
+msgid "Supplier Return Shipment Sequence"
+msgstr ""
+
+msgctxt "field:stock.configuration,shipment_in_sequence:"
+msgid "Supplier Shipment Sequence"
+msgstr ""
+
+msgctxt "field:stock.configuration,shipment_internal_sequence:"
+msgid "Internal Shipment Sequence"
+msgstr ""
+
+msgctxt "field:stock.configuration,shipment_out_return_sequence:"
+msgid "Customer Return Shipment Sequence"
+msgstr ""
+
+msgctxt "field:stock.configuration,shipment_out_sequence:"
+msgid "Customer Shipment Sequence"
+msgstr ""
+
+msgctxt "field:stock.configuration,write_date:"
+msgid "Write Date"
+msgstr ""
+
+msgctxt "field:stock.configuration,write_uid:"
+msgid "Write User"
+msgstr ""
+
+msgctxt "field:stock.inventory,company:"
+msgid "Company"
+msgstr "Empresa"
+
+msgctxt "field:stock.inventory,create_date:"
+msgid "Create Date"
+msgstr ""
+
+#, fuzzy
+msgctxt "field:stock.inventory,create_uid:"
+msgid "Create User"
+msgstr "Crear usuari"
+
+msgctxt "field:stock.inventory,date:"
+msgid "Date"
+msgstr "Data"
+
+msgctxt "field:stock.inventory,id:"
+msgid "ID"
+msgstr ""
+
+msgctxt "field:stock.inventory,lines:"
+msgid "Lines"
+msgstr "LÃnies"
+
+msgctxt "field:stock.inventory,location:"
+msgid "Location"
+msgstr "Ubicació"
+
+msgctxt "field:stock.inventory,lost_found:"
+msgid "Lost and Found"
+msgstr "Perdut i trobat"
+
+msgctxt "field:stock.inventory,rec_name:"
+msgid "Name"
+msgstr "Nom"
+
+msgctxt "field:stock.inventory,state:"
+msgid "State"
+msgstr "Estat"
+
+msgctxt "field:stock.inventory,write_date:"
+msgid "Write Date"
+msgstr ""
+
+msgctxt "field:stock.inventory,write_uid:"
+msgid "Write User"
+msgstr ""
+
+msgctxt "field:stock.inventory.line,create_date:"
+msgid "Create Date"
+msgstr ""
+
+#, fuzzy
+msgctxt "field:stock.inventory.line,create_uid:"
+msgid "Create User"
+msgstr "Crear usuari"
+
+msgctxt "field:stock.inventory.line,expected_quantity:"
+msgid "Expected Quantity"
+msgstr "Quantitat esperada"
+
+msgctxt "field:stock.inventory.line,id:"
+msgid "ID"
+msgstr ""
+
+msgctxt "field:stock.inventory.line,inventory:"
+msgid "Inventory"
+msgstr "Inventari"
+
+msgctxt "field:stock.inventory.line,move:"
+msgid "Move"
+msgstr "Moviment"
+
+msgctxt "field:stock.inventory.line,product:"
+msgid "Product"
+msgstr "Producte"
+
+msgctxt "field:stock.inventory.line,quantity:"
+msgid "Quantity"
+msgstr "Quantitat"
+
+msgctxt "field:stock.inventory.line,rec_name:"
+msgid "Name"
+msgstr "Nom"
+
+msgctxt "field:stock.inventory.line,unit_digits:"
+msgid "Unit Digits"
+msgstr "DÃgits de la unitat"
+
+msgctxt "field:stock.inventory.line,uom:"
+msgid "UOM"
+msgstr "UdM"
+
+msgctxt "field:stock.inventory.line,write_date:"
+msgid "Write Date"
+msgstr ""
+
+msgctxt "field:stock.inventory.line,write_uid:"
+msgid "Write User"
+msgstr ""
+
+msgctxt "field:stock.location,active:"
+msgid "Active"
+msgstr "Actiu"
+
+msgctxt "field:stock.location,address:"
+msgid "Address"
+msgstr "Adreces"
+
+msgctxt "field:stock.location,childs:"
+msgid "Children"
+msgstr "Fills"
+
+msgctxt "field:stock.location,code:"
+msgid "Code"
+msgstr "Codi"
+
+msgctxt "field:stock.location,cost_value:"
+msgid "Cost Value"
+msgstr ""
+
+msgctxt "field:stock.location,create_date:"
+msgid "Create Date"
+msgstr ""
+
+#, fuzzy
+msgctxt "field:stock.location,create_uid:"
+msgid "Create User"
+msgstr "Crear usuari"
+
+msgctxt "field:stock.location,forecast_quantity:"
+msgid "Forecast Quantity"
+msgstr "Quantitat prevista"
+
+msgctxt "field:stock.location,id:"
+msgid "ID"
+msgstr ""
+
+msgctxt "field:stock.location,input_location:"
+msgid "Input"
+msgstr "Entrada"
+
+msgctxt "field:stock.location,left:"
+msgid "Left"
+msgstr "Esquerra"
+
+msgctxt "field:stock.location,name:"
+msgid "Name"
+msgstr "Nom"
+
+msgctxt "field:stock.location,output_location:"
+msgid "Output"
+msgstr "Sortida"
+
+msgctxt "field:stock.location,parent:"
+msgid "Parent"
+msgstr "Pare"
+
+msgctxt "field:stock.location,quantity:"
+msgid "Quantity"
+msgstr "Quantitat"
+
+msgctxt "field:stock.location,rec_name:"
+msgid "Name"
+msgstr "Nom"
+
+msgctxt "field:stock.location,right:"
+msgid "Right"
+msgstr "Dreta"
+
+msgctxt "field:stock.location,storage_location:"
+msgid "Storage"
+msgstr "Magatzem"
+
+msgctxt "field:stock.location,type:"
+msgid "Location type"
+msgstr "Tipus d'ubicació"
+
+msgctxt "field:stock.location,write_date:"
+msgid "Write Date"
+msgstr ""
+
+msgctxt "field:stock.location,write_uid:"
+msgid "Write User"
+msgstr ""
+
+msgctxt "field:stock.move,company:"
+msgid "Company"
+msgstr "Empresa"
+
+msgctxt "field:stock.move,cost_price:"
+msgid "Cost Price"
+msgstr "Preu de cost"
+
+msgctxt "field:stock.move,create_date:"
+msgid "Create Date"
+msgstr ""
+
+#, fuzzy
+msgctxt "field:stock.move,create_uid:"
+msgid "Create User"
+msgstr "Crear usuari"
+
+msgctxt "field:stock.move,currency:"
+msgid "Currency"
+msgstr "Divisa"
+
+msgctxt "field:stock.move,effective_date:"
+msgid "Effective Date"
+msgstr "Data efectiva"
+
+msgctxt "field:stock.move,from_location:"
+msgid "From Location"
+msgstr "Des d'ubicació"
+
+msgctxt "field:stock.move,id:"
+msgid "ID"
+msgstr ""
+
+msgctxt "field:stock.move,internal_quantity:"
+msgid "Internal Quantity"
+msgstr ""
+
+msgctxt "field:stock.move,planned_date:"
+msgid "Planned Date"
+msgstr "Data estimada"
+
+msgctxt "field:stock.move,product:"
+msgid "Product"
+msgstr "Producte"
+
+msgctxt "field:stock.move,product_uom_category:"
+msgid "Product Uom Category"
+msgstr ""
+
+msgctxt "field:stock.move,quantity:"
+msgid "Quantity"
+msgstr "Quantitat"
+
+msgctxt "field:stock.move,rec_name:"
+msgid "Name"
+msgstr "Nom"
+
+msgctxt "field:stock.move,shipment_in:"
+msgid "Supplier Shipment"
+msgstr "Enviament del proveïdor"
+
+msgctxt "field:stock.move,shipment_in_return:"
+msgid "Supplier Return Shipment"
+msgstr "Enviament de devolució a proveïdor"
+
+msgctxt "field:stock.move,shipment_internal:"
+msgid "Internal Shipment"
+msgstr "Enviament intern"
+
+msgctxt "field:stock.move,shipment_out:"
+msgid "Customer Shipment"
+msgstr "Enviament a client"
+
+msgctxt "field:stock.move,shipment_out_return:"
+msgid "Customer Return Shipment"
+msgstr "Enviament de devolució de client"
+
+msgctxt "field:stock.move,state:"
+msgid "State"
+msgstr "Estat"
+
+msgctxt "field:stock.move,to_location:"
+msgid "To Location"
+msgstr "A la ubicació"
+
+msgctxt "field:stock.move,unit_digits:"
+msgid "Unit Digits"
+msgstr "DÃgits d'unitat"
+
+msgctxt "field:stock.move,unit_price:"
+msgid "Unit Price"
+msgstr "Preu unitari"
+
+msgctxt "field:stock.move,unit_price_required:"
+msgid "Unit Price Required"
+msgstr "Requereix preu unitari"
+
+msgctxt "field:stock.move,uom:"
+msgid "Uom"
+msgstr "UdM"
+
+msgctxt "field:stock.move,write_date:"
+msgid "Write Date"
+msgstr ""
+
+msgctxt "field:stock.move,write_uid:"
+msgid "Write User"
+msgstr ""
+
+msgctxt "field:stock.period,caches:"
+msgid "Caches"
+msgstr ""
+
+#, fuzzy
+msgctxt "field:stock.period,company:"
+msgid "Company"
+msgstr "Empresa"
+
+msgctxt "field:stock.period,create_date:"
+msgid "Create Date"
+msgstr ""
+
+#, fuzzy
+msgctxt "field:stock.period,create_uid:"
+msgid "Create User"
+msgstr "Crear usuari"
+
+#, fuzzy
+msgctxt "field:stock.period,date:"
+msgid "Date"
+msgstr "Data"
+
+msgctxt "field:stock.period,id:"
+msgid "ID"
+msgstr ""
+
+#, fuzzy
+msgctxt "field:stock.period,rec_name:"
+msgid "Name"
+msgstr "Nom del camp"
+
+#, fuzzy
+msgctxt "field:stock.period,state:"
+msgid "State"
+msgstr "Estat"
+
+msgctxt "field:stock.period,write_date:"
+msgid "Write Date"
+msgstr ""
+
+msgctxt "field:stock.period,write_uid:"
+msgid "Write User"
+msgstr ""
+
+msgctxt "field:stock.period.cache,create_date:"
+msgid "Create Date"
+msgstr ""
+
+#, fuzzy
+msgctxt "field:stock.period.cache,create_uid:"
+msgid "Create User"
+msgstr "Crear usuari"
+
+msgctxt "field:stock.period.cache,id:"
+msgid "ID"
+msgstr ""
+
+msgctxt "field:stock.period.cache,internal_quantity:"
+msgid "Internal Quantity"
+msgstr ""
+
+#, fuzzy
+msgctxt "field:stock.period.cache,location:"
+msgid "Location"
+msgstr "Ubicació"
+
+#, fuzzy
+msgctxt "field:stock.period.cache,period:"
+msgid "Period"
+msgstr "PerÃode"
+
+#, fuzzy
+msgctxt "field:stock.period.cache,product:"
+msgid "Product"
+msgstr "Productes"
+
+#, fuzzy
+msgctxt "field:stock.period.cache,rec_name:"
+msgid "Name"
+msgstr "Nom del camp"
+
+msgctxt "field:stock.period.cache,write_date:"
+msgid "Write Date"
+msgstr ""
+
+msgctxt "field:stock.period.cache,write_uid:"
+msgid "Write User"
+msgstr ""
+
+msgctxt "field:stock.products_by_locations.start,forecast_date:"
+msgid "At Date"
+msgstr ""
+
+msgctxt "field:stock.products_by_locations.start,id:"
+msgid "ID"
+msgstr ""
+
+msgctxt "field:stock.shipment.in,code:"
+msgid "Code"
+msgstr "Codi"
+
+#, fuzzy
+msgctxt "field:stock.shipment.in,company:"
+msgid "Company"
+msgstr "Empresa"
+
+msgctxt "field:stock.shipment.in,contact_address:"
+msgid "Contact Address"
+msgstr "Adreça de contacte"
+
+msgctxt "field:stock.shipment.in,create_date:"
+msgid "Create Date"
+msgstr ""
+
+#, fuzzy
+msgctxt "field:stock.shipment.in,create_uid:"
+msgid "Create User"
+msgstr "Crear usuari"
+
+msgctxt "field:stock.shipment.in,effective_date:"
+msgid "Effective Date"
+msgstr "Data efectiva"
+
+msgctxt "field:stock.shipment.in,id:"
+msgid "ID"
+msgstr ""
+
+msgctxt "field:stock.shipment.in,incoming_moves:"
+msgid "Incoming Moves"
+msgstr "Moviments d'entrada"
+
+msgctxt "field:stock.shipment.in,inventory_moves:"
+msgid "Inventory Moves"
+msgstr "Moviments d'inventari"
+
+msgctxt "field:stock.shipment.in,moves:"
+msgid "Moves"
+msgstr "Moviments"
+
+msgctxt "field:stock.shipment.in,planned_date:"
+msgid "Planned Date"
+msgstr "Data estimada"
+
+msgctxt "field:stock.shipment.in,rec_name:"
+msgid "Name"
+msgstr "Nom"
+
+msgctxt "field:stock.shipment.in,reference:"
+msgid "Reference"
+msgstr "Referència"
+
+msgctxt "field:stock.shipment.in,state:"
+msgid "State"
+msgstr "Estat"
+
+msgctxt "field:stock.shipment.in,supplier:"
+msgid "Supplier"
+msgstr "Proveïdor"
+
+#, fuzzy
+msgctxt "field:stock.shipment.in,supplier_location:"
+msgid "Supplier Location"
+msgstr "Ubicació del proveïdor"
+
+msgctxt "field:stock.shipment.in,warehouse:"
+msgid "Warehouse"
+msgstr "Magatzem"
+
+msgctxt "field:stock.shipment.in,warehouse_input:"
+msgid "Warehouse Input"
+msgstr ""
+
+msgctxt "field:stock.shipment.in,warehouse_storage:"
+msgid "Warehouse Storage"
+msgstr ""
+
+msgctxt "field:stock.shipment.in,write_date:"
+msgid "Write Date"
+msgstr ""
+
+msgctxt "field:stock.shipment.in,write_uid:"
+msgid "Write User"
+msgstr ""
+
+msgctxt "field:stock.shipment.in.return,code:"
+msgid "Code"
+msgstr "Codi"
+
+#, fuzzy
+msgctxt "field:stock.shipment.in.return,company:"
+msgid "Company"
+msgstr "Empresa"
+
+msgctxt "field:stock.shipment.in.return,create_date:"
+msgid "Create Date"
+msgstr ""
+
+#, fuzzy
+msgctxt "field:stock.shipment.in.return,create_uid:"
+msgid "Create User"
+msgstr "Crear usuari"
+
+msgctxt "field:stock.shipment.in.return,effective_date:"
+msgid "Effective Date"
+msgstr "Data efectiva"
+
+msgctxt "field:stock.shipment.in.return,from_location:"
+msgid "From Location"
+msgstr "Des de la ubicació"
+
+msgctxt "field:stock.shipment.in.return,id:"
+msgid "ID"
+msgstr ""
+
+msgctxt "field:stock.shipment.in.return,moves:"
+msgid "Moves"
+msgstr "Moviments"
+
+msgctxt "field:stock.shipment.in.return,planned_date:"
+msgid "Planned Date"
+msgstr "Data estimada"
+
+msgctxt "field:stock.shipment.in.return,rec_name:"
+msgid "Name"
+msgstr "Nom"
+
+msgctxt "field:stock.shipment.in.return,reference:"
+msgid "Reference"
+msgstr "Referència"
+
+msgctxt "field:stock.shipment.in.return,state:"
+msgid "State"
+msgstr "Estat"
+
+msgctxt "field:stock.shipment.in.return,to_location:"
+msgid "To Location"
+msgstr "A la ubicació"
+
+msgctxt "field:stock.shipment.in.return,write_date:"
+msgid "Write Date"
+msgstr ""
+
+msgctxt "field:stock.shipment.in.return,write_uid:"
+msgid "Write User"
+msgstr ""
+
+msgctxt "field:stock.shipment.in.return.assign.failed,id:"
+msgid "ID"
+msgstr ""
+
+#, fuzzy
+msgctxt "field:stock.shipment.in.return.assign.failed,moves:"
+msgid "Moves"
+msgstr "Moviments"
+
+msgctxt "field:stock.shipment.internal,code:"
+msgid "Code"
+msgstr "Codi"
+
+#, fuzzy
+msgctxt "field:stock.shipment.internal,company:"
+msgid "Company"
+msgstr "Empresa"
+
+msgctxt "field:stock.shipment.internal,create_date:"
+msgid "Create Date"
+msgstr ""
+
+#, fuzzy
+msgctxt "field:stock.shipment.internal,create_uid:"
+msgid "Create User"
+msgstr "Crear usuari"
+
+msgctxt "field:stock.shipment.internal,effective_date:"
+msgid "Effective Date"
+msgstr "Data efectiva"
+
+msgctxt "field:stock.shipment.internal,from_location:"
+msgid "From Location"
+msgstr "Des de la ubicació"
+
+msgctxt "field:stock.shipment.internal,id:"
+msgid "ID"
+msgstr ""
+
+msgctxt "field:stock.shipment.internal,moves:"
+msgid "Moves"
+msgstr "Moviments"
+
+msgctxt "field:stock.shipment.internal,planned_date:"
+msgid "Planned Date"
+msgstr "Data estimada"
+
+msgctxt "field:stock.shipment.internal,rec_name:"
+msgid "Name"
+msgstr "Nom"
+
+msgctxt "field:stock.shipment.internal,reference:"
+msgid "Reference"
+msgstr "Referència"
+
+msgctxt "field:stock.shipment.internal,state:"
+msgid "State"
+msgstr "Estat"
+
+msgctxt "field:stock.shipment.internal,to_location:"
+msgid "To Location"
+msgstr "A la ubicació"
+
+msgctxt "field:stock.shipment.internal,write_date:"
+msgid "Write Date"
+msgstr ""
+
+msgctxt "field:stock.shipment.internal,write_uid:"
+msgid "Write User"
+msgstr ""
+
+msgctxt "field:stock.shipment.internal.assign.failed,id:"
+msgid "ID"
+msgstr ""
+
+#, fuzzy
+msgctxt "field:stock.shipment.internal.assign.failed,moves:"
+msgid "Moves"
+msgstr "Moviments"
+
+msgctxt "field:stock.shipment.out,code:"
+msgid "Code"
+msgstr "Codi"
+
+#, fuzzy
+msgctxt "field:stock.shipment.out,company:"
+msgid "Company"
+msgstr "Empresa"
+
+msgctxt "field:stock.shipment.out,create_date:"
+msgid "Create Date"
+msgstr ""
+
+#, fuzzy
+msgctxt "field:stock.shipment.out,create_uid:"
+msgid "Create User"
+msgstr "Crear usuari"
+
+msgctxt "field:stock.shipment.out,customer:"
+msgid "Customer"
+msgstr "Client"
+
+#, fuzzy
+msgctxt "field:stock.shipment.out,customer_location:"
+msgid "Customer Location"
+msgstr "Ubicació del client"
+
+msgctxt "field:stock.shipment.out,delivery_address:"
+msgid "Delivery Address"
+msgstr "Adreça d'enviament"
+
+msgctxt "field:stock.shipment.out,effective_date:"
+msgid "Effective Date"
+msgstr "Data efectiva"
+
+msgctxt "field:stock.shipment.out,id:"
+msgid "ID"
+msgstr ""
+
+msgctxt "field:stock.shipment.out,inventory_moves:"
+msgid "Inventory Moves"
+msgstr "Moviments d'inventari"
+
+msgctxt "field:stock.shipment.out,moves:"
+msgid "Moves"
+msgstr "Moviments"
+
+msgctxt "field:stock.shipment.out,outgoing_moves:"
+msgid "Outgoing Moves"
+msgstr "Moviments de sortida"
+
+msgctxt "field:stock.shipment.out,planned_date:"
+msgid "Planned Date"
+msgstr "Data estimada"
+
+msgctxt "field:stock.shipment.out,rec_name:"
+msgid "Name"
+msgstr "Nom"
+
+msgctxt "field:stock.shipment.out,reference:"
+msgid "Reference"
+msgstr "Referència"
+
+msgctxt "field:stock.shipment.out,state:"
+msgid "State"
+msgstr "Estat"
+
+msgctxt "field:stock.shipment.out,warehouse:"
+msgid "Warehouse"
+msgstr "Magatzem"
+
+msgctxt "field:stock.shipment.out,warehouse_output:"
+msgid "Warehouse Output"
+msgstr ""
+
+msgctxt "field:stock.shipment.out,warehouse_storage:"
+msgid "Warehouse Storage"
+msgstr ""
+
+msgctxt "field:stock.shipment.out,write_date:"
+msgid "Write Date"
+msgstr ""
+
+msgctxt "field:stock.shipment.out,write_uid:"
+msgid "Write User"
+msgstr ""
+
+msgctxt "field:stock.shipment.out.assign.failed,id:"
+msgid "ID"
+msgstr ""
+
+#, fuzzy
+msgctxt "field:stock.shipment.out.assign.failed,inventory_moves:"
+msgid "Inventory Moves"
+msgstr "Moviments d'inventari"
+
+msgctxt "field:stock.shipment.out.return,code:"
+msgid "Code"
+msgstr "Codi"
+
+#, fuzzy
+msgctxt "field:stock.shipment.out.return,company:"
+msgid "Company"
+msgstr "Empresa"
+
+msgctxt "field:stock.shipment.out.return,create_date:"
+msgid "Create Date"
+msgstr ""
+
+#, fuzzy
+msgctxt "field:stock.shipment.out.return,create_uid:"
+msgid "Create User"
+msgstr "Crear usuari"
+
+msgctxt "field:stock.shipment.out.return,customer:"
+msgid "Customer"
+msgstr "Client"
+
+#, fuzzy
+msgctxt "field:stock.shipment.out.return,customer_location:"
+msgid "Customer Location"
+msgstr "Ubicació del client"
+
+msgctxt "field:stock.shipment.out.return,delivery_address:"
+msgid "Delivery Address"
+msgstr "Adreça d'enviament"
+
+msgctxt "field:stock.shipment.out.return,effective_date:"
+msgid "Effective Date"
+msgstr "Data efectiva"
+
+msgctxt "field:stock.shipment.out.return,id:"
+msgid "ID"
+msgstr ""
+
+msgctxt "field:stock.shipment.out.return,incoming_moves:"
+msgid "Incoming Moves"
+msgstr "Moviments d'entrada"
+
+msgctxt "field:stock.shipment.out.return,inventory_moves:"
+msgid "Inventory Moves"
+msgstr "Moviments d'inventari"
+
+msgctxt "field:stock.shipment.out.return,moves:"
+msgid "Moves"
+msgstr "Moviments"
+
+msgctxt "field:stock.shipment.out.return,planned_date:"
+msgid "Planned Date"
+msgstr "Data estimada"
+
+msgctxt "field:stock.shipment.out.return,rec_name:"
+msgid "Name"
+msgstr "Nom"
+
+msgctxt "field:stock.shipment.out.return,reference:"
+msgid "Reference"
+msgstr "Referència"
+
+msgctxt "field:stock.shipment.out.return,state:"
+msgid "State"
+msgstr "Estat"
+
+msgctxt "field:stock.shipment.out.return,warehouse:"
+msgid "Warehouse"
+msgstr "Magatzem"
+
+msgctxt "field:stock.shipment.out.return,warehouse_input:"
+msgid "Warehouse Input"
+msgstr ""
+
+msgctxt "field:stock.shipment.out.return,warehouse_storage:"
+msgid "Warehouse Storage"
+msgstr ""
+
+msgctxt "field:stock.shipment.out.return,write_date:"
+msgid "Write Date"
+msgstr ""
+
+msgctxt "field:stock.shipment.out.return,write_uid:"
+msgid "Write User"
+msgstr ""
+
+msgctxt "help:party.party,customer_location:"
+msgid "The default destination location when sending products to the party."
+msgstr ""
+"La ubicació de destinació predeterminada quan s'envien productes al tercer."
+
+msgctxt "help:party.party,supplier_location:"
+msgid "The default source location when receiving products from the party."
+msgstr ""
+"La ubicació d'origen predeterminada quan es reben productes del tercer."
+
+msgctxt "help:product.by_location.start,forecast_date:"
+msgid ""
+"Allow to compute expected stock quantities for this date.\n"
+"* An empty value is an infinite date in the future.\n"
+"* A date in the past will provide historical values."
+msgstr ""
+
+msgctxt "help:stock.products_by_locations.start,forecast_date:"
+msgid ""
+"Allow to compute expected stock quantities for this date.\n"
+"* An empty value is an infinite date in the future.\n"
+"* A date in the past will provide historical values."
+msgstr ""
+
+msgctxt "model:ir.action,name:act_inventory_form"
+msgid "Inventories"
+msgstr "Inventaris"
+
+msgctxt "model:ir.action,name:act_inventory_form_draft"
+msgid "Draft Inventories"
+msgstr ""
+
+#, fuzzy
+msgctxt "model:ir.action,name:act_location_form"
+msgid "Locations"
+msgstr "Editar ubicacions"
+
+#, fuzzy
+msgctxt "model:ir.action,name:act_location_quantity_tree"
+msgid "Location Quantity & Cost Value"
+msgstr "Existències de producte"
+
+msgctxt "model:ir.action,name:act_location_tree"
+msgid "Locations"
+msgstr "Ubicacions"
+
+msgctxt "model:ir.action,name:act_move_form"
+msgid "Moves"
+msgstr "Moviments"
+
+msgctxt "model:ir.action,name:act_move_form_cust"
+msgid "Moves to Customers"
+msgstr "Moviments cap a clients"
+
+msgctxt "model:ir.action,name:act_move_form_supp"
+msgid "Moves from Suppliers"
+msgstr "Moviments de proveïdors"
+
+msgctxt "model:ir.action,name:act_move_form_supp_proceed"
+msgid "Moves from Suppliers Waiting Arrival"
+msgstr "Moviments de proveïdors tot esperant arribada"
+
+#, fuzzy
+msgctxt "model:ir.action,name:act_period_list"
+msgid "Periods"
+msgstr "PerÃodes"
+
+msgctxt "model:ir.action,name:act_products_by_locations"
+msgid "Products by Locations"
+msgstr ""
+
+msgctxt "model:ir.action,name:act_shipment_in_draft"
+msgid "Draft Supplier Shipment"
+msgstr ""
+
+msgctxt "model:ir.action,name:act_shipment_in_form"
+msgid "Supplier Shipments"
+msgstr "Enviaments del proveïdor"
+
+msgctxt "model:ir.action,name:act_shipment_in_form_received"
+msgid "Received Supplier shipments"
+msgstr "Paquets rebuts de proveïdors"
+
+msgctxt "model:ir.action,name:act_shipment_in_return_form"
+msgid "Supplier Return Shipments"
+msgstr "Enviaments de devolució a proveïdor"
+
+msgctxt "model:ir.action,name:act_shipment_internal_assigned_form"
+msgid "Assigned Internal Shipments"
+msgstr "Enviaments interns assignats"
+
+msgctxt "model:ir.action,name:act_shipment_internal_draft_form"
+msgid "Draft Internal Shipments"
+msgstr "Enviaments interns en esborrany"
+
+msgctxt "model:ir.action,name:act_shipment_internal_form"
+msgid "Internal Shipments"
+msgstr "Enviaments interns"
+
+msgctxt "model:ir.action,name:act_shipment_internal_waiting_form"
+msgid "Internal Shipments Waiting Assignation"
+msgstr "Enviaments interns esperant assignació"
+
+msgctxt "model:ir.action,name:act_shipment_out_form"
+msgid "Customer Shipments"
+msgstr "Enviaments a client"
+
+msgctxt "model:ir.action,name:act_shipment_out_form2"
+msgid "Customer Shipments"
+msgstr "Enviaments de client"
+
+msgctxt "model:ir.action,name:act_shipment_out_form3"
+msgid "Supplier Shipments"
+msgstr "Enviaments a proveïdor"
+
+msgctxt "model:ir.action,name:act_shipment_out_form_assigned"
+msgid "Assigned Customer Shipments"
+msgstr "Enviaments a clients assignats"
+
+msgctxt "model:ir.action,name:act_shipment_out_form_ready"
+msgid "Customer Shipments Ready for Shipping"
+msgstr "Enviaments a client llests per ser enviats"
+
+msgctxt "model:ir.action,name:act_shipment_out_form_waiting"
+msgid "Customer Shipments Waiting Assignation"
+msgstr "Enviaments a client esperant assignació"
+
+msgctxt "model:ir.action,name:act_shipment_out_return_form"
+msgid "Customer Return Shipments"
+msgstr "Enviaments de devolucions de client"
+
+msgctxt "model:ir.action,name:act_stock_configuration_form"
+msgid "Stock Configuration"
+msgstr ""
+
+msgctxt "model:ir.action,name:create_shipment_out_return"
+msgid "Create Return Shipment"
+msgstr "Crear enviament de devolució"
+
+msgctxt "model:ir.action,name:report_shipment_in_restocking_list"
+msgid "Restocking List"
+msgstr "Llista de renovació d'inventari"
+
+msgctxt "model:ir.action,name:report_shipment_internal"
+msgid "Internal Shipment"
+msgstr "Enviament intern"
+
+msgctxt "model:ir.action,name:report_shipment_out_delivery_note"
+msgid "Delivery Note"
+msgstr "Albarà d'enviament"
+
+msgctxt "model:ir.action,name:report_shipment_out_picking_list"
+msgid "Picking List"
+msgstr "Llista de selecció"
+
+msgctxt "model:ir.action,name:report_shipment_out_return_restocking_list"
+msgid "Restocking List"
+msgstr "Llista de renovació d'inventari"
+
+msgctxt "model:ir.action,name:wizard_product_by_location"
+msgid "Product by Location"
+msgstr ""
+
+msgctxt "model:ir.action,name:wizard_products_by_locations"
+msgid "Products by Locations"
+msgstr ""
+
+msgctxt "model:ir.action,name:wizard_shipment_in_return_assign"
+msgid "Assign Purchase Return Shipment"
+msgstr "Assignar enviament de devolució de compra"
+
+msgctxt "model:ir.action,name:wizard_shipment_internal_assign"
+msgid "Assign Shipment Internal"
+msgstr "Assignar enviament intern"
+
+msgctxt "model:ir.action,name:wizard_shipment_out_assign"
+msgid "Assign Shipment Out"
+msgstr "Assignació d'enviament de sortida"
+
+msgctxt "model:ir.sequence,name:sequence_shipment_in"
+msgid "Supplier Shipment"
+msgstr "Enviament de proveïdor"
+
+msgctxt "model:ir.sequence,name:sequence_shipment_in_return"
+msgid "Supplier Return Shipment"
+msgstr "Enviament de devolució a proveïdor"
+
+msgctxt "model:ir.sequence,name:sequence_shipment_internal"
+msgid "Internal Shipment"
+msgstr "Enviament intern"
+
+msgctxt "model:ir.sequence,name:sequence_shipment_out"
+msgid "Customer Shipment"
+msgstr "Enviament a client"
+
+msgctxt "model:ir.sequence,name:sequence_shipment_out_return"
+msgid "Customer Return Shipment"
+msgstr "Enviament de devolució de client"
+
+msgctxt "model:ir.sequence.type,name:sequence_type_shipment_in"
+msgid "Supplier Shipment"
+msgstr "Enviament de proveïdor"
+
+msgctxt "model:ir.sequence.type,name:sequence_type_shipment_in_return"
+msgid "Supplier Return Shipment"
+msgstr "Enviament de devolució a proveïdor"
+
+msgctxt "model:ir.sequence.type,name:sequence_type_shipment_internal"
+msgid "Internal Shipment"
+msgstr "Enviament intern"
+
+msgctxt "model:ir.sequence.type,name:sequence_type_shipment_out"
+msgid "Customer Shipment"
+msgstr "Enviament a client"
+
+msgctxt "model:ir.sequence.type,name:sequence_type_shipment_out_return"
+msgid "Customer Return Shipment"
+msgstr "Enviament de devolució de client"
+
+msgctxt "model:ir.ui.menu,name:menu_configuration"
+msgid "Configuration"
+msgstr "Configuració"
+
+msgctxt "model:ir.ui.menu,name:menu_inventory_form"
+msgid "Inventories"
+msgstr "Inventaris"
+
+msgctxt "model:ir.ui.menu,name:menu_inventory_form_draft"
+msgid "Draft Inventories"
+msgstr ""
+
+#, fuzzy
+msgctxt "model:ir.ui.menu,name:menu_location_form"
+msgid "Locations"
+msgstr "Editar ubicacions"
+
+msgctxt "model:ir.ui.menu,name:menu_location_tree"
+msgid "Locations"
+msgstr "Ubicacions"
+
+msgctxt "model:ir.ui.menu,name:menu_move_form"
+msgid "Moves"
+msgstr "Moviments"
+
+msgctxt "model:ir.ui.menu,name:menu_move_form_cust"
+msgid "Moves to Customers"
+msgstr "Moviments cap a clients"
+
+msgctxt "model:ir.ui.menu,name:menu_move_form_supp"
+msgid "Moves from Suppliers"
+msgstr "Moviments de proveïdors"
+
+msgctxt "model:ir.ui.menu,name:menu_move_form_supp_proceed"
+msgid "Moves from Suppliers Waiting Arrival"
+msgstr "Moviments de proveïdors esperant arribada"
+
+#, fuzzy
+msgctxt "model:ir.ui.menu,name:menu_period_list"
+msgid "Periods"
+msgstr "PerÃodes"
+
+msgctxt "model:ir.ui.menu,name:menu_reporting"
+msgid "Reporting"
+msgstr "Informes"
+
+msgctxt "model:ir.ui.menu,name:menu_shipment_in_draft"
+msgid "Draft Supplier Shipment"
+msgstr ""
+
+msgctxt "model:ir.ui.menu,name:menu_shipment_in_form"
+msgid "Supplier Shipments"
+msgstr "Enviaments del proveïdor"
+
+msgctxt "model:ir.ui.menu,name:menu_shipment_in_received"
+msgid "Received Supplier shipments"
+msgstr "Paquets de proveïdors rebuts"
+
+msgctxt "model:ir.ui.menu,name:menu_shipment_in_return_form"
+msgid "Supplier Return Shipments"
+msgstr "Enviaments de devolució a proveïdor"
+
+msgctxt "model:ir.ui.menu,name:menu_shipment_internal_assigned_form"
+msgid "Assigned Internal Shipments"
+msgstr "Enviaments interns assignats"
+
+msgctxt "model:ir.ui.menu,name:menu_shipment_internal_draft_form"
+msgid "Draft Internal Shipments"
+msgstr "Enviaments Interns en esborrany"
+
+msgctxt "model:ir.ui.menu,name:menu_shipment_internal_form"
+msgid "Internal Shipments"
+msgstr "Enviaments interns"
+
+msgctxt "model:ir.ui.menu,name:menu_shipment_internal_waiting_form"
+msgid "Internal Shipments Waiting Assignation"
+msgstr "Enviament interns esperant assignació"
+
+msgctxt "model:ir.ui.menu,name:menu_shipment_out_assigned"
+msgid "Assigned Customer Shipments"
+msgstr "Enviaments a clients assignats"
+
+msgctxt "model:ir.ui.menu,name:menu_shipment_out_form"
+msgid "Customer Shipments"
+msgstr "Enviaments al client"
+
+msgctxt "model:ir.ui.menu,name:menu_shipment_out_ready"
+msgid "Customer Shipments Ready for Shipping"
+msgstr "Enviaments al client llestos per l'enviament"
+
+msgctxt "model:ir.ui.menu,name:menu_shipment_out_return_form"
+msgid "Customer Return Shipments"
+msgstr "Enviaments de devolució de client"
+
+msgctxt "model:ir.ui.menu,name:menu_shipment_out_waiting"
+msgid "Customer Shipments Waiting Assignation"
+msgstr "Enviaments a client esperant assignació"
+
+#, fuzzy
+msgctxt "model:ir.ui.menu,name:menu_stock"
+msgid "Inventory & Stock"
+msgstr "Gestió d'inventaris"
+
+msgctxt "model:ir.ui.menu,name:menu_stock_configuration"
+msgid "Stock Configuration"
+msgstr ""
+
+msgctxt "model:product.by_location.start,name:"
+msgid "Product by Location"
+msgstr ""
+
+msgctxt "model:res.group,name:group_stock"
+msgid "Stock"
+msgstr "Existències"
+
+msgctxt "model:res.group,name:group_stock_admin"
+msgid "Stock Administration"
+msgstr "Administració d'existències"
+
+msgctxt "model:res.group,name:group_stock_force_assignment"
+msgid "Stock Force Assignment"
+msgstr "Assignació forçada d'existències"
+
+msgctxt "model:stock.configuration,name:"
+msgid "Stock Configuration"
+msgstr ""
+
+msgctxt "model:stock.inventory,name:"
+msgid "Stock Inventory"
+msgstr "Inventari d'existència"
+
+msgctxt "model:stock.inventory.line,name:"
+msgid "Stock Inventory Line"
+msgstr "LÃnia d'existència en inventari "
+
+msgctxt "model:stock.location,name:"
+msgid "Stock Location"
+msgstr "Ubicació d'existència"
+
+msgctxt "model:stock.location,name:location_customer"
+msgid "Customer"
+msgstr "Client"
+
+msgctxt "model:stock.location,name:location_input"
+msgid "Input Zone"
+msgstr "Zona d'entrada"
+
+msgctxt "model:stock.location,name:location_lost_found"
+msgid "Lost and Found"
+msgstr "Perdut i trobat"
+
+msgctxt "model:stock.location,name:location_output"
+msgid "Output Zone"
+msgstr "Zona de sortida"
+
+msgctxt "model:stock.location,name:location_storage"
+msgid "Storage Zone"
+msgstr "Zona d'emmagatzematge"
+
+msgctxt "model:stock.location,name:location_supplier"
+msgid "Supplier"
+msgstr "Proveïdor"
+
+msgctxt "model:stock.location,name:location_warehouse"
+msgid "Warehouse"
+msgstr "Magatzem"
+
+msgctxt "model:stock.move,name:"
+msgid "Stock Move"
+msgstr "Moviment d'existències"
+
+msgctxt "model:stock.period,name:"
+msgid "Stock Period"
+msgstr ""
+
+msgctxt "model:stock.period.cache,name:"
+msgid "stock.period.cache"
+msgstr ""
+
+msgctxt "model:stock.products_by_locations.start,name:"
+msgid "Products by Locations"
+msgstr ""
+
+msgctxt "model:stock.shipment.in,name:"
+msgid "Supplier Shipment"
+msgstr "Enviament de proveïdor"
+
+msgctxt "model:stock.shipment.in.return,name:"
+msgid "Supplier Return Shipment"
+msgstr "Enviament de devolució a proveïdor"
+
+msgctxt "model:stock.shipment.in.return.assign.failed,name:"
+msgid "Assign Supplier Return Shipment"
+msgstr ""
+
+msgctxt "model:stock.shipment.internal,name:"
+msgid "Internal Shipment"
+msgstr "Enviament intern"
+
+#, fuzzy
+msgctxt "model:stock.shipment.internal.assign.failed,name:"
+msgid "Assign Shipment Internal"
+msgstr "Assignar enviament intern"
+
+msgctxt "model:stock.shipment.out,name:"
+msgid "Customer Shipment"
+msgstr "Enviament a client"
+
+#, fuzzy
+msgctxt "model:stock.shipment.out.assign.failed,name:"
+msgid "Assign Shipment Out"
+msgstr "Assignació d'enviament de sortida"
+
+msgctxt "model:stock.shipment.out.return,name:"
+msgid "Customer Return Shipment"
+msgstr "Enviament de devolució de client"
+
+msgctxt "odt:stock.shipment.in.restocking_list:"
+msgid "/"
+msgstr "/"
+
+msgctxt "odt:stock.shipment.in.restocking_list:"
+msgid "Code:"
+msgstr "Codi:"
+
+msgctxt "odt:stock.shipment.in.restocking_list:"
+msgid "E-Mail:"
+msgstr "Correu electrònic:"
+
+msgctxt "odt:stock.shipment.in.restocking_list:"
+msgid "From Location"
+msgstr "Des de la ubicació"
+
+msgctxt "odt:stock.shipment.in.restocking_list:"
+msgid "Phone:"
+msgstr "Telèfon:"
+
+msgctxt "odt:stock.shipment.in.restocking_list:"
+msgid "Planned Date:"
+msgstr "Data planejada:"
+
+msgctxt "odt:stock.shipment.in.restocking_list:"
+msgid "Product"
+msgstr "Producte"
+
+msgctxt "odt:stock.shipment.in.restocking_list:"
+msgid "Quantity"
+msgstr "Quantitat"
+
+msgctxt "odt:stock.shipment.in.restocking_list:"
+msgid "Reference:"
+msgstr "Referència:"
+
+msgctxt "odt:stock.shipment.in.restocking_list:"
+msgid "Restocking List"
+msgstr "Llista de renovació d'existències"
+
+msgctxt "odt:stock.shipment.in.restocking_list:"
+msgid "Supplier:"
+msgstr "Proveïdor:"
+
+msgctxt "odt:stock.shipment.in.restocking_list:"
+msgid "To Location"
+msgstr "A la ubicació"
+
+msgctxt "odt:stock.shipment.in.restocking_list:"
+msgid "VAT Number:"
+msgstr ""
+
+msgctxt "odt:stock.shipment.in.restocking_list:"
+msgid "Warehouse:"
+msgstr "Magatzem:"
+
+msgctxt "odt:stock.shipment.internal.report:"
+msgid "/"
+msgstr "/"
+
+msgctxt "odt:stock.shipment.internal.report:"
+msgid "Code:"
+msgstr "Codi:"
+
+msgctxt "odt:stock.shipment.internal.report:"
+msgid "E-Mail:"
+msgstr "Correu electrònic:"
+
+msgctxt "odt:stock.shipment.internal.report:"
+msgid "From Location"
+msgstr "Des de la ubicació"
+
+msgctxt "odt:stock.shipment.internal.report:"
+msgid "From Location:"
+msgstr "Des de la ubicació:"
+
+msgctxt "odt:stock.shipment.internal.report:"
+msgid "Internal Shipment"
+msgstr "Enviament intern"
+
+msgctxt "odt:stock.shipment.internal.report:"
+msgid "Phone:"
+msgstr "Telèfon:"
+
+msgctxt "odt:stock.shipment.internal.report:"
+msgid "Planned Date:"
+msgstr "Data estimada:"
+
+msgctxt "odt:stock.shipment.internal.report:"
+msgid "Product"
+msgstr "Producte"
+
+msgctxt "odt:stock.shipment.internal.report:"
+msgid "Quantity"
+msgstr "Quantitat"
+
+msgctxt "odt:stock.shipment.internal.report:"
+msgid "Reference:"
+msgstr "Referència:"
+
+msgctxt "odt:stock.shipment.internal.report:"
+msgid "To Location"
+msgstr "A la ubicació"
+
+msgctxt "odt:stock.shipment.internal.report:"
+msgid "To Location:"
+msgstr "A la ubicació:"
+
+msgctxt "odt:stock.shipment.internal.report:"
+msgid "VAT Number:"
+msgstr ""
+
+msgctxt "odt:stock.shipment.out.delivery_note:"
+msgid "/"
+msgstr "/"
+
+msgctxt "odt:stock.shipment.out.delivery_note:"
+msgid "Customer Code:"
+msgstr "Codi de client:"
+
+msgctxt "odt:stock.shipment.out.delivery_note:"
+msgid "Date:"
+msgstr "Data:"
+
+msgctxt "odt:stock.shipment.out.delivery_note:"
+msgid "Delivery Note"
+msgstr "Albarà d'enviament"
+
+msgctxt "odt:stock.shipment.out.delivery_note:"
+msgid "E-Mail:"
+msgstr "Correu electrònic:"
+
+msgctxt "odt:stock.shipment.out.delivery_note:"
+msgid "Phone:"
+msgstr "Telèfon:"
+
+msgctxt "odt:stock.shipment.out.delivery_note:"
+msgid "Product"
+msgstr "Producte"
+
+msgctxt "odt:stock.shipment.out.delivery_note:"
+msgid "Quantity"
+msgstr "Quantitat"
+
+msgctxt "odt:stock.shipment.out.delivery_note:"
+msgid "Reference:"
+msgstr "Referència:"
+
+msgctxt "odt:stock.shipment.out.delivery_note:"
+msgid "Shipment Number:"
+msgstr "Número d'enviament:"
+
+msgctxt "odt:stock.shipment.out.delivery_note:"
+msgid "VAT Number:"
+msgstr ""
+
+msgctxt "odt:stock.shipment.out.picking_list:"
+msgid "/"
+msgstr "/"
+
+msgctxt "odt:stock.shipment.out.picking_list:"
+msgid "Code:"
+msgstr "Codi:"
+
+msgctxt "odt:stock.shipment.out.picking_list:"
+msgid "Customer:"
+msgstr "Client:"
+
+msgctxt "odt:stock.shipment.out.picking_list:"
+msgid "E-Mail:"
+msgstr "Correu electrònic:"
+
+msgctxt "odt:stock.shipment.out.picking_list:"
+msgid "From Location"
+msgstr "Des d'ubicació"
+
+msgctxt "odt:stock.shipment.out.picking_list:"
+msgid "Phone:"
+msgstr "Telèfon:"
+
+msgctxt "odt:stock.shipment.out.picking_list:"
+msgid "Picking List"
+msgstr "Llista de selecció"
+
+msgctxt "odt:stock.shipment.out.picking_list:"
+msgid "Planned Date:"
+msgstr "Data estimada:"
+
+msgctxt "odt:stock.shipment.out.picking_list:"
+msgid "Product"
+msgstr "Producte"
+
+msgctxt "odt:stock.shipment.out.picking_list:"
+msgid "Quantity"
+msgstr "Quantitat"
+
+msgctxt "odt:stock.shipment.out.picking_list:"
+msgid "Reference:"
+msgstr "Referència:"
+
+msgctxt "odt:stock.shipment.out.picking_list:"
+msgid "To Location"
+msgstr "A la ubicació"
+
+msgctxt "odt:stock.shipment.out.picking_list:"
+msgid "VAT Number:"
+msgstr ""
+
+msgctxt "odt:stock.shipment.out.picking_list:"
+msgid "Warehouse:"
+msgstr "Magatzem:"
+
+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 "E-Mail:"
+msgstr "Correu electrònic:"
+
+msgctxt "odt:stock.shipment.out.return.restocking_list:"
+msgid "From Location"
+msgstr "D'ubicació"
+
+msgctxt "odt:stock.shipment.out.return.restocking_list:"
+msgid "Phone:"
+msgstr "Telèfon:"
+
+msgctxt "odt:stock.shipment.out.return.restocking_list:"
+msgid "Planned Date:"
+msgstr "Data estimada:"
+
+msgctxt "odt:stock.shipment.out.return.restocking_list:"
+msgid "Product"
+msgstr "Producte"
+
+msgctxt "odt:stock.shipment.out.return.restocking_list:"
+msgid "Quantity"
+msgstr "Quantitat"
+
+msgctxt "odt:stock.shipment.out.return.restocking_list:"
+msgid "Reference:"
+msgstr "Referència:"
+
+msgctxt "odt:stock.shipment.out.return.restocking_list:"
+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ó"
+
+msgctxt "odt:stock.shipment.out.return.restocking_list:"
+msgid "VAT Number:"
+msgstr ""
+
+msgctxt "odt:stock.shipment.out.return.restocking_list:"
+msgid "Warehouse:"
+msgstr "Magatzem:"
+
+msgctxt "selection:stock.inventory,state:"
+msgid "Canceled"
+msgstr "Cancel·lat"
+
+msgctxt "selection:stock.inventory,state:"
+msgid "Done"
+msgstr "Acabat"
+
+msgctxt "selection:stock.inventory,state:"
+msgid "Draft"
+msgstr "Esborrany"
+
+msgctxt "selection:stock.location,type:"
+msgid "Customer"
+msgstr "Client"
+
+msgctxt "selection:stock.location,type:"
+msgid "Lost and Found"
+msgstr "Perdut i trobat"
+
+msgctxt "selection:stock.location,type:"
+msgid "Production"
+msgstr "Producció"
+
+msgctxt "selection:stock.location,type:"
+msgid "Storage"
+msgstr "Magatzem"
+
+msgctxt "selection:stock.location,type:"
+msgid "Supplier"
+msgstr "Proveïdor"
+
+msgctxt "selection:stock.location,type:"
+msgid "View"
+msgstr "Vista"
+
+msgctxt "selection:stock.location,type:"
+msgid "Warehouse"
+msgstr "Magatzem"
+
+msgctxt "selection:stock.move,state:"
+msgid "Assigned"
+msgstr "Assignat"
+
+msgctxt "selection:stock.move,state:"
+msgid "Canceled"
+msgstr "Cancel·lat"
+
+msgctxt "selection:stock.move,state:"
+msgid "Done"
+msgstr "Acabat"
+
+msgctxt "selection:stock.move,state:"
+msgid "Draft"
+msgstr "Esborrany"
+
+#, fuzzy
+msgctxt "selection:stock.period,state:"
+msgid "Closed"
+msgstr "Tancat"
+
+#, fuzzy
+msgctxt "selection:stock.period,state:"
+msgid "Draft"
+msgstr "Esborrany"
+
+msgctxt "selection:stock.shipment.in,state:"
+msgid "Canceled"
+msgstr "Cancel·lat"
+
+msgctxt "selection:stock.shipment.in,state:"
+msgid "Done"
+msgstr "Acabat"
+
+msgctxt "selection:stock.shipment.in,state:"
+msgid "Draft"
+msgstr "Esborrany"
+
+msgctxt "selection:stock.shipment.in,state:"
+msgid "Received"
+msgstr "Rebut"
+
+msgctxt "selection:stock.shipment.in.return,state:"
+msgid "Assigned"
+msgstr "Assignat"
+
+msgctxt "selection:stock.shipment.in.return,state:"
+msgid "Canceled"
+msgstr "Cancel·lat"
+
+msgctxt "selection:stock.shipment.in.return,state:"
+msgid "Done"
+msgstr "Acabat"
+
+msgctxt "selection:stock.shipment.in.return,state:"
+msgid "Draft"
+msgstr "Esborrany"
+
+msgctxt "selection:stock.shipment.in.return,state:"
+msgid "Waiting"
+msgstr "En espera"
+
+msgctxt "selection:stock.shipment.internal,state:"
+msgid "Assigned"
+msgstr "Assignat"
+
+msgctxt "selection:stock.shipment.internal,state:"
+msgid "Canceled"
+msgstr "Cancel·lat"
+
+msgctxt "selection:stock.shipment.internal,state:"
+msgid "Done"
+msgstr "Acabat"
+
+msgctxt "selection:stock.shipment.internal,state:"
+msgid "Draft"
+msgstr "Esborrany"
+
+msgctxt "selection:stock.shipment.internal,state:"
+msgid "Waiting"
+msgstr "En espera"
+
+msgctxt "selection:stock.shipment.out,state:"
+msgid "Assigned"
+msgstr "Assignat"
+
+msgctxt "selection:stock.shipment.out,state:"
+msgid "Canceled"
+msgstr "Cancel·lat"
+
+msgctxt "selection:stock.shipment.out,state:"
+msgid "Done"
+msgstr "Acabat"
+
+msgctxt "selection:stock.shipment.out,state:"
+msgid "Draft"
+msgstr "Esborrany"
+
+msgctxt "selection:stock.shipment.out,state:"
+msgid "Packed"
+msgstr "Empaquetat"
+
+msgctxt "selection:stock.shipment.out,state:"
+msgid "Waiting"
+msgstr "En espera"
+
+msgctxt "selection:stock.shipment.out.return,state:"
+msgid "Canceled"
+msgstr "Cancel·lat"
+
+msgctxt "selection:stock.shipment.out.return,state:"
+msgid "Done"
+msgstr "Acabat"
+
+msgctxt "selection:stock.shipment.out.return,state:"
+msgid "Draft"
+msgstr "Esborrany"
+
+msgctxt "selection:stock.shipment.out.return,state:"
+msgid "Received"
+msgstr "Rebut"
+
+msgctxt "view:party.party:"
+msgid "Stock"
+msgstr "Existències"
+
+msgctxt "view:party.party:"
+msgid "_Stock"
+msgstr "_Existències"
+
+msgctxt "view:product.by_location.start:"
+msgid "Product by Location"
+msgstr ""
+
+msgctxt "view:product.product:"
+msgid "Products"
+msgstr "Productes"
+
+msgctxt "view:stock.configuration:"
+msgid "Stock Configuration"
+msgstr ""
+
+msgctxt "view:stock.inventory.line:"
+msgid "Inventory Line"
+msgstr "LÃnia d'inventari"
+
+msgctxt "view:stock.inventory.line:"
+msgid "Inventory Lines"
+msgstr "LÃnies d'inventari"
+
+msgctxt "view:stock.inventory:"
+msgid "Add an inventory line for each missing products"
+msgstr "Afegir una lÃnia d'inventari per cada producte que falta"
+
+msgctxt "view:stock.inventory:"
+msgid "All generated moves will be cancelled!"
+msgstr "Es cancel·laran tots els moviments generats"
+
+msgctxt "view:stock.inventory:"
+msgid "Cancel"
+msgstr "Cancel·lar"
+
+msgctxt "view:stock.inventory:"
+msgid "Complete Inventory"
+msgstr "Inventari complet"
+
+msgctxt "view:stock.inventory:"
+msgid "Confirm"
+msgstr "Confirmar"
+
+msgctxt "view:stock.inventory:"
+msgid "Inventories"
+msgstr "Inventaris"
+
+msgctxt "view:stock.inventory:"
+msgid "Inventory"
+msgstr "Inventari"
+
+msgctxt "view:stock.inventory:"
+msgid "Re-Open"
+msgstr "Reobrir"
+
+msgctxt "view:stock.location:"
+msgid "Location"
+msgstr "Ubicació"
+
+msgctxt "view:stock.location:"
+msgid "Location Quantity"
+msgstr ""
+
+msgctxt "view:stock.location:"
+msgid "Locations"
+msgstr "Ubicacions"
+
+msgctxt "view:stock.location:"
+msgid "Product Stock"
+msgstr "Existències del producte"
+
+msgctxt "view:stock.move:"
+msgid "Cancel"
+msgstr "Cancel·lar"
+
+msgctxt "view:stock.move:"
+msgid "Move"
+msgstr "Moviment"
+
+msgctxt "view:stock.move:"
+msgid "Moves"
+msgstr "Moviments"
+
+msgctxt "view:stock.move:"
+msgid "Set Done"
+msgstr "Marcar com acabat"
+
+msgctxt "view:stock.move:"
+msgid "Set Draft"
+msgstr "Marcar com a esborrany"
+
+msgctxt "view:stock.period.cache:"
+msgid "Period Cache"
+msgstr ""
+
+msgctxt "view:stock.period.cache:"
+msgid "Period Caches"
+msgstr ""
+
+#, fuzzy
+msgctxt "view:stock.period:"
+msgid "Close"
+msgstr "Tancat"
+
+#, fuzzy
+msgctxt "view:stock.period:"
+msgid "Draft"
+msgstr "Esborrany"
+
+#, fuzzy
+msgctxt "view:stock.period:"
+msgid "Period"
+msgstr "PerÃode"
+
+#, fuzzy
+msgctxt "view:stock.period:"
+msgid "Periods"
+msgstr "PerÃodes"
+
+msgctxt "view:stock.products_by_locations.start:"
+msgid "Products by Locations"
+msgstr ""
+
+msgctxt "view:stock.shipment.in.return.assign.failed:"
+msgid "Unable to Assign"
+msgstr ""
+
+msgctxt "view:stock.shipment.in.return.assign.failed:"
+msgid "Unable to assign those products:"
+msgstr ""
+
+msgctxt "view:stock.shipment.in.return:"
+msgid "Assign"
+msgstr "Assignar"
+
+msgctxt "view:stock.shipment.in.return:"
+msgid "Cancel"
+msgstr "Cancel·lar"
+
+msgctxt "view:stock.shipment.in.return:"
+msgid "Done"
+msgstr "Acabat"
+
+msgctxt "view:stock.shipment.in.return:"
+msgid "Draft"
+msgstr "Esborrany"
+
+msgctxt "view:stock.shipment.in.return:"
+msgid "Reset to Draft"
+msgstr "Restablir a esborrany"
+
+msgctxt "view:stock.shipment.in.return:"
+msgid "Supplier Return Shipment"
+msgstr "Enviament de devolució a proveïdor"
+
+msgctxt "view:stock.shipment.in.return:"
+msgid "Supplier Return Shipments"
+msgstr "Eniament de devolució a proveïdor"
+
+msgctxt "view:stock.shipment.in.return:"
+msgid "Wait"
+msgstr ""
+
+msgctxt "view:stock.shipment.in.return:"
+msgid "Waiting"
+msgstr "En espera"
+
+msgctxt "view:stock.shipment.in:"
+msgid "Cancel"
+msgstr "Cancel·lar"
+
+msgctxt "view:stock.shipment.in:"
+msgid "Done"
+msgstr "Acabat"
+
+msgctxt "view:stock.shipment.in:"
+msgid "Draft"
+msgstr "Esborrany"
+
+msgctxt "view:stock.shipment.in:"
+msgid "Incoming Moves"
+msgstr "Moviments d'entrada"
+
+msgctxt "view:stock.shipment.in:"
+msgid "Inventory Moves"
+msgstr "Moviments d'inventari"
+
+msgctxt "view:stock.shipment.in:"
+msgid "Moves"
+msgstr "Moviments"
+
+msgctxt "view:stock.shipment.in:"
+msgid "Receive"
+msgstr ""
+
+msgctxt "view:stock.shipment.in:"
+msgid "Received"
+msgstr "Rebut"
+
+msgctxt "view:stock.shipment.in:"
+msgid "Reset to Draft"
+msgstr "Restablir a esborrany"
+
+msgctxt "view:stock.shipment.in:"
+msgid "Supplier Shipment"
+msgstr "Enviament de proveïdor"
+
+msgctxt "view:stock.shipment.in:"
+msgid "Supplier Shipments"
+msgstr "Enviaments de proveïdor"
+
+msgctxt "view:stock.shipment.internal.assign.failed:"
+msgid "Unable to Assign"
+msgstr ""
+
+msgctxt "view:stock.shipment.internal.assign.failed:"
+msgid "Unable to assign those products:"
+msgstr ""
+
+msgctxt "view:stock.shipment.internal:"
+msgid "Assign"
+msgstr "Assignar"
+
+msgctxt "view:stock.shipment.internal:"
+msgid "Cancel"
+msgstr "Cancel·lar"
+
+msgctxt "view:stock.shipment.internal:"
+msgid "Done"
+msgstr "Acabat"
+
+msgctxt "view:stock.shipment.internal:"
+msgid "Draft"
+msgstr "Esborrany"
+
+msgctxt "view:stock.shipment.internal:"
+msgid "Force Assign"
+msgstr "Forçar assignació"
+
+msgctxt "view:stock.shipment.internal:"
+msgid "Internal Shipment"
+msgstr "Enviament intern"
+
+msgctxt "view:stock.shipment.internal:"
+msgid "Internal Shipments"
+msgstr "Enviaments interns"
+
+msgctxt "view:stock.shipment.internal:"
+msgid "Reset to Draft"
+msgstr "Restablir a esborrany"
+
+msgctxt "view:stock.shipment.internal:"
+msgid "Set Done"
+msgstr "Marcar com acabat"
+
+msgctxt "view:stock.shipment.internal:"
+msgid "Set Waiting"
+msgstr "Col·locar en espera"
+
+msgctxt "view:stock.shipment.internal:"
+msgid "Waiting"
+msgstr "En espera"
+
+msgctxt "view:stock.shipment.out.assign.failed:"
+msgid "Unable to Assign"
+msgstr ""
+
+msgctxt "view:stock.shipment.out.assign.failed:"
+msgid "Unable to assign those products:"
+msgstr ""
+
+msgctxt "view:stock.shipment.out.return:"
+msgid "Cancel"
+msgstr "Cancel·lar"
+
+msgctxt "view:stock.shipment.out.return:"
+msgid "Customer Return Shipment"
+msgstr "Enviament de devolució de client"
+
+msgctxt "view:stock.shipment.out.return:"
+msgid "Customer Return Shipments"
+msgstr "Enviaments de devolució de client"
+
+msgctxt "view:stock.shipment.out.return:"
+msgid "Done"
+msgstr "Acabat"
+
+#, fuzzy
+msgctxt "view:stock.shipment.out.return:"
+msgid "Draft"
+msgstr "Esborrany"
+
+msgctxt "view:stock.shipment.out.return:"
+msgid "Incoming Moves"
+msgstr "Moviments d'entrada"
+
+msgctxt "view:stock.shipment.out.return:"
+msgid "Inventory Moves"
+msgstr "Moviments d'inventari"
+
+msgctxt "view:stock.shipment.out.return:"
+msgid "Moves"
+msgstr "Moviments"
+
+msgctxt "view:stock.shipment.out.return:"
+msgid "Received"
+msgstr "Rebut"
+
+msgctxt "view:stock.shipment.out.return:"
+msgid "Reset to Draft"
+msgstr "Restablir a esborrany"
+
+msgctxt "view:stock.shipment.out:"
+msgid "Assign"
+msgstr "Assignar"
+
+msgctxt "view:stock.shipment.out:"
+msgid "Cancel"
+msgstr "Cancel·lar"
+
+msgctxt "view:stock.shipment.out:"
+msgid "Customer Shipment"
+msgstr "Enviament a client"
+
+msgctxt "view:stock.shipment.out:"
+msgid "Customer Shipments"
+msgstr "Enviaments a clients"
+
+msgctxt "view:stock.shipment.out:"
+msgid "Done"
+msgstr "Acabat"
+
+msgctxt "view:stock.shipment.out:"
+msgid "Draft"
+msgstr "Esborrany"
+
+msgctxt "view:stock.shipment.out:"
+msgid "Force Assign"
+msgstr "Forçar l'assignació"
+
+msgctxt "view:stock.shipment.out:"
+msgid "Inventory Moves"
+msgstr "Moviments d'inventari"
+
+msgctxt "view:stock.shipment.out:"
+msgid "Make shipment"
+msgstr "Fer empaquetat"
+
+msgctxt "view:stock.shipment.out:"
+msgid "Outgoing Moves"
+msgstr "Moviments de sortida"
+
+msgctxt "view:stock.shipment.out:"
+msgid "Reset to Draft"
+msgstr "Restablir a esborrany"
+
+msgctxt "view:stock.shipment.out:"
+msgid "Set Done"
+msgstr "Marcar com acabat"
+
+msgctxt "view:stock.shipment.out:"
+msgid "Set Waiting"
+msgstr "Col·locar en espera"
+
+msgctxt "view:stock.shipment.out:"
+msgid "Unpack"
+msgstr "Desempaquetar"
+
+msgctxt "view:stock.shipment.out:"
+msgid "Waiting"
+msgstr "En espera"
+
+#, fuzzy
+msgctxt "wizard_button:product.by_location,start,end:"
+msgid "Cancel"
+msgstr "Cancel·lar"
+
+#, fuzzy
+msgctxt "wizard_button:product.by_location,start,open:"
+msgid "Open"
+msgstr "Obrir"
+
+#, fuzzy
+msgctxt "wizard_button:stock.products_by_locations,start,end:"
+msgid "Cancel"
+msgstr "Cancel·lar"
+
+#, fuzzy
+msgctxt "wizard_button:stock.products_by_locations,start,open:"
+msgid "Open"
+msgstr "Obrir"
+
+#, fuzzy
+msgctxt "wizard_button:stock.shipment.in.return.assign,failed,end:"
+msgid "Ok"
+msgstr "Acceptar"
+
+#, fuzzy
+msgctxt "wizard_button:stock.shipment.in.return.assign,failed,force:"
+msgid "Force Assign"
+msgstr "Forçar l'assignació"
+
+#, fuzzy
+msgctxt "wizard_button:stock.shipment.internal.assign,failed,end:"
+msgid "Ok"
+msgstr "Acceptar"
+
+#, fuzzy
+msgctxt "wizard_button:stock.shipment.internal.assign,failed,force:"
+msgid "Force Assign"
+msgstr "Forçar l'assignació"
+
+#, fuzzy
+msgctxt "wizard_button:stock.shipment.out.assign,failed,end:"
+msgid "Ok"
+msgstr "Acceptar"
+
+#, fuzzy
+msgctxt "wizard_button:stock.shipment.out.assign,failed,force:"
+msgid "Force Assign"
+msgstr "Forçar l'assignació"
diff --git a/locale/cs_CZ.po b/locale/cs_CZ.po
index dd5392d..1898214 100644
--- a/locale/cs_CZ.po
+++ b/locale/cs_CZ.po
@@ -2,695 +2,1005 @@
msgid ""
msgstr "Content-Type: text/plain; charset=utf-8\n"
-msgctxt "error:product.template:0"
+msgctxt "error:product.template:"
msgid ""
"You cannot change the default uom for a product which is associated to stock"
" moves."
msgstr ""
-msgctxt "error:stock.inventory.line:0"
+msgctxt "error:stock.inventory.line:"
msgid "Line quantity must be positive!"
msgstr ""
-msgctxt "error:stock.inventory.line:0"
+msgctxt "error:stock.inventory.line:"
msgid "Product must be unique by inventory!"
msgstr ""
-msgctxt "error:stock.location:0"
+msgctxt "error:stock.inventory:"
+msgid "Inventory \"%s\" must be cancelled before deletion!"
+msgstr ""
+
+msgctxt "error:stock.location:"
msgid ""
"A location with existing moves cannot be changed to a type that does not "
"support moves."
msgstr ""
-msgctxt "error:stock.location:0"
+msgctxt "error:stock.location:"
msgid "Location \"%s\" must be a child of warehouse \"%s\"!"
msgstr ""
-msgctxt "error:stock.location:0"
+msgctxt "error:stock.location:"
msgid "You can not create recursive locations!"
msgstr ""
-msgctxt "error:stock.move:0"
+msgctxt "error:stock.move:"
msgid "Internal move quantity must be positive"
msgstr ""
-msgctxt "error:stock.move:0"
+msgctxt "error:stock.move:"
msgid "Move can be on only one Shipment"
msgstr ""
-msgctxt "error:stock.move:0"
+msgctxt "error:stock.move:"
msgid "Move quantity must be positive"
msgstr ""
-msgctxt "error:stock.move:0"
+msgctxt "error:stock.move:"
msgid "Source and destination location must be different"
msgstr ""
-msgctxt "error:stock.move:0"
+msgctxt "error:stock.move:"
msgid "You can not modify a move in the state: \"Assigned\", \"Done\" or \"Cancel\""
msgstr ""
-msgctxt "error:stock.move:0"
+msgctxt "error:stock.move:"
msgid "You can not modify move in closed period!"
msgstr ""
-msgctxt "error:stock.move:0"
+msgctxt "error:stock.move:"
msgid "You can not set state to assigned!"
msgstr ""
-msgctxt "error:stock.move:0"
+msgctxt "error:stock.move:"
msgid "You can not set state to done!"
msgstr ""
-msgctxt "error:stock.move:0"
+msgctxt "error:stock.move:"
msgid "You can not set state to draft!"
msgstr ""
-msgctxt "error:stock.move:0"
-msgid "You can not use service products for a move!"
-msgstr ""
-
-msgctxt "error:stock.move:0"
+msgctxt "error:stock.move:"
msgid "You can only delete draft or cancelled moves!"
msgstr ""
-msgctxt "error:stock.period:0"
+msgctxt "error:stock.period:"
msgid "You can not close a period in the future or today!"
msgstr ""
-msgctxt "error:stock.period:0"
+msgctxt "error:stock.period:"
msgid "You can not close a period when there is still assigned moves!"
msgstr ""
-msgctxt "error:stock.shipment.in:0"
+msgctxt "error:stock.shipment.in.return:"
+msgid "Supplier Return Shipment \"%s\" must be cancelled before deletion!"
+msgstr ""
+
+msgctxt "error:stock.shipment.in:"
msgid ""
"Incoming Moves must have the warehouse input location as destination "
"location!"
msgstr ""
-msgctxt "error:stock.shipment.in:0"
+msgctxt "error:stock.shipment.in:"
msgid ""
"Inventory Moves must have the warehouse input location as source location!"
msgstr ""
-msgctxt "error:stock.shipment.out.return.create:0"
-msgid "The shipment with code %s is not yet sent."
+msgctxt "error:stock.shipment.in:"
+msgid "Supplier Shipment \"%s\" must be cancelled before deletion!"
msgstr ""
-msgctxt "error:stock.shipment.out.return.create:0"
-msgid "You can not create return shipment"
+msgctxt "error:stock.shipment.internal:"
+msgid "Internal Shipment \"%s\" must be cancelled before deletion!"
msgstr ""
-msgctxt "error:stock.shipment.out.return:0"
-msgid ""
-"Incoming Moves must have the warehouse input location as destination "
-"location!"
+msgctxt "error:stock.shipment.out.return.create:"
+msgid "The shipment with code %s is not yet sent."
msgstr ""
-msgctxt "error:stock.shipment.out.return:0"
-msgid ""
-"Inventory Moves must have the warehouse input location as source location!"
+msgctxt "error:stock.shipment.out.return.create:"
+msgid "You can not create return shipment"
msgstr ""
-msgctxt "error:stock.shipment.out:0"
-msgid ""
-"Inventory Moves must have the warehouse output location as destination "
-"location!"
+msgctxt "error:stock.shipment.out.return:"
+msgid "Customer Return Shipment \"%s\" must be cancelled before deletion!"
msgstr ""
-msgctxt "error:stock.shipment.out:0"
-msgid ""
-"Outgoing Moves must have the warehouse output location as source location!"
+msgctxt "error:stock.shipment.out:"
+msgid "Customer Shipment \"%s\" must be cancelled before deletion!"
msgstr ""
-msgctxt "field:party.address,delivery:0"
+msgctxt "field:party.address,delivery:"
msgid "Delivery"
msgstr ""
-msgctxt "field:party.party,customer_location:0"
+msgctxt "field:party.party,customer_location:"
msgid "Customer Location"
msgstr ""
-msgctxt "field:party.party,supplier_location:0"
+msgctxt "field:party.party,supplier_location:"
msgid "Supplier Location"
msgstr ""
-msgctxt "field:product.product,forecast_quantity:0"
+msgctxt "field:product.by_location.start,forecast_date:"
+msgid "At Date"
+msgstr ""
+
+msgctxt "field:product.by_location.start,id:"
+msgid "ID"
+msgstr ""
+
+msgctxt "field:product.product,cost_value:"
+msgid "Cost Value"
+msgstr ""
+
+msgctxt "field:product.product,forecast_quantity:"
msgid "Forecast Quantity"
msgstr ""
-msgctxt "field:product.product,quantity:0"
+msgctxt "field:product.product,quantity:"
msgid "Quantity"
msgstr ""
-msgctxt "field:product.template,forecast_quantity:0"
+msgctxt "field:product.template,cost_value:"
+msgid "Cost Value"
+msgstr ""
+
+msgctxt "field:product.template,forecast_quantity:"
msgid "Forecast Quantity"
msgstr ""
-msgctxt "field:product.template,quantity:0"
+msgctxt "field:product.template,quantity:"
msgid "Quantity"
msgstr ""
-msgctxt "field:stock.configuration,rec_name:0"
+msgctxt "field:stock.configuration,create_date:"
+msgid "Create Date"
+msgstr ""
+
+msgctxt "field:stock.configuration,create_uid:"
+msgid "Create User"
+msgstr ""
+
+msgctxt "field:stock.configuration,id:"
+msgid "ID"
+msgstr ""
+
+msgctxt "field:stock.configuration,rec_name:"
msgid "Name"
msgstr ""
-msgctxt "field:stock.configuration,shipment_in_return_sequence:0"
+msgctxt "field:stock.configuration,shipment_in_return_sequence:"
msgid "Supplier Return Shipment Sequence"
msgstr ""
-msgctxt "field:stock.configuration,shipment_in_sequence:0"
+msgctxt "field:stock.configuration,shipment_in_sequence:"
msgid "Supplier Shipment Sequence"
msgstr ""
-msgctxt "field:stock.configuration,shipment_internal_sequence:0"
+msgctxt "field:stock.configuration,shipment_internal_sequence:"
msgid "Internal Shipment Sequence"
msgstr ""
-msgctxt "field:stock.configuration,shipment_out_return_sequence:0"
+msgctxt "field:stock.configuration,shipment_out_return_sequence:"
msgid "Customer Return Shipment Sequence"
msgstr ""
-msgctxt "field:stock.configuration,shipment_out_sequence:0"
+msgctxt "field:stock.configuration,shipment_out_sequence:"
msgid "Customer Shipment Sequence"
msgstr ""
-msgctxt "field:stock.inventory,company:0"
+msgctxt "field:stock.configuration,write_date:"
+msgid "Write Date"
+msgstr ""
+
+msgctxt "field:stock.configuration,write_uid:"
+msgid "Write User"
+msgstr ""
+
+msgctxt "field:stock.inventory,company:"
msgid "Company"
msgstr ""
-msgctxt "field:stock.inventory,date:0"
+msgctxt "field:stock.inventory,create_date:"
+msgid "Create Date"
+msgstr ""
+
+msgctxt "field:stock.inventory,create_uid:"
+msgid "Create User"
+msgstr ""
+
+msgctxt "field:stock.inventory,date:"
msgid "Date"
msgstr ""
-msgctxt "field:stock.inventory,lines:0"
+msgctxt "field:stock.inventory,id:"
+msgid "ID"
+msgstr ""
+
+msgctxt "field:stock.inventory,lines:"
msgid "Lines"
msgstr ""
-msgctxt "field:stock.inventory,location:0"
+msgctxt "field:stock.inventory,location:"
msgid "Location"
msgstr ""
-msgctxt "field:stock.inventory,lost_found:0"
+msgctxt "field:stock.inventory,lost_found:"
msgid "Lost and Found"
msgstr ""
-msgctxt "field:stock.inventory,rec_name:0"
+msgctxt "field:stock.inventory,rec_name:"
msgid "Name"
msgstr ""
-msgctxt "field:stock.inventory,state:0"
+msgctxt "field:stock.inventory,state:"
msgid "State"
msgstr ""
-msgctxt "field:stock.inventory.line,expected_quantity:0"
+msgctxt "field:stock.inventory,write_date:"
+msgid "Write Date"
+msgstr ""
+
+msgctxt "field:stock.inventory,write_uid:"
+msgid "Write User"
+msgstr ""
+
+msgctxt "field:stock.inventory.line,create_date:"
+msgid "Create Date"
+msgstr ""
+
+msgctxt "field:stock.inventory.line,create_uid:"
+msgid "Create User"
+msgstr ""
+
+msgctxt "field:stock.inventory.line,expected_quantity:"
msgid "Expected Quantity"
msgstr ""
-msgctxt "field:stock.inventory.line,inventory:0"
+msgctxt "field:stock.inventory.line,id:"
+msgid "ID"
+msgstr ""
+
+msgctxt "field:stock.inventory.line,inventory:"
msgid "Inventory"
msgstr ""
-msgctxt "field:stock.inventory.line,move:0"
+msgctxt "field:stock.inventory.line,move:"
msgid "Move"
msgstr ""
-msgctxt "field:stock.inventory.line,product:0"
+msgctxt "field:stock.inventory.line,product:"
msgid "Product"
msgstr ""
-msgctxt "field:stock.inventory.line,quantity:0"
+msgctxt "field:stock.inventory.line,quantity:"
msgid "Quantity"
msgstr ""
-msgctxt "field:stock.inventory.line,rec_name:0"
+msgctxt "field:stock.inventory.line,rec_name:"
msgid "Name"
msgstr ""
-msgctxt "field:stock.inventory.line,unit_digits:0"
+msgctxt "field:stock.inventory.line,unit_digits:"
msgid "Unit Digits"
msgstr ""
-msgctxt "field:stock.inventory.line,uom:0"
+msgctxt "field:stock.inventory.line,uom:"
msgid "UOM"
msgstr ""
-msgctxt "field:stock.location,active:0"
+msgctxt "field:stock.inventory.line,write_date:"
+msgid "Write Date"
+msgstr ""
+
+msgctxt "field:stock.inventory.line,write_uid:"
+msgid "Write User"
+msgstr ""
+
+msgctxt "field:stock.location,active:"
msgid "Active"
msgstr ""
-msgctxt "field:stock.location,address:0"
+msgctxt "field:stock.location,address:"
msgid "Address"
msgstr ""
-msgctxt "field:stock.location,childs:0"
+msgctxt "field:stock.location,childs:"
msgid "Children"
msgstr ""
-msgctxt "field:stock.location,code:0"
+msgctxt "field:stock.location,code:"
msgid "Code"
msgstr ""
-msgctxt "field:stock.location,forecast_quantity:0"
+msgctxt "field:stock.location,cost_value:"
+msgid "Cost Value"
+msgstr ""
+
+msgctxt "field:stock.location,create_date:"
+msgid "Create Date"
+msgstr ""
+
+msgctxt "field:stock.location,create_uid:"
+msgid "Create User"
+msgstr ""
+
+msgctxt "field:stock.location,forecast_quantity:"
msgid "Forecast Quantity"
msgstr ""
-msgctxt "field:stock.location,input_location:0"
+msgctxt "field:stock.location,id:"
+msgid "ID"
+msgstr ""
+
+msgctxt "field:stock.location,input_location:"
msgid "Input"
msgstr ""
-msgctxt "field:stock.location,left:0"
+msgctxt "field:stock.location,left:"
msgid "Left"
msgstr ""
-msgctxt "field:stock.location,name:0"
+msgctxt "field:stock.location,name:"
msgid "Name"
msgstr ""
-msgctxt "field:stock.location,output_location:0"
+msgctxt "field:stock.location,output_location:"
msgid "Output"
msgstr ""
-msgctxt "field:stock.location,parent:0"
+msgctxt "field:stock.location,parent:"
msgid "Parent"
msgstr ""
-msgctxt "field:stock.location,quantity:0"
+msgctxt "field:stock.location,quantity:"
msgid "Quantity"
msgstr ""
-msgctxt "field:stock.location,rec_name:0"
+msgctxt "field:stock.location,rec_name:"
msgid "Name"
msgstr ""
-msgctxt "field:stock.location,right:0"
+msgctxt "field:stock.location,right:"
msgid "Right"
msgstr ""
-msgctxt "field:stock.location,storage_location:0"
+msgctxt "field:stock.location,storage_location:"
msgid "Storage"
msgstr ""
-msgctxt "field:stock.location,type:0"
+msgctxt "field:stock.location,type:"
msgid "Location type"
msgstr ""
-msgctxt "field:stock.location_stock_date.init,forecast_date:0"
-msgid "At Date"
+msgctxt "field:stock.location,write_date:"
+msgid "Write Date"
+msgstr ""
+
+msgctxt "field:stock.location,write_uid:"
+msgid "Write User"
msgstr ""
-msgctxt "field:stock.move,company:0"
+msgctxt "field:stock.move,company:"
msgid "Company"
msgstr ""
-msgctxt "field:stock.move,cost_price:0"
+msgctxt "field:stock.move,cost_price:"
msgid "Cost Price"
msgstr ""
-msgctxt "field:stock.move,currency:0"
+msgctxt "field:stock.move,create_date:"
+msgid "Create Date"
+msgstr ""
+
+msgctxt "field:stock.move,create_uid:"
+msgid "Create User"
+msgstr ""
+
+msgctxt "field:stock.move,currency:"
msgid "Currency"
msgstr ""
-msgctxt "field:stock.move,effective_date:0"
+msgctxt "field:stock.move,effective_date:"
msgid "Effective Date"
msgstr ""
-msgctxt "field:stock.move,from_location:0"
+msgctxt "field:stock.move,from_location:"
msgid "From Location"
msgstr ""
-msgctxt "field:stock.move,internal_quantity:0"
+msgctxt "field:stock.move,id:"
+msgid "ID"
+msgstr ""
+
+msgctxt "field:stock.move,internal_quantity:"
msgid "Internal Quantity"
msgstr ""
-msgctxt "field:stock.move,planned_date:0"
+msgctxt "field:stock.move,planned_date:"
msgid "Planned Date"
msgstr ""
-msgctxt "field:stock.move,product:0"
+msgctxt "field:stock.move,product:"
msgid "Product"
msgstr ""
-msgctxt "field:stock.move,quantity:0"
+msgctxt "field:stock.move,product_uom_category:"
+msgid "Product Uom Category"
+msgstr ""
+
+msgctxt "field:stock.move,quantity:"
msgid "Quantity"
msgstr ""
-msgctxt "field:stock.move,rec_name:0"
+msgctxt "field:stock.move,rec_name:"
msgid "Name"
msgstr ""
-msgctxt "field:stock.move,shipment_in:0"
+msgctxt "field:stock.move,shipment_in:"
msgid "Supplier Shipment"
msgstr ""
-msgctxt "field:stock.move,shipment_in_return:0"
+msgctxt "field:stock.move,shipment_in_return:"
msgid "Supplier Return Shipment"
msgstr ""
-msgctxt "field:stock.move,shipment_internal:0"
+msgctxt "field:stock.move,shipment_internal:"
msgid "Internal Shipment"
msgstr ""
-msgctxt "field:stock.move,shipment_out:0"
+msgctxt "field:stock.move,shipment_out:"
msgid "Customer Shipment"
msgstr ""
-msgctxt "field:stock.move,shipment_out_return:0"
+msgctxt "field:stock.move,shipment_out_return:"
msgid "Customer Return Shipment"
msgstr ""
-msgctxt "field:stock.move,state:0"
+msgctxt "field:stock.move,state:"
msgid "State"
msgstr ""
-msgctxt "field:stock.move,to_location:0"
+msgctxt "field:stock.move,to_location:"
msgid "To Location"
msgstr ""
-msgctxt "field:stock.move,unit_digits:0"
+msgctxt "field:stock.move,unit_digits:"
msgid "Unit Digits"
msgstr ""
-msgctxt "field:stock.move,unit_price:0"
+msgctxt "field:stock.move,unit_price:"
msgid "Unit Price"
msgstr ""
-msgctxt "field:stock.move,unit_price_required:0"
+msgctxt "field:stock.move,unit_price_required:"
msgid "Unit Price Required"
msgstr ""
-msgctxt "field:stock.move,uom:0"
+msgctxt "field:stock.move,uom:"
msgid "Uom"
msgstr ""
-msgctxt "field:stock.period,caches:0"
+msgctxt "field:stock.move,write_date:"
+msgid "Write Date"
+msgstr ""
+
+msgctxt "field:stock.move,write_uid:"
+msgid "Write User"
+msgstr ""
+
+msgctxt "field:stock.period,caches:"
msgid "Caches"
msgstr ""
-msgctxt "field:stock.period,company:0"
+msgctxt "field:stock.period,company:"
msgid "Company"
msgstr ""
-msgctxt "field:stock.period,date:0"
+msgctxt "field:stock.period,create_date:"
+msgid "Create Date"
+msgstr ""
+
+msgctxt "field:stock.period,create_uid:"
+msgid "Create User"
+msgstr ""
+
+msgctxt "field:stock.period,date:"
msgid "Date"
msgstr ""
-msgctxt "field:stock.period,rec_name:0"
+msgctxt "field:stock.period,id:"
+msgid "ID"
+msgstr ""
+
+msgctxt "field:stock.period,rec_name:"
msgid "Name"
msgstr ""
-msgctxt "field:stock.period,state:0"
+msgctxt "field:stock.period,state:"
msgid "State"
msgstr ""
-msgctxt "field:stock.period.cache,internal_quantity:0"
+msgctxt "field:stock.period,write_date:"
+msgid "Write Date"
+msgstr ""
+
+msgctxt "field:stock.period,write_uid:"
+msgid "Write User"
+msgstr ""
+
+msgctxt "field:stock.period.cache,create_date:"
+msgid "Create Date"
+msgstr ""
+
+msgctxt "field:stock.period.cache,create_uid:"
+msgid "Create User"
+msgstr ""
+
+msgctxt "field:stock.period.cache,id:"
+msgid "ID"
+msgstr ""
+
+msgctxt "field:stock.period.cache,internal_quantity:"
msgid "Internal Quantity"
msgstr ""
-msgctxt "field:stock.period.cache,location:0"
+msgctxt "field:stock.period.cache,location:"
msgid "Location"
msgstr ""
-msgctxt "field:stock.period.cache,period:0"
+msgctxt "field:stock.period.cache,period:"
msgid "Period"
msgstr ""
-msgctxt "field:stock.period.cache,product:0"
+msgctxt "field:stock.period.cache,product:"
msgid "Product"
msgstr ""
-msgctxt "field:stock.period.cache,rec_name:0"
+msgctxt "field:stock.period.cache,rec_name:"
msgid "Name"
msgstr ""
-msgctxt "field:stock.product_stock_date.init,forecast_date:0"
+msgctxt "field:stock.period.cache,write_date:"
+msgid "Write Date"
+msgstr ""
+
+msgctxt "field:stock.period.cache,write_uid:"
+msgid "Write User"
+msgstr ""
+
+msgctxt "field:stock.products_by_locations.start,forecast_date:"
msgid "At Date"
msgstr ""
-msgctxt "field:stock.shipment.in,code:0"
+msgctxt "field:stock.products_by_locations.start,id:"
+msgid "ID"
+msgstr ""
+
+msgctxt "field:stock.shipment.in,code:"
msgid "Code"
msgstr ""
-msgctxt "field:stock.shipment.in,company:0"
+msgctxt "field:stock.shipment.in,company:"
msgid "Company"
msgstr ""
-msgctxt "field:stock.shipment.in,contact_address:0"
+msgctxt "field:stock.shipment.in,contact_address:"
msgid "Contact Address"
msgstr ""
-msgctxt "field:stock.shipment.in,effective_date:0"
+msgctxt "field:stock.shipment.in,create_date:"
+msgid "Create Date"
+msgstr ""
+
+msgctxt "field:stock.shipment.in,create_uid:"
+msgid "Create User"
+msgstr ""
+
+msgctxt "field:stock.shipment.in,effective_date:"
msgid "Effective Date"
msgstr ""
-msgctxt "field:stock.shipment.in,incoming_moves:0"
+msgctxt "field:stock.shipment.in,id:"
+msgid "ID"
+msgstr ""
+
+msgctxt "field:stock.shipment.in,incoming_moves:"
msgid "Incoming Moves"
msgstr ""
-msgctxt "field:stock.shipment.in,inventory_moves:0"
+msgctxt "field:stock.shipment.in,inventory_moves:"
msgid "Inventory Moves"
msgstr ""
-msgctxt "field:stock.shipment.in,moves:0"
+msgctxt "field:stock.shipment.in,moves:"
msgid "Moves"
msgstr ""
-msgctxt "field:stock.shipment.in,planned_date:0"
+msgctxt "field:stock.shipment.in,planned_date:"
msgid "Planned Date"
msgstr ""
-msgctxt "field:stock.shipment.in,rec_name:0"
+msgctxt "field:stock.shipment.in,rec_name:"
msgid "Name"
msgstr ""
-msgctxt "field:stock.shipment.in,reference:0"
+msgctxt "field:stock.shipment.in,reference:"
msgid "Reference"
msgstr ""
-msgctxt "field:stock.shipment.in,state:0"
+msgctxt "field:stock.shipment.in,state:"
msgid "State"
msgstr ""
-msgctxt "field:stock.shipment.in,supplier:0"
+msgctxt "field:stock.shipment.in,supplier:"
msgid "Supplier"
msgstr ""
-msgctxt "field:stock.shipment.in,warehouse:0"
+msgctxt "field:stock.shipment.in,supplier_location:"
+msgid "Supplier Location"
+msgstr ""
+
+msgctxt "field:stock.shipment.in,warehouse:"
msgid "Warehouse"
msgstr ""
-msgctxt "field:stock.shipment.in.return,code:0"
+msgctxt "field:stock.shipment.in,warehouse_input:"
+msgid "Warehouse Input"
+msgstr ""
+
+msgctxt "field:stock.shipment.in,warehouse_storage:"
+msgid "Warehouse Storage"
+msgstr ""
+
+msgctxt "field:stock.shipment.in,write_date:"
+msgid "Write Date"
+msgstr ""
+
+msgctxt "field:stock.shipment.in,write_uid:"
+msgid "Write User"
+msgstr ""
+
+msgctxt "field:stock.shipment.in.return,code:"
msgid "Code"
msgstr ""
-msgctxt "field:stock.shipment.in.return,company:0"
+msgctxt "field:stock.shipment.in.return,company:"
msgid "Company"
msgstr ""
-msgctxt "field:stock.shipment.in.return,effective_date:0"
+msgctxt "field:stock.shipment.in.return,create_date:"
+msgid "Create Date"
+msgstr ""
+
+msgctxt "field:stock.shipment.in.return,create_uid:"
+msgid "Create User"
+msgstr ""
+
+msgctxt "field:stock.shipment.in.return,effective_date:"
msgid "Effective Date"
msgstr ""
-msgctxt "field:stock.shipment.in.return,from_location:0"
+msgctxt "field:stock.shipment.in.return,from_location:"
msgid "From Location"
msgstr ""
-msgctxt "field:stock.shipment.in.return,moves:0"
+msgctxt "field:stock.shipment.in.return,id:"
+msgid "ID"
+msgstr ""
+
+msgctxt "field:stock.shipment.in.return,moves:"
msgid "Moves"
msgstr ""
-msgctxt "field:stock.shipment.in.return,planned_date:0"
+msgctxt "field:stock.shipment.in.return,planned_date:"
msgid "Planned Date"
msgstr ""
-msgctxt "field:stock.shipment.in.return,rec_name:0"
+msgctxt "field:stock.shipment.in.return,rec_name:"
msgid "Name"
msgstr ""
-msgctxt "field:stock.shipment.in.return,reference:0"
+msgctxt "field:stock.shipment.in.return,reference:"
msgid "Reference"
msgstr ""
-msgctxt "field:stock.shipment.in.return,state:0"
+msgctxt "field:stock.shipment.in.return,state:"
msgid "State"
msgstr ""
-msgctxt "field:stock.shipment.in.return,to_location:0"
+msgctxt "field:stock.shipment.in.return,to_location:"
msgid "To Location"
msgstr ""
-msgctxt "field:stock.shipment.in.return.assign.assign_failed,moves:0"
+msgctxt "field:stock.shipment.in.return,write_date:"
+msgid "Write Date"
+msgstr ""
+
+msgctxt "field:stock.shipment.in.return,write_uid:"
+msgid "Write User"
+msgstr ""
+
+msgctxt "field:stock.shipment.in.return.assign.failed,id:"
+msgid "ID"
+msgstr ""
+
+msgctxt "field:stock.shipment.in.return.assign.failed,moves:"
msgid "Moves"
msgstr ""
-msgctxt "field:stock.shipment.internal,code:0"
+msgctxt "field:stock.shipment.internal,code:"
msgid "Code"
msgstr ""
-msgctxt "field:stock.shipment.internal,company:0"
+msgctxt "field:stock.shipment.internal,company:"
msgid "Company"
msgstr ""
-msgctxt "field:stock.shipment.internal,effective_date:0"
+msgctxt "field:stock.shipment.internal,create_date:"
+msgid "Create Date"
+msgstr ""
+
+msgctxt "field:stock.shipment.internal,create_uid:"
+msgid "Create User"
+msgstr ""
+
+msgctxt "field:stock.shipment.internal,effective_date:"
msgid "Effective Date"
msgstr ""
-msgctxt "field:stock.shipment.internal,from_location:0"
+msgctxt "field:stock.shipment.internal,from_location:"
msgid "From Location"
msgstr ""
-msgctxt "field:stock.shipment.internal,moves:0"
+msgctxt "field:stock.shipment.internal,id:"
+msgid "ID"
+msgstr ""
+
+msgctxt "field:stock.shipment.internal,moves:"
msgid "Moves"
msgstr ""
-msgctxt "field:stock.shipment.internal,planned_date:0"
+msgctxt "field:stock.shipment.internal,planned_date:"
msgid "Planned Date"
msgstr ""
-msgctxt "field:stock.shipment.internal,rec_name:0"
+msgctxt "field:stock.shipment.internal,rec_name:"
msgid "Name"
msgstr ""
-msgctxt "field:stock.shipment.internal,reference:0"
+msgctxt "field:stock.shipment.internal,reference:"
msgid "Reference"
msgstr ""
-msgctxt "field:stock.shipment.internal,state:0"
+msgctxt "field:stock.shipment.internal,state:"
msgid "State"
msgstr ""
-msgctxt "field:stock.shipment.internal,to_location:0"
+msgctxt "field:stock.shipment.internal,to_location:"
msgid "To Location"
msgstr ""
-msgctxt "field:stock.shipment.internal.assign.assign_failed,moves:0"
+msgctxt "field:stock.shipment.internal,write_date:"
+msgid "Write Date"
+msgstr ""
+
+msgctxt "field:stock.shipment.internal,write_uid:"
+msgid "Write User"
+msgstr ""
+
+msgctxt "field:stock.shipment.internal.assign.failed,id:"
+msgid "ID"
+msgstr ""
+
+msgctxt "field:stock.shipment.internal.assign.failed,moves:"
msgid "Moves"
msgstr ""
-msgctxt "field:stock.shipment.out,code:0"
+msgctxt "field:stock.shipment.out,code:"
msgid "Code"
msgstr ""
-msgctxt "field:stock.shipment.out,company:0"
+msgctxt "field:stock.shipment.out,company:"
msgid "Company"
msgstr ""
-msgctxt "field:stock.shipment.out,customer:0"
+msgctxt "field:stock.shipment.out,create_date:"
+msgid "Create Date"
+msgstr ""
+
+msgctxt "field:stock.shipment.out,create_uid:"
+msgid "Create User"
+msgstr ""
+
+msgctxt "field:stock.shipment.out,customer:"
msgid "Customer"
msgstr ""
-msgctxt "field:stock.shipment.out,delivery_address:0"
+msgctxt "field:stock.shipment.out,customer_location:"
+msgid "Customer Location"
+msgstr ""
+
+msgctxt "field:stock.shipment.out,delivery_address:"
msgid "Delivery Address"
msgstr ""
-msgctxt "field:stock.shipment.out,effective_date:0"
+msgctxt "field:stock.shipment.out,effective_date:"
msgid "Effective Date"
msgstr ""
-msgctxt "field:stock.shipment.out,inventory_moves:0"
+msgctxt "field:stock.shipment.out,id:"
+msgid "ID"
+msgstr ""
+
+msgctxt "field:stock.shipment.out,inventory_moves:"
msgid "Inventory Moves"
msgstr ""
-msgctxt "field:stock.shipment.out,moves:0"
+msgctxt "field:stock.shipment.out,moves:"
msgid "Moves"
msgstr ""
-msgctxt "field:stock.shipment.out,outgoing_moves:0"
+msgctxt "field:stock.shipment.out,outgoing_moves:"
msgid "Outgoing Moves"
msgstr ""
-msgctxt "field:stock.shipment.out,planned_date:0"
+msgctxt "field:stock.shipment.out,planned_date:"
msgid "Planned Date"
msgstr ""
-msgctxt "field:stock.shipment.out,rec_name:0"
+msgctxt "field:stock.shipment.out,rec_name:"
msgid "Name"
msgstr ""
-msgctxt "field:stock.shipment.out,reference:0"
+msgctxt "field:stock.shipment.out,reference:"
msgid "Reference"
msgstr ""
-msgctxt "field:stock.shipment.out,state:0"
+msgctxt "field:stock.shipment.out,state:"
msgid "State"
msgstr ""
-msgctxt "field:stock.shipment.out,warehouse:0"
+msgctxt "field:stock.shipment.out,warehouse:"
msgid "Warehouse"
msgstr ""
-msgctxt "field:stock.shipment.out.assign.assign_failed,inventory_moves:0"
+msgctxt "field:stock.shipment.out,warehouse_output:"
+msgid "Warehouse Output"
+msgstr ""
+
+msgctxt "field:stock.shipment.out,warehouse_storage:"
+msgid "Warehouse Storage"
+msgstr ""
+
+msgctxt "field:stock.shipment.out,write_date:"
+msgid "Write Date"
+msgstr ""
+
+msgctxt "field:stock.shipment.out,write_uid:"
+msgid "Write User"
+msgstr ""
+
+msgctxt "field:stock.shipment.out.assign.failed,id:"
+msgid "ID"
+msgstr ""
+
+msgctxt "field:stock.shipment.out.assign.failed,inventory_moves:"
msgid "Inventory Moves"
msgstr ""
-msgctxt "field:stock.shipment.out.return,code:0"
+msgctxt "field:stock.shipment.out.return,code:"
msgid "Code"
msgstr ""
-msgctxt "field:stock.shipment.out.return,company:0"
+msgctxt "field:stock.shipment.out.return,company:"
msgid "Company"
msgstr ""
-msgctxt "field:stock.shipment.out.return,customer:0"
+msgctxt "field:stock.shipment.out.return,create_date:"
+msgid "Create Date"
+msgstr ""
+
+msgctxt "field:stock.shipment.out.return,create_uid:"
+msgid "Create User"
+msgstr ""
+
+msgctxt "field:stock.shipment.out.return,customer:"
msgid "Customer"
msgstr ""
-msgctxt "field:stock.shipment.out.return,delivery_address:0"
+msgctxt "field:stock.shipment.out.return,customer_location:"
+msgid "Customer Location"
+msgstr ""
+
+msgctxt "field:stock.shipment.out.return,delivery_address:"
msgid "Delivery Address"
msgstr ""
-msgctxt "field:stock.shipment.out.return,effective_date:0"
+msgctxt "field:stock.shipment.out.return,effective_date:"
msgid "Effective Date"
msgstr ""
-msgctxt "field:stock.shipment.out.return,incoming_moves:0"
+msgctxt "field:stock.shipment.out.return,id:"
+msgid "ID"
+msgstr ""
+
+msgctxt "field:stock.shipment.out.return,incoming_moves:"
msgid "Incoming Moves"
msgstr ""
-msgctxt "field:stock.shipment.out.return,inventory_moves:0"
+msgctxt "field:stock.shipment.out.return,inventory_moves:"
msgid "Inventory Moves"
msgstr ""
-msgctxt "field:stock.shipment.out.return,moves:0"
+msgctxt "field:stock.shipment.out.return,moves:"
msgid "Moves"
msgstr ""
-msgctxt "field:stock.shipment.out.return,planned_date:0"
+msgctxt "field:stock.shipment.out.return,planned_date:"
msgid "Planned Date"
msgstr ""
-msgctxt "field:stock.shipment.out.return,rec_name:0"
+msgctxt "field:stock.shipment.out.return,rec_name:"
msgid "Name"
msgstr ""
-msgctxt "field:stock.shipment.out.return,reference:0"
+msgctxt "field:stock.shipment.out.return,reference:"
msgid "Reference"
msgstr ""
-msgctxt "field:stock.shipment.out.return,state:0"
+msgctxt "field:stock.shipment.out.return,state:"
msgid "State"
msgstr ""
-msgctxt "field:stock.shipment.out.return,warehouse:0"
+msgctxt "field:stock.shipment.out.return,warehouse:"
msgid "Warehouse"
msgstr ""
-msgctxt "help:party.party,customer_location:0"
+msgctxt "field:stock.shipment.out.return,warehouse_input:"
+msgid "Warehouse Input"
+msgstr ""
+
+msgctxt "field:stock.shipment.out.return,warehouse_storage:"
+msgid "Warehouse Storage"
+msgstr ""
+
+msgctxt "field:stock.shipment.out.return,write_date:"
+msgid "Write Date"
+msgstr ""
+
+msgctxt "field:stock.shipment.out.return,write_uid:"
+msgid "Write User"
+msgstr ""
+
+msgctxt "help:party.party,customer_location:"
msgid "The default destination location when sending products to the party."
msgstr ""
-msgctxt "help:party.party,supplier_location:0"
+msgctxt "help:party.party,supplier_location:"
msgid "The default source location when receiving products from the party."
msgstr ""
-msgctxt "help:stock.location_stock_date.init,forecast_date:0"
+msgctxt "help:product.by_location.start,forecast_date:"
msgid ""
"Allow to compute expected stock quantities for this date.\n"
"* An empty value is an infinite date in the future.\n"
"* A date in the past will provide historical values."
msgstr ""
-msgctxt "help:stock.product_stock_date.init,forecast_date:0"
+msgctxt "help:stock.products_by_locations.start,forecast_date:"
msgid ""
"Allow to compute expected stock quantities for this date.\n"
"* An empty value is an infinite date in the future.\n"
@@ -710,7 +1020,7 @@ msgid "Locations"
msgstr ""
msgctxt "model:ir.action,name:act_location_quantity_tree"
-msgid "Product Stock"
+msgid "Location Quantity & Cost Value"
msgstr ""
msgctxt "model:ir.action,name:act_location_tree"
@@ -737,7 +1047,7 @@ msgctxt "model:ir.action,name:act_period_list"
msgid "Periods"
msgstr ""
-msgctxt "model:ir.action,name:act_product_by_location"
+msgctxt "model:ir.action,name:act_products_by_locations"
msgid "Products by Locations"
msgstr ""
@@ -829,16 +1139,12 @@ msgctxt "model:ir.action,name:report_shipment_out_return_restocking_list"
msgid "Restocking List"
msgstr ""
-msgctxt "model:ir.action,name:wizard_complete_inventory"
-msgid "Complete Inventory"
-msgstr ""
-
-msgctxt "model:ir.action,name:wizard_location_open"
+msgctxt "model:ir.action,name:wizard_product_by_location"
msgid "Product by Location"
msgstr ""
-msgctxt "model:ir.action,name:wizard_product_open"
-msgid "Product Quantities"
+msgctxt "model:ir.action,name:wizard_products_by_locations"
+msgid "Products by Locations"
msgstr ""
msgctxt "model:ir.action,name:wizard_shipment_in_return_assign"
@@ -997,6 +1303,10 @@ msgctxt "model:ir.ui.menu,name:menu_stock_configuration"
msgid "Stock Configuration"
msgstr ""
+msgctxt "model:product.by_location.start,name:"
+msgid "Product by Location"
+msgstr ""
+
msgctxt "model:res.group,name:group_stock"
msgid "Stock"
msgstr ""
@@ -1009,19 +1319,19 @@ msgctxt "model:res.group,name:group_stock_force_assignment"
msgid "Stock Force Assignment"
msgstr ""
-msgctxt "model:stock.configuration,name:0"
+msgctxt "model:stock.configuration,name:"
msgid "Stock Configuration"
msgstr ""
-msgctxt "model:stock.inventory,name:0"
+msgctxt "model:stock.inventory,name:"
msgid "Stock Inventory"
msgstr ""
-msgctxt "model:stock.inventory.line,name:0"
+msgctxt "model:stock.inventory.line,name:"
msgid "Stock Inventory Line"
msgstr ""
-msgctxt "model:stock.location,name:0"
+msgctxt "model:stock.location,name:"
msgid "Stock Location"
msgstr ""
@@ -1053,983 +1363,834 @@ msgctxt "model:stock.location,name:location_warehouse"
msgid "Warehouse"
msgstr ""
-msgctxt "model:stock.location_stock_date.init,name:0"
-msgid "Compute stock quantities"
-msgstr ""
-
-msgctxt "model:stock.move,name:0"
+msgctxt "model:stock.move,name:"
msgid "Stock Move"
msgstr ""
-msgctxt "model:stock.period,name:0"
+msgctxt "model:stock.period,name:"
msgid "Stock Period"
msgstr ""
-msgctxt "model:stock.period.cache,name:0"
-msgid ""
-"\n"
-" Stock Period Cache\n"
-"\n"
-" It is used to store cached computation of stock quantities.\n"
-" "
+msgctxt "model:stock.period.cache,name:"
+msgid "stock.period.cache"
msgstr ""
-msgctxt "model:stock.product_stock_date.init,name:0"
-msgid "Compute stock quantities"
+msgctxt "model:stock.products_by_locations.start,name:"
+msgid "Products by Locations"
msgstr ""
-msgctxt "model:stock.shipment.in,name:0"
+msgctxt "model:stock.shipment.in,name:"
msgid "Supplier Shipment"
msgstr ""
-msgctxt "model:stock.shipment.in.return,name:0"
+msgctxt "model:stock.shipment.in.return,name:"
msgid "Supplier Return Shipment"
msgstr ""
-msgctxt "model:stock.shipment.in.return.assign.assign_failed,name:0"
-msgid "Assign Supplier Return Shipment Assign Failed"
+msgctxt "model:stock.shipment.in.return.assign.failed,name:"
+msgid "Assign Supplier Return Shipment"
msgstr ""
-msgctxt "model:stock.shipment.internal,name:0"
+msgctxt "model:stock.shipment.internal,name:"
msgid "Internal Shipment"
msgstr ""
-msgctxt "model:stock.shipment.internal.assign.assign_failed,name:0"
-msgid "Assign Shipment Internal Assign Failed"
+msgctxt "model:stock.shipment.internal.assign.failed,name:"
+msgid "Assign Shipment Internal"
msgstr ""
-msgctxt "model:stock.shipment.out,name:0"
+msgctxt "model:stock.shipment.out,name:"
msgid "Customer Shipment"
msgstr ""
-msgctxt "model:stock.shipment.out.assign.assign_failed,name:0"
-msgid "Assign Shipment Out Assign Failed"
-msgstr ""
-
-msgctxt "model:stock.shipment.out.return,name:0"
-msgid "Customer Return Shipment"
-msgstr ""
-
-msgctxt "model:workflow,name:wkf_inventory"
-msgid "Inventory"
-msgstr ""
-
-msgctxt "model:workflow,name:wkf_shipment_in_return"
-msgid "Supplier Return Shipment"
+msgctxt "model:stock.shipment.out.assign.failed,name:"
+msgid "Assign Shipment Out"
msgstr ""
-msgctxt "model:workflow,name:wkf_shipment_out_return"
+msgctxt "model:stock.shipment.out.return,name:"
msgid "Customer Return Shipment"
msgstr ""
-msgctxt "model:workflow,name:wkf_shipmentin"
-msgid "Supplier Shipment"
-msgstr ""
-
-msgctxt "model:workflow,name:wkf_shipmentinternal"
-msgid "Internal Shipment"
-msgstr ""
-
-msgctxt "model:workflow,name:wkf_shipmentout"
-msgid "Customer Shipment"
-msgstr ""
-
-msgctxt "model:workflow.activity,name:inventory_act_cancel"
-msgid "Canceled"
-msgstr ""
-
-msgctxt "model:workflow.activity,name:inventory_act_done"
-msgid "Done"
-msgstr ""
-
-msgctxt "model:workflow.activity,name:inventory_act_draft"
-msgid "Draft"
-msgstr ""
-
-msgctxt "model:workflow.activity,name:shipment_in_return_act_assigned"
-msgid "Assigned"
-msgstr ""
-
-msgctxt "model:workflow.activity,name:shipment_in_return_act_cancel"
-msgid "Canceled"
-msgstr ""
-
-msgctxt "model:workflow.activity,name:shipment_in_return_act_done"
-msgid "Done"
-msgstr ""
-
-msgctxt "model:workflow.activity,name:shipment_in_return_act_draft"
-msgid "Draft"
-msgstr ""
-
-msgctxt "model:workflow.activity,name:shipment_in_return_act_waiting"
-msgid "Waiting"
-msgstr ""
-
-msgctxt "model:workflow.activity,name:shipment_out_return_act_cancel"
-msgid "Canceled"
-msgstr ""
-
-msgctxt "model:workflow.activity,name:shipment_out_return_act_done"
-msgid "Done"
-msgstr ""
-
-msgctxt "model:workflow.activity,name:shipment_out_return_act_draft"
-msgid "Draft"
-msgstr ""
-
-msgctxt "model:workflow.activity,name:shipment_out_return_act_received"
-msgid "Received"
-msgstr ""
-
-msgctxt "model:workflow.activity,name:shipmentin_act_cancel"
-msgid "Canceled"
-msgstr ""
-
-msgctxt "model:workflow.activity,name:shipmentin_act_done"
-msgid "Done"
-msgstr ""
-
-msgctxt "model:workflow.activity,name:shipmentin_act_draft"
-msgid "Draft"
-msgstr ""
-
-msgctxt "model:workflow.activity,name:shipmentin_act_received"
-msgid "Received"
-msgstr ""
-
-msgctxt "model:workflow.activity,name:shipmentinternal_act_assigned"
-msgid "Assigned"
-msgstr ""
-
-msgctxt "model:workflow.activity,name:shipmentinternal_act_cancel"
-msgid "Canceled"
-msgstr ""
-
-msgctxt "model:workflow.activity,name:shipmentinternal_act_done"
-msgid "Done"
-msgstr ""
-
-msgctxt "model:workflow.activity,name:shipmentinternal_act_draft"
-msgid "Draft"
-msgstr ""
-
-msgctxt "model:workflow.activity,name:shipmentinternal_act_waiting"
-msgid "Waiting"
-msgstr ""
-
-msgctxt "model:workflow.activity,name:shipmentout_act_assigned"
-msgid "Assigned"
-msgstr ""
-
-msgctxt "model:workflow.activity,name:shipmentout_act_cancel"
-msgid "Canceled"
-msgstr ""
-
-msgctxt "model:workflow.activity,name:shipmentout_act_done"
-msgid "Done"
-msgstr ""
-
-msgctxt "model:workflow.activity,name:shipmentout_act_draft"
-msgid "Draft"
-msgstr ""
-
-msgctxt "model:workflow.activity,name:shipmentout_act_packed"
-msgid "Packed"
-msgstr ""
-
-msgctxt "model:workflow.activity,name:shipmentout_act_waiting"
-msgid "Waiting"
-msgstr ""
-
-msgctxt "odt:stock.shipment.in.restocking_list:0"
+msgctxt "odt:stock.shipment.in.restocking_list:"
msgid "/"
msgstr ""
-msgctxt "odt:stock.shipment.in.restocking_list:0"
+msgctxt "odt:stock.shipment.in.restocking_list:"
msgid "Code:"
msgstr ""
-msgctxt "odt:stock.shipment.in.restocking_list:0"
+msgctxt "odt:stock.shipment.in.restocking_list:"
msgid "E-Mail:"
msgstr ""
-msgctxt "odt:stock.shipment.in.restocking_list:0"
+msgctxt "odt:stock.shipment.in.restocking_list:"
msgid "From Location"
msgstr ""
-msgctxt "odt:stock.shipment.in.restocking_list:0"
+msgctxt "odt:stock.shipment.in.restocking_list:"
msgid "Phone:"
msgstr ""
-msgctxt "odt:stock.shipment.in.restocking_list:0"
+msgctxt "odt:stock.shipment.in.restocking_list:"
msgid "Planned Date:"
msgstr ""
-msgctxt "odt:stock.shipment.in.restocking_list:0"
+msgctxt "odt:stock.shipment.in.restocking_list:"
msgid "Product"
msgstr ""
-msgctxt "odt:stock.shipment.in.restocking_list:0"
+msgctxt "odt:stock.shipment.in.restocking_list:"
msgid "Quantity"
msgstr ""
-msgctxt "odt:stock.shipment.in.restocking_list:0"
+msgctxt "odt:stock.shipment.in.restocking_list:"
msgid "Reference:"
msgstr ""
-msgctxt "odt:stock.shipment.in.restocking_list:0"
+msgctxt "odt:stock.shipment.in.restocking_list:"
msgid "Restocking List"
msgstr ""
-msgctxt "odt:stock.shipment.in.restocking_list:0"
+msgctxt "odt:stock.shipment.in.restocking_list:"
msgid "Supplier:"
msgstr ""
-msgctxt "odt:stock.shipment.in.restocking_list:0"
+msgctxt "odt:stock.shipment.in.restocking_list:"
msgid "To Location"
msgstr ""
-msgctxt "odt:stock.shipment.in.restocking_list:0"
+msgctxt "odt:stock.shipment.in.restocking_list:"
msgid "VAT Number:"
msgstr ""
-msgctxt "odt:stock.shipment.in.restocking_list:0"
+msgctxt "odt:stock.shipment.in.restocking_list:"
msgid "Warehouse:"
msgstr ""
-msgctxt "odt:stock.shipment.internal.report:0"
+msgctxt "odt:stock.shipment.internal.report:"
msgid "/"
msgstr ""
-msgctxt "odt:stock.shipment.internal.report:0"
+msgctxt "odt:stock.shipment.internal.report:"
msgid "Code:"
msgstr ""
-msgctxt "odt:stock.shipment.internal.report:0"
+msgctxt "odt:stock.shipment.internal.report:"
msgid "E-Mail:"
msgstr ""
-msgctxt "odt:stock.shipment.internal.report:0"
+msgctxt "odt:stock.shipment.internal.report:"
msgid "From Location"
msgstr ""
-msgctxt "odt:stock.shipment.internal.report:0"
+msgctxt "odt:stock.shipment.internal.report:"
msgid "From Location:"
msgstr ""
-msgctxt "odt:stock.shipment.internal.report:0"
+msgctxt "odt:stock.shipment.internal.report:"
msgid "Internal Shipment"
msgstr ""
-msgctxt "odt:stock.shipment.internal.report:0"
+msgctxt "odt:stock.shipment.internal.report:"
msgid "Phone:"
msgstr ""
-msgctxt "odt:stock.shipment.internal.report:0"
+msgctxt "odt:stock.shipment.internal.report:"
msgid "Planned Date:"
msgstr ""
-msgctxt "odt:stock.shipment.internal.report:0"
+msgctxt "odt:stock.shipment.internal.report:"
msgid "Product"
msgstr ""
-msgctxt "odt:stock.shipment.internal.report:0"
+msgctxt "odt:stock.shipment.internal.report:"
msgid "Quantity"
msgstr ""
-msgctxt "odt:stock.shipment.internal.report:0"
+msgctxt "odt:stock.shipment.internal.report:"
msgid "Reference:"
msgstr ""
-msgctxt "odt:stock.shipment.internal.report:0"
+msgctxt "odt:stock.shipment.internal.report:"
msgid "To Location"
msgstr ""
-msgctxt "odt:stock.shipment.internal.report:0"
+msgctxt "odt:stock.shipment.internal.report:"
msgid "To Location:"
msgstr ""
-msgctxt "odt:stock.shipment.internal.report:0"
+msgctxt "odt:stock.shipment.internal.report:"
msgid "VAT Number:"
msgstr ""
-msgctxt "odt:stock.shipment.out.delivery_note:0"
+msgctxt "odt:stock.shipment.out.delivery_note:"
msgid "/"
msgstr ""
-msgctxt "odt:stock.shipment.out.delivery_note:0"
+msgctxt "odt:stock.shipment.out.delivery_note:"
msgid "Customer Code:"
msgstr ""
-msgctxt "odt:stock.shipment.out.delivery_note:0"
+msgctxt "odt:stock.shipment.out.delivery_note:"
msgid "Date:"
msgstr ""
-msgctxt "odt:stock.shipment.out.delivery_note:0"
+msgctxt "odt:stock.shipment.out.delivery_note:"
msgid "Delivery Note"
msgstr ""
-msgctxt "odt:stock.shipment.out.delivery_note:0"
+msgctxt "odt:stock.shipment.out.delivery_note:"
msgid "E-Mail:"
msgstr ""
-msgctxt "odt:stock.shipment.out.delivery_note:0"
+msgctxt "odt:stock.shipment.out.delivery_note:"
msgid "Phone:"
msgstr ""
-msgctxt "odt:stock.shipment.out.delivery_note:0"
+msgctxt "odt:stock.shipment.out.delivery_note:"
msgid "Product"
msgstr ""
-msgctxt "odt:stock.shipment.out.delivery_note:0"
+msgctxt "odt:stock.shipment.out.delivery_note:"
msgid "Quantity"
msgstr ""
-msgctxt "odt:stock.shipment.out.delivery_note:0"
+msgctxt "odt:stock.shipment.out.delivery_note:"
msgid "Reference:"
msgstr ""
-msgctxt "odt:stock.shipment.out.delivery_note:0"
+msgctxt "odt:stock.shipment.out.delivery_note:"
msgid "Shipment Number:"
msgstr ""
-msgctxt "odt:stock.shipment.out.delivery_note:0"
+msgctxt "odt:stock.shipment.out.delivery_note:"
msgid "VAT Number:"
msgstr ""
-msgctxt "odt:stock.shipment.out.picking_list:0"
+msgctxt "odt:stock.shipment.out.picking_list:"
msgid "/"
msgstr ""
-msgctxt "odt:stock.shipment.out.picking_list:0"
+msgctxt "odt:stock.shipment.out.picking_list:"
msgid "Code:"
msgstr ""
-msgctxt "odt:stock.shipment.out.picking_list:0"
+msgctxt "odt:stock.shipment.out.picking_list:"
msgid "Customer:"
msgstr ""
-msgctxt "odt:stock.shipment.out.picking_list:0"
+msgctxt "odt:stock.shipment.out.picking_list:"
msgid "E-Mail:"
msgstr ""
-msgctxt "odt:stock.shipment.out.picking_list:0"
+msgctxt "odt:stock.shipment.out.picking_list:"
msgid "From Location"
msgstr ""
-msgctxt "odt:stock.shipment.out.picking_list:0"
+msgctxt "odt:stock.shipment.out.picking_list:"
msgid "Phone:"
msgstr ""
-msgctxt "odt:stock.shipment.out.picking_list:0"
+msgctxt "odt:stock.shipment.out.picking_list:"
msgid "Picking List"
msgstr ""
-msgctxt "odt:stock.shipment.out.picking_list:0"
+msgctxt "odt:stock.shipment.out.picking_list:"
msgid "Planned Date:"
msgstr ""
-msgctxt "odt:stock.shipment.out.picking_list:0"
+msgctxt "odt:stock.shipment.out.picking_list:"
msgid "Product"
msgstr ""
-msgctxt "odt:stock.shipment.out.picking_list:0"
+msgctxt "odt:stock.shipment.out.picking_list:"
msgid "Quantity"
msgstr ""
-msgctxt "odt:stock.shipment.out.picking_list:0"
+msgctxt "odt:stock.shipment.out.picking_list:"
msgid "Reference:"
msgstr ""
-msgctxt "odt:stock.shipment.out.picking_list:0"
+msgctxt "odt:stock.shipment.out.picking_list:"
msgid "To Location"
msgstr ""
-msgctxt "odt:stock.shipment.out.picking_list:0"
+msgctxt "odt:stock.shipment.out.picking_list:"
msgid "VAT Number:"
msgstr ""
-msgctxt "odt:stock.shipment.out.picking_list:0"
+msgctxt "odt:stock.shipment.out.picking_list:"
msgid "Warehouse:"
msgstr ""
-msgctxt "odt:stock.shipment.out.return.restocking_list:0"
+msgctxt "odt:stock.shipment.out.return.restocking_list:"
msgid "/"
msgstr ""
-msgctxt "odt:stock.shipment.out.return.restocking_list:0"
+msgctxt "odt:stock.shipment.out.return.restocking_list:"
msgid "Code:"
msgstr ""
-msgctxt "odt:stock.shipment.out.return.restocking_list:0"
+msgctxt "odt:stock.shipment.out.return.restocking_list:"
msgid "E-Mail:"
msgstr ""
-msgctxt "odt:stock.shipment.out.return.restocking_list:0"
+msgctxt "odt:stock.shipment.out.return.restocking_list:"
msgid "From Location"
msgstr ""
-msgctxt "odt:stock.shipment.out.return.restocking_list:0"
+msgctxt "odt:stock.shipment.out.return.restocking_list:"
msgid "Phone:"
msgstr ""
-msgctxt "odt:stock.shipment.out.return.restocking_list:0"
+msgctxt "odt:stock.shipment.out.return.restocking_list:"
msgid "Planned Date:"
msgstr ""
-msgctxt "odt:stock.shipment.out.return.restocking_list:0"
+msgctxt "odt:stock.shipment.out.return.restocking_list:"
msgid "Product"
msgstr ""
-msgctxt "odt:stock.shipment.out.return.restocking_list:0"
+msgctxt "odt:stock.shipment.out.return.restocking_list:"
msgid "Quantity"
msgstr ""
-msgctxt "odt:stock.shipment.out.return.restocking_list:0"
+msgctxt "odt:stock.shipment.out.return.restocking_list:"
msgid "Reference:"
msgstr ""
-msgctxt "odt:stock.shipment.out.return.restocking_list:0"
+msgctxt "odt:stock.shipment.out.return.restocking_list:"
msgid "Restocking List"
msgstr ""
-msgctxt "odt:stock.shipment.out.return.restocking_list:0"
+msgctxt "odt:stock.shipment.out.return.restocking_list:"
msgid "Supplier:"
msgstr ""
-msgctxt "odt:stock.shipment.out.return.restocking_list:0"
+msgctxt "odt:stock.shipment.out.return.restocking_list:"
msgid "To Location"
msgstr ""
-msgctxt "odt:stock.shipment.out.return.restocking_list:0"
+msgctxt "odt:stock.shipment.out.return.restocking_list:"
msgid "VAT Number:"
msgstr ""
-msgctxt "odt:stock.shipment.out.return.restocking_list:0"
+msgctxt "odt:stock.shipment.out.return.restocking_list:"
msgid "Warehouse:"
msgstr ""
-msgctxt "selection:stock.inventory,state:0"
+msgctxt "selection:stock.inventory,state:"
msgid "Canceled"
msgstr ""
-msgctxt "selection:stock.inventory,state:0"
+msgctxt "selection:stock.inventory,state:"
msgid "Done"
msgstr ""
-msgctxt "selection:stock.inventory,state:0"
+msgctxt "selection:stock.inventory,state:"
msgid "Draft"
msgstr ""
-msgctxt "selection:stock.location,type:0"
+msgctxt "selection:stock.location,type:"
msgid "Customer"
msgstr ""
-msgctxt "selection:stock.location,type:0"
+msgctxt "selection:stock.location,type:"
msgid "Lost and Found"
msgstr ""
-msgctxt "selection:stock.location,type:0"
+msgctxt "selection:stock.location,type:"
msgid "Production"
msgstr ""
-msgctxt "selection:stock.location,type:0"
+msgctxt "selection:stock.location,type:"
msgid "Storage"
msgstr ""
-msgctxt "selection:stock.location,type:0"
+msgctxt "selection:stock.location,type:"
msgid "Supplier"
msgstr ""
-msgctxt "selection:stock.location,type:0"
+msgctxt "selection:stock.location,type:"
msgid "View"
msgstr ""
-msgctxt "selection:stock.location,type:0"
+msgctxt "selection:stock.location,type:"
msgid "Warehouse"
msgstr ""
-msgctxt "selection:stock.move,state:0"
+msgctxt "selection:stock.move,state:"
msgid "Assigned"
msgstr ""
-msgctxt "selection:stock.move,state:0"
+msgctxt "selection:stock.move,state:"
msgid "Canceled"
msgstr ""
-msgctxt "selection:stock.move,state:0"
+msgctxt "selection:stock.move,state:"
msgid "Done"
msgstr ""
-msgctxt "selection:stock.move,state:0"
+msgctxt "selection:stock.move,state:"
msgid "Draft"
msgstr ""
-msgctxt "selection:stock.period,state:0"
+msgctxt "selection:stock.period,state:"
msgid "Closed"
msgstr ""
-msgctxt "selection:stock.period,state:0"
+msgctxt "selection:stock.period,state:"
msgid "Draft"
msgstr ""
-msgctxt "selection:stock.shipment.in,state:0"
+msgctxt "selection:stock.shipment.in,state:"
msgid "Canceled"
msgstr ""
-msgctxt "selection:stock.shipment.in,state:0"
+msgctxt "selection:stock.shipment.in,state:"
msgid "Done"
msgstr ""
-msgctxt "selection:stock.shipment.in,state:0"
+msgctxt "selection:stock.shipment.in,state:"
msgid "Draft"
msgstr ""
-msgctxt "selection:stock.shipment.in,state:0"
+msgctxt "selection:stock.shipment.in,state:"
msgid "Received"
msgstr ""
-msgctxt "selection:stock.shipment.in.return,state:0"
+msgctxt "selection:stock.shipment.in.return,state:"
msgid "Assigned"
msgstr ""
-msgctxt "selection:stock.shipment.in.return,state:0"
+msgctxt "selection:stock.shipment.in.return,state:"
msgid "Canceled"
msgstr ""
-msgctxt "selection:stock.shipment.in.return,state:0"
+msgctxt "selection:stock.shipment.in.return,state:"
msgid "Done"
msgstr ""
-msgctxt "selection:stock.shipment.in.return,state:0"
+msgctxt "selection:stock.shipment.in.return,state:"
msgid "Draft"
msgstr ""
-msgctxt "selection:stock.shipment.in.return,state:0"
+msgctxt "selection:stock.shipment.in.return,state:"
msgid "Waiting"
msgstr ""
-msgctxt "selection:stock.shipment.internal,state:0"
+msgctxt "selection:stock.shipment.internal,state:"
msgid "Assigned"
msgstr ""
-msgctxt "selection:stock.shipment.internal,state:0"
+msgctxt "selection:stock.shipment.internal,state:"
msgid "Canceled"
msgstr ""
-msgctxt "selection:stock.shipment.internal,state:0"
+msgctxt "selection:stock.shipment.internal,state:"
msgid "Done"
msgstr ""
-msgctxt "selection:stock.shipment.internal,state:0"
+msgctxt "selection:stock.shipment.internal,state:"
msgid "Draft"
msgstr ""
-msgctxt "selection:stock.shipment.internal,state:0"
+msgctxt "selection:stock.shipment.internal,state:"
msgid "Waiting"
msgstr ""
-msgctxt "selection:stock.shipment.out,state:0"
+msgctxt "selection:stock.shipment.out,state:"
msgid "Assigned"
msgstr ""
-msgctxt "selection:stock.shipment.out,state:0"
+msgctxt "selection:stock.shipment.out,state:"
msgid "Canceled"
msgstr ""
-msgctxt "selection:stock.shipment.out,state:0"
+msgctxt "selection:stock.shipment.out,state:"
msgid "Done"
msgstr ""
-msgctxt "selection:stock.shipment.out,state:0"
+msgctxt "selection:stock.shipment.out,state:"
msgid "Draft"
msgstr ""
-msgctxt "selection:stock.shipment.out,state:0"
+msgctxt "selection:stock.shipment.out,state:"
msgid "Packed"
msgstr ""
-msgctxt "selection:stock.shipment.out,state:0"
+msgctxt "selection:stock.shipment.out,state:"
msgid "Waiting"
msgstr ""
-msgctxt "selection:stock.shipment.out.return,state:0"
+msgctxt "selection:stock.shipment.out.return,state:"
msgid "Canceled"
msgstr ""
-msgctxt "selection:stock.shipment.out.return,state:0"
+msgctxt "selection:stock.shipment.out.return,state:"
msgid "Done"
msgstr ""
-msgctxt "selection:stock.shipment.out.return,state:0"
+msgctxt "selection:stock.shipment.out.return,state:"
msgid "Draft"
msgstr ""
-msgctxt "selection:stock.shipment.out.return,state:0"
+msgctxt "selection:stock.shipment.out.return,state:"
msgid "Received"
msgstr ""
-msgctxt "view:party.party:0"
+msgctxt "view:party.party:"
msgid "Stock"
msgstr ""
-msgctxt "view:product.product:0"
+msgctxt "view:product.by_location.start:"
+msgid "Product by Location"
+msgstr ""
+
+msgctxt "view:product.product:"
msgid "Products"
msgstr ""
-msgctxt "view:stock.configuration:0"
+msgctxt "view:stock.configuration:"
msgid "Stock Configuration"
msgstr ""
-msgctxt "view:stock.inventory.line:0"
+msgctxt "view:stock.inventory.line:"
msgid "Inventory Line"
msgstr ""
-msgctxt "view:stock.inventory.line:0"
+msgctxt "view:stock.inventory.line:"
msgid "Inventory Lines"
msgstr ""
-msgctxt "view:stock.inventory:0"
+msgctxt "view:stock.inventory:"
msgid "Add an inventory line for each missing products"
msgstr ""
-msgctxt "view:stock.inventory:0"
+msgctxt "view:stock.inventory:"
msgid "Cancel"
msgstr ""
-msgctxt "view:stock.inventory:0"
+msgctxt "view:stock.inventory:"
msgid "Complete Inventory"
msgstr ""
-msgctxt "view:stock.inventory:0"
+msgctxt "view:stock.inventory:"
msgid "Confirm"
msgstr ""
-msgctxt "view:stock.inventory:0"
+msgctxt "view:stock.inventory:"
msgid "Inventories"
msgstr ""
-msgctxt "view:stock.inventory:0"
+msgctxt "view:stock.inventory:"
msgid "Inventory"
msgstr ""
-msgctxt "view:stock.location:0"
+msgctxt "view:stock.location:"
msgid "Location"
msgstr ""
-msgctxt "view:stock.location:0"
-msgid "Locations"
+msgctxt "view:stock.location:"
+msgid "Location Quantity"
msgstr ""
-msgctxt "view:stock.location:0"
-msgid "Product Stock"
+msgctxt "view:stock.location:"
+msgid "Locations"
msgstr ""
-msgctxt "view:stock.location_stock_date.init:0"
-msgid "Product Quantity."
+msgctxt "view:stock.location:"
+msgid "Product Stock"
msgstr ""
-msgctxt "view:stock.move:0"
+msgctxt "view:stock.move:"
msgid "Move"
msgstr ""
-msgctxt "view:stock.move:0"
+msgctxt "view:stock.move:"
msgid "Moves"
msgstr ""
-msgctxt "view:stock.period.cache:0"
+msgctxt "view:stock.period.cache:"
msgid "Period Cache"
msgstr ""
-msgctxt "view:stock.period.cache:0"
+msgctxt "view:stock.period.cache:"
msgid "Period Caches"
msgstr ""
-msgctxt "view:stock.period:0"
+msgctxt "view:stock.period:"
msgid "Close"
msgstr ""
-msgctxt "view:stock.period:0"
+msgctxt "view:stock.period:"
msgid "Draft"
msgstr ""
-msgctxt "view:stock.period:0"
+msgctxt "view:stock.period:"
msgid "Period"
msgstr ""
-msgctxt "view:stock.period:0"
+msgctxt "view:stock.period:"
msgid "Periods"
msgstr ""
-msgctxt "view:stock.product_stock_date.init:0"
-msgid "Product Quantity."
-msgstr ""
-
-msgctxt "view:stock.shipment.in.return.assign.assign_failed:0"
-msgid "Moves"
+msgctxt "view:stock.products_by_locations.start:"
+msgid "Products by Locations"
msgstr ""
-msgctxt "view:stock.shipment.in.return.assign.assign_failed:0"
+msgctxt "view:stock.shipment.in.return.assign.failed:"
msgid "Unable to Assign"
msgstr ""
-msgctxt "view:stock.shipment.in.return.assign.assign_failed:0"
+msgctxt "view:stock.shipment.in.return.assign.failed:"
msgid "Unable to assign those products:"
msgstr ""
-msgctxt "view:stock.shipment.in.return:0"
+msgctxt "view:stock.shipment.in.return:"
msgid "Assign"
msgstr ""
-msgctxt "view:stock.shipment.in.return:0"
+msgctxt "view:stock.shipment.in.return:"
msgid "Cancel"
msgstr ""
-msgctxt "view:stock.shipment.in.return:0"
+msgctxt "view:stock.shipment.in.return:"
msgid "Done"
msgstr ""
-msgctxt "view:stock.shipment.in.return:0"
+msgctxt "view:stock.shipment.in.return:"
msgid "Draft"
msgstr ""
-msgctxt "view:stock.shipment.in.return:0"
+msgctxt "view:stock.shipment.in.return:"
msgid "Reset to Draft"
msgstr ""
-msgctxt "view:stock.shipment.in.return:0"
+msgctxt "view:stock.shipment.in.return:"
msgid "Supplier Return Shipment"
msgstr ""
-msgctxt "view:stock.shipment.in.return:0"
+msgctxt "view:stock.shipment.in.return:"
msgid "Supplier Return Shipments"
msgstr ""
-msgctxt "view:stock.shipment.in.return:0"
+msgctxt "view:stock.shipment.in.return:"
+msgid "Wait"
+msgstr ""
+
+msgctxt "view:stock.shipment.in.return:"
msgid "Waiting"
msgstr ""
-msgctxt "view:stock.shipment.in:0"
+msgctxt "view:stock.shipment.in:"
msgid "Cancel"
msgstr ""
-msgctxt "view:stock.shipment.in:0"
+msgctxt "view:stock.shipment.in:"
msgid "Done"
msgstr ""
-msgctxt "view:stock.shipment.in:0"
+msgctxt "view:stock.shipment.in:"
msgid "Incoming Moves"
msgstr ""
-msgctxt "view:stock.shipment.in:0"
+msgctxt "view:stock.shipment.in:"
msgid "Inventory Moves"
msgstr ""
-msgctxt "view:stock.shipment.in:0"
+msgctxt "view:stock.shipment.in:"
msgid "Moves"
msgstr ""
-msgctxt "view:stock.shipment.in:0"
+msgctxt "view:stock.shipment.in:"
+msgid "Receive"
+msgstr ""
+
+msgctxt "view:stock.shipment.in:"
msgid "Received"
msgstr ""
-msgctxt "view:stock.shipment.in:0"
+msgctxt "view:stock.shipment.in:"
msgid "Reset to Draft"
msgstr ""
-msgctxt "view:stock.shipment.in:0"
+msgctxt "view:stock.shipment.in:"
msgid "Supplier Shipment"
msgstr ""
-msgctxt "view:stock.shipment.in:0"
+msgctxt "view:stock.shipment.in:"
msgid "Supplier Shipments"
msgstr ""
-msgctxt "view:stock.shipment.internal.assign.assign_failed:0"
-msgid "Moves"
-msgstr ""
-
-msgctxt "view:stock.shipment.internal.assign.assign_failed:0"
+msgctxt "view:stock.shipment.internal.assign.failed:"
msgid "Unable to Assign"
msgstr ""
-msgctxt "view:stock.shipment.internal.assign.assign_failed:0"
+msgctxt "view:stock.shipment.internal.assign.failed:"
msgid "Unable to assign those products:"
msgstr ""
-msgctxt "view:stock.shipment.internal:0"
+msgctxt "view:stock.shipment.internal:"
msgid "Assign"
msgstr ""
-msgctxt "view:stock.shipment.internal:0"
+msgctxt "view:stock.shipment.internal:"
msgid "Cancel"
msgstr ""
-msgctxt "view:stock.shipment.internal:0"
+msgctxt "view:stock.shipment.internal:"
msgid "Done"
msgstr ""
-msgctxt "view:stock.shipment.internal:0"
+msgctxt "view:stock.shipment.internal:"
msgid "Draft"
msgstr ""
-msgctxt "view:stock.shipment.internal:0"
+msgctxt "view:stock.shipment.internal:"
msgid "Internal Shipment"
msgstr ""
-msgctxt "view:stock.shipment.internal:0"
+msgctxt "view:stock.shipment.internal:"
msgid "Internal Shipments"
msgstr ""
-msgctxt "view:stock.shipment.internal:0"
+msgctxt "view:stock.shipment.internal:"
msgid "Reset to Draft"
msgstr ""
-msgctxt "view:stock.shipment.internal:0"
+msgctxt "view:stock.shipment.internal:"
msgid "Waiting"
msgstr ""
-msgctxt "view:stock.shipment.out.assign.assign_failed:0"
-msgid "Inventory Moves"
-msgstr ""
-
-msgctxt "view:stock.shipment.out.assign.assign_failed:0"
+msgctxt "view:stock.shipment.out.assign.failed:"
msgid "Unable to Assign"
msgstr ""
-msgctxt "view:stock.shipment.out.assign.assign_failed:0"
+msgctxt "view:stock.shipment.out.assign.failed:"
msgid "Unable to assign those products:"
msgstr ""
-msgctxt "view:stock.shipment.out.return:0"
+msgctxt "view:stock.shipment.out.return:"
msgid "Cancel"
msgstr ""
-msgctxt "view:stock.shipment.out.return:0"
+msgctxt "view:stock.shipment.out.return:"
msgid "Customer Return Shipment"
msgstr ""
-msgctxt "view:stock.shipment.out.return:0"
+msgctxt "view:stock.shipment.out.return:"
msgid "Customer Return Shipments"
msgstr ""
-msgctxt "view:stock.shipment.out.return:0"
+msgctxt "view:stock.shipment.out.return:"
msgid "Done"
msgstr ""
-msgctxt "view:stock.shipment.out.return:0"
+msgctxt "view:stock.shipment.out.return:"
+msgid "Draft"
+msgstr ""
+
+msgctxt "view:stock.shipment.out.return:"
msgid "Incoming Moves"
msgstr ""
-msgctxt "view:stock.shipment.out.return:0"
+msgctxt "view:stock.shipment.out.return:"
msgid "Inventory Moves"
msgstr ""
-msgctxt "view:stock.shipment.out.return:0"
+msgctxt "view:stock.shipment.out.return:"
msgid "Moves"
msgstr ""
-msgctxt "view:stock.shipment.out.return:0"
+msgctxt "view:stock.shipment.out.return:"
msgid "Received"
msgstr ""
-msgctxt "view:stock.shipment.out.return:0"
+msgctxt "view:stock.shipment.out.return:"
msgid "Reset to Draft"
msgstr ""
-msgctxt "view:stock.shipment.out:0"
+msgctxt "view:stock.shipment.out:"
msgid "Assign"
msgstr ""
-msgctxt "view:stock.shipment.out:0"
+msgctxt "view:stock.shipment.out:"
msgid "Cancel"
msgstr ""
-msgctxt "view:stock.shipment.out:0"
+msgctxt "view:stock.shipment.out:"
msgid "Customer Shipment"
msgstr ""
-msgctxt "view:stock.shipment.out:0"
+msgctxt "view:stock.shipment.out:"
msgid "Customer Shipments"
msgstr ""
-msgctxt "view:stock.shipment.out:0"
+msgctxt "view:stock.shipment.out:"
msgid "Done"
msgstr ""
-msgctxt "view:stock.shipment.out:0"
+msgctxt "view:stock.shipment.out:"
msgid "Draft"
msgstr ""
-msgctxt "view:stock.shipment.out:0"
+msgctxt "view:stock.shipment.out:"
msgid "Inventory Moves"
msgstr ""
-msgctxt "view:stock.shipment.out:0"
+msgctxt "view:stock.shipment.out:"
msgid "Make shipment"
msgstr ""
-msgctxt "view:stock.shipment.out:0"
+msgctxt "view:stock.shipment.out:"
msgid "Outgoing Moves"
msgstr ""
-msgctxt "view:stock.shipment.out:0"
+msgctxt "view:stock.shipment.out:"
msgid "Reset to Draft"
msgstr ""
-msgctxt "view:stock.shipment.out:0"
+msgctxt "view:stock.shipment.out:"
msgid "Waiting"
msgstr ""
-msgctxt "wizard_button:stock.location.open,init,end:0"
+msgctxt "wizard_button:product.by_location,start,end:"
msgid "Cancel"
msgstr ""
-msgctxt "wizard_button:stock.location.open,init,open:0"
+msgctxt "wizard_button:product.by_location,start,open:"
msgid "Open"
msgstr ""
-msgctxt "wizard_button:stock.product.open,init,end:0"
+msgctxt "wizard_button:stock.products_by_locations,start,end:"
msgid "Cancel"
msgstr ""
-msgctxt "wizard_button:stock.product.open,init,open:0"
+msgctxt "wizard_button:stock.products_by_locations,start,open:"
msgid "Open"
msgstr ""
-msgctxt "wizard_button:stock.shipment.in.return.assign,ask_force,end:0"
+msgctxt "wizard_button:stock.shipment.in.return.assign,failed,end:"
msgid "Ok"
msgstr ""
-msgctxt "wizard_button:stock.shipment.in.return.assign,ask_force,force:0"
+msgctxt "wizard_button:stock.shipment.in.return.assign,failed,force:"
msgid "Force Assign"
msgstr ""
-msgctxt "wizard_button:stock.shipment.in.return.assign,assign_failed,end:0"
+msgctxt "wizard_button:stock.shipment.internal.assign,failed,end:"
msgid "Ok"
msgstr ""
-msgctxt "wizard_button:stock.shipment.internal.assign,ask_force,end:0"
-msgid "Ok"
-msgstr ""
-
-msgctxt "wizard_button:stock.shipment.internal.assign,ask_force,force:0"
+msgctxt "wizard_button:stock.shipment.internal.assign,failed,force:"
msgid "Force Assign"
msgstr ""
-msgctxt "wizard_button:stock.shipment.internal.assign,assign_failed,end:0"
-msgid "Ok"
-msgstr ""
-
-msgctxt "wizard_button:stock.shipment.out.assign,ask_force,end:0"
+msgctxt "wizard_button:stock.shipment.out.assign,failed,end:"
msgid "Ok"
msgstr ""
-msgctxt "wizard_button:stock.shipment.out.assign,ask_force,force:0"
+msgctxt "wizard_button:stock.shipment.out.assign,failed,force:"
msgid "Force Assign"
msgstr ""
-
-msgctxt "wizard_button:stock.shipment.out.assign,assign_failed,end:0"
-msgid "Ok"
-msgstr ""
diff --git a/locale/de_DE.po b/locale/de_DE.po
index 6ab74d3..1b4394e 100644
--- a/locale/de_DE.po
+++ b/locale/de_DE.po
@@ -2,7 +2,7 @@
msgid ""
msgstr "Content-Type: text/plain; charset=utf-8\n"
-msgctxt "error:product.template:0"
+msgctxt "error:product.template:"
msgid ""
"You cannot change the default uom for a product which is associated to stock"
" moves."
@@ -10,16 +10,22 @@ msgstr ""
"Die StandardmaÃeinheit kann nicht für einen Artikel geändert werden, der "
"Lagerbewegungen zugeordnet ist."
-msgctxt "error:stock.inventory.line:0"
+msgctxt "error:stock.inventory.line:"
msgid "Line quantity must be positive!"
msgstr "Anzahl der Position muss positiv sein!"
-msgctxt "error:stock.inventory.line:0"
+msgctxt "error:stock.inventory.line:"
msgid "Product must be unique by inventory!"
msgstr ""
"Ein Artikel kann in einem Lagerbestand nicht mehrfach vergeben werden!"
-msgctxt "error:stock.location:0"
+msgctxt "error:stock.inventory:"
+msgid "Inventory \"%s\" must be cancelled before deletion!"
+msgstr ""
+"Bestandskorrektur \"%s\" muss annulliert werden, bevor sie gelöscht werden "
+"kann."
+
+msgctxt "error:stock.location:"
msgid ""
"A location with existing moves cannot be changed to a type that does not "
"support moves."
@@ -27,75 +33,76 @@ msgstr ""
"Ein Lagerort mit zugordneten Bewegungen kann nicht zu einem Typ geändert "
"werden, der keine Bewegungen unterstützt."
-msgctxt "error:stock.location:0"
+msgctxt "error:stock.location:"
msgid "Location \"%s\" must be a child of warehouse \"%s\"!"
msgstr "Lagerort \"%s\" muss untergeordnet zu Warenlager \"%s\" sein!"
-msgctxt "error:stock.location:0"
+msgctxt "error:stock.location:"
msgid "You can not create recursive locations!"
msgstr "Lagerorte können nicht rekursiv angelegt werden!"
-msgctxt "error:stock.move:0"
+msgctxt "error:stock.move:"
msgid "Internal move quantity must be positive"
msgstr "Interne Anzahl von Bewegungen muss positiv sein!"
-msgctxt "error:stock.move:0"
+msgctxt "error:stock.move:"
msgid "Move can be on only one Shipment"
msgstr "Eine Bewegung kann nur auf einem Lieferposten erfolgen!"
-msgctxt "error:stock.move:0"
+msgctxt "error:stock.move:"
msgid "Move quantity must be positive"
msgstr "Zu bewegende Anzahl muss positiv sein"
-msgctxt "error:stock.move:0"
+msgctxt "error:stock.move:"
msgid "Source and destination location must be different"
msgstr "Herkunfts- und Bestimmungsort müssen unterschiedlich sein"
-msgctxt "error:stock.move:0"
+msgctxt "error:stock.move:"
msgid "You can not modify a move in the state: \"Assigned\", \"Done\" or \"Cancel\""
msgstr ""
"Eine Bewegung in Status \"Zugewiesen\", \"Erledigt\" oder \"Annulliert\" "
"kann nicht geändert werden!"
-msgctxt "error:stock.move:0"
+msgctxt "error:stock.move:"
msgid "You can not modify move in closed period!"
msgstr ""
"Eine Bewegung in einer geschlossenen Periode kann nicht geändert werden!"
-msgctxt "error:stock.move:0"
+msgctxt "error:stock.move:"
msgid "You can not set state to assigned!"
msgstr "Status kann nicht auf Zugewiesen gesetzt werden!"
-msgctxt "error:stock.move:0"
+msgctxt "error:stock.move:"
msgid "You can not set state to done!"
msgstr "Status kann nicht auf Erledigt gesetzt werden!"
-msgctxt "error:stock.move:0"
+msgctxt "error:stock.move:"
msgid "You can not set state to draft!"
msgstr "Status \"Entwurf\" kann nicht gesetzt werden!"
-msgctxt "error:stock.move:0"
-msgid "You can not use service products for a move!"
-msgstr "Dienstleistungen können nicht in Warenbewegungen verwendet werden!"
-
-msgctxt "error:stock.move:0"
+msgctxt "error:stock.move:"
msgid "You can only delete draft or cancelled moves!"
msgstr ""
"Nur Bewegungen mit Status \"Entwurf\" oder \"Annulliert\" können gelöscht "
"werden!"
-msgctxt "error:stock.period:0"
+msgctxt "error:stock.period:"
msgid "You can not close a period in the future or today!"
msgstr ""
"Eine Periode kann nicht am heutigen Tag (oder später) geschlossen werden!"
-msgctxt "error:stock.period:0"
+msgctxt "error:stock.period:"
msgid "You can not close a period when there is still assigned moves!"
msgstr ""
"Eine Periode, die noch zugewiesene Bewegungen enthält, kann nicht "
"geschlossen werden!"
-msgctxt "error:stock.shipment.in:0"
+msgctxt "error:stock.shipment.in.return:"
+msgid "Supplier Return Shipment \"%s\" must be cancelled before deletion!"
+msgstr ""
+"Warenrückgabe \"%s\" muss annulliert werden, bevor sie gelöscht werden kann."
+
+msgctxt "error:stock.shipment.in:"
msgid ""
"Incoming Moves must have the warehouse input location as destination "
"location!"
@@ -103,612 +110,918 @@ msgstr ""
"Eingehende Bewegungen müssen den Eingangsbereich des Warenlagers als Zielort"
" haben!"
-msgctxt "error:stock.shipment.in:0"
+msgctxt "error:stock.shipment.in:"
msgid ""
"Inventory Moves must have the warehouse input location as source location!"
msgstr ""
"Bestandsänderungen müssen den Eingangsbereich des Warenlagers als "
"Herkunftsort haben!"
-msgctxt "error:stock.shipment.out.return.create:0"
+msgctxt "error:stock.shipment.in:"
+msgid "Supplier Shipment \"%s\" must be cancelled before deletion!"
+msgstr ""
+"Lieferposten an Lieferant \"%s\" muss annulliert werden, bevor er gelöscht "
+"werden kann."
+
+msgctxt "error:stock.shipment.internal:"
+msgid "Internal Shipment \"%s\" must be cancelled before deletion!"
+msgstr ""
+"Interner Lieferposten \"%s\" muss annulliert werden, bevor er gelöscht "
+"werden kann."
+
+msgctxt "error:stock.shipment.out.return.create:"
msgid "The shipment with code %s is not yet sent."
msgstr "Der Lieferposten mit Code %s ist noch nicht erledigt."
-msgctxt "error:stock.shipment.out.return.create:0"
+msgctxt "error:stock.shipment.out.return.create:"
msgid "You can not create return shipment"
msgstr "Warenrücknahme nicht möglich!"
-msgctxt "error:stock.shipment.out.return:0"
-msgid ""
-"Incoming Moves must have the warehouse input location as destination "
-"location!"
+msgctxt "error:stock.shipment.out.return:"
+msgid "Customer Return Shipment \"%s\" must be cancelled before deletion!"
msgstr ""
-"Eingehende Bewegungen müssen den Eingangsbereich des Warenlagers als Zielort"
-" haben!"
+"Warenrücknahme \"%s\" muss annulliert werden, bevor sie gelöscht werden "
+"kann."
-msgctxt "error:stock.shipment.out.return:0"
-msgid ""
-"Inventory Moves must have the warehouse input location as source location!"
+msgctxt "error:stock.shipment.out:"
+msgid "Customer Shipment \"%s\" must be cancelled before deletion!"
msgstr ""
-"Bestandsänderungen müssen den Eingangsbereich des Warenlagers als "
-"Herkunftsort haben!"
-
-msgctxt "error:stock.shipment.out:0"
-msgid ""
-"Inventory Moves must have the warehouse output location as destination "
-"location!"
-msgstr ""
-"Bestandsänderungen müssen den Ausgangsbereich des Warenlagers als Zielort "
-"haben!"
-
-msgctxt "error:stock.shipment.out:0"
-msgid ""
-"Outgoing Moves must have the warehouse output location as source location!"
-msgstr ""
-"Ausgehende Bewegungen müssen den Ausgangsbereich des Warenlagers als "
-"Herkunftsort haben!"
+"Lieferposten an Kunde \"%s\" muss annulliert werden, bevor er gelöscht "
+"werden kann."
-msgctxt "field:party.address,delivery:0"
+msgctxt "field:party.address,delivery:"
msgid "Delivery"
msgstr "Lieferadresse"
-msgctxt "field:party.party,customer_location:0"
+msgctxt "field:party.party,customer_location:"
msgid "Customer Location"
msgstr "Lagerort Kunde"
-msgctxt "field:party.party,supplier_location:0"
+msgctxt "field:party.party,supplier_location:"
msgid "Supplier Location"
msgstr "Lagerort Lieferant"
-msgctxt "field:product.product,forecast_quantity:0"
+msgctxt "field:product.by_location.start,forecast_date:"
+msgid "At Date"
+msgstr "Zum"
+
+msgctxt "field:product.by_location.start,id:"
+msgid "ID"
+msgstr "ID"
+
+msgctxt "field:product.product,cost_value:"
+msgid "Cost Value"
+msgstr "Kosten"
+
+msgctxt "field:product.product,forecast_quantity:"
msgid "Forecast Quantity"
msgstr "Voraussichtliche Anzahl"
-msgctxt "field:product.product,quantity:0"
+msgctxt "field:product.product,quantity:"
msgid "Quantity"
msgstr "Anzahl"
-msgctxt "field:product.template,forecast_quantity:0"
+msgctxt "field:product.template,cost_value:"
+msgid "Cost Value"
+msgstr "Kosten"
+
+msgctxt "field:product.template,forecast_quantity:"
msgid "Forecast Quantity"
msgstr "Voraussichtliche Anzahl"
-msgctxt "field:product.template,quantity:0"
+msgctxt "field:product.template,quantity:"
msgid "Quantity"
msgstr "Anzahl"
-msgctxt "field:stock.configuration,rec_name:0"
+msgctxt "field:stock.configuration,create_date:"
+msgid "Create Date"
+msgstr "Erstellungsdatum"
+
+msgctxt "field:stock.configuration,create_uid:"
+msgid "Create User"
+msgstr "Erstellt durch"
+
+msgctxt "field:stock.configuration,id:"
+msgid "ID"
+msgstr "ID"
+
+msgctxt "field:stock.configuration,rec_name:"
msgid "Name"
msgstr "Name"
-msgctxt "field:stock.configuration,shipment_in_return_sequence:0"
+msgctxt "field:stock.configuration,shipment_in_return_sequence:"
msgid "Supplier Return Shipment Sequence"
msgstr "Nummernkreis Warenrückgabe"
-msgctxt "field:stock.configuration,shipment_in_sequence:0"
+msgctxt "field:stock.configuration,shipment_in_sequence:"
msgid "Supplier Shipment Sequence"
msgstr "Nummernkreis Lieferposten von Lieferant"
-msgctxt "field:stock.configuration,shipment_internal_sequence:0"
+msgctxt "field:stock.configuration,shipment_internal_sequence:"
msgid "Internal Shipment Sequence"
msgstr "Nummernkreis Interne Lieferposten"
-msgctxt "field:stock.configuration,shipment_out_return_sequence:0"
+msgctxt "field:stock.configuration,shipment_out_return_sequence:"
msgid "Customer Return Shipment Sequence"
msgstr "Nummernkreis Warenrücknahme"
-msgctxt "field:stock.configuration,shipment_out_sequence:0"
+msgctxt "field:stock.configuration,shipment_out_sequence:"
msgid "Customer Shipment Sequence"
msgstr "Nummernkreis Lieferposten an Kunde"
-msgctxt "field:stock.inventory,company:0"
+msgctxt "field:stock.configuration,write_date:"
+msgid "Write Date"
+msgstr "Zuletzt geändert"
+
+msgctxt "field:stock.configuration,write_uid:"
+msgid "Write User"
+msgstr "Letzte Ãnderung durch"
+
+msgctxt "field:stock.inventory,company:"
msgid "Company"
msgstr "Unternehmen"
-msgctxt "field:stock.inventory,date:0"
+msgctxt "field:stock.inventory,create_date:"
+msgid "Create Date"
+msgstr "Erstellungsdatum"
+
+msgctxt "field:stock.inventory,create_uid:"
+msgid "Create User"
+msgstr "Erstellt durch"
+
+msgctxt "field:stock.inventory,date:"
msgid "Date"
msgstr "Datum"
-msgctxt "field:stock.inventory,lines:0"
+msgctxt "field:stock.inventory,id:"
+msgid "ID"
+msgstr "ID"
+
+msgctxt "field:stock.inventory,lines:"
msgid "Lines"
msgstr "Positionen"
-msgctxt "field:stock.inventory,location:0"
+msgctxt "field:stock.inventory,location:"
msgid "Location"
msgstr "Ort"
-msgctxt "field:stock.inventory,lost_found:0"
+msgctxt "field:stock.inventory,lost_found:"
msgid "Lost and Found"
msgstr "Inventurdifferenz"
-msgctxt "field:stock.inventory,rec_name:0"
+msgctxt "field:stock.inventory,rec_name:"
msgid "Name"
msgstr "Name"
-msgctxt "field:stock.inventory,state:0"
+msgctxt "field:stock.inventory,state:"
msgid "State"
msgstr "Status"
-msgctxt "field:stock.inventory.line,expected_quantity:0"
+msgctxt "field:stock.inventory,write_date:"
+msgid "Write Date"
+msgstr "Zuletzt geändert"
+
+msgctxt "field:stock.inventory,write_uid:"
+msgid "Write User"
+msgstr "Letzte Ãnderung durch"
+
+msgctxt "field:stock.inventory.line,create_date:"
+msgid "Create Date"
+msgstr "Erstellungsdatum"
+
+msgctxt "field:stock.inventory.line,create_uid:"
+msgid "Create User"
+msgstr "Erstellt durch"
+
+msgctxt "field:stock.inventory.line,expected_quantity:"
msgid "Expected Quantity"
msgstr "Erwartete Anzahl"
-msgctxt "field:stock.inventory.line,inventory:0"
+msgctxt "field:stock.inventory.line,id:"
+msgid "ID"
+msgstr "ID"
+
+msgctxt "field:stock.inventory.line,inventory:"
msgid "Inventory"
msgstr "Lagerbestand"
-msgctxt "field:stock.inventory.line,move:0"
+msgctxt "field:stock.inventory.line,move:"
msgid "Move"
msgstr "Bewegung"
-msgctxt "field:stock.inventory.line,product:0"
+msgctxt "field:stock.inventory.line,product:"
msgid "Product"
msgstr "Artikel"
-msgctxt "field:stock.inventory.line,quantity:0"
+msgctxt "field:stock.inventory.line,quantity:"
msgid "Quantity"
msgstr "Anzahl"
-msgctxt "field:stock.inventory.line,rec_name:0"
+msgctxt "field:stock.inventory.line,rec_name:"
msgid "Name"
msgstr "Name"
-msgctxt "field:stock.inventory.line,unit_digits:0"
+msgctxt "field:stock.inventory.line,unit_digits:"
msgid "Unit Digits"
msgstr "Anzahl Stellen"
-msgctxt "field:stock.inventory.line,uom:0"
+msgctxt "field:stock.inventory.line,uom:"
msgid "UOM"
msgstr "MaÃeinheit"
-msgctxt "field:stock.location,active:0"
+msgctxt "field:stock.inventory.line,write_date:"
+msgid "Write Date"
+msgstr "Zuletzt geändert"
+
+msgctxt "field:stock.inventory.line,write_uid:"
+msgid "Write User"
+msgstr "Letzte Ãnderung durch"
+
+msgctxt "field:stock.location,active:"
msgid "Active"
msgstr "Aktiv"
-msgctxt "field:stock.location,address:0"
+msgctxt "field:stock.location,address:"
msgid "Address"
msgstr "Adresse"
-msgctxt "field:stock.location,childs:0"
+msgctxt "field:stock.location,childs:"
msgid "Children"
msgstr "Untergeordnet (Lagerorte)"
-msgctxt "field:stock.location,code:0"
+msgctxt "field:stock.location,code:"
msgid "Code"
msgstr "Code"
-msgctxt "field:stock.location,forecast_quantity:0"
+msgctxt "field:stock.location,cost_value:"
+msgid "Cost Value"
+msgstr "Kosten"
+
+msgctxt "field:stock.location,create_date:"
+msgid "Create Date"
+msgstr "Erstellungsdatum"
+
+msgctxt "field:stock.location,create_uid:"
+msgid "Create User"
+msgstr "Erstellt durch"
+
+msgctxt "field:stock.location,forecast_quantity:"
msgid "Forecast Quantity"
msgstr "Voraussichtliche Anzahl"
-msgctxt "field:stock.location,input_location:0"
+msgctxt "field:stock.location,id:"
+msgid "ID"
+msgstr "ID"
+
+msgctxt "field:stock.location,input_location:"
msgid "Input"
msgstr "Eingang"
-msgctxt "field:stock.location,left:0"
+msgctxt "field:stock.location,left:"
msgid "Left"
msgstr "Links"
-msgctxt "field:stock.location,name:0"
+msgctxt "field:stock.location,name:"
msgid "Name"
msgstr "Name"
-msgctxt "field:stock.location,output_location:0"
+msgctxt "field:stock.location,output_location:"
msgid "Output"
msgstr "Ausgang"
-msgctxt "field:stock.location,parent:0"
+msgctxt "field:stock.location,parent:"
msgid "Parent"
msgstr "Ãbergeordnet (Lagerort)"
-msgctxt "field:stock.location,quantity:0"
+msgctxt "field:stock.location,quantity:"
msgid "Quantity"
msgstr "Anzahl"
-msgctxt "field:stock.location,rec_name:0"
+msgctxt "field:stock.location,rec_name:"
msgid "Name"
msgstr "Name"
-msgctxt "field:stock.location,right:0"
+msgctxt "field:stock.location,right:"
msgid "Right"
msgstr "Rechts"
-msgctxt "field:stock.location,storage_location:0"
+msgctxt "field:stock.location,storage_location:"
msgid "Storage"
msgstr "Lager"
-msgctxt "field:stock.location,type:0"
+msgctxt "field:stock.location,type:"
msgid "Location type"
msgstr "Lagertyp"
-msgctxt "field:stock.location_stock_date.init,forecast_date:0"
-msgid "At Date"
-msgstr "Zum"
+msgctxt "field:stock.location,write_date:"
+msgid "Write Date"
+msgstr "Zuletzt geändert"
-msgctxt "field:stock.move,company:0"
+msgctxt "field:stock.location,write_uid:"
+msgid "Write User"
+msgstr "Letzte Ãnderung durch"
+
+msgctxt "field:stock.move,company:"
msgid "Company"
msgstr "Unternehmen"
-msgctxt "field:stock.move,cost_price:0"
+msgctxt "field:stock.move,cost_price:"
msgid "Cost Price"
msgstr "Einkaufspreis"
-msgctxt "field:stock.move,currency:0"
+msgctxt "field:stock.move,create_date:"
+msgid "Create Date"
+msgstr "Erstellungsdatum"
+
+msgctxt "field:stock.move,create_uid:"
+msgid "Create User"
+msgstr "Erstellt durch"
+
+msgctxt "field:stock.move,currency:"
msgid "Currency"
msgstr "Währung"
-msgctxt "field:stock.move,effective_date:0"
+msgctxt "field:stock.move,effective_date:"
msgid "Effective Date"
msgstr "Effektives Datum"
-msgctxt "field:stock.move,from_location:0"
+msgctxt "field:stock.move,from_location:"
msgid "From Location"
msgstr "Von Lagerort"
-msgctxt "field:stock.move,internal_quantity:0"
+msgctxt "field:stock.move,id:"
+msgid "ID"
+msgstr "ID"
+
+msgctxt "field:stock.move,internal_quantity:"
msgid "Internal Quantity"
msgstr "Anzahl Intern"
-msgctxt "field:stock.move,planned_date:0"
+msgctxt "field:stock.move,planned_date:"
msgid "Planned Date"
msgstr "Geplantes Datum"
-msgctxt "field:stock.move,product:0"
+msgctxt "field:stock.move,product:"
msgid "Product"
msgstr "Artikel"
-msgctxt "field:stock.move,quantity:0"
+msgctxt "field:stock.move,product_uom_category:"
+msgid "Product Uom Category"
+msgstr "Artikel MaÃeinheit Kategorie"
+
+msgctxt "field:stock.move,quantity:"
msgid "Quantity"
msgstr "Anzahl"
-msgctxt "field:stock.move,rec_name:0"
+msgctxt "field:stock.move,rec_name:"
msgid "Name"
msgstr "Name"
-msgctxt "field:stock.move,shipment_in:0"
+msgctxt "field:stock.move,shipment_in:"
msgid "Supplier Shipment"
msgstr "Lieferposten von Lieferant"
-msgctxt "field:stock.move,shipment_in_return:0"
+msgctxt "field:stock.move,shipment_in_return:"
msgid "Supplier Return Shipment"
msgstr "Warenrückgabe"
-msgctxt "field:stock.move,shipment_internal:0"
+msgctxt "field:stock.move,shipment_internal:"
msgid "Internal Shipment"
msgstr "Interner Lieferposten"
-msgctxt "field:stock.move,shipment_out:0"
+msgctxt "field:stock.move,shipment_out:"
msgid "Customer Shipment"
msgstr "Lieferposten an Kunde"
-msgctxt "field:stock.move,shipment_out_return:0"
+msgctxt "field:stock.move,shipment_out_return:"
msgid "Customer Return Shipment"
msgstr "Warenrücknahme"
-msgctxt "field:stock.move,state:0"
+msgctxt "field:stock.move,state:"
msgid "State"
msgstr "Status"
-msgctxt "field:stock.move,to_location:0"
+msgctxt "field:stock.move,to_location:"
msgid "To Location"
msgstr "Zu Lagerort"
-msgctxt "field:stock.move,unit_digits:0"
+msgctxt "field:stock.move,unit_digits:"
msgid "Unit Digits"
msgstr "Anzahl Stellen"
-msgctxt "field:stock.move,unit_price:0"
+msgctxt "field:stock.move,unit_price:"
msgid "Unit Price"
msgstr "Einzelpreis"
-msgctxt "field:stock.move,unit_price_required:0"
+msgctxt "field:stock.move,unit_price_required:"
msgid "Unit Price Required"
msgstr "Einzelpreis erforderlich"
-msgctxt "field:stock.move,uom:0"
+msgctxt "field:stock.move,uom:"
msgid "Uom"
msgstr "Einheit"
-msgctxt "field:stock.period,caches:0"
+msgctxt "field:stock.move,write_date:"
+msgid "Write Date"
+msgstr "Zuletzt geändert"
+
+msgctxt "field:stock.move,write_uid:"
+msgid "Write User"
+msgstr "Letzte Ãnderung durch"
+
+msgctxt "field:stock.period,caches:"
msgid "Caches"
msgstr "Cache-Speicher"
-msgctxt "field:stock.period,company:0"
+msgctxt "field:stock.period,company:"
msgid "Company"
msgstr "Unternehmen"
-msgctxt "field:stock.period,date:0"
+msgctxt "field:stock.period,create_date:"
+msgid "Create Date"
+msgstr "Erstellungsdatum"
+
+msgctxt "field:stock.period,create_uid:"
+msgid "Create User"
+msgstr "Erstellt durch"
+
+msgctxt "field:stock.period,date:"
msgid "Date"
msgstr "Datum"
-msgctxt "field:stock.period,rec_name:0"
+msgctxt "field:stock.period,id:"
+msgid "ID"
+msgstr "ID"
+
+msgctxt "field:stock.period,rec_name:"
msgid "Name"
msgstr "Name"
-msgctxt "field:stock.period,state:0"
+msgctxt "field:stock.period,state:"
msgid "State"
msgstr "Status"
-msgctxt "field:stock.period.cache,internal_quantity:0"
+msgctxt "field:stock.period,write_date:"
+msgid "Write Date"
+msgstr "Zuletzt geändert"
+
+msgctxt "field:stock.period,write_uid:"
+msgid "Write User"
+msgstr "Letzte Ãnderung durch"
+
+msgctxt "field:stock.period.cache,create_date:"
+msgid "Create Date"
+msgstr "Erstellungsdatum"
+
+msgctxt "field:stock.period.cache,create_uid:"
+msgid "Create User"
+msgstr "Erstellt durch"
+
+msgctxt "field:stock.period.cache,id:"
+msgid "ID"
+msgstr "ID"
+
+msgctxt "field:stock.period.cache,internal_quantity:"
msgid "Internal Quantity"
msgstr "Anzahl Intern"
-msgctxt "field:stock.period.cache,location:0"
+msgctxt "field:stock.period.cache,location:"
msgid "Location"
msgstr "Lagerort"
-msgctxt "field:stock.period.cache,period:0"
+msgctxt "field:stock.period.cache,period:"
msgid "Period"
msgstr "Periode"
-msgctxt "field:stock.period.cache,product:0"
+msgctxt "field:stock.period.cache,product:"
msgid "Product"
msgstr "Artikel"
-msgctxt "field:stock.period.cache,rec_name:0"
+msgctxt "field:stock.period.cache,rec_name:"
msgid "Name"
msgstr "Name"
-msgctxt "field:stock.product_stock_date.init,forecast_date:0"
+msgctxt "field:stock.period.cache,write_date:"
+msgid "Write Date"
+msgstr "Zuletzt geändert"
+
+msgctxt "field:stock.period.cache,write_uid:"
+msgid "Write User"
+msgstr "Letzte Ãnderung durch"
+
+msgctxt "field:stock.products_by_locations.start,forecast_date:"
msgid "At Date"
msgstr "Zum"
-msgctxt "field:stock.shipment.in,code:0"
+msgctxt "field:stock.products_by_locations.start,id:"
+msgid "ID"
+msgstr "ID"
+
+msgctxt "field:stock.shipment.in,code:"
msgid "Code"
msgstr "Code"
-msgctxt "field:stock.shipment.in,company:0"
+msgctxt "field:stock.shipment.in,company:"
msgid "Company"
msgstr "Unternehmen"
-msgctxt "field:stock.shipment.in,contact_address:0"
+msgctxt "field:stock.shipment.in,contact_address:"
msgid "Contact Address"
msgstr "Kontaktadresse"
-msgctxt "field:stock.shipment.in,effective_date:0"
+msgctxt "field:stock.shipment.in,create_date:"
+msgid "Create Date"
+msgstr "Erstellungsdatum"
+
+msgctxt "field:stock.shipment.in,create_uid:"
+msgid "Create User"
+msgstr "Erstellt durch"
+
+msgctxt "field:stock.shipment.in,effective_date:"
msgid "Effective Date"
msgstr "Effektives Datum"
-msgctxt "field:stock.shipment.in,incoming_moves:0"
+msgctxt "field:stock.shipment.in,id:"
+msgid "ID"
+msgstr "ID"
+
+msgctxt "field:stock.shipment.in,incoming_moves:"
msgid "Incoming Moves"
msgstr "Eingehende Bewegungen"
-msgctxt "field:stock.shipment.in,inventory_moves:0"
+msgctxt "field:stock.shipment.in,inventory_moves:"
msgid "Inventory Moves"
msgstr "Bestandsänderungen"
-msgctxt "field:stock.shipment.in,moves:0"
+msgctxt "field:stock.shipment.in,moves:"
msgid "Moves"
msgstr "Bewegungen"
-msgctxt "field:stock.shipment.in,planned_date:0"
+msgctxt "field:stock.shipment.in,planned_date:"
msgid "Planned Date"
msgstr "Geplantes Datum"
-msgctxt "field:stock.shipment.in,rec_name:0"
+msgctxt "field:stock.shipment.in,rec_name:"
msgid "Name"
msgstr "Name"
-msgctxt "field:stock.shipment.in,reference:0"
+msgctxt "field:stock.shipment.in,reference:"
msgid "Reference"
msgstr "Beleg-Nr."
-msgctxt "field:stock.shipment.in,state:0"
+msgctxt "field:stock.shipment.in,state:"
msgid "State"
msgstr "Status"
-msgctxt "field:stock.shipment.in,supplier:0"
+msgctxt "field:stock.shipment.in,supplier:"
msgid "Supplier"
msgstr "Lieferant"
-msgctxt "field:stock.shipment.in,warehouse:0"
+msgctxt "field:stock.shipment.in,supplier_location:"
+msgid "Supplier Location"
+msgstr "Lagerort Lieferant"
+
+msgctxt "field:stock.shipment.in,warehouse:"
msgid "Warehouse"
msgstr "Warenlager"
-msgctxt "field:stock.shipment.in.return,code:0"
+msgctxt "field:stock.shipment.in,warehouse_input:"
+msgid "Warehouse Input"
+msgstr "Warenlager Eingang"
+
+msgctxt "field:stock.shipment.in,warehouse_storage:"
+msgid "Warehouse Storage"
+msgstr "Warenlager Lagerung"
+
+msgctxt "field:stock.shipment.in,write_date:"
+msgid "Write Date"
+msgstr "Zuletzt geändert"
+
+msgctxt "field:stock.shipment.in,write_uid:"
+msgid "Write User"
+msgstr "Letzte Ãnderung durch"
+
+msgctxt "field:stock.shipment.in.return,code:"
msgid "Code"
msgstr "Code"
-msgctxt "field:stock.shipment.in.return,company:0"
+msgctxt "field:stock.shipment.in.return,company:"
msgid "Company"
msgstr "Unternehmen"
-msgctxt "field:stock.shipment.in.return,effective_date:0"
+msgctxt "field:stock.shipment.in.return,create_date:"
+msgid "Create Date"
+msgstr "Erstellungsdatum"
+
+msgctxt "field:stock.shipment.in.return,create_uid:"
+msgid "Create User"
+msgstr "Erstellt durch"
+
+msgctxt "field:stock.shipment.in.return,effective_date:"
msgid "Effective Date"
msgstr "Effektives Datum"
-msgctxt "field:stock.shipment.in.return,from_location:0"
+msgctxt "field:stock.shipment.in.return,from_location:"
msgid "From Location"
msgstr "Von Lagerort"
-msgctxt "field:stock.shipment.in.return,moves:0"
+msgctxt "field:stock.shipment.in.return,id:"
+msgid "ID"
+msgstr "ID"
+
+msgctxt "field:stock.shipment.in.return,moves:"
msgid "Moves"
msgstr "Bewegungen"
-msgctxt "field:stock.shipment.in.return,planned_date:0"
+msgctxt "field:stock.shipment.in.return,planned_date:"
msgid "Planned Date"
msgstr "Geplantes Datum"
-msgctxt "field:stock.shipment.in.return,rec_name:0"
+msgctxt "field:stock.shipment.in.return,rec_name:"
msgid "Name"
msgstr "Name"
-msgctxt "field:stock.shipment.in.return,reference:0"
+msgctxt "field:stock.shipment.in.return,reference:"
msgid "Reference"
msgstr "Beleg-Nr."
-msgctxt "field:stock.shipment.in.return,state:0"
+msgctxt "field:stock.shipment.in.return,state:"
msgid "State"
msgstr "Status"
-msgctxt "field:stock.shipment.in.return,to_location:0"
+msgctxt "field:stock.shipment.in.return,to_location:"
msgid "To Location"
msgstr "Zu Lagerort"
-msgctxt "field:stock.shipment.in.return.assign.assign_failed,moves:0"
+msgctxt "field:stock.shipment.in.return,write_date:"
+msgid "Write Date"
+msgstr "Zuletzt geändert"
+
+msgctxt "field:stock.shipment.in.return,write_uid:"
+msgid "Write User"
+msgstr "Letzte Ãnderung durch"
+
+msgctxt "field:stock.shipment.in.return.assign.failed,id:"
+msgid "ID"
+msgstr "ID"
+
+msgctxt "field:stock.shipment.in.return.assign.failed,moves:"
msgid "Moves"
msgstr "Lagerbewegungen"
-msgctxt "field:stock.shipment.internal,code:0"
+msgctxt "field:stock.shipment.internal,code:"
msgid "Code"
msgstr "Code"
-msgctxt "field:stock.shipment.internal,company:0"
+msgctxt "field:stock.shipment.internal,company:"
msgid "Company"
msgstr "Unternehmen"
-msgctxt "field:stock.shipment.internal,effective_date:0"
+msgctxt "field:stock.shipment.internal,create_date:"
+msgid "Create Date"
+msgstr "Erstellungsdatum"
+
+msgctxt "field:stock.shipment.internal,create_uid:"
+msgid "Create User"
+msgstr "Erstellt durch"
+
+msgctxt "field:stock.shipment.internal,effective_date:"
msgid "Effective Date"
msgstr "Effektives Datum"
-msgctxt "field:stock.shipment.internal,from_location:0"
+msgctxt "field:stock.shipment.internal,from_location:"
msgid "From Location"
msgstr "Von Lagerort"
-msgctxt "field:stock.shipment.internal,moves:0"
+msgctxt "field:stock.shipment.internal,id:"
+msgid "ID"
+msgstr "ID"
+
+msgctxt "field:stock.shipment.internal,moves:"
msgid "Moves"
msgstr "Bewegungen"
-msgctxt "field:stock.shipment.internal,planned_date:0"
+msgctxt "field:stock.shipment.internal,planned_date:"
msgid "Planned Date"
msgstr "Geplantes Datum"
-msgctxt "field:stock.shipment.internal,rec_name:0"
+msgctxt "field:stock.shipment.internal,rec_name:"
msgid "Name"
msgstr "Name"
-msgctxt "field:stock.shipment.internal,reference:0"
+msgctxt "field:stock.shipment.internal,reference:"
msgid "Reference"
msgstr "Beleg-Nr."
-msgctxt "field:stock.shipment.internal,state:0"
+msgctxt "field:stock.shipment.internal,state:"
msgid "State"
msgstr "Status"
-msgctxt "field:stock.shipment.internal,to_location:0"
+msgctxt "field:stock.shipment.internal,to_location:"
msgid "To Location"
msgstr "Zu Lagerort"
-msgctxt "field:stock.shipment.internal.assign.assign_failed,moves:0"
+msgctxt "field:stock.shipment.internal,write_date:"
+msgid "Write Date"
+msgstr "Zuletzt geändert"
+
+msgctxt "field:stock.shipment.internal,write_uid:"
+msgid "Write User"
+msgstr "Letzte Ãnderung durch"
+
+msgctxt "field:stock.shipment.internal.assign.failed,id:"
+msgid "ID"
+msgstr "ID"
+
+msgctxt "field:stock.shipment.internal.assign.failed,moves:"
msgid "Moves"
-msgstr "Bewegungen"
+msgstr "Lagerbewegungen"
-msgctxt "field:stock.shipment.out,code:0"
+msgctxt "field:stock.shipment.out,code:"
msgid "Code"
msgstr "Code"
-msgctxt "field:stock.shipment.out,company:0"
+msgctxt "field:stock.shipment.out,company:"
msgid "Company"
msgstr "Unternehmen"
-msgctxt "field:stock.shipment.out,customer:0"
+msgctxt "field:stock.shipment.out,create_date:"
+msgid "Create Date"
+msgstr "Erstellungsdatum"
+
+msgctxt "field:stock.shipment.out,create_uid:"
+msgid "Create User"
+msgstr "Erstellt durch"
+
+msgctxt "field:stock.shipment.out,customer:"
msgid "Customer"
msgstr "Kunde"
-msgctxt "field:stock.shipment.out,delivery_address:0"
+msgctxt "field:stock.shipment.out,customer_location:"
+msgid "Customer Location"
+msgstr "Lagerort Kunde"
+
+msgctxt "field:stock.shipment.out,delivery_address:"
msgid "Delivery Address"
msgstr "Lieferadresse"
-msgctxt "field:stock.shipment.out,effective_date:0"
+msgctxt "field:stock.shipment.out,effective_date:"
msgid "Effective Date"
msgstr "Effektives Datum"
-msgctxt "field:stock.shipment.out,inventory_moves:0"
+msgctxt "field:stock.shipment.out,id:"
+msgid "ID"
+msgstr "ID"
+
+msgctxt "field:stock.shipment.out,inventory_moves:"
msgid "Inventory Moves"
msgstr "Bestandsänderungen"
-msgctxt "field:stock.shipment.out,moves:0"
+msgctxt "field:stock.shipment.out,moves:"
msgid "Moves"
msgstr "Bewegungen"
-msgctxt "field:stock.shipment.out,outgoing_moves:0"
+msgctxt "field:stock.shipment.out,outgoing_moves:"
msgid "Outgoing Moves"
msgstr "Ausgehende Bewegungen"
-msgctxt "field:stock.shipment.out,planned_date:0"
+msgctxt "field:stock.shipment.out,planned_date:"
msgid "Planned Date"
msgstr "Geplantes Datum"
-msgctxt "field:stock.shipment.out,rec_name:0"
+msgctxt "field:stock.shipment.out,rec_name:"
msgid "Name"
msgstr "Name"
-msgctxt "field:stock.shipment.out,reference:0"
+msgctxt "field:stock.shipment.out,reference:"
msgid "Reference"
msgstr "Beleg-Nr."
-msgctxt "field:stock.shipment.out,state:0"
+msgctxt "field:stock.shipment.out,state:"
msgid "State"
msgstr "Status"
-msgctxt "field:stock.shipment.out,warehouse:0"
+msgctxt "field:stock.shipment.out,warehouse:"
msgid "Warehouse"
msgstr "Warenlager"
-msgctxt "field:stock.shipment.out.assign.assign_failed,inventory_moves:0"
+msgctxt "field:stock.shipment.out,warehouse_output:"
+msgid "Warehouse Output"
+msgstr "Warenlager Ausgang"
+
+msgctxt "field:stock.shipment.out,warehouse_storage:"
+msgid "Warehouse Storage"
+msgstr "Warenlager Lagerung"
+
+msgctxt "field:stock.shipment.out,write_date:"
+msgid "Write Date"
+msgstr "Zuletzt geändert"
+
+msgctxt "field:stock.shipment.out,write_uid:"
+msgid "Write User"
+msgstr "Letzte Ãnderung durch"
+
+msgctxt "field:stock.shipment.out.assign.failed,id:"
+msgid "ID"
+msgstr "ID"
+
+msgctxt "field:stock.shipment.out.assign.failed,inventory_moves:"
msgid "Inventory Moves"
msgstr "Bestandsänderungen"
-msgctxt "field:stock.shipment.out.return,code:0"
+msgctxt "field:stock.shipment.out.return,code:"
msgid "Code"
msgstr "Code"
-msgctxt "field:stock.shipment.out.return,company:0"
+msgctxt "field:stock.shipment.out.return,company:"
msgid "Company"
msgstr "Unternehmen"
-msgctxt "field:stock.shipment.out.return,customer:0"
+msgctxt "field:stock.shipment.out.return,create_date:"
+msgid "Create Date"
+msgstr "Erstellungsdatum"
+
+msgctxt "field:stock.shipment.out.return,create_uid:"
+msgid "Create User"
+msgstr "Erstellt durch"
+
+msgctxt "field:stock.shipment.out.return,customer:"
msgid "Customer"
msgstr "Kunde"
-msgctxt "field:stock.shipment.out.return,delivery_address:0"
+msgctxt "field:stock.shipment.out.return,customer_location:"
+msgid "Customer Location"
+msgstr "Lagerort Kunde"
+
+msgctxt "field:stock.shipment.out.return,delivery_address:"
msgid "Delivery Address"
msgstr "Lieferadresse"
-msgctxt "field:stock.shipment.out.return,effective_date:0"
+msgctxt "field:stock.shipment.out.return,effective_date:"
msgid "Effective Date"
msgstr "Effektives Datum"
-msgctxt "field:stock.shipment.out.return,incoming_moves:0"
+msgctxt "field:stock.shipment.out.return,id:"
+msgid "ID"
+msgstr "ID"
+
+msgctxt "field:stock.shipment.out.return,incoming_moves:"
msgid "Incoming Moves"
msgstr "Eingehende Bewegungen"
-msgctxt "field:stock.shipment.out.return,inventory_moves:0"
+msgctxt "field:stock.shipment.out.return,inventory_moves:"
msgid "Inventory Moves"
msgstr "Bestandsänderungen"
-msgctxt "field:stock.shipment.out.return,moves:0"
+msgctxt "field:stock.shipment.out.return,moves:"
msgid "Moves"
msgstr "Bewegungen"
-msgctxt "field:stock.shipment.out.return,planned_date:0"
+msgctxt "field:stock.shipment.out.return,planned_date:"
msgid "Planned Date"
msgstr "Geplantes Datum"
-msgctxt "field:stock.shipment.out.return,rec_name:0"
+msgctxt "field:stock.shipment.out.return,rec_name:"
msgid "Name"
msgstr "Name"
-msgctxt "field:stock.shipment.out.return,reference:0"
+msgctxt "field:stock.shipment.out.return,reference:"
msgid "Reference"
msgstr "Beleg-Nr."
-msgctxt "field:stock.shipment.out.return,state:0"
+msgctxt "field:stock.shipment.out.return,state:"
msgid "State"
msgstr "Status"
-msgctxt "field:stock.shipment.out.return,warehouse:0"
+msgctxt "field:stock.shipment.out.return,warehouse:"
msgid "Warehouse"
msgstr "Warenlager"
-msgctxt "help:party.party,customer_location:0"
+msgctxt "field:stock.shipment.out.return,warehouse_input:"
+msgid "Warehouse Input"
+msgstr "Warenlager Eingang"
+
+msgctxt "field:stock.shipment.out.return,warehouse_storage:"
+msgid "Warehouse Storage"
+msgstr "Warenlager Lagerung"
+
+msgctxt "field:stock.shipment.out.return,write_date:"
+msgid "Write Date"
+msgstr "Zuletzt geändert"
+
+msgctxt "field:stock.shipment.out.return,write_uid:"
+msgid "Write User"
+msgstr "Letzte Ãnderung durch"
+
+msgctxt "help:party.party,customer_location:"
msgid "The default destination location when sending products to the party."
msgstr "Standardbestimmungsort für Sendungen zum Geschäftspartner"
-msgctxt "help:party.party,supplier_location:0"
+msgctxt "help:party.party,supplier_location:"
msgid "The default source location when receiving products from the party."
msgstr "Standardbestimmungsort für Sendungen vom Geschäftspartner"
-msgctxt "help:stock.location_stock_date.init,forecast_date:0"
+msgctxt "help:product.by_location.start,forecast_date:"
msgid ""
"Allow to compute expected stock quantities for this date.\n"
"* An empty value is an infinite date in the future.\n"
@@ -718,7 +1031,7 @@ msgstr ""
"* ein leerer Wert ist ein unbegrenztes Datum in der Zukunft\n"
"* ein Datum in der Vergangenheit berechnet historische Werte\n"
-msgctxt "help:stock.product_stock_date.init,forecast_date:0"
+msgctxt "help:stock.products_by_locations.start,forecast_date:"
msgid ""
"Allow to compute expected stock quantities for this date.\n"
"* An empty value is an infinite date in the future.\n"
@@ -741,8 +1054,8 @@ msgid "Locations"
msgstr "Lagerorte"
msgctxt "model:ir.action,name:act_location_quantity_tree"
-msgid "Product Stock"
-msgstr "Lagerbestand"
+msgid "Location Quantity & Cost Value"
+msgstr "Lagerbestand & Kostenbewertung"
msgctxt "model:ir.action,name:act_location_tree"
msgid "Locations"
@@ -768,9 +1081,9 @@ msgctxt "model:ir.action,name:act_period_list"
msgid "Periods"
msgstr "Lagerperioden"
-msgctxt "model:ir.action,name:act_product_by_location"
+msgctxt "model:ir.action,name:act_products_by_locations"
msgid "Products by Locations"
-msgstr "Artikel nach Lagerort"
+msgstr "Artikel nach Lagerorten"
msgctxt "model:ir.action,name:act_shipment_in_draft"
msgid "Draft Supplier Shipment"
@@ -854,23 +1167,19 @@ msgstr "Lieferschein"
msgctxt "model:ir.action,name:report_shipment_out_picking_list"
msgid "Picking List"
-msgstr "Pick Liste"
+msgstr "Pickliste"
msgctxt "model:ir.action,name:report_shipment_out_return_restocking_list"
msgid "Restocking List"
msgstr "Einlagerungsliste"
-msgctxt "model:ir.action,name:wizard_complete_inventory"
-msgid "Complete Inventory"
-msgstr "Lagerbestandspositionen komplettieren"
-
-msgctxt "model:ir.action,name:wizard_location_open"
+msgctxt "model:ir.action,name:wizard_product_by_location"
msgid "Product by Location"
msgstr "Artikel nach Lagerort"
-msgctxt "model:ir.action,name:wizard_product_open"
-msgid "Product Quantities"
-msgstr "Artikelbestand"
+msgctxt "model:ir.action,name:wizard_products_by_locations"
+msgid "Products by Locations"
+msgstr "Artikel nach Lagerorten"
msgctxt "model:ir.action,name:wizard_shipment_in_return_assign"
msgid "Assign Purchase Return Shipment"
@@ -882,7 +1191,7 @@ msgstr "Zuweisung Lieferposten Intern"
msgctxt "model:ir.action,name:wizard_shipment_out_assign"
msgid "Assign Shipment Out"
-msgstr "Zuweisung Lieferposten Ausgehend"
+msgstr "Zuweisung Lieferposten ausgehend"
msgctxt "model:ir.sequence,name:sequence_shipment_in"
msgid "Supplier Shipment"
@@ -1028,6 +1337,10 @@ msgctxt "model:ir.ui.menu,name:menu_stock_configuration"
msgid "Stock Configuration"
msgstr "Einstellungen Lager"
+msgctxt "model:product.by_location.start,name:"
+msgid "Product by Location"
+msgstr "Artikel nach Lagerort"
+
msgctxt "model:res.group,name:group_stock"
msgid "Stock"
msgstr "Lager"
@@ -1040,19 +1353,19 @@ msgctxt "model:res.group,name:group_stock_force_assignment"
msgid "Stock Force Assignment"
msgstr "Lager Zuweisungserzwingung"
-msgctxt "model:stock.configuration,name:0"
+msgctxt "model:stock.configuration,name:"
msgid "Stock Configuration"
msgstr "Einstellungen Lager"
-msgctxt "model:stock.inventory,name:0"
+msgctxt "model:stock.inventory,name:"
msgid "Stock Inventory"
msgstr "Lager Lagerbestand"
-msgctxt "model:stock.inventory.line,name:0"
+msgctxt "model:stock.inventory.line,name:"
msgid "Stock Inventory Line"
msgstr "Lager Lagerbestand Position"
-msgctxt "model:stock.location,name:0"
+msgctxt "model:stock.location,name:"
msgid "Stock Location"
msgstr "Lager Lagerort"
@@ -1084,1047 +1397,896 @@ msgctxt "model:stock.location,name:location_warehouse"
msgid "Warehouse"
msgstr "Warenlager"
-msgctxt "model:stock.location_stock_date.init,name:0"
-msgid "Compute stock quantities"
-msgstr "Berechnung Lagerbestände"
-
-msgctxt "model:stock.move,name:0"
+msgctxt "model:stock.move,name:"
msgid "Stock Move"
msgstr "Lager Bewegung"
-msgctxt "model:stock.period,name:0"
+msgctxt "model:stock.period,name:"
msgid "Stock Period"
msgstr "Lager Periode"
-msgctxt "model:stock.period.cache,name:0"
-msgid ""
-"\n"
-" Stock Period Cache\n"
-"\n"
-" It is used to store cached computation of stock quantities.\n"
-" "
+msgctxt "model:stock.period.cache,name:"
+msgid "stock.period.cache"
msgstr ""
-"\n"
-" Perioden Cache-Speicher\n"
-"\n"
-" Dient der Pufferspeicherung von berechneten Lagerbeständen."
+"Perioden Cache-Speicher\n"
+"Dient der Pufferspeicherung von berechneten Lagerbeständen."
-msgctxt "model:stock.product_stock_date.init,name:0"
-msgid "Compute stock quantities"
-msgstr "Berechnung Lagerbestände"
+msgctxt "model:stock.products_by_locations.start,name:"
+msgid "Products by Locations"
+msgstr "Artikel nach Lagerorten"
-msgctxt "model:stock.shipment.in,name:0"
+msgctxt "model:stock.shipment.in,name:"
msgid "Supplier Shipment"
msgstr "Lieferant Lieferposten"
-msgctxt "model:stock.shipment.in.return,name:0"
+msgctxt "model:stock.shipment.in.return,name:"
msgid "Supplier Return Shipment"
msgstr "Warenrückgabe Lieferant"
-msgctxt "model:stock.shipment.in.return.assign.assign_failed,name:0"
-msgid "Assign Supplier Return Shipment Assign Failed"
-msgstr "Zuweisung Lieferposten Warenrückgabe Erzwungen"
+msgctxt "model:stock.shipment.in.return.assign.failed,name:"
+msgid "Assign Supplier Return Shipment"
+msgstr "Zuweisung Warenrückgabe"
-msgctxt "model:stock.shipment.internal,name:0"
+msgctxt "model:stock.shipment.internal,name:"
msgid "Internal Shipment"
msgstr "Interner Lieferposten"
-msgctxt "model:stock.shipment.internal.assign.assign_failed,name:0"
-msgid "Assign Shipment Internal Assign Failed"
-msgstr "Zuweisung Lieferposten Intern Erzwungen"
+msgctxt "model:stock.shipment.internal.assign.failed,name:"
+msgid "Assign Shipment Internal"
+msgstr "Zuweisung Lieferposten Intern"
-msgctxt "model:stock.shipment.out,name:0"
+msgctxt "model:stock.shipment.out,name:"
msgid "Customer Shipment"
msgstr "Lieferposten Kunde"
-msgctxt "model:stock.shipment.out.assign.assign_failed,name:0"
-msgid "Assign Shipment Out Assign Failed"
-msgstr "Zuweisung Lieferposten Ausgehend Erzwungen"
-
-msgctxt "model:stock.shipment.out.return,name:0"
-msgid "Customer Return Shipment"
-msgstr "Warenrücknahme Kunde"
-
-msgctxt "model:workflow,name:wkf_inventory"
-msgid "Inventory"
-msgstr "Lagerbestand"
-
-msgctxt "model:workflow,name:wkf_shipment_in_return"
-msgid "Supplier Return Shipment"
-msgstr "Warenrückgabe Lieferant"
+msgctxt "model:stock.shipment.out.assign.failed,name:"
+msgid "Assign Shipment Out"
+msgstr "Zuweisung Lieferposten ausgehend"
-msgctxt "model:workflow,name:wkf_shipment_out_return"
+msgctxt "model:stock.shipment.out.return,name:"
msgid "Customer Return Shipment"
msgstr "Warenrücknahme Kunde"
-msgctxt "model:workflow,name:wkf_shipmentin"
-msgid "Supplier Shipment"
-msgstr "Lieferposten Lieferant"
-
-msgctxt "model:workflow,name:wkf_shipmentinternal"
-msgid "Internal Shipment"
-msgstr "Interner Lieferposten"
-
-msgctxt "model:workflow,name:wkf_shipmentout"
-msgid "Customer Shipment"
-msgstr "Lieferposten Kunde"
-
-msgctxt "model:workflow.activity,name:inventory_act_cancel"
-msgid "Canceled"
-msgstr "Annulliert"
-
-msgctxt "model:workflow.activity,name:inventory_act_done"
-msgid "Done"
-msgstr "Erledigt"
-
-msgctxt "model:workflow.activity,name:inventory_act_draft"
-msgid "Draft"
-msgstr "Entwurf"
-
-msgctxt "model:workflow.activity,name:shipment_in_return_act_assigned"
-msgid "Assigned"
-msgstr "Zugewiesen"
-
-msgctxt "model:workflow.activity,name:shipment_in_return_act_cancel"
-msgid "Canceled"
-msgstr "Annulliert"
-
-msgctxt "model:workflow.activity,name:shipment_in_return_act_done"
-msgid "Done"
-msgstr "Erledigt"
-
-msgctxt "model:workflow.activity,name:shipment_in_return_act_draft"
-msgid "Draft"
-msgstr "Entwurf"
-
-msgctxt "model:workflow.activity,name:shipment_in_return_act_waiting"
-msgid "Waiting"
-msgstr "Wartend"
-
-msgctxt "model:workflow.activity,name:shipment_out_return_act_cancel"
-msgid "Canceled"
-msgstr "Annulliert"
-
-msgctxt "model:workflow.activity,name:shipment_out_return_act_done"
-msgid "Done"
-msgstr "Erledigt"
-
-msgctxt "model:workflow.activity,name:shipment_out_return_act_draft"
-msgid "Draft"
-msgstr "Entwurf"
-
-msgctxt "model:workflow.activity,name:shipment_out_return_act_received"
-msgid "Received"
-msgstr "Erhalten"
-
-msgctxt "model:workflow.activity,name:shipmentin_act_cancel"
-msgid "Canceled"
-msgstr "Annulliert"
-
-msgctxt "model:workflow.activity,name:shipmentin_act_done"
-msgid "Done"
-msgstr "Erledigt"
-
-msgctxt "model:workflow.activity,name:shipmentin_act_draft"
-msgid "Draft"
-msgstr "Entwurf"
-
-msgctxt "model:workflow.activity,name:shipmentin_act_received"
-msgid "Received"
-msgstr "Erhalten"
-
-msgctxt "model:workflow.activity,name:shipmentinternal_act_assigned"
-msgid "Assigned"
-msgstr "Zugewiesen"
-
-msgctxt "model:workflow.activity,name:shipmentinternal_act_cancel"
-msgid "Canceled"
-msgstr "Annulliert"
-
-msgctxt "model:workflow.activity,name:shipmentinternal_act_done"
-msgid "Done"
-msgstr "Erledigt"
-
-msgctxt "model:workflow.activity,name:shipmentinternal_act_draft"
-msgid "Draft"
-msgstr "Entwurf"
-
-msgctxt "model:workflow.activity,name:shipmentinternal_act_waiting"
-msgid "Waiting"
-msgstr "Wartend"
-
-msgctxt "model:workflow.activity,name:shipmentout_act_assigned"
-msgid "Assigned"
-msgstr "Zugewiesen"
-
-msgctxt "model:workflow.activity,name:shipmentout_act_cancel"
-msgid "Canceled"
-msgstr "Annulliert"
-
-msgctxt "model:workflow.activity,name:shipmentout_act_done"
-msgid "Done"
-msgstr "Erledigt"
-
-msgctxt "model:workflow.activity,name:shipmentout_act_draft"
-msgid "Draft"
-msgstr "Entwurf"
-
-msgctxt "model:workflow.activity,name:shipmentout_act_packed"
-msgid "Packed"
-msgstr "Gepackt"
-
-msgctxt "model:workflow.activity,name:shipmentout_act_waiting"
-msgid "Waiting"
-msgstr "Wartend"
-
-msgctxt "odt:stock.shipment.in.restocking_list:0"
+msgctxt "odt:stock.shipment.in.restocking_list:"
msgid "/"
msgstr "/"
-msgctxt "odt:stock.shipment.in.restocking_list:0"
+msgctxt "odt:stock.shipment.in.restocking_list:"
msgid "Code:"
msgstr "Code:"
-msgctxt "odt:stock.shipment.in.restocking_list:0"
+msgctxt "odt:stock.shipment.in.restocking_list:"
msgid "E-Mail:"
msgstr "E-Mail:"
-msgctxt "odt:stock.shipment.in.restocking_list:0"
+msgctxt "odt:stock.shipment.in.restocking_list:"
msgid "From Location"
msgstr "Von Lagerort"
-msgctxt "odt:stock.shipment.in.restocking_list:0"
+msgctxt "odt:stock.shipment.in.restocking_list:"
msgid "Phone:"
msgstr "Telefon:"
-msgctxt "odt:stock.shipment.in.restocking_list:0"
+msgctxt "odt:stock.shipment.in.restocking_list:"
msgid "Planned Date:"
msgstr "Geplantes Datum:"
-msgctxt "odt:stock.shipment.in.restocking_list:0"
+msgctxt "odt:stock.shipment.in.restocking_list:"
msgid "Product"
msgstr "Artikel"
-msgctxt "odt:stock.shipment.in.restocking_list:0"
+msgctxt "odt:stock.shipment.in.restocking_list:"
msgid "Quantity"
msgstr "Anzahl"
-msgctxt "odt:stock.shipment.in.restocking_list:0"
+msgctxt "odt:stock.shipment.in.restocking_list:"
msgid "Reference:"
msgstr "Beleg-Nr.:"
-msgctxt "odt:stock.shipment.in.restocking_list:0"
+msgctxt "odt:stock.shipment.in.restocking_list:"
msgid "Restocking List"
msgstr "Einlagerungsliste"
-msgctxt "odt:stock.shipment.in.restocking_list:0"
+msgctxt "odt:stock.shipment.in.restocking_list:"
msgid "Supplier:"
msgstr "Lieferant:"
-msgctxt "odt:stock.shipment.in.restocking_list:0"
+msgctxt "odt:stock.shipment.in.restocking_list:"
msgid "To Location"
msgstr "Zu Lagerort"
-msgctxt "odt:stock.shipment.in.restocking_list:0"
+msgctxt "odt:stock.shipment.in.restocking_list:"
msgid "VAT Number:"
msgstr "USt-ID-Nr.:"
-msgctxt "odt:stock.shipment.in.restocking_list:0"
+msgctxt "odt:stock.shipment.in.restocking_list:"
msgid "Warehouse:"
msgstr "Warenlager:"
-msgctxt "odt:stock.shipment.internal.report:0"
+msgctxt "odt:stock.shipment.internal.report:"
msgid "/"
msgstr "/"
-msgctxt "odt:stock.shipment.internal.report:0"
+msgctxt "odt:stock.shipment.internal.report:"
msgid "Code:"
msgstr "Code:"
-msgctxt "odt:stock.shipment.internal.report:0"
+msgctxt "odt:stock.shipment.internal.report:"
msgid "E-Mail:"
msgstr "E-Mail:"
-msgctxt "odt:stock.shipment.internal.report:0"
+msgctxt "odt:stock.shipment.internal.report:"
msgid "From Location"
msgstr "Von Lagerort"
-msgctxt "odt:stock.shipment.internal.report:0"
+msgctxt "odt:stock.shipment.internal.report:"
msgid "From Location:"
msgstr "Von Lagerort:"
-msgctxt "odt:stock.shipment.internal.report:0"
+msgctxt "odt:stock.shipment.internal.report:"
msgid "Internal Shipment"
msgstr "Interner Lieferposten"
-msgctxt "odt:stock.shipment.internal.report:0"
+msgctxt "odt:stock.shipment.internal.report:"
msgid "Phone:"
msgstr "Telefon:"
-msgctxt "odt:stock.shipment.internal.report:0"
+msgctxt "odt:stock.shipment.internal.report:"
msgid "Planned Date:"
msgstr "Geplantes Datum:"
-msgctxt "odt:stock.shipment.internal.report:0"
+msgctxt "odt:stock.shipment.internal.report:"
msgid "Product"
msgstr "Artikel"
-msgctxt "odt:stock.shipment.internal.report:0"
+msgctxt "odt:stock.shipment.internal.report:"
msgid "Quantity"
msgstr "Anzahl"
-msgctxt "odt:stock.shipment.internal.report:0"
+msgctxt "odt:stock.shipment.internal.report:"
msgid "Reference:"
msgstr "Beleg-Nr.:"
-msgctxt "odt:stock.shipment.internal.report:0"
+msgctxt "odt:stock.shipment.internal.report:"
msgid "To Location"
msgstr "Zu Lagerort"
-msgctxt "odt:stock.shipment.internal.report:0"
+msgctxt "odt:stock.shipment.internal.report:"
msgid "To Location:"
msgstr "Zu Lagerort:"
-msgctxt "odt:stock.shipment.internal.report:0"
+msgctxt "odt:stock.shipment.internal.report:"
msgid "VAT Number:"
msgstr "USt-ID-Nr.:"
-msgctxt "odt:stock.shipment.out.delivery_note:0"
+msgctxt "odt:stock.shipment.out.delivery_note:"
msgid "/"
msgstr "/"
-msgctxt "odt:stock.shipment.out.delivery_note:0"
+msgctxt "odt:stock.shipment.out.delivery_note:"
msgid "Customer Code:"
msgstr "Kundennr:"
-msgctxt "odt:stock.shipment.out.delivery_note:0"
+msgctxt "odt:stock.shipment.out.delivery_note:"
msgid "Date:"
msgstr "Datum:"
-msgctxt "odt:stock.shipment.out.delivery_note:0"
+msgctxt "odt:stock.shipment.out.delivery_note:"
msgid "Delivery Note"
msgstr "Lieferschein"
-msgctxt "odt:stock.shipment.out.delivery_note:0"
+msgctxt "odt:stock.shipment.out.delivery_note:"
msgid "E-Mail:"
msgstr "E-Mail:"
-msgctxt "odt:stock.shipment.out.delivery_note:0"
+msgctxt "odt:stock.shipment.out.delivery_note:"
msgid "Phone:"
msgstr "Telefon:"
-msgctxt "odt:stock.shipment.out.delivery_note:0"
+msgctxt "odt:stock.shipment.out.delivery_note:"
msgid "Product"
msgstr "Artikel"
-msgctxt "odt:stock.shipment.out.delivery_note:0"
+msgctxt "odt:stock.shipment.out.delivery_note:"
msgid "Quantity"
msgstr "Anzahl"
-msgctxt "odt:stock.shipment.out.delivery_note:0"
+msgctxt "odt:stock.shipment.out.delivery_note:"
msgid "Reference:"
msgstr "Beleg-Nr.:"
-msgctxt "odt:stock.shipment.out.delivery_note:0"
+msgctxt "odt:stock.shipment.out.delivery_note:"
msgid "Shipment Number:"
msgstr "Lieferposten Nr.:"
-msgctxt "odt:stock.shipment.out.delivery_note:0"
+msgctxt "odt:stock.shipment.out.delivery_note:"
msgid "VAT Number:"
msgstr "USt-ID-Nr.:"
-msgctxt "odt:stock.shipment.out.picking_list:0"
+msgctxt "odt:stock.shipment.out.picking_list:"
msgid "/"
msgstr "/"
-msgctxt "odt:stock.shipment.out.picking_list:0"
+msgctxt "odt:stock.shipment.out.picking_list:"
msgid "Code:"
msgstr "Code:"
-msgctxt "odt:stock.shipment.out.picking_list:0"
+msgctxt "odt:stock.shipment.out.picking_list:"
msgid "Customer:"
msgstr "Kunde:"
-msgctxt "odt:stock.shipment.out.picking_list:0"
+msgctxt "odt:stock.shipment.out.picking_list:"
msgid "E-Mail:"
msgstr "E-Mail:"
-msgctxt "odt:stock.shipment.out.picking_list:0"
+msgctxt "odt:stock.shipment.out.picking_list:"
msgid "From Location"
msgstr "Von Lagerort"
-msgctxt "odt:stock.shipment.out.picking_list:0"
+msgctxt "odt:stock.shipment.out.picking_list:"
msgid "Phone:"
msgstr "Telefon:"
-msgctxt "odt:stock.shipment.out.picking_list:0"
+msgctxt "odt:stock.shipment.out.picking_list:"
msgid "Picking List"
-msgstr "Pick Liste"
+msgstr "Pickliste"
-msgctxt "odt:stock.shipment.out.picking_list:0"
+msgctxt "odt:stock.shipment.out.picking_list:"
msgid "Planned Date:"
msgstr "Geplantes Datum:"
-msgctxt "odt:stock.shipment.out.picking_list:0"
+msgctxt "odt:stock.shipment.out.picking_list:"
msgid "Product"
msgstr "Artikel"
-msgctxt "odt:stock.shipment.out.picking_list:0"
+msgctxt "odt:stock.shipment.out.picking_list:"
msgid "Quantity"
msgstr "Anzahl"
-msgctxt "odt:stock.shipment.out.picking_list:0"
+msgctxt "odt:stock.shipment.out.picking_list:"
msgid "Reference:"
msgstr "Beleg-Nr.:"
-msgctxt "odt:stock.shipment.out.picking_list:0"
+msgctxt "odt:stock.shipment.out.picking_list:"
msgid "To Location"
msgstr "Zu Lagerort"
-msgctxt "odt:stock.shipment.out.picking_list:0"
+msgctxt "odt:stock.shipment.out.picking_list:"
msgid "VAT Number:"
msgstr "USt-ID-Nr.:"
-msgctxt "odt:stock.shipment.out.picking_list:0"
+msgctxt "odt:stock.shipment.out.picking_list:"
msgid "Warehouse:"
msgstr "Warenlager:"
-msgctxt "odt:stock.shipment.out.return.restocking_list:0"
+msgctxt "odt:stock.shipment.out.return.restocking_list:"
msgid "/"
msgstr "/"
-msgctxt "odt:stock.shipment.out.return.restocking_list:0"
+msgctxt "odt:stock.shipment.out.return.restocking_list:"
msgid "Code:"
msgstr "Code:"
-msgctxt "odt:stock.shipment.out.return.restocking_list:0"
+msgctxt "odt:stock.shipment.out.return.restocking_list:"
msgid "E-Mail:"
msgstr "E-Mail:"
-msgctxt "odt:stock.shipment.out.return.restocking_list:0"
+msgctxt "odt:stock.shipment.out.return.restocking_list:"
msgid "From Location"
msgstr "Von Lagerort"
-msgctxt "odt:stock.shipment.out.return.restocking_list:0"
+msgctxt "odt:stock.shipment.out.return.restocking_list:"
msgid "Phone:"
msgstr "Telefon:"
-msgctxt "odt:stock.shipment.out.return.restocking_list:0"
+msgctxt "odt:stock.shipment.out.return.restocking_list:"
msgid "Planned Date:"
msgstr "Geplantes Datum:"
-msgctxt "odt:stock.shipment.out.return.restocking_list:0"
+msgctxt "odt:stock.shipment.out.return.restocking_list:"
msgid "Product"
msgstr "Artikel"
-msgctxt "odt:stock.shipment.out.return.restocking_list:0"
+msgctxt "odt:stock.shipment.out.return.restocking_list:"
msgid "Quantity"
msgstr "Anzahl"
-msgctxt "odt:stock.shipment.out.return.restocking_list:0"
+msgctxt "odt:stock.shipment.out.return.restocking_list:"
msgid "Reference:"
msgstr "Beleg-Nr.:"
-msgctxt "odt:stock.shipment.out.return.restocking_list:0"
+msgctxt "odt:stock.shipment.out.return.restocking_list:"
msgid "Restocking List"
msgstr "Einlagerungsliste"
-msgctxt "odt:stock.shipment.out.return.restocking_list:0"
+msgctxt "odt:stock.shipment.out.return.restocking_list:"
msgid "Supplier:"
msgstr "Lieferant:"
-msgctxt "odt:stock.shipment.out.return.restocking_list:0"
+msgctxt "odt:stock.shipment.out.return.restocking_list:"
msgid "To Location"
msgstr "Zu Lagerort"
-msgctxt "odt:stock.shipment.out.return.restocking_list:0"
+msgctxt "odt:stock.shipment.out.return.restocking_list:"
msgid "VAT Number:"
msgstr "USt-ID-Nr.:"
-msgctxt "odt:stock.shipment.out.return.restocking_list:0"
+msgctxt "odt:stock.shipment.out.return.restocking_list:"
msgid "Warehouse:"
msgstr "Warenlager:"
-msgctxt "selection:stock.inventory,state:0"
+msgctxt "selection:stock.inventory,state:"
msgid "Canceled"
msgstr "Annulliert"
-msgctxt "selection:stock.inventory,state:0"
+msgctxt "selection:stock.inventory,state:"
msgid "Done"
msgstr "Erledigt"
-msgctxt "selection:stock.inventory,state:0"
+msgctxt "selection:stock.inventory,state:"
msgid "Draft"
msgstr "Entwurf"
-msgctxt "selection:stock.location,type:0"
+msgctxt "selection:stock.location,type:"
msgid "Customer"
msgstr "Kunde"
-msgctxt "selection:stock.location,type:0"
+msgctxt "selection:stock.location,type:"
msgid "Lost and Found"
msgstr "Differenzen allgemein"
-msgctxt "selection:stock.location,type:0"
+msgctxt "selection:stock.location,type:"
msgid "Production"
msgstr "Produktion"
-msgctxt "selection:stock.location,type:0"
+msgctxt "selection:stock.location,type:"
msgid "Storage"
msgstr "Lager"
-msgctxt "selection:stock.location,type:0"
+msgctxt "selection:stock.location,type:"
msgid "Supplier"
msgstr "Lieferant"
-msgctxt "selection:stock.location,type:0"
+msgctxt "selection:stock.location,type:"
msgid "View"
msgstr "Sicht"
-msgctxt "selection:stock.location,type:0"
+msgctxt "selection:stock.location,type:"
msgid "Warehouse"
msgstr "Warenlager"
-msgctxt "selection:stock.move,state:0"
+msgctxt "selection:stock.move,state:"
msgid "Assigned"
msgstr "Zugewiesen"
-msgctxt "selection:stock.move,state:0"
+msgctxt "selection:stock.move,state:"
msgid "Canceled"
msgstr "Annulliert"
-msgctxt "selection:stock.move,state:0"
+msgctxt "selection:stock.move,state:"
msgid "Done"
msgstr "Erledigt"
-msgctxt "selection:stock.move,state:0"
+msgctxt "selection:stock.move,state:"
msgid "Draft"
msgstr "Entwurf"
-msgctxt "selection:stock.period,state:0"
+msgctxt "selection:stock.period,state:"
msgid "Closed"
msgstr "Geschlossen"
-msgctxt "selection:stock.period,state:0"
+msgctxt "selection:stock.period,state:"
msgid "Draft"
msgstr "Entwurf"
-msgctxt "selection:stock.shipment.in,state:0"
+msgctxt "selection:stock.shipment.in,state:"
msgid "Canceled"
msgstr "Annulliert"
-msgctxt "selection:stock.shipment.in,state:0"
+msgctxt "selection:stock.shipment.in,state:"
msgid "Done"
msgstr "Erledigt"
-msgctxt "selection:stock.shipment.in,state:0"
+msgctxt "selection:stock.shipment.in,state:"
msgid "Draft"
msgstr "Entwurf"
-msgctxt "selection:stock.shipment.in,state:0"
+msgctxt "selection:stock.shipment.in,state:"
msgid "Received"
msgstr "Erhalten"
-msgctxt "selection:stock.shipment.in.return,state:0"
+msgctxt "selection:stock.shipment.in.return,state:"
msgid "Assigned"
msgstr "Zugewiesen"
-msgctxt "selection:stock.shipment.in.return,state:0"
+msgctxt "selection:stock.shipment.in.return,state:"
msgid "Canceled"
msgstr "Annulliert"
-msgctxt "selection:stock.shipment.in.return,state:0"
+msgctxt "selection:stock.shipment.in.return,state:"
msgid "Done"
msgstr "Erledigt"
-msgctxt "selection:stock.shipment.in.return,state:0"
+msgctxt "selection:stock.shipment.in.return,state:"
msgid "Draft"
msgstr "Entwurf"
-msgctxt "selection:stock.shipment.in.return,state:0"
+msgctxt "selection:stock.shipment.in.return,state:"
msgid "Waiting"
msgstr "Wartend"
-msgctxt "selection:stock.shipment.internal,state:0"
+msgctxt "selection:stock.shipment.internal,state:"
msgid "Assigned"
msgstr "Zugewiesen"
-msgctxt "selection:stock.shipment.internal,state:0"
+msgctxt "selection:stock.shipment.internal,state:"
msgid "Canceled"
msgstr "Annulliert"
-msgctxt "selection:stock.shipment.internal,state:0"
+msgctxt "selection:stock.shipment.internal,state:"
msgid "Done"
msgstr "Erledigt"
-msgctxt "selection:stock.shipment.internal,state:0"
+msgctxt "selection:stock.shipment.internal,state:"
msgid "Draft"
msgstr "Entwurf"
-msgctxt "selection:stock.shipment.internal,state:0"
+msgctxt "selection:stock.shipment.internal,state:"
msgid "Waiting"
msgstr "Wartend"
-msgctxt "selection:stock.shipment.out,state:0"
+msgctxt "selection:stock.shipment.out,state:"
msgid "Assigned"
msgstr "Zugewiesen"
-msgctxt "selection:stock.shipment.out,state:0"
+msgctxt "selection:stock.shipment.out,state:"
msgid "Canceled"
msgstr "Annulliert"
-msgctxt "selection:stock.shipment.out,state:0"
+msgctxt "selection:stock.shipment.out,state:"
msgid "Done"
msgstr "Erledigt"
-msgctxt "selection:stock.shipment.out,state:0"
+msgctxt "selection:stock.shipment.out,state:"
msgid "Draft"
msgstr "Entwurf"
-msgctxt "selection:stock.shipment.out,state:0"
+msgctxt "selection:stock.shipment.out,state:"
msgid "Packed"
msgstr "Gepackt"
-msgctxt "selection:stock.shipment.out,state:0"
+msgctxt "selection:stock.shipment.out,state:"
msgid "Waiting"
msgstr "Wartend"
-msgctxt "selection:stock.shipment.out.return,state:0"
+msgctxt "selection:stock.shipment.out.return,state:"
msgid "Canceled"
msgstr "Annulliert"
-msgctxt "selection:stock.shipment.out.return,state:0"
+msgctxt "selection:stock.shipment.out.return,state:"
msgid "Done"
msgstr "Erledigt"
-msgctxt "selection:stock.shipment.out.return,state:0"
+msgctxt "selection:stock.shipment.out.return,state:"
msgid "Draft"
msgstr "Entwurf"
-msgctxt "selection:stock.shipment.out.return,state:0"
+msgctxt "selection:stock.shipment.out.return,state:"
msgid "Received"
msgstr "Erhalten"
-msgctxt "view:party.party:0"
+msgctxt "view:party.party:"
msgid "Stock"
msgstr "Lager"
-msgctxt "view:party.party:0"
+msgctxt "view:party.party:"
msgid "_Stock"
msgstr "_Lager"
-msgctxt "view:product.product:0"
+msgctxt "view:product.by_location.start:"
+msgid "Product by Location"
+msgstr "Artikel nach Lagerort"
+
+msgctxt "view:product.product:"
msgid "Products"
msgstr "Artikel"
-msgctxt "view:stock.configuration:0"
+msgctxt "view:stock.configuration:"
msgid "Stock Configuration"
msgstr "Einstellungen Lager"
-msgctxt "view:stock.inventory.line:0"
+msgctxt "view:stock.inventory.line:"
msgid "Inventory Line"
msgstr "Position Bestand"
-msgctxt "view:stock.inventory.line:0"
+msgctxt "view:stock.inventory.line:"
msgid "Inventory Lines"
msgstr "Positionen Bestand"
-msgctxt "view:stock.inventory:0"
+msgctxt "view:stock.inventory:"
msgid "Add an inventory line for each missing products"
msgstr "Positionen für Bestandskorrektur um fehlende Artikel ergänzen"
-msgctxt "view:stock.inventory:0"
+msgctxt "view:stock.inventory:"
msgid "All generated moves will be cancelled!"
msgstr "Sämtliche erzeugten Bewegungen werden rückgängig gemacht!"
-msgctxt "view:stock.inventory:0"
+msgctxt "view:stock.inventory:"
msgid "Cancel"
msgstr "Annullieren"
-msgctxt "view:stock.inventory:0"
+msgctxt "view:stock.inventory:"
msgid "Complete Inventory"
msgstr "Lagerbestandspositionen komplettieren"
-msgctxt "view:stock.inventory:0"
+msgctxt "view:stock.inventory:"
msgid "Confirm"
msgstr "Bestätigen"
-msgctxt "view:stock.inventory:0"
+msgctxt "view:stock.inventory:"
msgid "Inventories"
msgstr "Bestandskorrekturen"
-msgctxt "view:stock.inventory:0"
+msgctxt "view:stock.inventory:"
msgid "Inventory"
msgstr "Lagerbestand"
-msgctxt "view:stock.inventory:0"
+msgctxt "view:stock.inventory:"
msgid "Re-Open"
msgstr "Wiedereröffnen"
-msgctxt "view:stock.location:0"
+msgctxt "view:stock.location:"
msgid "Location"
msgstr "Lagerort"
-msgctxt "view:stock.location:0"
+msgctxt "view:stock.location:"
+msgid "Location Quantity"
+msgstr "Lagerort Menge"
+
+msgctxt "view:stock.location:"
msgid "Locations"
msgstr "Lagerorte"
-msgctxt "view:stock.location:0"
+msgctxt "view:stock.location:"
msgid "Product Stock"
msgstr "Lagerbestand"
-msgctxt "view:stock.location_stock_date.init:0"
-msgid "Product Quantity."
-msgstr "Artikel Mengen"
-
-msgctxt "view:stock.move:0"
+msgctxt "view:stock.move:"
msgid "Cancel"
msgstr "Annullieren"
-msgctxt "view:stock.move:0"
+msgctxt "view:stock.move:"
msgid "Move"
msgstr "Bewegung"
-msgctxt "view:stock.move:0"
+msgctxt "view:stock.move:"
msgid "Moves"
msgstr "Bewegungen"
-msgctxt "view:stock.move:0"
+msgctxt "view:stock.move:"
msgid "Set Done"
msgstr "Auf Erledigt setzen"
-msgctxt "view:stock.move:0"
+msgctxt "view:stock.move:"
msgid "Set Draft"
msgstr "Auf Entwurf setzen"
-msgctxt "view:stock.period.cache:0"
+msgctxt "view:stock.period.cache:"
msgid "Period Cache"
msgstr "Perioden Cache-Speicher"
-msgctxt "view:stock.period.cache:0"
+msgctxt "view:stock.period.cache:"
msgid "Period Caches"
msgstr "Perioden Cache-Speicher"
-msgctxt "view:stock.period:0"
+msgctxt "view:stock.period:"
msgid "Close"
msgstr "SchlieÃen"
-msgctxt "view:stock.period:0"
+msgctxt "view:stock.period:"
msgid "Draft"
msgstr "Entwurf"
-msgctxt "view:stock.period:0"
+msgctxt "view:stock.period:"
msgid "Period"
msgstr "Periode"
-msgctxt "view:stock.period:0"
+msgctxt "view:stock.period:"
msgid "Periods"
msgstr "Lagerperioden"
-msgctxt "view:stock.product_stock_date.init:0"
-msgid "Product Quantity."
-msgstr "Artikel Mengen"
-
-msgctxt "view:stock.shipment.in.return.assign.assign_failed:0"
-msgid "Moves"
-msgstr "Bewegungen"
+msgctxt "view:stock.products_by_locations.start:"
+msgid "Products by Locations"
+msgstr "Artikel nach Lagerorten"
-msgctxt "view:stock.shipment.in.return.assign.assign_failed:0"
+msgctxt "view:stock.shipment.in.return.assign.failed:"
msgid "Unable to Assign"
msgstr "Fehlmenge Zuweisung"
-msgctxt "view:stock.shipment.in.return.assign.assign_failed:0"
+msgctxt "view:stock.shipment.in.return.assign.failed:"
msgid "Unable to assign those products:"
msgstr "Folgende Artikel können nicht zugewiesen werden:"
-msgctxt "view:stock.shipment.in.return:0"
+msgctxt "view:stock.shipment.in.return:"
msgid "Assign"
msgstr "Zuweisen"
-msgctxt "view:stock.shipment.in.return:0"
+msgctxt "view:stock.shipment.in.return:"
msgid "Cancel"
msgstr "Annullieren"
-msgctxt "view:stock.shipment.in.return:0"
+msgctxt "view:stock.shipment.in.return:"
msgid "Done"
msgstr "Erledigt"
-msgctxt "view:stock.shipment.in.return:0"
+msgctxt "view:stock.shipment.in.return:"
msgid "Draft"
msgstr "Entwurf"
-msgctxt "view:stock.shipment.in.return:0"
+msgctxt "view:stock.shipment.in.return:"
msgid "Reset to Draft"
msgstr "Auf Entwurf zurücksetzen"
-msgctxt "view:stock.shipment.in.return:0"
+msgctxt "view:stock.shipment.in.return:"
msgid "Supplier Return Shipment"
msgstr "Warenrückgabe Lieferant"
-msgctxt "view:stock.shipment.in.return:0"
+msgctxt "view:stock.shipment.in.return:"
msgid "Supplier Return Shipments"
msgstr "Warenrückgaben (an Lieferanten)"
-msgctxt "view:stock.shipment.in.return:0"
+msgctxt "view:stock.shipment.in.return:"
+msgid "Wait"
+msgstr "Warten"
+
+msgctxt "view:stock.shipment.in.return:"
msgid "Waiting"
msgstr "Wartend"
-msgctxt "view:stock.shipment.in:0"
+msgctxt "view:stock.shipment.in:"
msgid "Cancel"
msgstr "Annullieren"
-msgctxt "view:stock.shipment.in:0"
+msgctxt "view:stock.shipment.in:"
msgid "Done"
msgstr "Erledigt"
-msgctxt "view:stock.shipment.in:0"
+msgctxt "view:stock.shipment.in:"
msgid "Draft"
msgstr "Entwurf"
-msgctxt "view:stock.shipment.in:0"
+msgctxt "view:stock.shipment.in:"
msgid "Incoming Moves"
msgstr "Eingehende Bewegungen"
-msgctxt "view:stock.shipment.in:0"
+msgctxt "view:stock.shipment.in:"
msgid "Inventory Moves"
msgstr "Bestandsänderungen"
-msgctxt "view:stock.shipment.in:0"
+msgctxt "view:stock.shipment.in:"
msgid "Moves"
msgstr "Bewegungen"
-msgctxt "view:stock.shipment.in:0"
+msgctxt "view:stock.shipment.in:"
+msgid "Receive"
+msgstr "Einlagerung"
+
+msgctxt "view:stock.shipment.in:"
msgid "Received"
msgstr "Erhalten"
-msgctxt "view:stock.shipment.in:0"
+msgctxt "view:stock.shipment.in:"
msgid "Reset to Draft"
msgstr "Auf Entwurf zurücksetzen"
-msgctxt "view:stock.shipment.in:0"
+msgctxt "view:stock.shipment.in:"
msgid "Supplier Shipment"
msgstr "Lieferposten von Lieferant"
-msgctxt "view:stock.shipment.in:0"
+msgctxt "view:stock.shipment.in:"
msgid "Supplier Shipments"
msgstr "Lieferposten von Lieferanten"
-msgctxt "view:stock.shipment.internal.assign.assign_failed:0"
-msgid "Moves"
-msgstr "Bewegungen"
-
-msgctxt "view:stock.shipment.internal.assign.assign_failed:0"
+msgctxt "view:stock.shipment.internal.assign.failed:"
msgid "Unable to Assign"
msgstr "Fehlmenge Zuweisung"
-msgctxt "view:stock.shipment.internal.assign.assign_failed:0"
+msgctxt "view:stock.shipment.internal.assign.failed:"
msgid "Unable to assign those products:"
msgstr "Folgende Artikel können nicht zugewiesen werden:"
-msgctxt "view:stock.shipment.internal:0"
+msgctxt "view:stock.shipment.internal:"
msgid "Assign"
msgstr "Zuweisen"
-msgctxt "view:stock.shipment.internal:0"
+msgctxt "view:stock.shipment.internal:"
msgid "Cancel"
msgstr "Annullieren"
-msgctxt "view:stock.shipment.internal:0"
+msgctxt "view:stock.shipment.internal:"
msgid "Done"
msgstr "Erledigt"
-msgctxt "view:stock.shipment.internal:0"
+msgctxt "view:stock.shipment.internal:"
msgid "Draft"
msgstr "Entwurf"
-msgctxt "view:stock.shipment.internal:0"
+msgctxt "view:stock.shipment.internal:"
msgid "Force Assign"
msgstr "Zuweisung erzwingen"
-msgctxt "view:stock.shipment.internal:0"
+msgctxt "view:stock.shipment.internal:"
msgid "Internal Shipment"
msgstr "Interner Lieferposten"
-msgctxt "view:stock.shipment.internal:0"
+msgctxt "view:stock.shipment.internal:"
msgid "Internal Shipments"
msgstr "Interne Lieferposten"
-msgctxt "view:stock.shipment.internal:0"
+msgctxt "view:stock.shipment.internal:"
msgid "Reset to Draft"
msgstr "Auf Entwurf zurücksetzen"
-msgctxt "view:stock.shipment.internal:0"
+msgctxt "view:stock.shipment.internal:"
msgid "Set Done"
msgstr "Auf Erledigt setzen"
-msgctxt "view:stock.shipment.internal:0"
+msgctxt "view:stock.shipment.internal:"
msgid "Set Waiting"
msgstr "Auf Wartend setzen"
-msgctxt "view:stock.shipment.internal:0"
+msgctxt "view:stock.shipment.internal:"
msgid "Waiting"
msgstr "Wartend"
-msgctxt "view:stock.shipment.out.assign.assign_failed:0"
-msgid "Inventory Moves"
-msgstr "Bestandsänderungen"
-
-msgctxt "view:stock.shipment.out.assign.assign_failed:0"
+msgctxt "view:stock.shipment.out.assign.failed:"
msgid "Unable to Assign"
msgstr "Fehlmenge Zuweisung"
-msgctxt "view:stock.shipment.out.assign.assign_failed:0"
+msgctxt "view:stock.shipment.out.assign.failed:"
msgid "Unable to assign those products:"
msgstr "Folgende Artikel können nicht zugewiesen werden:"
-msgctxt "view:stock.shipment.out.return:0"
+msgctxt "view:stock.shipment.out.return:"
msgid "Cancel"
msgstr "Annullieren"
-msgctxt "view:stock.shipment.out.return:0"
+msgctxt "view:stock.shipment.out.return:"
msgid "Customer Return Shipment"
msgstr "Warenrücknahme Kunde"
-msgctxt "view:stock.shipment.out.return:0"
+msgctxt "view:stock.shipment.out.return:"
msgid "Customer Return Shipments"
msgstr "Warenrücknahmen (von Kunden)"
-msgctxt "view:stock.shipment.out.return:0"
+msgctxt "view:stock.shipment.out.return:"
msgid "Done"
msgstr "Erledigt"
-msgctxt "view:stock.shipment.out.return:0"
+msgctxt "view:stock.shipment.out.return:"
+msgid "Draft"
+msgstr "Entwurf"
+
+msgctxt "view:stock.shipment.out.return:"
msgid "Incoming Moves"
msgstr "Eingehende Bewegungen"
-msgctxt "view:stock.shipment.out.return:0"
+msgctxt "view:stock.shipment.out.return:"
msgid "Inventory Moves"
msgstr "Bestandsänderungen"
-msgctxt "view:stock.shipment.out.return:0"
+msgctxt "view:stock.shipment.out.return:"
msgid "Moves"
msgstr "Bewegungen"
-msgctxt "view:stock.shipment.out.return:0"
+msgctxt "view:stock.shipment.out.return:"
msgid "Received"
msgstr "Erhalten"
-msgctxt "view:stock.shipment.out.return:0"
+msgctxt "view:stock.shipment.out.return:"
msgid "Reset to Draft"
msgstr "Auf Entwurf zurücksetzen"
-msgctxt "view:stock.shipment.out:0"
+msgctxt "view:stock.shipment.out:"
msgid "Are you sure to force assignation?"
msgstr "Zuweisung wirklich erzwingen?"
-msgctxt "view:stock.shipment.out:0"
+msgctxt "view:stock.shipment.out:"
msgid "Assign"
msgstr "Zuweisen"
-msgctxt "view:stock.shipment.out:0"
+msgctxt "view:stock.shipment.out:"
msgid "Cancel"
msgstr "Annullieren"
-msgctxt "view:stock.shipment.out:0"
+msgctxt "view:stock.shipment.out:"
msgid "Customer Shipment"
msgstr "Lieferposten Kunde"
-msgctxt "view:stock.shipment.out:0"
+msgctxt "view:stock.shipment.out:"
msgid "Customer Shipments"
msgstr "Lieferposten an Kunden"
-msgctxt "view:stock.shipment.out:0"
+msgctxt "view:stock.shipment.out:"
msgid "Done"
msgstr "Erledigt"
-msgctxt "view:stock.shipment.out:0"
+msgctxt "view:stock.shipment.out:"
msgid "Draft"
msgstr "Entwurf"
-msgctxt "view:stock.shipment.out:0"
+msgctxt "view:stock.shipment.out:"
msgid "Force Assign"
msgstr "Zuweisung erzwingen"
-msgctxt "view:stock.shipment.out:0"
+msgctxt "view:stock.shipment.out:"
msgid "Inventory Moves"
msgstr "Bestandsänderungen"
-msgctxt "view:stock.shipment.out:0"
+msgctxt "view:stock.shipment.out:"
msgid "Make shipment"
msgstr "Packen"
-msgctxt "view:stock.shipment.out:0"
+msgctxt "view:stock.shipment.out:"
msgid "Outgoing Moves"
msgstr "Ausgehende Bewegungen"
-msgctxt "view:stock.shipment.out:0"
+msgctxt "view:stock.shipment.out:"
msgid "Reset to Draft"
msgstr "Auf Entwurf zurücksetzen"
-msgctxt "view:stock.shipment.out:0"
+msgctxt "view:stock.shipment.out:"
msgid "Set Done"
msgstr "Auf Erledigt setzen"
-msgctxt "view:stock.shipment.out:0"
+msgctxt "view:stock.shipment.out:"
msgid "Set Waiting"
msgstr "Auf Wartend setzen"
-msgctxt "view:stock.shipment.out:0"
+msgctxt "view:stock.shipment.out:"
msgid "Unpack"
msgstr "Entpackt"
-msgctxt "view:stock.shipment.out:0"
+msgctxt "view:stock.shipment.out:"
msgid "Waiting"
msgstr "Wartend"
-msgctxt "wizard_button:stock.location.open,init,end:0"
+msgctxt "wizard_button:product.by_location,start,end:"
msgid "Cancel"
msgstr "Abbrechen"
-msgctxt "wizard_button:stock.location.open,init,open:0"
+msgctxt "wizard_button:product.by_location,start,open:"
msgid "Open"
msgstr "Ãffnen"
-msgctxt "wizard_button:stock.product.open,init,end:0"
+msgctxt "wizard_button:stock.products_by_locations,start,end:"
msgid "Cancel"
msgstr "Abbrechen"
-msgctxt "wizard_button:stock.product.open,init,open:0"
+msgctxt "wizard_button:stock.products_by_locations,start,open:"
msgid "Open"
msgstr "Ãffnen"
-msgctxt "wizard_button:stock.shipment.in.return.assign,ask_force,end:0"
+msgctxt "wizard_button:stock.shipment.in.return.assign,failed,end:"
msgid "Ok"
msgstr "OK"
-msgctxt "wizard_button:stock.shipment.in.return.assign,ask_force,force:0"
+msgctxt "wizard_button:stock.shipment.in.return.assign,failed,force:"
msgid "Force Assign"
msgstr "Zuweisung erzwingen"
-msgctxt "wizard_button:stock.shipment.in.return.assign,assign_failed,end:0"
-msgid "Ok"
-msgstr "OK"
-
-msgctxt "wizard_button:stock.shipment.internal.assign,ask_force,end:0"
+msgctxt "wizard_button:stock.shipment.internal.assign,failed,end:"
msgid "Ok"
msgstr "OK"
-msgctxt "wizard_button:stock.shipment.internal.assign,ask_force,force:0"
+msgctxt "wizard_button:stock.shipment.internal.assign,failed,force:"
msgid "Force Assign"
msgstr "Zuweisung erzwingen"
-msgctxt "wizard_button:stock.shipment.internal.assign,assign_failed,end:0"
-msgid "Ok"
-msgstr "OK"
-
-msgctxt "wizard_button:stock.shipment.out.assign,ask_force,end:0"
+msgctxt "wizard_button:stock.shipment.out.assign,failed,end:"
msgid "Ok"
msgstr "OK"
-msgctxt "wizard_button:stock.shipment.out.assign,ask_force,force:0"
+msgctxt "wizard_button:stock.shipment.out.assign,failed,force:"
msgid "Force Assign"
msgstr "Zuweisung erzwingen"
-
-msgctxt "wizard_button:stock.shipment.out.assign,assign_failed,end:0"
-msgid "Ok"
-msgstr "OK"
diff --git a/locale/es_AR.po b/locale/es_AR.po
new file mode 100644
index 0000000..eb697c0
--- /dev/null
+++ b/locale/es_AR.po
@@ -0,0 +1,2274 @@
+#
+msgid ""
+msgstr "Content-Type: text/plain; charset=utf-8\n"
+
+msgctxt "error:product.template:"
+msgid ""
+"You cannot change the default uom for a product which is associated to stock"
+" moves."
+msgstr ""
+"No puede cambiar la UdM predeterminada de un producto que está asociado con "
+"movimientos de existencias."
+
+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 "¡Inventario \"%s\" debe ser cancelado antes de eliminar!"
+
+msgctxt "error:stock.location:"
+msgid ""
+"A location with existing moves cannot be changed to a type that does not "
+"support moves."
+msgstr ""
+"Una ubicación con movimientos no puede ser cambiado a un tipo que no soporte"
+" movimientos."
+
+msgctxt "error:stock.location:"
+msgid "Location \"%s\" must be a child of warehouse \"%s\"!"
+msgstr "¡La ubicación «%s» debe ser hijo del almacén «%s»!"
+
+msgctxt "error:stock.location:"
+msgid "You can not create recursive locations!"
+msgstr "¡No puede crear ubicaciones recursivas!"
+
+msgctxt "error:stock.move:"
+msgid "Internal move quantity must be positive"
+msgstr "Cantidad interna del movimiento debe ser positiva"
+
+msgctxt "error:stock.move:"
+msgid "Move can be on only one Shipment"
+msgstr "Un movimiento solo puede hacerse con un envio."
+
+msgctxt "error:stock.move:"
+msgid "Move quantity must be positive"
+msgstr "La cantidad a mover tiene que ser positiva"
+
+msgctxt "error:stock.move:"
+msgid "Source and destination location must be different"
+msgstr "Los lugares origen y destino deben ser distintos"
+
+msgctxt "error:stock.move:"
+msgid "You can not modify a move in the state: \"Assigned\", \"Done\" or \"Cancel\""
+msgstr ""
+"¡No puede modificar un movimiento en estado: \"Asignado\", \"Terminado\" o "
+"\"Cancelado\""
+
+msgctxt "error:stock.move:"
+msgid "You can not modify move in closed period!"
+msgstr "¡No puede modificar un movimiento en un perÃodo cerrado!"
+
+msgctxt "error:stock.move:"
+msgid "You can not set state to assigned!"
+msgstr "¡No puede establecer el estado como asignado!"
+
+msgctxt "error:stock.move:"
+msgid "You can not set state to done!"
+msgstr "¡No puede establecer el estado como terminado!"
+
+msgctxt "error:stock.move:"
+msgid "You can not set state to draft!"
+msgstr "¡No puede establecer el estado como borrador!"
+
+msgctxt "error:stock.move:"
+msgid "You can only delete draft or cancelled moves!"
+msgstr "¡Solamente puede borrar movimientos en borrador o cancelados!"
+
+msgctxt "error:stock.period:"
+msgid "You can not close a period in the future or today!"
+msgstr "¡No se puede cerrar un perÃodo en el futuro o hoy mismo!"
+
+msgctxt "error:stock.period:"
+msgid "You can not close a period when there is still assigned moves!"
+msgstr "¡No se puede cerrar un perÃodo cuando existen movimientos asignados!"
+
+msgctxt "error:stock.shipment.in.return:"
+msgid "Supplier Return Shipment \"%s\" must be cancelled before deletion!"
+msgstr ""
+"¡EnvÃo de devolución de proveedor \"%s\" debe ser cancelado antes de "
+"eliminar!"
+
+msgctxt "error:stock.shipment.in:"
+msgid ""
+"Incoming Moves must have the warehouse input location as destination "
+"location!"
+msgstr ""
+"¡Los movimientos de entrada deben tener la ubicación del almacén de entrada "
+"como la ubicación de destino!"
+
+msgctxt "error:stock.shipment.in:"
+msgid ""
+"Inventory Moves must have the warehouse input location as source location!"
+msgstr ""
+"¡Los movimientos de inventario deben tener la ubicación del almacén de "
+"entrada como la ubicación de origen!"
+
+msgctxt "error:stock.shipment.in:"
+msgid "Supplier Shipment \"%s\" must be cancelled before deletion!"
+msgstr "¡EnvÃo de proveedor \"%s\" debe ser cancelado antes de eliminar!"
+
+msgctxt "error:stock.shipment.internal:"
+msgid "Internal Shipment \"%s\" must be cancelled before deletion!"
+msgstr "¡EnvÃo interno \"%s\" debe ser cancelado antes de eliminar!"
+
+msgctxt "error:stock.shipment.out.return.create:"
+msgid "The shipment with code %s is not yet sent."
+msgstr "El paquete con código %s no ha sido enviado aún."
+
+msgctxt "error:stock.shipment.out.return.create:"
+msgid "You can not create return shipment"
+msgstr "No puede crear paquetes de retorno"
+
+msgctxt "error:stock.shipment.out.return:"
+msgid "Customer Return Shipment \"%s\" must be cancelled before deletion!"
+msgstr ""
+"¡EnvÃo de devolución de cliente \"%s\" debe ser cancelado antes de eliminar!"
+
+msgctxt "error:stock.shipment.out:"
+msgid "Customer Shipment \"%s\" must be cancelled before deletion!"
+msgstr "¡EnvÃo de cliente \"%s\" debe ser cancelado antes de eliminar!"
+
+msgctxt "field:party.address,delivery:"
+msgid "Delivery"
+msgstr "EnvÃo"
+
+msgctxt "field:party.party,customer_location:"
+msgid "Customer Location"
+msgstr "Ubicación del cliente"
+
+msgctxt "field:party.party,supplier_location:"
+msgid "Supplier Location"
+msgstr "Ubicación del proveedor"
+
+msgctxt "field:product.by_location.start,forecast_date:"
+msgid "At Date"
+msgstr "En la fecha"
+
+msgctxt "field:product.by_location.start,id:"
+msgid "ID"
+msgstr "ID"
+
+msgctxt "field:product.product,cost_value:"
+msgid "Cost Value"
+msgstr "Valor de costo"
+
+msgctxt "field:product.product,forecast_quantity:"
+msgid "Forecast Quantity"
+msgstr "Cantidad prevista"
+
+msgctxt "field:product.product,quantity:"
+msgid "Quantity"
+msgstr "Cantidad"
+
+msgctxt "field:product.template,cost_value:"
+msgid "Cost Value"
+msgstr "Valor de costo"
+
+msgctxt "field:product.template,forecast_quantity:"
+msgid "Forecast Quantity"
+msgstr "Cantidad prevista"
+
+msgctxt "field:product.template,quantity:"
+msgid "Quantity"
+msgstr "Cantidad"
+
+msgctxt "field:stock.configuration,create_date:"
+msgid "Create Date"
+msgstr "Fecha creación"
+
+msgctxt "field:stock.configuration,create_uid:"
+msgid "Create User"
+msgstr "Usuario creación"
+
+msgctxt "field:stock.configuration,id:"
+msgid "ID"
+msgstr "ID"
+
+msgctxt "field:stock.configuration,rec_name:"
+msgid "Name"
+msgstr "Nombre del campo"
+
+msgctxt "field:stock.configuration,shipment_in_return_sequence:"
+msgid "Supplier Return Shipment Sequence"
+msgstr "Secuencia de envÃo de devolución a proveedor"
+
+msgctxt "field:stock.configuration,shipment_in_sequence:"
+msgid "Supplier Shipment Sequence"
+msgstr "Secuencia de envÃo de proveedor"
+
+msgctxt "field:stock.configuration,shipment_internal_sequence:"
+msgid "Internal Shipment Sequence"
+msgstr "Secuencia de envÃo interno"
+
+msgctxt "field:stock.configuration,shipment_out_return_sequence:"
+msgid "Customer Return Shipment Sequence"
+msgstr "Secuencia de envÃo de devolución de cliente"
+
+msgctxt "field:stock.configuration,shipment_out_sequence:"
+msgid "Customer Shipment Sequence"
+msgstr "Secuencia de envÃo a cliente"
+
+msgctxt "field:stock.configuration,write_date:"
+msgid "Write Date"
+msgstr "Fecha modificación"
+
+msgctxt "field:stock.configuration,write_uid:"
+msgid "Write User"
+msgstr "Usuario modificación"
+
+msgctxt "field:stock.inventory,company:"
+msgid "Company"
+msgstr "Empresa"
+
+msgctxt "field:stock.inventory,create_date:"
+msgid "Create Date"
+msgstr "Fecha creación"
+
+msgctxt "field:stock.inventory,create_uid:"
+msgid "Create User"
+msgstr "Usuario creación"
+
+msgctxt "field:stock.inventory,date:"
+msgid "Date"
+msgstr "Fecha"
+
+msgctxt "field:stock.inventory,id:"
+msgid "ID"
+msgstr "ID"
+
+msgctxt "field:stock.inventory,lines:"
+msgid "Lines"
+msgstr "LÃneas"
+
+msgctxt "field:stock.inventory,location:"
+msgid "Location"
+msgstr "Ubicación"
+
+msgctxt "field:stock.inventory,lost_found:"
+msgid "Lost and Found"
+msgstr "Perdido y encontrado"
+
+msgctxt "field:stock.inventory,rec_name:"
+msgid "Name"
+msgstr "Nombre"
+
+msgctxt "field:stock.inventory,state:"
+msgid "State"
+msgstr "Estado"
+
+msgctxt "field:stock.inventory,write_date:"
+msgid "Write Date"
+msgstr "Fecha modificación"
+
+msgctxt "field:stock.inventory,write_uid:"
+msgid "Write User"
+msgstr "Usuario modificación"
+
+msgctxt "field:stock.inventory.line,create_date:"
+msgid "Create Date"
+msgstr "Fecha creación"
+
+msgctxt "field:stock.inventory.line,create_uid:"
+msgid "Create User"
+msgstr "Usuario creación"
+
+msgctxt "field:stock.inventory.line,expected_quantity:"
+msgid "Expected Quantity"
+msgstr "Cantidad esperada"
+
+msgctxt "field:stock.inventory.line,id:"
+msgid "ID"
+msgstr "ID"
+
+msgctxt "field:stock.inventory.line,inventory:"
+msgid "Inventory"
+msgstr "Inventario"
+
+msgctxt "field:stock.inventory.line,move:"
+msgid "Move"
+msgstr "Movimiento"
+
+msgctxt "field:stock.inventory.line,product:"
+msgid "Product"
+msgstr "Producto"
+
+msgctxt "field:stock.inventory.line,quantity:"
+msgid "Quantity"
+msgstr "Cantidad"
+
+msgctxt "field:stock.inventory.line,rec_name:"
+msgid "Name"
+msgstr "Nombre"
+
+msgctxt "field:stock.inventory.line,unit_digits:"
+msgid "Unit Digits"
+msgstr "DÃgitos de la unidad"
+
+msgctxt "field:stock.inventory.line,uom:"
+msgid "UOM"
+msgstr "UdM"
+
+msgctxt "field:stock.inventory.line,write_date:"
+msgid "Write Date"
+msgstr "Fecha modificación"
+
+msgctxt "field:stock.inventory.line,write_uid:"
+msgid "Write User"
+msgstr "Usuario modificación"
+
+msgctxt "field:stock.location,active:"
+msgid "Active"
+msgstr "Activo"
+
+msgctxt "field:stock.location,address:"
+msgid "Address"
+msgstr "Direcciones"
+
+msgctxt "field:stock.location,childs:"
+msgid "Children"
+msgstr "Hijos"
+
+msgctxt "field:stock.location,code:"
+msgid "Code"
+msgstr "Código"
+
+msgctxt "field:stock.location,cost_value:"
+msgid "Cost Value"
+msgstr "Valor de costo"
+
+msgctxt "field:stock.location,create_date:"
+msgid "Create Date"
+msgstr "Fecha creación"
+
+msgctxt "field:stock.location,create_uid:"
+msgid "Create User"
+msgstr "Usuario creación"
+
+msgctxt "field:stock.location,forecast_quantity:"
+msgid "Forecast Quantity"
+msgstr "Cantidad prevista"
+
+msgctxt "field:stock.location,id:"
+msgid "ID"
+msgstr "ID"
+
+msgctxt "field:stock.location,input_location:"
+msgid "Input"
+msgstr "Entrada"
+
+msgctxt "field:stock.location,left:"
+msgid "Left"
+msgstr "Izquierda"
+
+msgctxt "field:stock.location,name:"
+msgid "Name"
+msgstr "Nombre"
+
+msgctxt "field:stock.location,output_location:"
+msgid "Output"
+msgstr "Salida"
+
+msgctxt "field:stock.location,parent:"
+msgid "Parent"
+msgstr "Padre"
+
+msgctxt "field:stock.location,quantity:"
+msgid "Quantity"
+msgstr "Cantidad"
+
+msgctxt "field:stock.location,rec_name:"
+msgid "Name"
+msgstr "Nombre"
+
+msgctxt "field:stock.location,right:"
+msgid "Right"
+msgstr "Derecha"
+
+msgctxt "field:stock.location,storage_location:"
+msgid "Storage"
+msgstr "Almacén"
+
+msgctxt "field:stock.location,type:"
+msgid "Location type"
+msgstr "Tipo de ubicación"
+
+msgctxt "field:stock.location,write_date:"
+msgid "Write Date"
+msgstr "Fecha modificación"
+
+msgctxt "field:stock.location,write_uid:"
+msgid "Write User"
+msgstr "Usuario modificación"
+
+msgctxt "field:stock.move,company:"
+msgid "Company"
+msgstr "Empresa"
+
+msgctxt "field:stock.move,cost_price:"
+msgid "Cost Price"
+msgstr "Precio de costo"
+
+msgctxt "field:stock.move,create_date:"
+msgid "Create Date"
+msgstr "Fecha creación"
+
+msgctxt "field:stock.move,create_uid:"
+msgid "Create User"
+msgstr "Usuario creación"
+
+msgctxt "field:stock.move,currency:"
+msgid "Currency"
+msgstr "Divisa"
+
+msgctxt "field:stock.move,effective_date:"
+msgid "Effective Date"
+msgstr "Fecha efectiva"
+
+msgctxt "field:stock.move,from_location:"
+msgid "From Location"
+msgstr "Desde ubicación"
+
+msgctxt "field:stock.move,id:"
+msgid "ID"
+msgstr "ID"
+
+msgctxt "field:stock.move,internal_quantity:"
+msgid "Internal Quantity"
+msgstr "Cantidad interna"
+
+msgctxt "field:stock.move,planned_date:"
+msgid "Planned Date"
+msgstr "Fecha estimada"
+
+msgctxt "field:stock.move,product:"
+msgid "Product"
+msgstr "Producto"
+
+msgctxt "field:stock.move,product_uom_category:"
+msgid "Product Uom Category"
+msgstr "CategorÃa UdM del producto"
+
+msgctxt "field:stock.move,quantity:"
+msgid "Quantity"
+msgstr "Cantidad"
+
+msgctxt "field:stock.move,rec_name:"
+msgid "Name"
+msgstr "Nombre"
+
+msgctxt "field:stock.move,shipment_in:"
+msgid "Supplier Shipment"
+msgstr "EnvÃo del proveedor"
+
+msgctxt "field:stock.move,shipment_in_return:"
+msgid "Supplier Return Shipment"
+msgstr "Envio de devolución a proveedor"
+
+msgctxt "field:stock.move,shipment_internal:"
+msgid "Internal Shipment"
+msgstr "EnvÃo interno"
+
+msgctxt "field:stock.move,shipment_out:"
+msgid "Customer Shipment"
+msgstr "EnvÃo a cliente"
+
+msgctxt "field:stock.move,shipment_out_return:"
+msgid "Customer Return Shipment"
+msgstr "Envio de devolución de cliente"
+
+msgctxt "field:stock.move,state:"
+msgid "State"
+msgstr "Estado"
+
+msgctxt "field:stock.move,to_location:"
+msgid "To Location"
+msgstr "A ubicación"
+
+msgctxt "field:stock.move,unit_digits:"
+msgid "Unit Digits"
+msgstr "DÃgitos de unidad"
+
+msgctxt "field:stock.move,unit_price:"
+msgid "Unit Price"
+msgstr "Precio unitario"
+
+msgctxt "field:stock.move,unit_price_required:"
+msgid "Unit Price Required"
+msgstr "Requiere precio unitario"
+
+msgctxt "field:stock.move,uom:"
+msgid "Uom"
+msgstr "UdM"
+
+msgctxt "field:stock.move,write_date:"
+msgid "Write Date"
+msgstr "Fecha modificación"
+
+msgctxt "field:stock.move,write_uid:"
+msgid "Write User"
+msgstr "Usuario modificación"
+
+msgctxt "field:stock.period,caches:"
+msgid "Caches"
+msgstr "Cachés"
+
+msgctxt "field:stock.period,company:"
+msgid "Company"
+msgstr "Empresa"
+
+msgctxt "field:stock.period,create_date:"
+msgid "Create Date"
+msgstr "Fecha creación"
+
+msgctxt "field:stock.period,create_uid:"
+msgid "Create User"
+msgstr "Usuario creación"
+
+msgctxt "field:stock.period,date:"
+msgid "Date"
+msgstr "Fecha"
+
+msgctxt "field:stock.period,id:"
+msgid "ID"
+msgstr "ID"
+
+msgctxt "field:stock.period,rec_name:"
+msgid "Name"
+msgstr "Nombre del campo"
+
+msgctxt "field:stock.period,state:"
+msgid "State"
+msgstr "Estado"
+
+msgctxt "field:stock.period,write_date:"
+msgid "Write Date"
+msgstr "Fecha modificación"
+
+msgctxt "field:stock.period,write_uid:"
+msgid "Write User"
+msgstr "Usuario modificación"
+
+msgctxt "field:stock.period.cache,create_date:"
+msgid "Create Date"
+msgstr "Fecha creación"
+
+msgctxt "field:stock.period.cache,create_uid:"
+msgid "Create User"
+msgstr "Usuario creación"
+
+msgctxt "field:stock.period.cache,id:"
+msgid "ID"
+msgstr "ID"
+
+msgctxt "field:stock.period.cache,internal_quantity:"
+msgid "Internal Quantity"
+msgstr "Cantidad interna"
+
+msgctxt "field:stock.period.cache,location:"
+msgid "Location"
+msgstr "Ubicación"
+
+msgctxt "field:stock.period.cache,period:"
+msgid "Period"
+msgstr "PerÃodo"
+
+msgctxt "field:stock.period.cache,product:"
+msgid "Product"
+msgstr "Producto"
+
+msgctxt "field:stock.period.cache,rec_name:"
+msgid "Name"
+msgstr "Nombre del campo"
+
+msgctxt "field:stock.period.cache,write_date:"
+msgid "Write Date"
+msgstr "Fecha modificación"
+
+msgctxt "field:stock.period.cache,write_uid:"
+msgid "Write User"
+msgstr "Usuario modificación"
+
+msgctxt "field:stock.products_by_locations.start,forecast_date:"
+msgid "At Date"
+msgstr "En la fecha"
+
+msgctxt "field:stock.products_by_locations.start,id:"
+msgid "ID"
+msgstr "ID"
+
+msgctxt "field:stock.shipment.in,code:"
+msgid "Code"
+msgstr "Código"
+
+msgctxt "field:stock.shipment.in,company:"
+msgid "Company"
+msgstr "Empresa"
+
+msgctxt "field:stock.shipment.in,contact_address:"
+msgid "Contact Address"
+msgstr "Dirección de contacto"
+
+msgctxt "field:stock.shipment.in,create_date:"
+msgid "Create Date"
+msgstr "Fecha creación"
+
+msgctxt "field:stock.shipment.in,create_uid:"
+msgid "Create User"
+msgstr "Usuario creación"
+
+msgctxt "field:stock.shipment.in,effective_date:"
+msgid "Effective Date"
+msgstr "Fecha efectiva"
+
+msgctxt "field:stock.shipment.in,id:"
+msgid "ID"
+msgstr "ID"
+
+msgctxt "field:stock.shipment.in,incoming_moves:"
+msgid "Incoming Moves"
+msgstr "Movimientos de entrada"
+
+msgctxt "field:stock.shipment.in,inventory_moves:"
+msgid "Inventory Moves"
+msgstr "Movimientos de inventario"
+
+msgctxt "field:stock.shipment.in,moves:"
+msgid "Moves"
+msgstr "Movimientos"
+
+msgctxt "field:stock.shipment.in,planned_date:"
+msgid "Planned Date"
+msgstr "Fecha estimada"
+
+msgctxt "field:stock.shipment.in,rec_name:"
+msgid "Name"
+msgstr "Nombre"
+
+msgctxt "field:stock.shipment.in,reference:"
+msgid "Reference"
+msgstr "Referencia"
+
+msgctxt "field:stock.shipment.in,state:"
+msgid "State"
+msgstr "Estado"
+
+msgctxt "field:stock.shipment.in,supplier:"
+msgid "Supplier"
+msgstr "Proveedor"
+
+msgctxt "field:stock.shipment.in,supplier_location:"
+msgid "Supplier Location"
+msgstr "Ubicación del proveedor"
+
+msgctxt "field:stock.shipment.in,warehouse:"
+msgid "Warehouse"
+msgstr "Almacén"
+
+msgctxt "field:stock.shipment.in,warehouse_input:"
+msgid "Warehouse Input"
+msgstr "Almacén de entrada"
+
+msgctxt "field:stock.shipment.in,warehouse_storage:"
+msgid "Warehouse Storage"
+msgstr "Depósito de almacenamiento"
+
+msgctxt "field:stock.shipment.in,write_date:"
+msgid "Write Date"
+msgstr "Fecha modificación"
+
+msgctxt "field:stock.shipment.in,write_uid:"
+msgid "Write User"
+msgstr "Usuario modificación"
+
+msgctxt "field:stock.shipment.in.return,code:"
+msgid "Code"
+msgstr "Código"
+
+msgctxt "field:stock.shipment.in.return,company:"
+msgid "Company"
+msgstr "Empresa"
+
+msgctxt "field:stock.shipment.in.return,create_date:"
+msgid "Create Date"
+msgstr "Fecha creación"
+
+msgctxt "field:stock.shipment.in.return,create_uid:"
+msgid "Create User"
+msgstr "Usuario creación"
+
+msgctxt "field:stock.shipment.in.return,effective_date:"
+msgid "Effective Date"
+msgstr "Fecha efectiva"
+
+msgctxt "field:stock.shipment.in.return,from_location:"
+msgid "From Location"
+msgstr "Desde ubicación"
+
+msgctxt "field:stock.shipment.in.return,id:"
+msgid "ID"
+msgstr "ID"
+
+msgctxt "field:stock.shipment.in.return,moves:"
+msgid "Moves"
+msgstr "Movimientos"
+
+msgctxt "field:stock.shipment.in.return,planned_date:"
+msgid "Planned Date"
+msgstr "Fecha estimada"
+
+msgctxt "field:stock.shipment.in.return,rec_name:"
+msgid "Name"
+msgstr "Nombre"
+
+msgctxt "field:stock.shipment.in.return,reference:"
+msgid "Reference"
+msgstr "Referencia"
+
+msgctxt "field:stock.shipment.in.return,state:"
+msgid "State"
+msgstr "Estado"
+
+msgctxt "field:stock.shipment.in.return,to_location:"
+msgid "To Location"
+msgstr "A ubicación"
+
+msgctxt "field:stock.shipment.in.return,write_date:"
+msgid "Write Date"
+msgstr "Fecha modificación"
+
+msgctxt "field:stock.shipment.in.return,write_uid:"
+msgid "Write User"
+msgstr "Usuario modificación"
+
+msgctxt "field:stock.shipment.in.return.assign.failed,id:"
+msgid "ID"
+msgstr "ID"
+
+msgctxt "field:stock.shipment.in.return.assign.failed,moves:"
+msgid "Moves"
+msgstr "Movimientos"
+
+msgctxt "field:stock.shipment.internal,code:"
+msgid "Code"
+msgstr "Código"
+
+msgctxt "field:stock.shipment.internal,company:"
+msgid "Company"
+msgstr "Empresa"
+
+msgctxt "field:stock.shipment.internal,create_date:"
+msgid "Create Date"
+msgstr "Fecha creación"
+
+msgctxt "field:stock.shipment.internal,create_uid:"
+msgid "Create User"
+msgstr "Usuario creación"
+
+msgctxt "field:stock.shipment.internal,effective_date:"
+msgid "Effective Date"
+msgstr "Fecha efectiva"
+
+msgctxt "field:stock.shipment.internal,from_location:"
+msgid "From Location"
+msgstr "Desde ubicación"
+
+msgctxt "field:stock.shipment.internal,id:"
+msgid "ID"
+msgstr "ID"
+
+msgctxt "field:stock.shipment.internal,moves:"
+msgid "Moves"
+msgstr "Movimientos"
+
+msgctxt "field:stock.shipment.internal,planned_date:"
+msgid "Planned Date"
+msgstr "Fecha estimada"
+
+msgctxt "field:stock.shipment.internal,rec_name:"
+msgid "Name"
+msgstr "Nombre"
+
+msgctxt "field:stock.shipment.internal,reference:"
+msgid "Reference"
+msgstr "Referencia"
+
+msgctxt "field:stock.shipment.internal,state:"
+msgid "State"
+msgstr "Estado"
+
+msgctxt "field:stock.shipment.internal,to_location:"
+msgid "To Location"
+msgstr "A ubicación"
+
+msgctxt "field:stock.shipment.internal,write_date:"
+msgid "Write Date"
+msgstr "Fecha modificación"
+
+msgctxt "field:stock.shipment.internal,write_uid:"
+msgid "Write User"
+msgstr "Usuario modificación"
+
+msgctxt "field:stock.shipment.internal.assign.failed,id:"
+msgid "ID"
+msgstr "ID"
+
+msgctxt "field:stock.shipment.internal.assign.failed,moves:"
+msgid "Moves"
+msgstr "Movimientos"
+
+msgctxt "field:stock.shipment.out,code:"
+msgid "Code"
+msgstr "Código"
+
+msgctxt "field:stock.shipment.out,company:"
+msgid "Company"
+msgstr "Empresa"
+
+msgctxt "field:stock.shipment.out,create_date:"
+msgid "Create Date"
+msgstr "Fecha creación"
+
+msgctxt "field:stock.shipment.out,create_uid:"
+msgid "Create User"
+msgstr "Usuario creación"
+
+msgctxt "field:stock.shipment.out,customer:"
+msgid "Customer"
+msgstr "Cliente"
+
+msgctxt "field:stock.shipment.out,customer_location:"
+msgid "Customer Location"
+msgstr "Ubicación del cliente"
+
+msgctxt "field:stock.shipment.out,delivery_address:"
+msgid "Delivery Address"
+msgstr "Dirección de envÃo"
+
+msgctxt "field:stock.shipment.out,effective_date:"
+msgid "Effective Date"
+msgstr "Fecha efectiva"
+
+msgctxt "field:stock.shipment.out,id:"
+msgid "ID"
+msgstr "ID"
+
+msgctxt "field:stock.shipment.out,inventory_moves:"
+msgid "Inventory Moves"
+msgstr "Movimientos de inventario"
+
+msgctxt "field:stock.shipment.out,moves:"
+msgid "Moves"
+msgstr "Movimientos"
+
+msgctxt "field:stock.shipment.out,outgoing_moves:"
+msgid "Outgoing Moves"
+msgstr "Movimientos de salida"
+
+msgctxt "field:stock.shipment.out,planned_date:"
+msgid "Planned Date"
+msgstr "Fecha estimada"
+
+msgctxt "field:stock.shipment.out,rec_name:"
+msgid "Name"
+msgstr "Nombre"
+
+msgctxt "field:stock.shipment.out,reference:"
+msgid "Reference"
+msgstr "Referencia"
+
+msgctxt "field:stock.shipment.out,state:"
+msgid "State"
+msgstr "Estado"
+
+msgctxt "field:stock.shipment.out,warehouse:"
+msgid "Warehouse"
+msgstr "Almacén"
+
+msgctxt "field:stock.shipment.out,warehouse_output:"
+msgid "Warehouse Output"
+msgstr "Almacén de salida"
+
+msgctxt "field:stock.shipment.out,warehouse_storage:"
+msgid "Warehouse Storage"
+msgstr "Depósito de almacenamiento"
+
+msgctxt "field:stock.shipment.out,write_date:"
+msgid "Write Date"
+msgstr "Fecha modificación"
+
+msgctxt "field:stock.shipment.out,write_uid:"
+msgid "Write User"
+msgstr "Usuario modificación"
+
+msgctxt "field:stock.shipment.out.assign.failed,id:"
+msgid "ID"
+msgstr "ID"
+
+msgctxt "field:stock.shipment.out.assign.failed,inventory_moves:"
+msgid "Inventory Moves"
+msgstr "Movimientos de inventario"
+
+msgctxt "field:stock.shipment.out.return,code:"
+msgid "Code"
+msgstr "Código"
+
+msgctxt "field:stock.shipment.out.return,company:"
+msgid "Company"
+msgstr "Empresa"
+
+msgctxt "field:stock.shipment.out.return,create_date:"
+msgid "Create Date"
+msgstr "Fecha creación"
+
+msgctxt "field:stock.shipment.out.return,create_uid:"
+msgid "Create User"
+msgstr "Usuario creación"
+
+msgctxt "field:stock.shipment.out.return,customer:"
+msgid "Customer"
+msgstr "Cliente"
+
+msgctxt "field:stock.shipment.out.return,customer_location:"
+msgid "Customer Location"
+msgstr "Ubicación del cliente"
+
+msgctxt "field:stock.shipment.out.return,delivery_address:"
+msgid "Delivery Address"
+msgstr "Dirección de envÃo"
+
+msgctxt "field:stock.shipment.out.return,effective_date:"
+msgid "Effective Date"
+msgstr "Fecha efectiva"
+
+msgctxt "field:stock.shipment.out.return,id:"
+msgid "ID"
+msgstr "ID"
+
+msgctxt "field:stock.shipment.out.return,incoming_moves:"
+msgid "Incoming Moves"
+msgstr "Movimientos de entrada"
+
+msgctxt "field:stock.shipment.out.return,inventory_moves:"
+msgid "Inventory Moves"
+msgstr "Movimientos de inventario"
+
+msgctxt "field:stock.shipment.out.return,moves:"
+msgid "Moves"
+msgstr "Movimientos"
+
+msgctxt "field:stock.shipment.out.return,planned_date:"
+msgid "Planned Date"
+msgstr "Fecha estimada"
+
+msgctxt "field:stock.shipment.out.return,rec_name:"
+msgid "Name"
+msgstr "Nombre"
+
+msgctxt "field:stock.shipment.out.return,reference:"
+msgid "Reference"
+msgstr "Referencia"
+
+msgctxt "field:stock.shipment.out.return,state:"
+msgid "State"
+msgstr "Estado"
+
+msgctxt "field:stock.shipment.out.return,warehouse:"
+msgid "Warehouse"
+msgstr "Almacén"
+
+msgctxt "field:stock.shipment.out.return,warehouse_input:"
+msgid "Warehouse Input"
+msgstr "Almacén de entrada"
+
+msgctxt "field:stock.shipment.out.return,warehouse_storage:"
+msgid "Warehouse Storage"
+msgstr "Depósito de almacenamiento"
+
+msgctxt "field:stock.shipment.out.return,write_date:"
+msgid "Write Date"
+msgstr "Fecha modificación"
+
+msgctxt "field:stock.shipment.out.return,write_uid:"
+msgid "Write User"
+msgstr "Usuario modificación"
+
+msgctxt "help:party.party,customer_location:"
+msgid "The default destination location when sending products to the party."
+msgstr ""
+"El lugar de destino predeterminado cuando se envian productos a la entidad."
+
+msgctxt "help:party.party,supplier_location:"
+msgid "The default source location when receiving products from the party."
+msgstr ""
+"La ubicación de origen predeterminado cuando se reciben productos de la "
+"entidad."
+
+msgctxt "help:product.by_location.start,forecast_date:"
+msgid ""
+"Allow to compute expected stock quantities for this date.\n"
+"* An empty value is an infinite date in the future.\n"
+"* A date in the past will provide historical values."
+msgstr ""
+"Permite calcular las cantidades previstas en stock para esta fecha.\n"
+"* Un valor vacÃo es una fecha infinita en el futuro.\n"
+"* Una fecha del pasado proporcionará valores históricos."
+
+msgctxt "help:stock.products_by_locations.start,forecast_date:"
+msgid ""
+"Allow to compute expected stock quantities for this date.\n"
+"* An empty value is an infinite date in the future.\n"
+"* A date in the past will provide historical values."
+msgstr ""
+"Permite calcular las cantidades previstas en stock para esta fecha.\n"
+"* Un valor vacÃo es una fecha infinita en el futuro.\n"
+"* Una fecha del pasado proporcionará valores históricos."
+
+msgctxt "model:ir.action,name:act_inventory_form"
+msgid "Inventories"
+msgstr "Inventarios"
+
+msgctxt "model:ir.action,name:act_inventory_form_draft"
+msgid "Draft Inventories"
+msgstr "Inventarios en borrador"
+
+msgctxt "model:ir.action,name:act_location_form"
+msgid "Locations"
+msgstr "Editar ubicaciones"
+
+msgctxt "model:ir.action,name:act_location_quantity_tree"
+msgid "Location Quantity & Cost Value"
+msgstr "Existencias de producto"
+
+msgctxt "model:ir.action,name:act_location_tree"
+msgid "Locations"
+msgstr "Ubicaciones"
+
+msgctxt "model:ir.action,name:act_move_form"
+msgid "Moves"
+msgstr "Movimientos"
+
+msgctxt "model:ir.action,name:act_move_form_cust"
+msgid "Moves to Customers"
+msgstr "Movimientos hacia clientes"
+
+msgctxt "model:ir.action,name:act_move_form_supp"
+msgid "Moves from Suppliers"
+msgstr "Movimientos de proveedores"
+
+msgctxt "model:ir.action,name:act_move_form_supp_proceed"
+msgid "Moves from Suppliers Waiting Arrival"
+msgstr "Movimientos de proveedores en espera de llegada"
+
+msgctxt "model:ir.action,name:act_period_list"
+msgid "Periods"
+msgstr "PerÃodos"
+
+msgctxt "model:ir.action,name:act_products_by_locations"
+msgid "Products by Locations"
+msgstr "Productos por Ubicaciones"
+
+msgctxt "model:ir.action,name:act_shipment_in_draft"
+msgid "Draft Supplier Shipment"
+msgstr "EnvÃo de proveedor en borrador"
+
+msgctxt "model:ir.action,name:act_shipment_in_form"
+msgid "Supplier Shipments"
+msgstr "EnvÃos del proveedor"
+
+msgctxt "model:ir.action,name:act_shipment_in_form_received"
+msgid "Received Supplier shipments"
+msgstr "Paquetes recibidos de proveedores"
+
+msgctxt "model:ir.action,name:act_shipment_in_return_form"
+msgid "Supplier Return Shipments"
+msgstr "Envios de devolución a proveedor"
+
+msgctxt "model:ir.action,name:act_shipment_internal_assigned_form"
+msgid "Assigned Internal Shipments"
+msgstr "EnvÃos internos asignados"
+
+msgctxt "model:ir.action,name:act_shipment_internal_draft_form"
+msgid "Draft Internal Shipments"
+msgstr "EnvÃos internos en borrador"
+
+msgctxt "model:ir.action,name:act_shipment_internal_form"
+msgid "Internal Shipments"
+msgstr "EnvÃos internos"
+
+msgctxt "model:ir.action,name:act_shipment_internal_waiting_form"
+msgid "Internal Shipments Waiting Assignation"
+msgstr "EnvÃos internos esperando asignación"
+
+msgctxt "model:ir.action,name:act_shipment_out_form"
+msgid "Customer Shipments"
+msgstr "EnvÃos a cliente"
+
+msgctxt "model:ir.action,name:act_shipment_out_form2"
+msgid "Customer Shipments"
+msgstr "EnvÃos de cliente"
+
+msgctxt "model:ir.action,name:act_shipment_out_form3"
+msgid "Supplier Shipments"
+msgstr "Envios a proveedor"
+
+msgctxt "model:ir.action,name:act_shipment_out_form_assigned"
+msgid "Assigned Customer Shipments"
+msgstr "EnvÃos a clientes asignados"
+
+msgctxt "model:ir.action,name:act_shipment_out_form_ready"
+msgid "Customer Shipments Ready for Shipping"
+msgstr "EnvÃos a cliente listos para ser enviados"
+
+msgctxt "model:ir.action,name:act_shipment_out_form_waiting"
+msgid "Customer Shipments Waiting Assignation"
+msgstr "EnvÃos a cliente esperando asignación"
+
+msgctxt "model:ir.action,name:act_shipment_out_return_form"
+msgid "Customer Return Shipments"
+msgstr "Envios de devoluciones de cliente"
+
+msgctxt "model:ir.action,name:act_stock_configuration_form"
+msgid "Stock Configuration"
+msgstr "Configuración de Stock"
+
+msgctxt "model:ir.action,name:create_shipment_out_return"
+msgid "Create Return Shipment"
+msgstr "Crear envio de devolución"
+
+msgctxt "model:ir.action,name:report_shipment_in_restocking_list"
+msgid "Restocking List"
+msgstr "Lista de renovación de inventario"
+
+msgctxt "model:ir.action,name:report_shipment_internal"
+msgid "Internal Shipment"
+msgstr "EnvÃo interno"
+
+msgctxt "model:ir.action,name:report_shipment_out_delivery_note"
+msgid "Delivery Note"
+msgstr "Remito de envÃo"
+
+msgctxt "model:ir.action,name:report_shipment_out_picking_list"
+msgid "Picking List"
+msgstr "Lista de selección"
+
+msgctxt "model:ir.action,name:report_shipment_out_return_restocking_list"
+msgid "Restocking List"
+msgstr "Lista de renovación de inventario"
+
+msgctxt "model:ir.action,name:wizard_product_by_location"
+msgid "Product by Location"
+msgstr "Producto por Ubicación"
+
+msgctxt "model:ir.action,name:wizard_products_by_locations"
+msgid "Products by Locations"
+msgstr "Productos por Ubicaciones"
+
+msgctxt "model:ir.action,name:wizard_shipment_in_return_assign"
+msgid "Assign Purchase Return Shipment"
+msgstr "Asignar envio de devolución de compra"
+
+msgctxt "model:ir.action,name:wizard_shipment_internal_assign"
+msgid "Assign Shipment Internal"
+msgstr "Asignar envÃo interno"
+
+msgctxt "model:ir.action,name:wizard_shipment_out_assign"
+msgid "Assign Shipment Out"
+msgstr "Asignación de salida de envÃo"
+
+msgctxt "model:ir.sequence,name:sequence_shipment_in"
+msgid "Supplier Shipment"
+msgstr "EnvÃo de proveedor"
+
+msgctxt "model:ir.sequence,name:sequence_shipment_in_return"
+msgid "Supplier Return Shipment"
+msgstr "Envio de devolución a proveedor"
+
+msgctxt "model:ir.sequence,name:sequence_shipment_internal"
+msgid "Internal Shipment"
+msgstr "EnvÃo interno"
+
+msgctxt "model:ir.sequence,name:sequence_shipment_out"
+msgid "Customer Shipment"
+msgstr "EnvÃo a cliente"
+
+msgctxt "model:ir.sequence,name:sequence_shipment_out_return"
+msgid "Customer Return Shipment"
+msgstr "Envio de devolución de cliente"
+
+msgctxt "model:ir.sequence.type,name:sequence_type_shipment_in"
+msgid "Supplier Shipment"
+msgstr "EnvÃo de proveedor"
+
+msgctxt "model:ir.sequence.type,name:sequence_type_shipment_in_return"
+msgid "Supplier Return Shipment"
+msgstr "Envio de devolución a proveedor"
+
+msgctxt "model:ir.sequence.type,name:sequence_type_shipment_internal"
+msgid "Internal Shipment"
+msgstr "EnvÃo interno"
+
+msgctxt "model:ir.sequence.type,name:sequence_type_shipment_out"
+msgid "Customer Shipment"
+msgstr "EnvÃo a cliente"
+
+msgctxt "model:ir.sequence.type,name:sequence_type_shipment_out_return"
+msgid "Customer Return Shipment"
+msgstr "Envio de devolución de cliente"
+
+msgctxt "model:ir.ui.menu,name:menu_configuration"
+msgid "Configuration"
+msgstr "Configuración"
+
+msgctxt "model:ir.ui.menu,name:menu_inventory_form"
+msgid "Inventories"
+msgstr "Inventarios"
+
+msgctxt "model:ir.ui.menu,name:menu_inventory_form_draft"
+msgid "Draft Inventories"
+msgstr "Inventarios en borrador"
+
+msgctxt "model:ir.ui.menu,name:menu_location_form"
+msgid "Locations"
+msgstr "Editar ubicaciones"
+
+msgctxt "model:ir.ui.menu,name:menu_location_tree"
+msgid "Locations"
+msgstr "Ubicaciones"
+
+msgctxt "model:ir.ui.menu,name:menu_move_form"
+msgid "Moves"
+msgstr "Movimientos"
+
+msgctxt "model:ir.ui.menu,name:menu_move_form_cust"
+msgid "Moves to Customers"
+msgstr "Movimientos hacia clientes"
+
+msgctxt "model:ir.ui.menu,name:menu_move_form_supp"
+msgid "Moves from Suppliers"
+msgstr "Movimientos de proveedores"
+
+msgctxt "model:ir.ui.menu,name:menu_move_form_supp_proceed"
+msgid "Moves from Suppliers Waiting Arrival"
+msgstr "Movimientos de proveedores en espera de llegada"
+
+msgctxt "model:ir.ui.menu,name:menu_period_list"
+msgid "Periods"
+msgstr "PerÃodos"
+
+msgctxt "model:ir.ui.menu,name:menu_reporting"
+msgid "Reporting"
+msgstr "Informes"
+
+msgctxt "model:ir.ui.menu,name:menu_shipment_in_draft"
+msgid "Draft Supplier Shipment"
+msgstr "EnvÃo de proveedor en borrador"
+
+msgctxt "model:ir.ui.menu,name:menu_shipment_in_form"
+msgid "Supplier Shipments"
+msgstr "EnvÃos del proveedor"
+
+msgctxt "model:ir.ui.menu,name:menu_shipment_in_received"
+msgid "Received Supplier shipments"
+msgstr "Paquetes de proveedores recibidos"
+
+msgctxt "model:ir.ui.menu,name:menu_shipment_in_return_form"
+msgid "Supplier Return Shipments"
+msgstr "Envios de devolución a proveedor"
+
+msgctxt "model:ir.ui.menu,name:menu_shipment_internal_assigned_form"
+msgid "Assigned Internal Shipments"
+msgstr "EnvÃos internos asignados"
+
+msgctxt "model:ir.ui.menu,name:menu_shipment_internal_draft_form"
+msgid "Draft Internal Shipments"
+msgstr "EnvÃos Internos en borrador"
+
+msgctxt "model:ir.ui.menu,name:menu_shipment_internal_form"
+msgid "Internal Shipments"
+msgstr "EnvÃos internos"
+
+msgctxt "model:ir.ui.menu,name:menu_shipment_internal_waiting_form"
+msgid "Internal Shipments Waiting Assignation"
+msgstr "EnvÃo internos esperando asignación"
+
+msgctxt "model:ir.ui.menu,name:menu_shipment_out_assigned"
+msgid "Assigned Customer Shipments"
+msgstr "EnvÃos a clientes asignados"
+
+msgctxt "model:ir.ui.menu,name:menu_shipment_out_form"
+msgid "Customer Shipments"
+msgstr "EnvÃos al cliente"
+
+msgctxt "model:ir.ui.menu,name:menu_shipment_out_ready"
+msgid "Customer Shipments Ready for Shipping"
+msgstr "EnvÃos al cliente listos para su envio"
+
+msgctxt "model:ir.ui.menu,name:menu_shipment_out_return_form"
+msgid "Customer Return Shipments"
+msgstr "Envio de devolución de cliente"
+
+msgctxt "model:ir.ui.menu,name:menu_shipment_out_waiting"
+msgid "Customer Shipments Waiting Assignation"
+msgstr "EnvÃos a cliente esperando asignación"
+
+msgctxt "model:ir.ui.menu,name:menu_stock"
+msgid "Inventory & Stock"
+msgstr "Gestión de Inventarios"
+
+msgctxt "model:ir.ui.menu,name:menu_stock_configuration"
+msgid "Stock Configuration"
+msgstr "Configuración de Stock"
+
+msgctxt "model:product.by_location.start,name:"
+msgid "Product by Location"
+msgstr "Producto por Ubicación"
+
+msgctxt "model:res.group,name:group_stock"
+msgid "Stock"
+msgstr "Existencias"
+
+msgctxt "model:res.group,name:group_stock_admin"
+msgid "Stock Administration"
+msgstr "Administración de existencias"
+
+msgctxt "model:res.group,name:group_stock_force_assignment"
+msgid "Stock Force Assignment"
+msgstr "Asignación forzada de existencias"
+
+msgctxt "model:stock.configuration,name:"
+msgid "Stock Configuration"
+msgstr "Configuración de Stock"
+
+msgctxt "model:stock.inventory,name:"
+msgid "Stock Inventory"
+msgstr "Inventario de existencia"
+
+msgctxt "model:stock.inventory.line,name:"
+msgid "Stock Inventory Line"
+msgstr "LÃnea de existencia en Inventario "
+
+msgctxt "model:stock.location,name:"
+msgid "Stock Location"
+msgstr "Ubicación de existencia"
+
+msgctxt "model:stock.location,name:location_customer"
+msgid "Customer"
+msgstr "Cliente"
+
+msgctxt "model:stock.location,name:location_input"
+msgid "Input Zone"
+msgstr "Zona de entrada"
+
+msgctxt "model:stock.location,name:location_lost_found"
+msgid "Lost and Found"
+msgstr "Perdido y encontrado"
+
+msgctxt "model:stock.location,name:location_output"
+msgid "Output Zone"
+msgstr "Zona de salida"
+
+msgctxt "model:stock.location,name:location_storage"
+msgid "Storage Zone"
+msgstr "Zona de almacenamiento"
+
+msgctxt "model:stock.location,name:location_supplier"
+msgid "Supplier"
+msgstr "Proveedor"
+
+msgctxt "model:stock.location,name:location_warehouse"
+msgid "Warehouse"
+msgstr "Almacén"
+
+msgctxt "model:stock.move,name:"
+msgid "Stock Move"
+msgstr "Movimiento de existencias"
+
+msgctxt "model:stock.period,name:"
+msgid "Stock Period"
+msgstr "PerÃodo de stock"
+
+msgctxt "model:stock.period.cache,name:"
+msgid "stock.period.cache"
+msgstr "Caché de perÃodo de stock"
+
+msgctxt "model:stock.products_by_locations.start,name:"
+msgid "Products by Locations"
+msgstr "Productos por Ubicaciones"
+
+msgctxt "model:stock.shipment.in,name:"
+msgid "Supplier Shipment"
+msgstr "EnvÃo de proveedor"
+
+msgctxt "model:stock.shipment.in.return,name:"
+msgid "Supplier Return Shipment"
+msgstr "Envio de devolución a proveedor"
+
+msgctxt "model:stock.shipment.in.return.assign.failed,name:"
+msgid "Assign Supplier Return Shipment"
+msgstr "Asignar envio de devolución de proveedor"
+
+msgctxt "model:stock.shipment.internal,name:"
+msgid "Internal Shipment"
+msgstr "EnvÃo interno"
+
+msgctxt "model:stock.shipment.internal.assign.failed,name:"
+msgid "Assign Shipment Internal"
+msgstr "Asignar envÃo interno"
+
+msgctxt "model:stock.shipment.out,name:"
+msgid "Customer Shipment"
+msgstr "EnvÃo a cliente"
+
+msgctxt "model:stock.shipment.out.assign.failed,name:"
+msgid "Assign Shipment Out"
+msgstr "Asignación de salida de envÃo"
+
+msgctxt "model:stock.shipment.out.return,name:"
+msgid "Customer Return Shipment"
+msgstr "Envio de devolución de cliente"
+
+msgctxt "odt:stock.shipment.in.restocking_list:"
+msgid "/"
+msgstr "/"
+
+msgctxt "odt:stock.shipment.in.restocking_list:"
+msgid "Code:"
+msgstr "Código:"
+
+msgctxt "odt:stock.shipment.in.restocking_list:"
+msgid "E-Mail:"
+msgstr "Correo electrónico:"
+
+msgctxt "odt:stock.shipment.in.restocking_list:"
+msgid "From Location"
+msgstr "Desde ubicación"
+
+msgctxt "odt:stock.shipment.in.restocking_list:"
+msgid "Phone:"
+msgstr "Teléfono:"
+
+msgctxt "odt:stock.shipment.in.restocking_list:"
+msgid "Planned Date:"
+msgstr "Fecha planeada:"
+
+msgctxt "odt:stock.shipment.in.restocking_list:"
+msgid "Product"
+msgstr "Producto"
+
+msgctxt "odt:stock.shipment.in.restocking_list:"
+msgid "Quantity"
+msgstr "Cantidad"
+
+msgctxt "odt:stock.shipment.in.restocking_list:"
+msgid "Reference:"
+msgstr "Referencia:"
+
+msgctxt "odt:stock.shipment.in.restocking_list:"
+msgid "Restocking List"
+msgstr "Lista de renovación de existencias"
+
+msgctxt "odt:stock.shipment.in.restocking_list:"
+msgid "Supplier:"
+msgstr "Proveedor:"
+
+msgctxt "odt:stock.shipment.in.restocking_list:"
+msgid "To Location"
+msgstr "A ubicación"
+
+msgctxt "odt:stock.shipment.in.restocking_list:"
+msgid "VAT Number:"
+msgstr "CUIT:"
+
+msgctxt "odt:stock.shipment.in.restocking_list:"
+msgid "Warehouse:"
+msgstr "Almacén:"
+
+msgctxt "odt:stock.shipment.internal.report:"
+msgid "/"
+msgstr "/"
+
+msgctxt "odt:stock.shipment.internal.report:"
+msgid "Code:"
+msgstr "Código:"
+
+msgctxt "odt:stock.shipment.internal.report:"
+msgid "E-Mail:"
+msgstr "Correo electrónico:"
+
+msgctxt "odt:stock.shipment.internal.report:"
+msgid "From Location"
+msgstr "Desde ubicación"
+
+msgctxt "odt:stock.shipment.internal.report:"
+msgid "From Location:"
+msgstr "Desde ubicación:"
+
+msgctxt "odt:stock.shipment.internal.report:"
+msgid "Internal Shipment"
+msgstr "EnvÃo interno"
+
+msgctxt "odt:stock.shipment.internal.report:"
+msgid "Phone:"
+msgstr "Teléfono:"
+
+msgctxt "odt:stock.shipment.internal.report:"
+msgid "Planned Date:"
+msgstr "Fecha estimada:"
+
+msgctxt "odt:stock.shipment.internal.report:"
+msgid "Product"
+msgstr "Producto"
+
+msgctxt "odt:stock.shipment.internal.report:"
+msgid "Quantity"
+msgstr "Cantidad"
+
+msgctxt "odt:stock.shipment.internal.report:"
+msgid "Reference:"
+msgstr "Referencia:"
+
+msgctxt "odt:stock.shipment.internal.report:"
+msgid "To Location"
+msgstr "A ubicación"
+
+msgctxt "odt:stock.shipment.internal.report:"
+msgid "To Location:"
+msgstr "A ubicación:"
+
+msgctxt "odt:stock.shipment.internal.report:"
+msgid "VAT Number:"
+msgstr "CUIT:"
+
+msgctxt "odt:stock.shipment.out.delivery_note:"
+msgid "/"
+msgstr "/"
+
+msgctxt "odt:stock.shipment.out.delivery_note:"
+msgid "Customer Code:"
+msgstr "Código de cliente:"
+
+msgctxt "odt:stock.shipment.out.delivery_note:"
+msgid "Date:"
+msgstr "Fecha:"
+
+msgctxt "odt:stock.shipment.out.delivery_note:"
+msgid "Delivery Note"
+msgstr "Remito de envio"
+
+msgctxt "odt:stock.shipment.out.delivery_note:"
+msgid "E-Mail:"
+msgstr "Correo electrónico:"
+
+msgctxt "odt:stock.shipment.out.delivery_note:"
+msgid "Phone:"
+msgstr "Teléfono:"
+
+msgctxt "odt:stock.shipment.out.delivery_note:"
+msgid "Product"
+msgstr "Producto"
+
+msgctxt "odt:stock.shipment.out.delivery_note:"
+msgid "Quantity"
+msgstr "Cantidad"
+
+msgctxt "odt:stock.shipment.out.delivery_note:"
+msgid "Reference:"
+msgstr "Referencia:"
+
+msgctxt "odt:stock.shipment.out.delivery_note:"
+msgid "Shipment Number:"
+msgstr "Número de envÃo:"
+
+msgctxt "odt:stock.shipment.out.delivery_note:"
+msgid "VAT Number:"
+msgstr "CUIT:"
+
+msgctxt "odt:stock.shipment.out.picking_list:"
+msgid "/"
+msgstr "/"
+
+msgctxt "odt:stock.shipment.out.picking_list:"
+msgid "Code:"
+msgstr "Código:"
+
+msgctxt "odt:stock.shipment.out.picking_list:"
+msgid "Customer:"
+msgstr "Cliente:"
+
+msgctxt "odt:stock.shipment.out.picking_list:"
+msgid "E-Mail:"
+msgstr "Correo electrónico:"
+
+msgctxt "odt:stock.shipment.out.picking_list:"
+msgid "From Location"
+msgstr "Desde ubicación"
+
+msgctxt "odt:stock.shipment.out.picking_list:"
+msgid "Phone:"
+msgstr "Teléfono:"
+
+msgctxt "odt:stock.shipment.out.picking_list:"
+msgid "Picking List"
+msgstr "Lista de selección"
+
+msgctxt "odt:stock.shipment.out.picking_list:"
+msgid "Planned Date:"
+msgstr "Fecha estimada:"
+
+msgctxt "odt:stock.shipment.out.picking_list:"
+msgid "Product"
+msgstr "Producto"
+
+msgctxt "odt:stock.shipment.out.picking_list:"
+msgid "Quantity"
+msgstr "Cantidad"
+
+msgctxt "odt:stock.shipment.out.picking_list:"
+msgid "Reference:"
+msgstr "Referencia:"
+
+msgctxt "odt:stock.shipment.out.picking_list:"
+msgid "To Location"
+msgstr "A ubicación"
+
+msgctxt "odt:stock.shipment.out.picking_list:"
+msgid "VAT Number:"
+msgstr "CUIT:"
+
+msgctxt "odt:stock.shipment.out.picking_list:"
+msgid "Warehouse:"
+msgstr "Almacén:"
+
+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 "E-Mail:"
+msgstr "Correo electrónico:"
+
+msgctxt "odt:stock.shipment.out.return.restocking_list:"
+msgid "From Location"
+msgstr "De ubicación"
+
+msgctxt "odt:stock.shipment.out.return.restocking_list:"
+msgid "Phone:"
+msgstr "Teléfono:"
+
+msgctxt "odt:stock.shipment.out.return.restocking_list:"
+msgid "Planned Date:"
+msgstr "Fecha estimada:"
+
+msgctxt "odt:stock.shipment.out.return.restocking_list:"
+msgid "Product"
+msgstr "Producto"
+
+msgctxt "odt:stock.shipment.out.return.restocking_list:"
+msgid "Quantity"
+msgstr "Cantidad"
+
+msgctxt "odt:stock.shipment.out.return.restocking_list:"
+msgid "Reference:"
+msgstr "Referencia:"
+
+msgctxt "odt:stock.shipment.out.return.restocking_list:"
+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 ubicación"
+
+msgctxt "odt:stock.shipment.out.return.restocking_list:"
+msgid "VAT Number:"
+msgstr "CUIT:"
+
+msgctxt "odt:stock.shipment.out.return.restocking_list:"
+msgid "Warehouse:"
+msgstr "Almacén:"
+
+msgctxt "selection:stock.inventory,state:"
+msgid "Canceled"
+msgstr "Cancelado"
+
+msgctxt "selection:stock.inventory,state:"
+msgid "Done"
+msgstr "Terminado"
+
+msgctxt "selection:stock.inventory,state:"
+msgid "Draft"
+msgstr "Borrador"
+
+msgctxt "selection:stock.location,type:"
+msgid "Customer"
+msgstr "Cliente"
+
+msgctxt "selection:stock.location,type:"
+msgid "Lost and Found"
+msgstr "Perdido y encontrado"
+
+msgctxt "selection:stock.location,type:"
+msgid "Production"
+msgstr "Producción"
+
+msgctxt "selection:stock.location,type:"
+msgid "Storage"
+msgstr "Almacén"
+
+msgctxt "selection:stock.location,type:"
+msgid "Supplier"
+msgstr "Proveedor"
+
+msgctxt "selection:stock.location,type:"
+msgid "View"
+msgstr "Vista"
+
+msgctxt "selection:stock.location,type:"
+msgid "Warehouse"
+msgstr "Almacén"
+
+msgctxt "selection:stock.move,state:"
+msgid "Assigned"
+msgstr "Asignado"
+
+msgctxt "selection:stock.move,state:"
+msgid "Canceled"
+msgstr "Cancelado"
+
+msgctxt "selection:stock.move,state:"
+msgid "Done"
+msgstr "Terminado"
+
+msgctxt "selection:stock.move,state:"
+msgid "Draft"
+msgstr "Borrador"
+
+msgctxt "selection:stock.period,state:"
+msgid "Closed"
+msgstr "Cerrado"
+
+msgctxt "selection:stock.period,state:"
+msgid "Draft"
+msgstr "Borrador"
+
+msgctxt "selection:stock.shipment.in,state:"
+msgid "Canceled"
+msgstr "Cancelado"
+
+msgctxt "selection:stock.shipment.in,state:"
+msgid "Done"
+msgstr "Terminado"
+
+msgctxt "selection:stock.shipment.in,state:"
+msgid "Draft"
+msgstr "Borrador"
+
+msgctxt "selection:stock.shipment.in,state:"
+msgid "Received"
+msgstr "Recibido"
+
+msgctxt "selection:stock.shipment.in.return,state:"
+msgid "Assigned"
+msgstr "Asignado"
+
+msgctxt "selection:stock.shipment.in.return,state:"
+msgid "Canceled"
+msgstr "Cancelado"
+
+msgctxt "selection:stock.shipment.in.return,state:"
+msgid "Done"
+msgstr "Terminado"
+
+msgctxt "selection:stock.shipment.in.return,state:"
+msgid "Draft"
+msgstr "Borrador"
+
+msgctxt "selection:stock.shipment.in.return,state:"
+msgid "Waiting"
+msgstr "En espera"
+
+msgctxt "selection:stock.shipment.internal,state:"
+msgid "Assigned"
+msgstr "Asignado"
+
+msgctxt "selection:stock.shipment.internal,state:"
+msgid "Canceled"
+msgstr "Cancelado"
+
+msgctxt "selection:stock.shipment.internal,state:"
+msgid "Done"
+msgstr "Terminado"
+
+msgctxt "selection:stock.shipment.internal,state:"
+msgid "Draft"
+msgstr "Borrador"
+
+msgctxt "selection:stock.shipment.internal,state:"
+msgid "Waiting"
+msgstr "En espera"
+
+msgctxt "selection:stock.shipment.out,state:"
+msgid "Assigned"
+msgstr "Asignado"
+
+msgctxt "selection:stock.shipment.out,state:"
+msgid "Canceled"
+msgstr "Cancelado"
+
+msgctxt "selection:stock.shipment.out,state:"
+msgid "Done"
+msgstr "Terminado"
+
+msgctxt "selection:stock.shipment.out,state:"
+msgid "Draft"
+msgstr "Borrador"
+
+msgctxt "selection:stock.shipment.out,state:"
+msgid "Packed"
+msgstr "Empaquetado"
+
+msgctxt "selection:stock.shipment.out,state:"
+msgid "Waiting"
+msgstr "En espera"
+
+msgctxt "selection:stock.shipment.out.return,state:"
+msgid "Canceled"
+msgstr "Cancelado"
+
+msgctxt "selection:stock.shipment.out.return,state:"
+msgid "Done"
+msgstr "Terminado"
+
+msgctxt "selection:stock.shipment.out.return,state:"
+msgid "Draft"
+msgstr "Borrador"
+
+msgctxt "selection:stock.shipment.out.return,state:"
+msgid "Received"
+msgstr "Recibido"
+
+msgctxt "view:party.party:"
+msgid "Stock"
+msgstr "Existencias"
+
+msgctxt "view:party.party:"
+msgid "_Stock"
+msgstr "_Existencias"
+
+msgctxt "view:product.by_location.start:"
+msgid "Product by Location"
+msgstr "Producto por Ubicación"
+
+msgctxt "view:product.product:"
+msgid "Products"
+msgstr "Productos"
+
+msgctxt "view:stock.configuration:"
+msgid "Stock Configuration"
+msgstr "Configuración de Stock"
+
+msgctxt "view:stock.inventory.line:"
+msgid "Inventory Line"
+msgstr "LÃnea de inventario"
+
+msgctxt "view:stock.inventory.line:"
+msgid "Inventory Lines"
+msgstr "LÃneas de inventario"
+
+msgctxt "view:stock.inventory:"
+msgid "Add an inventory line for each missing products"
+msgstr "Añadir una lÃnea de inventario por cada producto que falta"
+
+msgctxt "view:stock.inventory:"
+msgid "All generated moves will be cancelled!"
+msgstr "¡Se cancelarán todos los movimientos generados!"
+
+msgctxt "view:stock.inventory:"
+msgid "Cancel"
+msgstr "Cancelar"
+
+msgctxt "view:stock.inventory:"
+msgid "Complete Inventory"
+msgstr "Inventario completo"
+
+msgctxt "view:stock.inventory:"
+msgid "Confirm"
+msgstr "Confirmar"
+
+msgctxt "view:stock.inventory:"
+msgid "Inventories"
+msgstr "Inventarios"
+
+msgctxt "view:stock.inventory:"
+msgid "Inventory"
+msgstr "Inventario"
+
+msgctxt "view:stock.inventory:"
+msgid "Re-Open"
+msgstr "Reabrir"
+
+msgctxt "view:stock.location:"
+msgid "Location"
+msgstr "Ubicación"
+
+msgctxt "view:stock.location:"
+msgid "Location Quantity"
+msgstr "Existencias en la ubicación"
+
+msgctxt "view:stock.location:"
+msgid "Locations"
+msgstr "Ubicaciones"
+
+msgctxt "view:stock.location:"
+msgid "Product Stock"
+msgstr "Existencias del producto"
+
+msgctxt "view:stock.move:"
+msgid "Cancel"
+msgstr "Cancelar"
+
+msgctxt "view:stock.move:"
+msgid "Move"
+msgstr "Movimiento"
+
+msgctxt "view:stock.move:"
+msgid "Moves"
+msgstr "Movimientos"
+
+msgctxt "view:stock.move:"
+msgid "Set Done"
+msgstr "Marcar como terminado"
+
+msgctxt "view:stock.move:"
+msgid "Set Draft"
+msgstr "Marcar como borrador"
+
+msgctxt "view:stock.period.cache:"
+msgid "Period Cache"
+msgstr "Caché de perÃodo"
+
+msgctxt "view:stock.period.cache:"
+msgid "Period Caches"
+msgstr "Cachés de periodo"
+
+msgctxt "view:stock.period:"
+msgid "Close"
+msgstr "Cerrar"
+
+msgctxt "view:stock.period:"
+msgid "Draft"
+msgstr "Borrador"
+
+msgctxt "view:stock.period:"
+msgid "Period"
+msgstr "PerÃodo"
+
+msgctxt "view:stock.period:"
+msgid "Periods"
+msgstr "PerÃodos"
+
+msgctxt "view:stock.products_by_locations.start:"
+msgid "Products by Locations"
+msgstr "Productos por Ubicaciones"
+
+msgctxt "view:stock.shipment.in.return.assign.failed:"
+msgid "Unable to Assign"
+msgstr "No se puede asignar"
+
+msgctxt "view:stock.shipment.in.return.assign.failed:"
+msgid "Unable to assign those products:"
+msgstr "No se puede asignar estos productos:"
+
+msgctxt "view:stock.shipment.in.return:"
+msgid "Assign"
+msgstr "Asignar"
+
+msgctxt "view:stock.shipment.in.return:"
+msgid "Cancel"
+msgstr "Cancelar"
+
+msgctxt "view:stock.shipment.in.return:"
+msgid "Done"
+msgstr "Terminado"
+
+msgctxt "view:stock.shipment.in.return:"
+msgid "Draft"
+msgstr "Borrador"
+
+msgctxt "view:stock.shipment.in.return:"
+msgid "Reset to Draft"
+msgstr "Restablecer a borrador"
+
+msgctxt "view:stock.shipment.in.return:"
+msgid "Supplier Return Shipment"
+msgstr "Envio de devolución a proveedor"
+
+msgctxt "view:stock.shipment.in.return:"
+msgid "Supplier Return Shipments"
+msgstr "Envios de devolución a proveedor"
+
+msgctxt "view:stock.shipment.in.return:"
+msgid "Wait"
+msgstr "Espera"
+
+msgctxt "view:stock.shipment.in.return:"
+msgid "Waiting"
+msgstr "En espera"
+
+msgctxt "view:stock.shipment.in:"
+msgid "Cancel"
+msgstr "Cancelar"
+
+msgctxt "view:stock.shipment.in:"
+msgid "Done"
+msgstr "Terminado"
+
+msgctxt "view:stock.shipment.in:"
+msgid "Draft"
+msgstr "Borrador"
+
+msgctxt "view:stock.shipment.in:"
+msgid "Incoming Moves"
+msgstr "Movimientos de entrada"
+
+msgctxt "view:stock.shipment.in:"
+msgid "Inventory Moves"
+msgstr "Movimientos de inventario"
+
+msgctxt "view:stock.shipment.in:"
+msgid "Moves"
+msgstr "Movimientos"
+
+msgctxt "view:stock.shipment.in:"
+msgid "Receive"
+msgstr "Recibe"
+
+msgctxt "view:stock.shipment.in:"
+msgid "Received"
+msgstr "Recibido"
+
+msgctxt "view:stock.shipment.in:"
+msgid "Reset to Draft"
+msgstr "Restablecer a borrador"
+
+msgctxt "view:stock.shipment.in:"
+msgid "Supplier Shipment"
+msgstr "EnvÃo de proveedor"
+
+msgctxt "view:stock.shipment.in:"
+msgid "Supplier Shipments"
+msgstr "EnvÃos de proveedor"
+
+msgctxt "view:stock.shipment.internal.assign.failed:"
+msgid "Unable to Assign"
+msgstr "No se puede asignar"
+
+msgctxt "view:stock.shipment.internal.assign.failed:"
+msgid "Unable to assign those products:"
+msgstr "No se puede asignar estos productos:"
+
+msgctxt "view:stock.shipment.internal:"
+msgid "Assign"
+msgstr "Asignar"
+
+msgctxt "view:stock.shipment.internal:"
+msgid "Cancel"
+msgstr "Cancelar"
+
+msgctxt "view:stock.shipment.internal:"
+msgid "Done"
+msgstr "Terminado"
+
+msgctxt "view:stock.shipment.internal:"
+msgid "Draft"
+msgstr "Borrador"
+
+msgctxt "view:stock.shipment.internal:"
+msgid "Force Assign"
+msgstr "Forzar asignación"
+
+msgctxt "view:stock.shipment.internal:"
+msgid "Internal Shipment"
+msgstr "EnvÃo interno"
+
+msgctxt "view:stock.shipment.internal:"
+msgid "Internal Shipments"
+msgstr "EnvÃos internos"
+
+msgctxt "view:stock.shipment.internal:"
+msgid "Reset to Draft"
+msgstr "Restablecer a borrador"
+
+msgctxt "view:stock.shipment.internal:"
+msgid "Set Done"
+msgstr "Marcar como terminado"
+
+msgctxt "view:stock.shipment.internal:"
+msgid "Set Waiting"
+msgstr "Colocar en espera"
+
+msgctxt "view:stock.shipment.internal:"
+msgid "Waiting"
+msgstr "En espera"
+
+msgctxt "view:stock.shipment.out.assign.failed:"
+msgid "Unable to Assign"
+msgstr "No se puede asignar"
+
+msgctxt "view:stock.shipment.out.assign.failed:"
+msgid "Unable to assign those products:"
+msgstr "No se puede asignar estos productos:"
+
+msgctxt "view:stock.shipment.out.return:"
+msgid "Cancel"
+msgstr "Cancelar"
+
+msgctxt "view:stock.shipment.out.return:"
+msgid "Customer Return Shipment"
+msgstr "Envio de devolución de cliente"
+
+msgctxt "view:stock.shipment.out.return:"
+msgid "Customer Return Shipments"
+msgstr "Envios de devolución de cliente"
+
+msgctxt "view:stock.shipment.out.return:"
+msgid "Done"
+msgstr "Terminado"
+
+msgctxt "view:stock.shipment.out.return:"
+msgid "Draft"
+msgstr "Borrador"
+
+msgctxt "view:stock.shipment.out.return:"
+msgid "Incoming Moves"
+msgstr "Movimientos de entrada"
+
+msgctxt "view:stock.shipment.out.return:"
+msgid "Inventory Moves"
+msgstr "Movimientos de inventario"
+
+msgctxt "view:stock.shipment.out.return:"
+msgid "Moves"
+msgstr "Movimientos"
+
+msgctxt "view:stock.shipment.out.return:"
+msgid "Received"
+msgstr "Recibido"
+
+msgctxt "view:stock.shipment.out.return:"
+msgid "Reset to Draft"
+msgstr "Restablecer a borrador"
+
+msgctxt "view:stock.shipment.out:"
+msgid "Assign"
+msgstr "Asignar"
+
+msgctxt "view:stock.shipment.out:"
+msgid "Cancel"
+msgstr "Cancelar"
+
+msgctxt "view:stock.shipment.out:"
+msgid "Customer Shipment"
+msgstr "EnvÃo a cliente"
+
+msgctxt "view:stock.shipment.out:"
+msgid "Customer Shipments"
+msgstr "EnvÃos a clientes"
+
+msgctxt "view:stock.shipment.out:"
+msgid "Done"
+msgstr "Terminado"
+
+msgctxt "view:stock.shipment.out:"
+msgid "Draft"
+msgstr "Borrador"
+
+msgctxt "view:stock.shipment.out:"
+msgid "Force Assign"
+msgstr "Forzar asignación"
+
+msgctxt "view:stock.shipment.out:"
+msgid "Inventory Moves"
+msgstr "Movimientos de inventario"
+
+msgctxt "view:stock.shipment.out:"
+msgid "Make shipment"
+msgstr "Hacer empaquetado"
+
+msgctxt "view:stock.shipment.out:"
+msgid "Outgoing Moves"
+msgstr "Movimientos de salida"
+
+msgctxt "view:stock.shipment.out:"
+msgid "Reset to Draft"
+msgstr "Restablecer a borrador"
+
+msgctxt "view:stock.shipment.out:"
+msgid "Set Done"
+msgstr "Marcar como terminado"
+
+msgctxt "view:stock.shipment.out:"
+msgid "Set Waiting"
+msgstr "Colocar en espera"
+
+msgctxt "view:stock.shipment.out:"
+msgid "Unpack"
+msgstr "Desempaquetar"
+
+msgctxt "view:stock.shipment.out:"
+msgid "Waiting"
+msgstr "En espera"
+
+msgctxt "wizard_button:product.by_location,start,end:"
+msgid "Cancel"
+msgstr "Cancelar"
+
+msgctxt "wizard_button:product.by_location,start,open:"
+msgid "Open"
+msgstr "Abrir"
+
+msgctxt "wizard_button:stock.products_by_locations,start,end:"
+msgid "Cancel"
+msgstr "Cancelar"
+
+msgctxt "wizard_button:stock.products_by_locations,start,open:"
+msgid "Open"
+msgstr "Abrir"
+
+msgctxt "wizard_button:stock.shipment.in.return.assign,failed,end:"
+msgid "Ok"
+msgstr "Aceptar"
+
+msgctxt "wizard_button:stock.shipment.in.return.assign,failed,force:"
+msgid "Force Assign"
+msgstr "Forzar asignación"
+
+msgctxt "wizard_button:stock.shipment.internal.assign,failed,end:"
+msgid "Ok"
+msgstr "Aceptar"
+
+msgctxt "wizard_button:stock.shipment.internal.assign,failed,force:"
+msgid "Force Assign"
+msgstr "Forzar asignación"
+
+msgctxt "wizard_button:stock.shipment.out.assign,failed,end:"
+msgid "Ok"
+msgstr "Aceptar"
+
+msgctxt "wizard_button:stock.shipment.out.assign,failed,force:"
+msgid "Force Assign"
+msgstr "Forzar asignación"
diff --git a/locale/es_CO.po b/locale/es_CO.po
index 264ea07..7e2e619 100644
--- a/locale/es_CO.po
+++ b/locale/es_CO.po
@@ -2,7 +2,7 @@
msgid ""
msgstr "Content-Type: text/plain; charset=utf-8\n"
-msgctxt "error:product.template:0"
+msgctxt "error:product.template:"
msgid ""
"You cannot change the default uom for a product which is associated to stock"
" moves."
@@ -10,15 +10,19 @@ msgstr ""
"No puede cambiar la UdM predeterminada para un producto asociado a "
"movimientos de inventario."
-msgctxt "error:stock.inventory.line:0"
+msgctxt "error:stock.inventory.line:"
msgid "Line quantity must be positive!"
msgstr "La lÃnea de cantidad debe ser positiva!"
-msgctxt "error:stock.inventory.line:0"
+msgctxt "error:stock.inventory.line:"
msgid "Product must be unique by inventory!"
msgstr "El producto debe ser único por inventario!"
-msgctxt "error:stock.location:0"
+msgctxt "error:stock.inventory:"
+msgid "Inventory \"%s\" must be cancelled before deletion!"
+msgstr ""
+
+msgctxt "error:stock.location:"
msgid ""
"A location with existing moves cannot be changed to a type that does not "
"support moves."
@@ -26,67 +30,67 @@ msgstr ""
"Un lugar con movimientos existentes no puede ser cambiado a un tipo que no "
"soporte movimientos."
-msgctxt "error:stock.location:0"
+msgctxt "error:stock.location:"
msgid "Location \"%s\" must be a child of warehouse \"%s\"!"
msgstr "¡Localización de \"%s\" debe ser un hijo de la bodega \"%s\"!"
-msgctxt "error:stock.location:0"
+msgctxt "error:stock.location:"
msgid "You can not create recursive locations!"
msgstr "No puede crear lugares recursivamente!"
-msgctxt "error:stock.move:0"
+msgctxt "error:stock.move:"
msgid "Internal move quantity must be positive"
msgstr ""
-msgctxt "error:stock.move:0"
+msgctxt "error:stock.move:"
msgid "Move can be on only one Shipment"
msgstr "Solamente se puede hacer movimiento sobre un EnvÃo."
-msgctxt "error:stock.move:0"
+msgctxt "error:stock.move:"
msgid "Move quantity must be positive"
msgstr "El valor del movimiento debe ser positivo"
-msgctxt "error:stock.move:0"
+msgctxt "error:stock.move:"
msgid "Source and destination location must be different"
msgstr "Los lugares fuente y destino deben diferir"
-msgctxt "error:stock.move:0"
+msgctxt "error:stock.move:"
msgid "You can not modify a move in the state: \"Assigned\", \"Done\" or \"Cancel\""
msgstr ""
-msgctxt "error:stock.move:0"
+msgctxt "error:stock.move:"
msgid "You can not modify move in closed period!"
msgstr ""
-msgctxt "error:stock.move:0"
+msgctxt "error:stock.move:"
msgid "You can not set state to assigned!"
msgstr "No puede establecer el estado como asignado!"
-msgctxt "error:stock.move:0"
+msgctxt "error:stock.move:"
msgid "You can not set state to done!"
msgstr "No puede establecer el estado como hecho!"
-msgctxt "error:stock.move:0"
+msgctxt "error:stock.move:"
msgid "You can not set state to draft!"
msgstr "No puede establecer el estado como borrador!"
-msgctxt "error:stock.move:0"
-msgid "You can not use service products for a move!"
-msgstr "No puede usar productos de servicio para un movimiento!"
-
-msgctxt "error:stock.move:0"
+msgctxt "error:stock.move:"
msgid "You can only delete draft or cancelled moves!"
msgstr "Solamente puede eliminar movimientos en borrador o cancelados!"
-msgctxt "error:stock.period:0"
+msgctxt "error:stock.period:"
msgid "You can not close a period in the future or today!"
msgstr ""
-msgctxt "error:stock.period:0"
+msgctxt "error:stock.period:"
msgid "You can not close a period when there is still assigned moves!"
msgstr ""
-msgctxt "error:stock.shipment.in:0"
+msgctxt "error:stock.shipment.in.return:"
+msgid "Supplier Return Shipment \"%s\" must be cancelled before deletion!"
+msgstr ""
+
+msgctxt "error:stock.shipment.in:"
msgid ""
"Incoming Moves must have the warehouse input location as destination "
"location!"
@@ -94,640 +98,956 @@ msgstr ""
"Movimientos de ingreso debe tener un lugar de entrada de bodega como lugar "
"destino!"
-msgctxt "error:stock.shipment.in:0"
+msgctxt "error:stock.shipment.in:"
msgid ""
"Inventory Moves must have the warehouse input location as source location!"
msgstr ""
"Movimientos de inventario deben tener lugar de entrada a bodega como lugar "
"fuente!"
-msgctxt "error:stock.shipment.out.return.create:0"
+msgctxt "error:stock.shipment.in:"
+msgid "Supplier Shipment \"%s\" must be cancelled before deletion!"
+msgstr ""
+
+msgctxt "error:stock.shipment.internal:"
+msgid "Internal Shipment \"%s\" must be cancelled before deletion!"
+msgstr ""
+
+msgctxt "error:stock.shipment.out.return.create:"
msgid "The shipment with code %s is not yet sent."
msgstr "El empaque con código %s no ha sido enviado aún."
-msgctxt "error:stock.shipment.out.return.create:0"
+msgctxt "error:stock.shipment.out.return.create:"
msgid "You can not create return shipment"
msgstr "No puede crear empaques de retorno"
-msgctxt "error:stock.shipment.out.return:0"
-msgid ""
-"Incoming Moves must have the warehouse input location as destination "
-"location!"
-msgstr "Ingreso deben tener lugar de entrada en bodega como lugar destino!"
-
-msgctxt "error:stock.shipment.out.return:0"
-msgid ""
-"Inventory Moves must have the warehouse input location as source location!"
+msgctxt "error:stock.shipment.out.return:"
+msgid "Customer Return Shipment \"%s\" must be cancelled before deletion!"
msgstr ""
-"Movimientos de inventario deben tener lugar de entrada en bodega como lugar "
-"fuente!"
-msgctxt "error:stock.shipment.out:0"
-msgid ""
-"Inventory Moves must have the warehouse output location as destination "
-"location!"
+msgctxt "error:stock.shipment.out:"
+msgid "Customer Shipment \"%s\" must be cancelled before deletion!"
msgstr ""
-msgctxt "error:stock.shipment.out:0"
-msgid ""
-"Outgoing Moves must have the warehouse output location as source location!"
-msgstr ""
-
-msgctxt "field:party.address,delivery:0"
+msgctxt "field:party.address,delivery:"
msgid "Delivery"
msgstr "EnvÃo"
-msgctxt "field:party.party,customer_location:0"
+msgctxt "field:party.party,customer_location:"
msgid "Customer Location"
msgstr "Lugar del Cliente"
-msgctxt "field:party.party,supplier_location:0"
+msgctxt "field:party.party,supplier_location:"
msgid "Supplier Location"
msgstr "Lugar del Proveedor"
-msgctxt "field:product.product,forecast_quantity:0"
+msgctxt "field:product.by_location.start,forecast_date:"
+msgid "At Date"
+msgstr ""
+
+msgctxt "field:product.by_location.start,id:"
+msgid "ID"
+msgstr ""
+
+msgctxt "field:product.product,cost_value:"
+msgid "Cost Value"
+msgstr ""
+
+msgctxt "field:product.product,forecast_quantity:"
msgid "Forecast Quantity"
msgstr "Cantidad Proyectada"
-msgctxt "field:product.product,quantity:0"
+msgctxt "field:product.product,quantity:"
msgid "Quantity"
msgstr "Cantidad"
-msgctxt "field:product.template,forecast_quantity:0"
+msgctxt "field:product.template,cost_value:"
+msgid "Cost Value"
+msgstr ""
+
+msgctxt "field:product.template,forecast_quantity:"
msgid "Forecast Quantity"
msgstr "Cantidad Proyectada"
-msgctxt "field:product.template,quantity:0"
+msgctxt "field:product.template,quantity:"
msgid "Quantity"
msgstr "Cantidad"
+msgctxt "field:stock.configuration,create_date:"
+msgid "Create Date"
+msgstr ""
+
#, fuzzy
-msgctxt "field:stock.configuration,rec_name:0"
+msgctxt "field:stock.configuration,create_uid:"
+msgid "Create User"
+msgstr "Crear usuario"
+
+msgctxt "field:stock.configuration,id:"
+msgid "ID"
+msgstr ""
+
+#, fuzzy
+msgctxt "field:stock.configuration,rec_name:"
msgid "Name"
msgstr "Nombre de Contacto"
-msgctxt "field:stock.configuration,shipment_in_return_sequence:0"
+msgctxt "field:stock.configuration,shipment_in_return_sequence:"
msgid "Supplier Return Shipment Sequence"
msgstr "Secuencia de retorno de envÃo al proveedor"
-msgctxt "field:stock.configuration,shipment_in_sequence:0"
+msgctxt "field:stock.configuration,shipment_in_sequence:"
msgid "Supplier Shipment Sequence"
msgstr "Secuencia de envÃo al proveedor"
-msgctxt "field:stock.configuration,shipment_internal_sequence:0"
+msgctxt "field:stock.configuration,shipment_internal_sequence:"
msgid "Internal Shipment Sequence"
msgstr "Secuencia de envÃo interno"
-msgctxt "field:stock.configuration,shipment_out_return_sequence:0"
+msgctxt "field:stock.configuration,shipment_out_return_sequence:"
msgid "Customer Return Shipment Sequence"
msgstr "Secuencia de retorno de envÃo al cliente "
-msgctxt "field:stock.configuration,shipment_out_sequence:0"
+msgctxt "field:stock.configuration,shipment_out_sequence:"
msgid "Customer Shipment Sequence"
msgstr "Secuencia de envÃo al cliente"
-msgctxt "field:stock.inventory,company:0"
+msgctxt "field:stock.configuration,write_date:"
+msgid "Write Date"
+msgstr ""
+
+msgctxt "field:stock.configuration,write_uid:"
+msgid "Write User"
+msgstr ""
+
+msgctxt "field:stock.inventory,company:"
msgid "Company"
msgstr "CompañÃa"
-msgctxt "field:stock.inventory,date:0"
+msgctxt "field:stock.inventory,create_date:"
+msgid "Create Date"
+msgstr ""
+
+#, fuzzy
+msgctxt "field:stock.inventory,create_uid:"
+msgid "Create User"
+msgstr "Crear usuario"
+
+msgctxt "field:stock.inventory,date:"
msgid "Date"
msgstr "Fecha"
-msgctxt "field:stock.inventory,lines:0"
+msgctxt "field:stock.inventory,id:"
+msgid "ID"
+msgstr ""
+
+msgctxt "field:stock.inventory,lines:"
msgid "Lines"
msgstr "LÃneas de Inventario"
-msgctxt "field:stock.inventory,location:0"
+msgctxt "field:stock.inventory,location:"
msgid "Location"
msgstr "Lugar"
-msgctxt "field:stock.inventory,lost_found:0"
+msgctxt "field:stock.inventory,lost_found:"
msgid "Lost and Found"
msgstr "Perdido y Encontrado"
-msgctxt "field:stock.inventory,rec_name:0"
+msgctxt "field:stock.inventory,rec_name:"
msgid "Name"
msgstr "Nombre"
-msgctxt "field:stock.inventory,state:0"
+msgctxt "field:stock.inventory,state:"
msgid "State"
msgstr "Estado"
-msgctxt "field:stock.inventory.line,expected_quantity:0"
+msgctxt "field:stock.inventory,write_date:"
+msgid "Write Date"
+msgstr ""
+
+msgctxt "field:stock.inventory,write_uid:"
+msgid "Write User"
+msgstr ""
+
+msgctxt "field:stock.inventory.line,create_date:"
+msgid "Create Date"
+msgstr ""
+
+#, fuzzy
+msgctxt "field:stock.inventory.line,create_uid:"
+msgid "Create User"
+msgstr "Crear usuario"
+
+msgctxt "field:stock.inventory.line,expected_quantity:"
msgid "Expected Quantity"
msgstr "Cantidad Esperada"
-msgctxt "field:stock.inventory.line,inventory:0"
+msgctxt "field:stock.inventory.line,id:"
+msgid "ID"
+msgstr ""
+
+msgctxt "field:stock.inventory.line,inventory:"
msgid "Inventory"
msgstr "Inventario"
-msgctxt "field:stock.inventory.line,move:0"
+msgctxt "field:stock.inventory.line,move:"
msgid "Move"
msgstr "Movimiento"
-msgctxt "field:stock.inventory.line,product:0"
+msgctxt "field:stock.inventory.line,product:"
msgid "Product"
msgstr "Producto"
-msgctxt "field:stock.inventory.line,quantity:0"
+msgctxt "field:stock.inventory.line,quantity:"
msgid "Quantity"
msgstr "Cantidad"
-msgctxt "field:stock.inventory.line,rec_name:0"
+msgctxt "field:stock.inventory.line,rec_name:"
msgid "Name"
msgstr "Nombre"
-msgctxt "field:stock.inventory.line,unit_digits:0"
+msgctxt "field:stock.inventory.line,unit_digits:"
msgid "Unit Digits"
msgstr "DÃgitos Unitarios"
-msgctxt "field:stock.inventory.line,uom:0"
+msgctxt "field:stock.inventory.line,uom:"
msgid "UOM"
msgstr "UDM"
-msgctxt "field:stock.location,active:0"
+msgctxt "field:stock.inventory.line,write_date:"
+msgid "Write Date"
+msgstr ""
+
+msgctxt "field:stock.inventory.line,write_uid:"
+msgid "Write User"
+msgstr ""
+
+msgctxt "field:stock.location,active:"
msgid "Active"
msgstr "Activo"
-msgctxt "field:stock.location,address:0"
+msgctxt "field:stock.location,address:"
msgid "Address"
msgstr "Direcciones"
-msgctxt "field:stock.location,childs:0"
+msgctxt "field:stock.location,childs:"
msgid "Children"
msgstr "Hij at s"
-msgctxt "field:stock.location,code:0"
+msgctxt "field:stock.location,code:"
msgid "Code"
msgstr "Código"
-msgctxt "field:stock.location,forecast_quantity:0"
+msgctxt "field:stock.location,cost_value:"
+msgid "Cost Value"
+msgstr ""
+
+msgctxt "field:stock.location,create_date:"
+msgid "Create Date"
+msgstr ""
+
+#, fuzzy
+msgctxt "field:stock.location,create_uid:"
+msgid "Create User"
+msgstr "Crear usuario"
+
+msgctxt "field:stock.location,forecast_quantity:"
msgid "Forecast Quantity"
msgstr "Cantidad Proyectada"
-msgctxt "field:stock.location,input_location:0"
+msgctxt "field:stock.location,id:"
+msgid "ID"
+msgstr ""
+
+msgctxt "field:stock.location,input_location:"
msgid "Input"
msgstr "Entrada"
-msgctxt "field:stock.location,left:0"
+msgctxt "field:stock.location,left:"
msgid "Left"
msgstr "Izquierda"
-msgctxt "field:stock.location,name:0"
+msgctxt "field:stock.location,name:"
msgid "Name"
msgstr "Nombre"
-msgctxt "field:stock.location,output_location:0"
+msgctxt "field:stock.location,output_location:"
msgid "Output"
msgstr "Salida"
-msgctxt "field:stock.location,parent:0"
+msgctxt "field:stock.location,parent:"
msgid "Parent"
msgstr "Padre"
-msgctxt "field:stock.location,quantity:0"
+msgctxt "field:stock.location,quantity:"
msgid "Quantity"
msgstr "Cantidad"
-msgctxt "field:stock.location,rec_name:0"
+msgctxt "field:stock.location,rec_name:"
msgid "Name"
msgstr "Nombre"
-msgctxt "field:stock.location,right:0"
+msgctxt "field:stock.location,right:"
msgid "Right"
msgstr "Derecha"
-msgctxt "field:stock.location,storage_location:0"
+msgctxt "field:stock.location,storage_location:"
msgid "Storage"
msgstr "Almacén"
-msgctxt "field:stock.location,type:0"
+msgctxt "field:stock.location,type:"
msgid "Location type"
msgstr "Tipo de Lugar"
-msgctxt "field:stock.location_stock_date.init,forecast_date:0"
-msgid "At Date"
-msgstr "En la fecha"
+msgctxt "field:stock.location,write_date:"
+msgid "Write Date"
+msgstr ""
+
+msgctxt "field:stock.location,write_uid:"
+msgid "Write User"
+msgstr ""
-msgctxt "field:stock.move,company:0"
+msgctxt "field:stock.move,company:"
msgid "Company"
msgstr "CompañÃa"
-msgctxt "field:stock.move,cost_price:0"
+msgctxt "field:stock.move,cost_price:"
msgid "Cost Price"
msgstr "Método de Precio"
-msgctxt "field:stock.move,currency:0"
+msgctxt "field:stock.move,create_date:"
+msgid "Create Date"
+msgstr ""
+
+#, fuzzy
+msgctxt "field:stock.move,create_uid:"
+msgid "Create User"
+msgstr "Crear usuario"
+
+msgctxt "field:stock.move,currency:"
msgid "Currency"
msgstr "Moneda"
-msgctxt "field:stock.move,effective_date:0"
+msgctxt "field:stock.move,effective_date:"
msgid "Effective Date"
msgstr "Fecha Efectiva"
-msgctxt "field:stock.move,from_location:0"
+msgctxt "field:stock.move,from_location:"
msgid "From Location"
msgstr "Lugar Inicial"
-msgctxt "field:stock.move,internal_quantity:0"
+msgctxt "field:stock.move,id:"
+msgid "ID"
+msgstr ""
+
+msgctxt "field:stock.move,internal_quantity:"
msgid "Internal Quantity"
msgstr ""
-msgctxt "field:stock.move,planned_date:0"
+msgctxt "field:stock.move,planned_date:"
msgid "Planned Date"
msgstr "Fecha Planeada"
-msgctxt "field:stock.move,product:0"
+msgctxt "field:stock.move,product:"
msgid "Product"
msgstr "Producto"
-msgctxt "field:stock.move,quantity:0"
+msgctxt "field:stock.move,product_uom_category:"
+msgid "Product Uom Category"
+msgstr ""
+
+msgctxt "field:stock.move,quantity:"
msgid "Quantity"
msgstr "Cantidad"
-msgctxt "field:stock.move,rec_name:0"
+msgctxt "field:stock.move,rec_name:"
msgid "Name"
msgstr "Nombre"
-msgctxt "field:stock.move,shipment_in:0"
+msgctxt "field:stock.move,shipment_in:"
msgid "Supplier Shipment"
msgstr "EnvÃo del Proveedor"
-msgctxt "field:stock.move,shipment_in_return:0"
+msgctxt "field:stock.move,shipment_in_return:"
msgid "Supplier Return Shipment"
msgstr "Devolución de Proveedor"
-msgctxt "field:stock.move,shipment_internal:0"
+msgctxt "field:stock.move,shipment_internal:"
msgid "Internal Shipment"
msgstr "EnvÃo Interno"
-msgctxt "field:stock.move,shipment_out:0"
+msgctxt "field:stock.move,shipment_out:"
msgid "Customer Shipment"
msgstr "EnvÃo de Cliente"
-msgctxt "field:stock.move,shipment_out_return:0"
+msgctxt "field:stock.move,shipment_out_return:"
msgid "Customer Return Shipment"
msgstr "Devolución a Cliente"
-msgctxt "field:stock.move,state:0"
+msgctxt "field:stock.move,state:"
msgid "State"
msgstr "Estado"
-msgctxt "field:stock.move,to_location:0"
+msgctxt "field:stock.move,to_location:"
msgid "To Location"
msgstr "Al Lugar:"
-msgctxt "field:stock.move,unit_digits:0"
+msgctxt "field:stock.move,unit_digits:"
msgid "Unit Digits"
msgstr "DÃgitos de Unidad"
-msgctxt "field:stock.move,unit_price:0"
+msgctxt "field:stock.move,unit_price:"
msgid "Unit Price"
msgstr "Precio Unitario"
-msgctxt "field:stock.move,unit_price_required:0"
+msgctxt "field:stock.move,unit_price_required:"
msgid "Unit Price Required"
msgstr "Requiere Precio Unitario"
-msgctxt "field:stock.move,uom:0"
+msgctxt "field:stock.move,uom:"
msgid "Uom"
msgstr "Udm"
-msgctxt "field:stock.period,caches:0"
+msgctxt "field:stock.move,write_date:"
+msgid "Write Date"
+msgstr ""
+
+msgctxt "field:stock.move,write_uid:"
+msgid "Write User"
+msgstr ""
+
+msgctxt "field:stock.period,caches:"
msgid "Caches"
msgstr ""
#, fuzzy
-msgctxt "field:stock.period,company:0"
+msgctxt "field:stock.period,company:"
msgid "Company"
msgstr "CompañÃa"
+msgctxt "field:stock.period,create_date:"
+msgid "Create Date"
+msgstr ""
+
#, fuzzy
-msgctxt "field:stock.period,date:0"
+msgctxt "field:stock.period,create_uid:"
+msgid "Create User"
+msgstr "Crear usuario"
+
+#, fuzzy
+msgctxt "field:stock.period,date:"
msgid "Date"
msgstr "Fecha"
+msgctxt "field:stock.period,id:"
+msgid "ID"
+msgstr ""
+
#, fuzzy
-msgctxt "field:stock.period,rec_name:0"
+msgctxt "field:stock.period,rec_name:"
msgid "Name"
msgstr "Nombre de Contacto"
#, fuzzy
-msgctxt "field:stock.period,state:0"
+msgctxt "field:stock.period,state:"
msgid "State"
msgstr "Estado"
-msgctxt "field:stock.period.cache,internal_quantity:0"
+msgctxt "field:stock.period,write_date:"
+msgid "Write Date"
+msgstr ""
+
+msgctxt "field:stock.period,write_uid:"
+msgid "Write User"
+msgstr ""
+
+msgctxt "field:stock.period.cache,create_date:"
+msgid "Create Date"
+msgstr ""
+
+#, fuzzy
+msgctxt "field:stock.period.cache,create_uid:"
+msgid "Create User"
+msgstr "Crear usuario"
+
+msgctxt "field:stock.period.cache,id:"
+msgid "ID"
+msgstr ""
+
+msgctxt "field:stock.period.cache,internal_quantity:"
msgid "Internal Quantity"
msgstr ""
#, fuzzy
-msgctxt "field:stock.period.cache,location:0"
+msgctxt "field:stock.period.cache,location:"
msgid "Location"
msgstr "Lugar"
#, fuzzy
-msgctxt "field:stock.period.cache,period:0"
+msgctxt "field:stock.period.cache,period:"
msgid "Period"
msgstr "PerÃodo"
#, fuzzy
-msgctxt "field:stock.period.cache,product:0"
+msgctxt "field:stock.period.cache,product:"
msgid "Product"
msgstr "Productos"
#, fuzzy
-msgctxt "field:stock.period.cache,rec_name:0"
+msgctxt "field:stock.period.cache,rec_name:"
msgid "Name"
msgstr "Nombre de Contacto"
-msgctxt "field:stock.product_stock_date.init,forecast_date:0"
+msgctxt "field:stock.period.cache,write_date:"
+msgid "Write Date"
+msgstr ""
+
+msgctxt "field:stock.period.cache,write_uid:"
+msgid "Write User"
+msgstr ""
+
+msgctxt "field:stock.products_by_locations.start,forecast_date:"
msgid "At Date"
-msgstr "En la fecha"
+msgstr ""
+
+msgctxt "field:stock.products_by_locations.start,id:"
+msgid "ID"
+msgstr ""
-msgctxt "field:stock.shipment.in,code:0"
+msgctxt "field:stock.shipment.in,code:"
msgid "Code"
msgstr "Código"
#, fuzzy
-msgctxt "field:stock.shipment.in,company:0"
+msgctxt "field:stock.shipment.in,company:"
msgid "Company"
msgstr "CompañÃa"
-msgctxt "field:stock.shipment.in,contact_address:0"
+msgctxt "field:stock.shipment.in,contact_address:"
msgid "Contact Address"
msgstr "Dirección de Contacto"
-msgctxt "field:stock.shipment.in,effective_date:0"
+msgctxt "field:stock.shipment.in,create_date:"
+msgid "Create Date"
+msgstr ""
+
+#, fuzzy
+msgctxt "field:stock.shipment.in,create_uid:"
+msgid "Create User"
+msgstr "Crear usuario"
+
+msgctxt "field:stock.shipment.in,effective_date:"
msgid "Effective Date"
msgstr "Fecha Efectiva"
-msgctxt "field:stock.shipment.in,incoming_moves:0"
+msgctxt "field:stock.shipment.in,id:"
+msgid "ID"
+msgstr ""
+
+msgctxt "field:stock.shipment.in,incoming_moves:"
msgid "Incoming Moves"
msgstr "Movimientos de Entrada"
-msgctxt "field:stock.shipment.in,inventory_moves:0"
+msgctxt "field:stock.shipment.in,inventory_moves:"
msgid "Inventory Moves"
msgstr "Movimientos de Inventario"
-msgctxt "field:stock.shipment.in,moves:0"
+msgctxt "field:stock.shipment.in,moves:"
msgid "Moves"
msgstr "Movimientos"
-msgctxt "field:stock.shipment.in,planned_date:0"
+msgctxt "field:stock.shipment.in,planned_date:"
msgid "Planned Date"
msgstr "Fecha Planeada"
-msgctxt "field:stock.shipment.in,rec_name:0"
+msgctxt "field:stock.shipment.in,rec_name:"
msgid "Name"
msgstr "Nombre"
-msgctxt "field:stock.shipment.in,reference:0"
+msgctxt "field:stock.shipment.in,reference:"
msgid "Reference"
msgstr "Referencia"
-msgctxt "field:stock.shipment.in,state:0"
+msgctxt "field:stock.shipment.in,state:"
msgid "State"
msgstr "Estado"
-msgctxt "field:stock.shipment.in,supplier:0"
+msgctxt "field:stock.shipment.in,supplier:"
msgid "Supplier"
msgstr "Proveedor"
-msgctxt "field:stock.shipment.in,warehouse:0"
+#, fuzzy
+msgctxt "field:stock.shipment.in,supplier_location:"
+msgid "Supplier Location"
+msgstr "Lugar del Proveedor"
+
+msgctxt "field:stock.shipment.in,warehouse:"
msgid "Warehouse"
msgstr "Depósito"
-msgctxt "field:stock.shipment.in.return,code:0"
+msgctxt "field:stock.shipment.in,warehouse_input:"
+msgid "Warehouse Input"
+msgstr ""
+
+msgctxt "field:stock.shipment.in,warehouse_storage:"
+msgid "Warehouse Storage"
+msgstr ""
+
+msgctxt "field:stock.shipment.in,write_date:"
+msgid "Write Date"
+msgstr ""
+
+msgctxt "field:stock.shipment.in,write_uid:"
+msgid "Write User"
+msgstr ""
+
+msgctxt "field:stock.shipment.in.return,code:"
msgid "Code"
msgstr "Código"
#, fuzzy
-msgctxt "field:stock.shipment.in.return,company:0"
+msgctxt "field:stock.shipment.in.return,company:"
msgid "Company"
msgstr "CompañÃa"
-msgctxt "field:stock.shipment.in.return,effective_date:0"
+msgctxt "field:stock.shipment.in.return,create_date:"
+msgid "Create Date"
+msgstr ""
+
+#, fuzzy
+msgctxt "field:stock.shipment.in.return,create_uid:"
+msgid "Create User"
+msgstr "Crear usuario"
+
+msgctxt "field:stock.shipment.in.return,effective_date:"
msgid "Effective Date"
msgstr "Fecha Efectiva"
-msgctxt "field:stock.shipment.in.return,from_location:0"
+msgctxt "field:stock.shipment.in.return,from_location:"
msgid "From Location"
msgstr "Lugar Inicial"
-msgctxt "field:stock.shipment.in.return,moves:0"
+msgctxt "field:stock.shipment.in.return,id:"
+msgid "ID"
+msgstr ""
+
+msgctxt "field:stock.shipment.in.return,moves:"
msgid "Moves"
msgstr "Movimientos"
-msgctxt "field:stock.shipment.in.return,planned_date:0"
+msgctxt "field:stock.shipment.in.return,planned_date:"
msgid "Planned Date"
msgstr "Fecha Planeada"
-msgctxt "field:stock.shipment.in.return,rec_name:0"
+msgctxt "field:stock.shipment.in.return,rec_name:"
msgid "Name"
msgstr "Nombre"
-msgctxt "field:stock.shipment.in.return,reference:0"
+msgctxt "field:stock.shipment.in.return,reference:"
msgid "Reference"
msgstr "Referencia"
-msgctxt "field:stock.shipment.in.return,state:0"
+msgctxt "field:stock.shipment.in.return,state:"
msgid "State"
msgstr "Estado"
-msgctxt "field:stock.shipment.in.return,to_location:0"
+msgctxt "field:stock.shipment.in.return,to_location:"
msgid "To Location"
msgstr "Al Lugar:"
-msgctxt "field:stock.shipment.in.return.assign.assign_failed,moves:0"
+msgctxt "field:stock.shipment.in.return,write_date:"
+msgid "Write Date"
+msgstr ""
+
+msgctxt "field:stock.shipment.in.return,write_uid:"
+msgid "Write User"
+msgstr ""
+
+msgctxt "field:stock.shipment.in.return.assign.failed,id:"
+msgid "ID"
+msgstr ""
+
+#, fuzzy
+msgctxt "field:stock.shipment.in.return.assign.failed,moves:"
msgid "Moves"
msgstr "Movimientos"
-msgctxt "field:stock.shipment.internal,code:0"
+msgctxt "field:stock.shipment.internal,code:"
msgid "Code"
msgstr "Código"
#, fuzzy
-msgctxt "field:stock.shipment.internal,company:0"
+msgctxt "field:stock.shipment.internal,company:"
msgid "Company"
msgstr "CompañÃa"
-msgctxt "field:stock.shipment.internal,effective_date:0"
+msgctxt "field:stock.shipment.internal,create_date:"
+msgid "Create Date"
+msgstr ""
+
+#, fuzzy
+msgctxt "field:stock.shipment.internal,create_uid:"
+msgid "Create User"
+msgstr "Crear usuario"
+
+msgctxt "field:stock.shipment.internal,effective_date:"
msgid "Effective Date"
msgstr "Fecha Efectiva"
-msgctxt "field:stock.shipment.internal,from_location:0"
+msgctxt "field:stock.shipment.internal,from_location:"
msgid "From Location"
msgstr "Lugar Inicial"
-msgctxt "field:stock.shipment.internal,moves:0"
+msgctxt "field:stock.shipment.internal,id:"
+msgid "ID"
+msgstr ""
+
+msgctxt "field:stock.shipment.internal,moves:"
msgid "Moves"
msgstr "Movimientos"
-msgctxt "field:stock.shipment.internal,planned_date:0"
+msgctxt "field:stock.shipment.internal,planned_date:"
msgid "Planned Date"
msgstr "Fecha Planeada"
-msgctxt "field:stock.shipment.internal,rec_name:0"
+msgctxt "field:stock.shipment.internal,rec_name:"
msgid "Name"
msgstr "Nombre"
-msgctxt "field:stock.shipment.internal,reference:0"
+msgctxt "field:stock.shipment.internal,reference:"
msgid "Reference"
msgstr "Referencia"
-msgctxt "field:stock.shipment.internal,state:0"
+msgctxt "field:stock.shipment.internal,state:"
msgid "State"
msgstr "Estado"
-msgctxt "field:stock.shipment.internal,to_location:0"
+msgctxt "field:stock.shipment.internal,to_location:"
msgid "To Location"
msgstr "Al Lugar:"
-msgctxt "field:stock.shipment.internal.assign.assign_failed,moves:0"
+msgctxt "field:stock.shipment.internal,write_date:"
+msgid "Write Date"
+msgstr ""
+
+msgctxt "field:stock.shipment.internal,write_uid:"
+msgid "Write User"
+msgstr ""
+
+msgctxt "field:stock.shipment.internal.assign.failed,id:"
+msgid "ID"
+msgstr ""
+
+#, fuzzy
+msgctxt "field:stock.shipment.internal.assign.failed,moves:"
msgid "Moves"
msgstr "Movimientos"
-msgctxt "field:stock.shipment.out,code:0"
+msgctxt "field:stock.shipment.out,code:"
msgid "Code"
msgstr "Código"
#, fuzzy
-msgctxt "field:stock.shipment.out,company:0"
+msgctxt "field:stock.shipment.out,company:"
msgid "Company"
msgstr "CompañÃa"
-msgctxt "field:stock.shipment.out,customer:0"
+msgctxt "field:stock.shipment.out,create_date:"
+msgid "Create Date"
+msgstr ""
+
+#, fuzzy
+msgctxt "field:stock.shipment.out,create_uid:"
+msgid "Create User"
+msgstr "Crear usuario"
+
+msgctxt "field:stock.shipment.out,customer:"
msgid "Customer"
msgstr "Cliente"
-msgctxt "field:stock.shipment.out,delivery_address:0"
+#, fuzzy
+msgctxt "field:stock.shipment.out,customer_location:"
+msgid "Customer Location"
+msgstr "Lugar del Cliente"
+
+msgctxt "field:stock.shipment.out,delivery_address:"
msgid "Delivery Address"
msgstr "Dirección de EnvÃo"
-msgctxt "field:stock.shipment.out,effective_date:0"
+msgctxt "field:stock.shipment.out,effective_date:"
msgid "Effective Date"
msgstr "Fecha Efectiva"
-msgctxt "field:stock.shipment.out,inventory_moves:0"
+msgctxt "field:stock.shipment.out,id:"
+msgid "ID"
+msgstr ""
+
+msgctxt "field:stock.shipment.out,inventory_moves:"
msgid "Inventory Moves"
msgstr "Movimientos de Inventario"
-msgctxt "field:stock.shipment.out,moves:0"
+msgctxt "field:stock.shipment.out,moves:"
msgid "Moves"
msgstr "Movimientos"
-msgctxt "field:stock.shipment.out,outgoing_moves:0"
+msgctxt "field:stock.shipment.out,outgoing_moves:"
msgid "Outgoing Moves"
msgstr "Movimientos de Salida"
-msgctxt "field:stock.shipment.out,planned_date:0"
+msgctxt "field:stock.shipment.out,planned_date:"
msgid "Planned Date"
msgstr "Fecha Planeada"
-msgctxt "field:stock.shipment.out,rec_name:0"
+msgctxt "field:stock.shipment.out,rec_name:"
msgid "Name"
msgstr "Nombre"
-msgctxt "field:stock.shipment.out,reference:0"
+msgctxt "field:stock.shipment.out,reference:"
msgid "Reference"
msgstr "Referencia"
-msgctxt "field:stock.shipment.out,state:0"
+msgctxt "field:stock.shipment.out,state:"
msgid "State"
msgstr "Estado"
-msgctxt "field:stock.shipment.out,warehouse:0"
+msgctxt "field:stock.shipment.out,warehouse:"
msgid "Warehouse"
msgstr "Depósito"
-msgctxt "field:stock.shipment.out.assign.assign_failed,inventory_moves:0"
+msgctxt "field:stock.shipment.out,warehouse_output:"
+msgid "Warehouse Output"
+msgstr ""
+
+msgctxt "field:stock.shipment.out,warehouse_storage:"
+msgid "Warehouse Storage"
+msgstr ""
+
+msgctxt "field:stock.shipment.out,write_date:"
+msgid "Write Date"
+msgstr ""
+
+msgctxt "field:stock.shipment.out,write_uid:"
+msgid "Write User"
+msgstr ""
+
+msgctxt "field:stock.shipment.out.assign.failed,id:"
+msgid "ID"
+msgstr ""
+
+#, fuzzy
+msgctxt "field:stock.shipment.out.assign.failed,inventory_moves:"
msgid "Inventory Moves"
msgstr "Movimientos de Inventario"
-msgctxt "field:stock.shipment.out.return,code:0"
+msgctxt "field:stock.shipment.out.return,code:"
msgid "Code"
msgstr "Código"
#, fuzzy
-msgctxt "field:stock.shipment.out.return,company:0"
+msgctxt "field:stock.shipment.out.return,company:"
msgid "Company"
msgstr "CompañÃa"
-msgctxt "field:stock.shipment.out.return,customer:0"
+msgctxt "field:stock.shipment.out.return,create_date:"
+msgid "Create Date"
+msgstr ""
+
+#, fuzzy
+msgctxt "field:stock.shipment.out.return,create_uid:"
+msgid "Create User"
+msgstr "Crear usuario"
+
+msgctxt "field:stock.shipment.out.return,customer:"
msgid "Customer"
msgstr "Cliente"
-msgctxt "field:stock.shipment.out.return,delivery_address:0"
+#, fuzzy
+msgctxt "field:stock.shipment.out.return,customer_location:"
+msgid "Customer Location"
+msgstr "Lugar del Cliente"
+
+msgctxt "field:stock.shipment.out.return,delivery_address:"
msgid "Delivery Address"
msgstr "Dirección de EnvÃo"
-msgctxt "field:stock.shipment.out.return,effective_date:0"
+msgctxt "field:stock.shipment.out.return,effective_date:"
msgid "Effective Date"
msgstr "Fecha Efectiva"
-msgctxt "field:stock.shipment.out.return,incoming_moves:0"
+msgctxt "field:stock.shipment.out.return,id:"
+msgid "ID"
+msgstr ""
+
+msgctxt "field:stock.shipment.out.return,incoming_moves:"
msgid "Incoming Moves"
msgstr "Movimientos de Entrada"
-msgctxt "field:stock.shipment.out.return,inventory_moves:0"
+msgctxt "field:stock.shipment.out.return,inventory_moves:"
msgid "Inventory Moves"
msgstr "Movimientos de Inventario"
-msgctxt "field:stock.shipment.out.return,moves:0"
+msgctxt "field:stock.shipment.out.return,moves:"
msgid "Moves"
msgstr "Movimientos"
-msgctxt "field:stock.shipment.out.return,planned_date:0"
+msgctxt "field:stock.shipment.out.return,planned_date:"
msgid "Planned Date"
msgstr "Fecha Planeada"
-msgctxt "field:stock.shipment.out.return,rec_name:0"
+msgctxt "field:stock.shipment.out.return,rec_name:"
msgid "Name"
msgstr "Nombre"
-msgctxt "field:stock.shipment.out.return,reference:0"
+msgctxt "field:stock.shipment.out.return,reference:"
msgid "Reference"
msgstr "Referencia"
-msgctxt "field:stock.shipment.out.return,state:0"
+msgctxt "field:stock.shipment.out.return,state:"
msgid "State"
msgstr "Estado"
-msgctxt "field:stock.shipment.out.return,warehouse:0"
+msgctxt "field:stock.shipment.out.return,warehouse:"
msgid "Warehouse"
msgstr "Depósito"
-msgctxt "help:party.party,customer_location:0"
+msgctxt "field:stock.shipment.out.return,warehouse_input:"
+msgid "Warehouse Input"
+msgstr ""
+
+msgctxt "field:stock.shipment.out.return,warehouse_storage:"
+msgid "Warehouse Storage"
+msgstr ""
+
+msgctxt "field:stock.shipment.out.return,write_date:"
+msgid "Write Date"
+msgstr ""
+
+msgctxt "field:stock.shipment.out.return,write_uid:"
+msgid "Write User"
+msgstr ""
+
+msgctxt "help:party.party,customer_location:"
msgid "The default destination location when sending products to the party."
msgstr ""
"El lugar predeterminado destino cuando se envian productos al tercero."
-msgctxt "help:party.party,supplier_location:0"
+msgctxt "help:party.party,supplier_location:"
msgid "The default source location when receiving products from the party."
msgstr ""
"El lugar origen predeterminado cuando se reciben productos del tercero."
-msgctxt "help:stock.location_stock_date.init,forecast_date:0"
+msgctxt "help:product.by_location.start,forecast_date:"
msgid ""
"Allow to compute expected stock quantities for this date.\n"
"* An empty value is an infinite date in the future.\n"
"* A date in the past will provide historical values."
msgstr ""
-"Permitir calcular el inventario esperado para esta fecha.\n"
-"* Un valor vacÃoes una fecha infinita en el futuro.\n"
-"* Una fecha en el pasado indicará usar datos históricos."
-msgctxt "help:stock.product_stock_date.init,forecast_date:0"
+msgctxt "help:stock.products_by_locations.start,forecast_date:"
msgid ""
"Allow to compute expected stock quantities for this date.\n"
"* An empty value is an infinite date in the future.\n"
"* A date in the past will provide historical values."
msgstr ""
-"Permitir calcular el inventario esperado para esta fecha.\n"
-"* Un valor vacÃoes una fecha infinita en el futuro.\n"
-"* Una fecha en el pasado indicará usar datos históricos."
msgctxt "model:ir.action,name:act_inventory_form"
msgid "Inventories"
@@ -742,8 +1062,9 @@ msgctxt "model:ir.action,name:act_location_form"
msgid "Locations"
msgstr "Editar Lugares"
+#, fuzzy
msgctxt "model:ir.action,name:act_location_quantity_tree"
-msgid "Product Stock"
+msgid "Location Quantity & Cost Value"
msgstr "Inventario de Producto"
msgctxt "model:ir.action,name:act_location_tree"
@@ -771,9 +1092,9 @@ msgctxt "model:ir.action,name:act_period_list"
msgid "Periods"
msgstr "PerÃodos"
-msgctxt "model:ir.action,name:act_product_by_location"
+msgctxt "model:ir.action,name:act_products_by_locations"
msgid "Products by Locations"
-msgstr "Productos por Lugares"
+msgstr ""
msgctxt "model:ir.action,name:act_shipment_in_draft"
msgid "Draft Supplier Shipment"
@@ -863,17 +1184,13 @@ msgctxt "model:ir.action,name:report_shipment_out_return_restocking_list"
msgid "Restocking List"
msgstr "Lista de Renovación de Inventario"
-msgctxt "model:ir.action,name:wizard_complete_inventory"
-msgid "Complete Inventory"
-msgstr "Inventario Completo"
-
-msgctxt "model:ir.action,name:wizard_location_open"
+msgctxt "model:ir.action,name:wizard_product_by_location"
msgid "Product by Location"
-msgstr "Producto por Lugar"
+msgstr ""
-msgctxt "model:ir.action,name:wizard_product_open"
-msgid "Product Quantities"
-msgstr "Cantidades de Producto"
+msgctxt "model:ir.action,name:wizard_products_by_locations"
+msgid "Products by Locations"
+msgstr ""
msgctxt "model:ir.action,name:wizard_shipment_in_return_assign"
msgid "Assign Purchase Return Shipment"
@@ -1034,6 +1351,10 @@ msgctxt "model:ir.ui.menu,name:menu_stock_configuration"
msgid "Stock Configuration"
msgstr "Configuración de Inventario"
+msgctxt "model:product.by_location.start,name:"
+msgid "Product by Location"
+msgstr ""
+
msgctxt "model:res.group,name:group_stock"
msgid "Stock"
msgstr "Stock"
@@ -1047,19 +1368,19 @@ msgid "Stock Force Assignment"
msgstr ""
#, fuzzy
-msgctxt "model:stock.configuration,name:0"
+msgctxt "model:stock.configuration,name:"
msgid "Stock Configuration"
msgstr "Configuración del inventario"
-msgctxt "model:stock.inventory,name:0"
+msgctxt "model:stock.inventory,name:"
msgid "Stock Inventory"
msgstr "Inventario de Existencia"
-msgctxt "model:stock.inventory.line,name:0"
+msgctxt "model:stock.inventory.line,name:"
msgid "Stock Inventory Line"
msgstr "LÃnea de existencia en Inventario "
-msgctxt "model:stock.location,name:0"
+msgctxt "model:stock.location,name:"
msgid "Stock Location"
msgstr "Lugar de Existencia"
@@ -1091,1048 +1412,909 @@ msgctxt "model:stock.location,name:location_warehouse"
msgid "Warehouse"
msgstr "Depósito"
-msgctxt "model:stock.location_stock_date.init,name:0"
-msgid "Compute stock quantities"
-msgstr "Calcule cantidad existencia"
-
-msgctxt "model:stock.move,name:0"
+msgctxt "model:stock.move,name:"
msgid "Stock Move"
msgstr "Movimiento de Existencias"
-msgctxt "model:stock.period,name:0"
+msgctxt "model:stock.period,name:"
msgid "Stock Period"
msgstr ""
-msgctxt "model:stock.period.cache,name:0"
-msgid ""
-"\n"
-" Stock Period Cache\n"
-"\n"
-" It is used to store cached computation of stock quantities.\n"
-" "
+msgctxt "model:stock.period.cache,name:"
+msgid "stock.period.cache"
msgstr ""
-msgctxt "model:stock.product_stock_date.init,name:0"
-msgid "Compute stock quantities"
-msgstr "Calcule cantidad de existencia"
+msgctxt "model:stock.products_by_locations.start,name:"
+msgid "Products by Locations"
+msgstr ""
-msgctxt "model:stock.shipment.in,name:0"
+msgctxt "model:stock.shipment.in,name:"
msgid "Supplier Shipment"
msgstr "EnvÃo del Proveedor"
-msgctxt "model:stock.shipment.in.return,name:0"
+msgctxt "model:stock.shipment.in.return,name:"
msgid "Supplier Return Shipment"
msgstr "Devolución a Proveedor"
-#, fuzzy
-msgctxt "model:stock.shipment.in.return.assign.assign_failed,name:0"
-msgid "Assign Supplier Return Shipment Assign Failed"
-msgstr "Fuerce Pregunta de Asigne Devolución a Proveedor"
+msgctxt "model:stock.shipment.in.return.assign.failed,name:"
+msgid "Assign Supplier Return Shipment"
+msgstr ""
-msgctxt "model:stock.shipment.internal,name:0"
+msgctxt "model:stock.shipment.internal,name:"
msgid "Internal Shipment"
msgstr "EnvÃo Interno"
#, fuzzy
-msgctxt "model:stock.shipment.internal.assign.assign_failed,name:0"
-msgid "Assign Shipment Internal Assign Failed"
-msgstr "Fuerce Pregunta de Asigne EnvÃo Interno"
+msgctxt "model:stock.shipment.internal.assign.failed,name:"
+msgid "Assign Shipment Internal"
+msgstr "Asigne EnvÃo Interno"
-msgctxt "model:stock.shipment.out,name:0"
+msgctxt "model:stock.shipment.out,name:"
msgid "Customer Shipment"
msgstr "EnvÃo de Cliente"
#, fuzzy
-msgctxt "model:stock.shipment.out.assign.assign_failed,name:0"
-msgid "Assign Shipment Out Assign Failed"
-msgstr "Fuerce Pregunta de Asigne EnvÃo"
-
-msgctxt "model:stock.shipment.out.return,name:0"
-msgid "Customer Return Shipment"
-msgstr "Devolución a Cliente"
-
-msgctxt "model:workflow,name:wkf_inventory"
-msgid "Inventory"
-msgstr "Inventario"
-
-msgctxt "model:workflow,name:wkf_shipment_in_return"
-msgid "Supplier Return Shipment"
-msgstr "Devolución a Proveedor"
+msgctxt "model:stock.shipment.out.assign.failed,name:"
+msgid "Assign Shipment Out"
+msgstr "Asignación de EnvÃo"
-msgctxt "model:workflow,name:wkf_shipment_out_return"
+msgctxt "model:stock.shipment.out.return,name:"
msgid "Customer Return Shipment"
msgstr "Devolución a Cliente"
-msgctxt "model:workflow,name:wkf_shipmentin"
-msgid "Supplier Shipment"
-msgstr "EnvÃo del Proveedor"
-
-msgctxt "model:workflow,name:wkf_shipmentinternal"
-msgid "Internal Shipment"
-msgstr "EnvÃo Interno"
-
-msgctxt "model:workflow,name:wkf_shipmentout"
-msgid "Customer Shipment"
-msgstr "EnvÃo de Cliente"
-
-msgctxt "model:workflow.activity,name:inventory_act_cancel"
-msgid "Canceled"
-msgstr "Cancelado"
-
-msgctxt "model:workflow.activity,name:inventory_act_done"
-msgid "Done"
-msgstr "Hecho"
-
-msgctxt "model:workflow.activity,name:inventory_act_draft"
-msgid "Draft"
-msgstr "Borrador"
-
-msgctxt "model:workflow.activity,name:shipment_in_return_act_assigned"
-msgid "Assigned"
-msgstr "Asignado"
-
-msgctxt "model:workflow.activity,name:shipment_in_return_act_cancel"
-msgid "Canceled"
-msgstr "Cancelado"
-
-msgctxt "model:workflow.activity,name:shipment_in_return_act_done"
-msgid "Done"
-msgstr "Hecho"
-
-msgctxt "model:workflow.activity,name:shipment_in_return_act_draft"
-msgid "Draft"
-msgstr "Borrador"
-
-msgctxt "model:workflow.activity,name:shipment_in_return_act_waiting"
-msgid "Waiting"
-msgstr "En Espera"
-
-msgctxt "model:workflow.activity,name:shipment_out_return_act_cancel"
-msgid "Canceled"
-msgstr "Cancelado"
-
-msgctxt "model:workflow.activity,name:shipment_out_return_act_done"
-msgid "Done"
-msgstr "Hecho"
-
-msgctxt "model:workflow.activity,name:shipment_out_return_act_draft"
-msgid "Draft"
-msgstr "Borrador"
-
-msgctxt "model:workflow.activity,name:shipment_out_return_act_received"
-msgid "Received"
-msgstr "Recibido"
-
-msgctxt "model:workflow.activity,name:shipmentin_act_cancel"
-msgid "Canceled"
-msgstr "Cancelado"
-
-msgctxt "model:workflow.activity,name:shipmentin_act_done"
-msgid "Done"
-msgstr "Hecho"
-
-msgctxt "model:workflow.activity,name:shipmentin_act_draft"
-msgid "Draft"
-msgstr "Borrador"
-
-msgctxt "model:workflow.activity,name:shipmentin_act_received"
-msgid "Received"
-msgstr "Recibido"
-
-msgctxt "model:workflow.activity,name:shipmentinternal_act_assigned"
-msgid "Assigned"
-msgstr "Asignado"
-
-msgctxt "model:workflow.activity,name:shipmentinternal_act_cancel"
-msgid "Canceled"
-msgstr "Cancelado"
-
-msgctxt "model:workflow.activity,name:shipmentinternal_act_done"
-msgid "Done"
-msgstr "Hecho"
-
-msgctxt "model:workflow.activity,name:shipmentinternal_act_draft"
-msgid "Draft"
-msgstr "Borrador"
-
-msgctxt "model:workflow.activity,name:shipmentinternal_act_waiting"
-msgid "Waiting"
-msgstr "En Espera"
-
-msgctxt "model:workflow.activity,name:shipmentout_act_assigned"
-msgid "Assigned"
-msgstr "Asignado"
-
-msgctxt "model:workflow.activity,name:shipmentout_act_cancel"
-msgid "Canceled"
-msgstr "Cancelado"
-
-msgctxt "model:workflow.activity,name:shipmentout_act_done"
-msgid "Done"
-msgstr "Hecho"
-
-msgctxt "model:workflow.activity,name:shipmentout_act_draft"
-msgid "Draft"
-msgstr "Borrador"
-
-msgctxt "model:workflow.activity,name:shipmentout_act_packed"
-msgid "Packed"
-msgstr "Empacado"
-
-msgctxt "model:workflow.activity,name:shipmentout_act_waiting"
-msgid "Waiting"
-msgstr "En Espera"
-
-msgctxt "odt:stock.shipment.in.restocking_list:0"
+msgctxt "odt:stock.shipment.in.restocking_list:"
msgid "/"
msgstr "/"
-msgctxt "odt:stock.shipment.in.restocking_list:0"
+msgctxt "odt:stock.shipment.in.restocking_list:"
msgid "Code:"
msgstr "Código:"
-msgctxt "odt:stock.shipment.in.restocking_list:0"
+msgctxt "odt:stock.shipment.in.restocking_list:"
msgid "E-Mail:"
msgstr "Correo electrónico:"
-msgctxt "odt:stock.shipment.in.restocking_list:0"
+msgctxt "odt:stock.shipment.in.restocking_list:"
msgid "From Location"
msgstr "Lugar Inicial"
-msgctxt "odt:stock.shipment.in.restocking_list:0"
+msgctxt "odt:stock.shipment.in.restocking_list:"
msgid "Phone:"
msgstr "Teléfono:"
-msgctxt "odt:stock.shipment.in.restocking_list:0"
+msgctxt "odt:stock.shipment.in.restocking_list:"
msgid "Planned Date:"
msgstr "Fecha Planeada:"
-msgctxt "odt:stock.shipment.in.restocking_list:0"
+msgctxt "odt:stock.shipment.in.restocking_list:"
msgid "Product"
msgstr "Producto"
-msgctxt "odt:stock.shipment.in.restocking_list:0"
+msgctxt "odt:stock.shipment.in.restocking_list:"
msgid "Quantity"
msgstr "Cantidad"
-msgctxt "odt:stock.shipment.in.restocking_list:0"
+msgctxt "odt:stock.shipment.in.restocking_list:"
msgid "Reference:"
msgstr "Referencia:"
-msgctxt "odt:stock.shipment.in.restocking_list:0"
+msgctxt "odt:stock.shipment.in.restocking_list:"
msgid "Restocking List"
msgstr "Lista de Renovación de Inventario"
-msgctxt "odt:stock.shipment.in.restocking_list:0"
+msgctxt "odt:stock.shipment.in.restocking_list:"
msgid "Supplier:"
msgstr "Proveedor:"
-msgctxt "odt:stock.shipment.in.restocking_list:0"
+msgctxt "odt:stock.shipment.in.restocking_list:"
msgid "To Location"
msgstr "Al Lugar:"
-msgctxt "odt:stock.shipment.in.restocking_list:0"
+msgctxt "odt:stock.shipment.in.restocking_list:"
msgid "VAT Number:"
msgstr ""
-msgctxt "odt:stock.shipment.in.restocking_list:0"
+msgctxt "odt:stock.shipment.in.restocking_list:"
msgid "Warehouse:"
msgstr "Bodega:"
-msgctxt "odt:stock.shipment.internal.report:0"
+msgctxt "odt:stock.shipment.internal.report:"
msgid "/"
msgstr "/"
-msgctxt "odt:stock.shipment.internal.report:0"
+msgctxt "odt:stock.shipment.internal.report:"
msgid "Code:"
msgstr "Código:"
-msgctxt "odt:stock.shipment.internal.report:0"
+msgctxt "odt:stock.shipment.internal.report:"
msgid "E-Mail:"
msgstr "Correo electrónico:"
-msgctxt "odt:stock.shipment.internal.report:0"
+msgctxt "odt:stock.shipment.internal.report:"
msgid "From Location"
msgstr "Lugar Inicial"
-msgctxt "odt:stock.shipment.internal.report:0"
+msgctxt "odt:stock.shipment.internal.report:"
msgid "From Location:"
msgstr "Origen:"
-msgctxt "odt:stock.shipment.internal.report:0"
+msgctxt "odt:stock.shipment.internal.report:"
msgid "Internal Shipment"
msgstr "EnvÃo Interno"
-msgctxt "odt:stock.shipment.internal.report:0"
+msgctxt "odt:stock.shipment.internal.report:"
msgid "Phone:"
msgstr "Teléfono:"
-msgctxt "odt:stock.shipment.internal.report:0"
+msgctxt "odt:stock.shipment.internal.report:"
msgid "Planned Date:"
msgstr "Fecha Planeada:"
-msgctxt "odt:stock.shipment.internal.report:0"
+msgctxt "odt:stock.shipment.internal.report:"
msgid "Product"
msgstr "Producto"
-msgctxt "odt:stock.shipment.internal.report:0"
+msgctxt "odt:stock.shipment.internal.report:"
msgid "Quantity"
msgstr "Cantidad"
-msgctxt "odt:stock.shipment.internal.report:0"
+msgctxt "odt:stock.shipment.internal.report:"
msgid "Reference:"
msgstr "Referencia:"
-msgctxt "odt:stock.shipment.internal.report:0"
+msgctxt "odt:stock.shipment.internal.report:"
msgid "To Location"
msgstr "Al Lugar:"
-msgctxt "odt:stock.shipment.internal.report:0"
+msgctxt "odt:stock.shipment.internal.report:"
msgid "To Location:"
msgstr "Destino:"
-msgctxt "odt:stock.shipment.internal.report:0"
+msgctxt "odt:stock.shipment.internal.report:"
msgid "VAT Number:"
msgstr ""
-msgctxt "odt:stock.shipment.out.delivery_note:0"
+msgctxt "odt:stock.shipment.out.delivery_note:"
msgid "/"
msgstr "/"
-msgctxt "odt:stock.shipment.out.delivery_note:0"
+msgctxt "odt:stock.shipment.out.delivery_note:"
msgid "Customer Code:"
msgstr "Código de Cliente:"
-msgctxt "odt:stock.shipment.out.delivery_note:0"
+msgctxt "odt:stock.shipment.out.delivery_note:"
msgid "Date:"
msgstr "Fecha:"
-msgctxt "odt:stock.shipment.out.delivery_note:0"
+msgctxt "odt:stock.shipment.out.delivery_note:"
msgid "Delivery Note"
msgstr "Nota de EnvÃo"
-msgctxt "odt:stock.shipment.out.delivery_note:0"
+msgctxt "odt:stock.shipment.out.delivery_note:"
msgid "E-Mail:"
msgstr "Correo electrónico:"
-msgctxt "odt:stock.shipment.out.delivery_note:0"
+msgctxt "odt:stock.shipment.out.delivery_note:"
msgid "Phone:"
msgstr "Teléfono:"
-msgctxt "odt:stock.shipment.out.delivery_note:0"
+msgctxt "odt:stock.shipment.out.delivery_note:"
msgid "Product"
msgstr "Producto"
-msgctxt "odt:stock.shipment.out.delivery_note:0"
+msgctxt "odt:stock.shipment.out.delivery_note:"
msgid "Quantity"
msgstr "Cantidad"
-msgctxt "odt:stock.shipment.out.delivery_note:0"
+msgctxt "odt:stock.shipment.out.delivery_note:"
msgid "Reference:"
msgstr "Referencia:"
-msgctxt "odt:stock.shipment.out.delivery_note:0"
+msgctxt "odt:stock.shipment.out.delivery_note:"
msgid "Shipment Number:"
msgstr "Número de EnvÃo"
-msgctxt "odt:stock.shipment.out.delivery_note:0"
+msgctxt "odt:stock.shipment.out.delivery_note:"
msgid "VAT Number:"
msgstr ""
-msgctxt "odt:stock.shipment.out.picking_list:0"
+msgctxt "odt:stock.shipment.out.picking_list:"
msgid "/"
msgstr "/"
-msgctxt "odt:stock.shipment.out.picking_list:0"
+msgctxt "odt:stock.shipment.out.picking_list:"
msgid "Code:"
msgstr "Código:"
-msgctxt "odt:stock.shipment.out.picking_list:0"
+msgctxt "odt:stock.shipment.out.picking_list:"
msgid "Customer:"
msgstr "Cliente:"
-msgctxt "odt:stock.shipment.out.picking_list:0"
+msgctxt "odt:stock.shipment.out.picking_list:"
msgid "E-Mail:"
msgstr "Correo electrónico:"
-msgctxt "odt:stock.shipment.out.picking_list:0"
+msgctxt "odt:stock.shipment.out.picking_list:"
msgid "From Location"
msgstr "Lugar Inicial"
-msgctxt "odt:stock.shipment.out.picking_list:0"
+msgctxt "odt:stock.shipment.out.picking_list:"
msgid "Phone:"
msgstr "Teléfono:"
-msgctxt "odt:stock.shipment.out.picking_list:0"
+msgctxt "odt:stock.shipment.out.picking_list:"
msgid "Picking List"
msgstr "Lista de Elección"
-msgctxt "odt:stock.shipment.out.picking_list:0"
+msgctxt "odt:stock.shipment.out.picking_list:"
msgid "Planned Date:"
msgstr "Fecha Planeada:"
-msgctxt "odt:stock.shipment.out.picking_list:0"
+msgctxt "odt:stock.shipment.out.picking_list:"
msgid "Product"
msgstr "Producto"
-msgctxt "odt:stock.shipment.out.picking_list:0"
+msgctxt "odt:stock.shipment.out.picking_list:"
msgid "Quantity"
msgstr "Cantidad"
-msgctxt "odt:stock.shipment.out.picking_list:0"
+msgctxt "odt:stock.shipment.out.picking_list:"
msgid "Reference:"
msgstr "Referencia:"
-msgctxt "odt:stock.shipment.out.picking_list:0"
+msgctxt "odt:stock.shipment.out.picking_list:"
msgid "To Location"
msgstr "Al Lugar:"
-msgctxt "odt:stock.shipment.out.picking_list:0"
+msgctxt "odt:stock.shipment.out.picking_list:"
msgid "VAT Number:"
msgstr ""
-msgctxt "odt:stock.shipment.out.picking_list:0"
+msgctxt "odt:stock.shipment.out.picking_list:"
msgid "Warehouse:"
msgstr "Bodega:"
-msgctxt "odt:stock.shipment.out.return.restocking_list:0"
+msgctxt "odt:stock.shipment.out.return.restocking_list:"
msgid "/"
msgstr "/"
-msgctxt "odt:stock.shipment.out.return.restocking_list:0"
+msgctxt "odt:stock.shipment.out.return.restocking_list:"
msgid "Code:"
msgstr "Código:"
-msgctxt "odt:stock.shipment.out.return.restocking_list:0"
+msgctxt "odt:stock.shipment.out.return.restocking_list:"
msgid "E-Mail:"
msgstr "Correo electrónico:"
-msgctxt "odt:stock.shipment.out.return.restocking_list:0"
+msgctxt "odt:stock.shipment.out.return.restocking_list:"
msgid "From Location"
msgstr "Lugar Inicial"
-msgctxt "odt:stock.shipment.out.return.restocking_list:0"
+msgctxt "odt:stock.shipment.out.return.restocking_list:"
msgid "Phone:"
msgstr "Teléfono:"
-msgctxt "odt:stock.shipment.out.return.restocking_list:0"
+msgctxt "odt:stock.shipment.out.return.restocking_list:"
msgid "Planned Date:"
msgstr "Fecha Planeada:"
-msgctxt "odt:stock.shipment.out.return.restocking_list:0"
+msgctxt "odt:stock.shipment.out.return.restocking_list:"
msgid "Product"
msgstr "Producto"
-msgctxt "odt:stock.shipment.out.return.restocking_list:0"
+msgctxt "odt:stock.shipment.out.return.restocking_list:"
msgid "Quantity"
msgstr "Cantidad"
-msgctxt "odt:stock.shipment.out.return.restocking_list:0"
+msgctxt "odt:stock.shipment.out.return.restocking_list:"
msgid "Reference:"
msgstr "Referencia:"
-msgctxt "odt:stock.shipment.out.return.restocking_list:0"
+msgctxt "odt:stock.shipment.out.return.restocking_list:"
msgid "Restocking List"
msgstr "Lista de reposición de existencias"
-msgctxt "odt:stock.shipment.out.return.restocking_list:0"
+msgctxt "odt:stock.shipment.out.return.restocking_list:"
msgid "Supplier:"
msgstr "Proveedor:"
-msgctxt "odt:stock.shipment.out.return.restocking_list:0"
+msgctxt "odt:stock.shipment.out.return.restocking_list:"
msgid "To Location"
msgstr "Al Lugar:"
-msgctxt "odt:stock.shipment.out.return.restocking_list:0"
+msgctxt "odt:stock.shipment.out.return.restocking_list:"
msgid "VAT Number:"
msgstr ""
-msgctxt "odt:stock.shipment.out.return.restocking_list:0"
+msgctxt "odt:stock.shipment.out.return.restocking_list:"
msgid "Warehouse:"
msgstr "Bodega:"
-msgctxt "selection:stock.inventory,state:0"
+msgctxt "selection:stock.inventory,state:"
msgid "Canceled"
msgstr "Cancelado"
-msgctxt "selection:stock.inventory,state:0"
+msgctxt "selection:stock.inventory,state:"
msgid "Done"
msgstr "Hecho"
-msgctxt "selection:stock.inventory,state:0"
+msgctxt "selection:stock.inventory,state:"
msgid "Draft"
msgstr "Borrador"
-msgctxt "selection:stock.location,type:0"
+msgctxt "selection:stock.location,type:"
msgid "Customer"
msgstr "Cliente"
-msgctxt "selection:stock.location,type:0"
+msgctxt "selection:stock.location,type:"
msgid "Lost and Found"
msgstr "Perdido y Encontrado"
-msgctxt "selection:stock.location,type:0"
+msgctxt "selection:stock.location,type:"
msgid "Production"
msgstr "Producción"
-msgctxt "selection:stock.location,type:0"
+msgctxt "selection:stock.location,type:"
msgid "Storage"
msgstr "Almacén"
-msgctxt "selection:stock.location,type:0"
+msgctxt "selection:stock.location,type:"
msgid "Supplier"
msgstr "Proveedor"
-msgctxt "selection:stock.location,type:0"
+msgctxt "selection:stock.location,type:"
msgid "View"
msgstr "Vista"
-msgctxt "selection:stock.location,type:0"
+msgctxt "selection:stock.location,type:"
msgid "Warehouse"
msgstr "Depósito"
-msgctxt "selection:stock.move,state:0"
+msgctxt "selection:stock.move,state:"
msgid "Assigned"
msgstr "Asignado"
-msgctxt "selection:stock.move,state:0"
+msgctxt "selection:stock.move,state:"
msgid "Canceled"
msgstr "Cancelado"
-msgctxt "selection:stock.move,state:0"
+msgctxt "selection:stock.move,state:"
msgid "Done"
msgstr "Hecho"
-msgctxt "selection:stock.move,state:0"
+msgctxt "selection:stock.move,state:"
msgid "Draft"
msgstr "Borrador"
#, fuzzy
-msgctxt "selection:stock.period,state:0"
+msgctxt "selection:stock.period,state:"
msgid "Closed"
msgstr "Cerrado"
#, fuzzy
-msgctxt "selection:stock.period,state:0"
+msgctxt "selection:stock.period,state:"
msgid "Draft"
msgstr "Borrador"
-msgctxt "selection:stock.shipment.in,state:0"
+msgctxt "selection:stock.shipment.in,state:"
msgid "Canceled"
msgstr "Cancelado"
-msgctxt "selection:stock.shipment.in,state:0"
+msgctxt "selection:stock.shipment.in,state:"
msgid "Done"
msgstr "Hecho"
-msgctxt "selection:stock.shipment.in,state:0"
+msgctxt "selection:stock.shipment.in,state:"
msgid "Draft"
msgstr "Borrador"
-msgctxt "selection:stock.shipment.in,state:0"
+msgctxt "selection:stock.shipment.in,state:"
msgid "Received"
msgstr "Recibido"
-msgctxt "selection:stock.shipment.in.return,state:0"
+msgctxt "selection:stock.shipment.in.return,state:"
msgid "Assigned"
msgstr "Asignado"
-msgctxt "selection:stock.shipment.in.return,state:0"
+msgctxt "selection:stock.shipment.in.return,state:"
msgid "Canceled"
msgstr "Cancelado"
-msgctxt "selection:stock.shipment.in.return,state:0"
+msgctxt "selection:stock.shipment.in.return,state:"
msgid "Done"
msgstr "Hecho"
-msgctxt "selection:stock.shipment.in.return,state:0"
+msgctxt "selection:stock.shipment.in.return,state:"
msgid "Draft"
msgstr "Borrador"
-msgctxt "selection:stock.shipment.in.return,state:0"
+msgctxt "selection:stock.shipment.in.return,state:"
msgid "Waiting"
msgstr "En Espera"
-msgctxt "selection:stock.shipment.internal,state:0"
+msgctxt "selection:stock.shipment.internal,state:"
msgid "Assigned"
msgstr "Asignado"
-msgctxt "selection:stock.shipment.internal,state:0"
+msgctxt "selection:stock.shipment.internal,state:"
msgid "Canceled"
msgstr "Cancelado"
-msgctxt "selection:stock.shipment.internal,state:0"
+msgctxt "selection:stock.shipment.internal,state:"
msgid "Done"
msgstr "Hecho"
-msgctxt "selection:stock.shipment.internal,state:0"
+msgctxt "selection:stock.shipment.internal,state:"
msgid "Draft"
msgstr "Borrador"
-msgctxt "selection:stock.shipment.internal,state:0"
+msgctxt "selection:stock.shipment.internal,state:"
msgid "Waiting"
msgstr "En Espera"
-msgctxt "selection:stock.shipment.out,state:0"
+msgctxt "selection:stock.shipment.out,state:"
msgid "Assigned"
msgstr "Asignado"
-msgctxt "selection:stock.shipment.out,state:0"
+msgctxt "selection:stock.shipment.out,state:"
msgid "Canceled"
msgstr "Cancelado"
-msgctxt "selection:stock.shipment.out,state:0"
+msgctxt "selection:stock.shipment.out,state:"
msgid "Done"
msgstr "Hecho"
-msgctxt "selection:stock.shipment.out,state:0"
+msgctxt "selection:stock.shipment.out,state:"
msgid "Draft"
msgstr "Borrador"
-msgctxt "selection:stock.shipment.out,state:0"
+msgctxt "selection:stock.shipment.out,state:"
msgid "Packed"
msgstr "Empacado"
-msgctxt "selection:stock.shipment.out,state:0"
+msgctxt "selection:stock.shipment.out,state:"
msgid "Waiting"
msgstr "En Espera"
-msgctxt "selection:stock.shipment.out.return,state:0"
+msgctxt "selection:stock.shipment.out.return,state:"
msgid "Canceled"
msgstr "Cancelado"
-msgctxt "selection:stock.shipment.out.return,state:0"
+msgctxt "selection:stock.shipment.out.return,state:"
msgid "Done"
msgstr "Hecho"
-msgctxt "selection:stock.shipment.out.return,state:0"
+msgctxt "selection:stock.shipment.out.return,state:"
msgid "Draft"
msgstr "Borrador"
-msgctxt "selection:stock.shipment.out.return,state:0"
+msgctxt "selection:stock.shipment.out.return,state:"
msgid "Received"
msgstr "Recibido"
-msgctxt "view:party.party:0"
+msgctxt "view:party.party:"
msgid "Stock"
msgstr "Stock"
-msgctxt "view:party.party:0"
+msgctxt "view:party.party:"
msgid "_Stock"
msgstr "_Existencias"
-msgctxt "view:product.product:0"
+msgctxt "view:product.by_location.start:"
+msgid "Product by Location"
+msgstr ""
+
+msgctxt "view:product.product:"
msgid "Products"
msgstr "Productos"
-msgctxt "view:stock.configuration:0"
+msgctxt "view:stock.configuration:"
msgid "Stock Configuration"
msgstr "Configuración del Inventario"
-msgctxt "view:stock.inventory.line:0"
+msgctxt "view:stock.inventory.line:"
msgid "Inventory Line"
msgstr "LÃnea de Inventario"
-msgctxt "view:stock.inventory.line:0"
+msgctxt "view:stock.inventory.line:"
msgid "Inventory Lines"
msgstr "LÃneas de Inventario"
-msgctxt "view:stock.inventory:0"
+msgctxt "view:stock.inventory:"
msgid "Add an inventory line for each missing products"
msgstr "Adicione una lÃnea de inventario para cada producto faltante"
-msgctxt "view:stock.inventory:0"
+msgctxt "view:stock.inventory:"
msgid "All generated moves will be cancelled!"
msgstr "Se cancelarán todos los movimientos generados!"
-msgctxt "view:stock.inventory:0"
+msgctxt "view:stock.inventory:"
msgid "Cancel"
msgstr "Cancelar"
-msgctxt "view:stock.inventory:0"
+msgctxt "view:stock.inventory:"
msgid "Complete Inventory"
msgstr "Inventario Completo"
-msgctxt "view:stock.inventory:0"
+msgctxt "view:stock.inventory:"
msgid "Confirm"
msgstr "Confirmar"
-msgctxt "view:stock.inventory:0"
+msgctxt "view:stock.inventory:"
msgid "Inventories"
msgstr "Inventarios"
-msgctxt "view:stock.inventory:0"
+msgctxt "view:stock.inventory:"
msgid "Inventory"
msgstr "Inventario"
-msgctxt "view:stock.inventory:0"
+msgctxt "view:stock.inventory:"
msgid "Re-Open"
msgstr "Re-abrir"
-msgctxt "view:stock.location:0"
+msgctxt "view:stock.location:"
msgid "Location"
msgstr "Lugar"
-msgctxt "view:stock.location:0"
+msgctxt "view:stock.location:"
+msgid "Location Quantity"
+msgstr ""
+
+msgctxt "view:stock.location:"
msgid "Locations"
msgstr "Lugares"
-msgctxt "view:stock.location:0"
+msgctxt "view:stock.location:"
msgid "Product Stock"
msgstr "Inventario de Producto"
-msgctxt "view:stock.location_stock_date.init:0"
-msgid "Product Quantity."
-msgstr "Cantidad de Producto."
-
-msgctxt "view:stock.move:0"
+msgctxt "view:stock.move:"
msgid "Cancel"
msgstr "Cancelar"
-msgctxt "view:stock.move:0"
+msgctxt "view:stock.move:"
msgid "Move"
msgstr "Movimiento"
-msgctxt "view:stock.move:0"
+msgctxt "view:stock.move:"
msgid "Moves"
msgstr "Movimientos"
-msgctxt "view:stock.move:0"
+msgctxt "view:stock.move:"
msgid "Set Done"
msgstr "Marcar como Hecho"
-msgctxt "view:stock.move:0"
+msgctxt "view:stock.move:"
msgid "Set Draft"
msgstr "Marcar como Borrador"
-msgctxt "view:stock.period.cache:0"
+msgctxt "view:stock.period.cache:"
msgid "Period Cache"
msgstr ""
-msgctxt "view:stock.period.cache:0"
+msgctxt "view:stock.period.cache:"
msgid "Period Caches"
msgstr ""
#, fuzzy
-msgctxt "view:stock.period:0"
+msgctxt "view:stock.period:"
msgid "Close"
msgstr "Cerrar"
#, fuzzy
-msgctxt "view:stock.period:0"
+msgctxt "view:stock.period:"
msgid "Draft"
msgstr "Borrador"
#, fuzzy
-msgctxt "view:stock.period:0"
+msgctxt "view:stock.period:"
msgid "Period"
msgstr "PerÃodo"
#, fuzzy
-msgctxt "view:stock.period:0"
+msgctxt "view:stock.period:"
msgid "Periods"
msgstr "PerÃodos"
-msgctxt "view:stock.product_stock_date.init:0"
-msgid "Product Quantity."
-msgstr "Cantidad de Producto."
-
-msgctxt "view:stock.shipment.in.return.assign.assign_failed:0"
-msgid "Moves"
-msgstr "Movimientos"
+msgctxt "view:stock.products_by_locations.start:"
+msgid "Products by Locations"
+msgstr ""
-msgctxt "view:stock.shipment.in.return.assign.assign_failed:0"
+msgctxt "view:stock.shipment.in.return.assign.failed:"
msgid "Unable to Assign"
-msgstr "No es posible asignar"
+msgstr ""
-msgctxt "view:stock.shipment.in.return.assign.assign_failed:0"
+msgctxt "view:stock.shipment.in.return.assign.failed:"
msgid "Unable to assign those products:"
-msgstr "No es posible asignar esos productos:"
+msgstr ""
-msgctxt "view:stock.shipment.in.return:0"
+msgctxt "view:stock.shipment.in.return:"
msgid "Assign"
msgstr "Asignar"
-msgctxt "view:stock.shipment.in.return:0"
+msgctxt "view:stock.shipment.in.return:"
msgid "Cancel"
msgstr "Cancelar"
-msgctxt "view:stock.shipment.in.return:0"
+msgctxt "view:stock.shipment.in.return:"
msgid "Done"
msgstr "Hecho"
-msgctxt "view:stock.shipment.in.return:0"
+msgctxt "view:stock.shipment.in.return:"
msgid "Draft"
msgstr "Borrador"
-msgctxt "view:stock.shipment.in.return:0"
+msgctxt "view:stock.shipment.in.return:"
msgid "Reset to Draft"
msgstr "Revertir a Borrador"
-msgctxt "view:stock.shipment.in.return:0"
+msgctxt "view:stock.shipment.in.return:"
msgid "Supplier Return Shipment"
msgstr "Devolución de Proveedor"
-msgctxt "view:stock.shipment.in.return:0"
+msgctxt "view:stock.shipment.in.return:"
msgid "Supplier Return Shipments"
msgstr "Devoluciones de Proveedor"
-msgctxt "view:stock.shipment.in.return:0"
+msgctxt "view:stock.shipment.in.return:"
+msgid "Wait"
+msgstr ""
+
+msgctxt "view:stock.shipment.in.return:"
msgid "Waiting"
msgstr "En Espera"
-msgctxt "view:stock.shipment.in:0"
+msgctxt "view:stock.shipment.in:"
msgid "Cancel"
msgstr "Cancelar"
-msgctxt "view:stock.shipment.in:0"
+msgctxt "view:stock.shipment.in:"
msgid "Done"
msgstr "Hecho"
-msgctxt "view:stock.shipment.in:0"
+msgctxt "view:stock.shipment.in:"
msgid "Draft"
msgstr "Borrador"
-msgctxt "view:stock.shipment.in:0"
+msgctxt "view:stock.shipment.in:"
msgid "Incoming Moves"
msgstr "Movimientos de Entrada"
-msgctxt "view:stock.shipment.in:0"
+msgctxt "view:stock.shipment.in:"
msgid "Inventory Moves"
msgstr "Movimientos de Inventario"
-msgctxt "view:stock.shipment.in:0"
+msgctxt "view:stock.shipment.in:"
msgid "Moves"
msgstr "Movimientos"
-msgctxt "view:stock.shipment.in:0"
+msgctxt "view:stock.shipment.in:"
+msgid "Receive"
+msgstr ""
+
+msgctxt "view:stock.shipment.in:"
msgid "Received"
msgstr "Recibido"
-msgctxt "view:stock.shipment.in:0"
+msgctxt "view:stock.shipment.in:"
msgid "Reset to Draft"
msgstr "Revertir a Borrador"
-msgctxt "view:stock.shipment.in:0"
+msgctxt "view:stock.shipment.in:"
msgid "Supplier Shipment"
msgstr "EnvÃo del Proveedor"
-msgctxt "view:stock.shipment.in:0"
+msgctxt "view:stock.shipment.in:"
msgid "Supplier Shipments"
msgstr "EnvÃos del Proveedor"
-msgctxt "view:stock.shipment.internal.assign.assign_failed:0"
-msgid "Moves"
-msgstr "Movimientos"
-
-msgctxt "view:stock.shipment.internal.assign.assign_failed:0"
+msgctxt "view:stock.shipment.internal.assign.failed:"
msgid "Unable to Assign"
-msgstr "No es posible asignar"
+msgstr ""
-msgctxt "view:stock.shipment.internal.assign.assign_failed:0"
+msgctxt "view:stock.shipment.internal.assign.failed:"
msgid "Unable to assign those products:"
-msgstr "No es posible asignar esos productos:"
+msgstr ""
-msgctxt "view:stock.shipment.internal:0"
+msgctxt "view:stock.shipment.internal:"
msgid "Assign"
msgstr "Asignar"
-msgctxt "view:stock.shipment.internal:0"
+msgctxt "view:stock.shipment.internal:"
msgid "Cancel"
msgstr "Cancelar"
-msgctxt "view:stock.shipment.internal:0"
+msgctxt "view:stock.shipment.internal:"
msgid "Done"
msgstr "Hecho"
-msgctxt "view:stock.shipment.internal:0"
+msgctxt "view:stock.shipment.internal:"
msgid "Draft"
msgstr "Borrador"
-msgctxt "view:stock.shipment.internal:0"
+msgctxt "view:stock.shipment.internal:"
msgid "Force Assign"
msgstr "Forzar Asignación"
-msgctxt "view:stock.shipment.internal:0"
+msgctxt "view:stock.shipment.internal:"
msgid "Internal Shipment"
msgstr "EnvÃo Interno"
-msgctxt "view:stock.shipment.internal:0"
+msgctxt "view:stock.shipment.internal:"
msgid "Internal Shipments"
msgstr "EnvÃos Internos"
-msgctxt "view:stock.shipment.internal:0"
+msgctxt "view:stock.shipment.internal:"
msgid "Reset to Draft"
msgstr "Revertir a Borrador"
-msgctxt "view:stock.shipment.internal:0"
+msgctxt "view:stock.shipment.internal:"
msgid "Set Done"
msgstr "Marcar como Hecho"
-msgctxt "view:stock.shipment.internal:0"
+msgctxt "view:stock.shipment.internal:"
msgid "Set Waiting"
msgstr "Colocar en Espera"
-msgctxt "view:stock.shipment.internal:0"
+msgctxt "view:stock.shipment.internal:"
msgid "Waiting"
msgstr "En espera"
-msgctxt "view:stock.shipment.out.assign.assign_failed:0"
-msgid "Inventory Moves"
-msgstr "Movimientos de Inventario"
-
-msgctxt "view:stock.shipment.out.assign.assign_failed:0"
+msgctxt "view:stock.shipment.out.assign.failed:"
msgid "Unable to Assign"
-msgstr "No es posible asignar"
+msgstr ""
-msgctxt "view:stock.shipment.out.assign.assign_failed:0"
+msgctxt "view:stock.shipment.out.assign.failed:"
msgid "Unable to assign those products:"
-msgstr "No es posible asignar esos productos:"
+msgstr ""
-msgctxt "view:stock.shipment.out.return:0"
+msgctxt "view:stock.shipment.out.return:"
msgid "Cancel"
msgstr "Cancelar"
-msgctxt "view:stock.shipment.out.return:0"
+msgctxt "view:stock.shipment.out.return:"
msgid "Customer Return Shipment"
msgstr "Devolución a Cliente"
-msgctxt "view:stock.shipment.out.return:0"
+msgctxt "view:stock.shipment.out.return:"
msgid "Customer Return Shipments"
msgstr "Devolución a Cliente"
-msgctxt "view:stock.shipment.out.return:0"
+msgctxt "view:stock.shipment.out.return:"
msgid "Done"
msgstr "Hecho"
-msgctxt "view:stock.shipment.out.return:0"
+#, fuzzy
+msgctxt "view:stock.shipment.out.return:"
+msgid "Draft"
+msgstr "Borrador"
+
+msgctxt "view:stock.shipment.out.return:"
msgid "Incoming Moves"
msgstr "Movimientos de Entrada"
-msgctxt "view:stock.shipment.out.return:0"
+msgctxt "view:stock.shipment.out.return:"
msgid "Inventory Moves"
msgstr "Movimientos de Inventario"
-msgctxt "view:stock.shipment.out.return:0"
+msgctxt "view:stock.shipment.out.return:"
msgid "Moves"
msgstr "Movimientos"
-msgctxt "view:stock.shipment.out.return:0"
+msgctxt "view:stock.shipment.out.return:"
msgid "Received"
msgstr "Recibido"
-msgctxt "view:stock.shipment.out.return:0"
+msgctxt "view:stock.shipment.out.return:"
msgid "Reset to Draft"
msgstr "Revertir a Borrador"
-msgctxt "view:stock.shipment.out:0"
+msgctxt "view:stock.shipment.out:"
msgid "Assign"
msgstr "Asignar"
-msgctxt "view:stock.shipment.out:0"
+msgctxt "view:stock.shipment.out:"
msgid "Cancel"
msgstr "Cancelar"
-msgctxt "view:stock.shipment.out:0"
+msgctxt "view:stock.shipment.out:"
msgid "Customer Shipment"
msgstr "EnvÃo de Cliente"
-msgctxt "view:stock.shipment.out:0"
+msgctxt "view:stock.shipment.out:"
msgid "Customer Shipments"
msgstr "EnvÃos de Cliente"
-msgctxt "view:stock.shipment.out:0"
+msgctxt "view:stock.shipment.out:"
msgid "Done"
msgstr "Hecho"
-msgctxt "view:stock.shipment.out:0"
+msgctxt "view:stock.shipment.out:"
msgid "Draft"
msgstr "Borrador"
-msgctxt "view:stock.shipment.out:0"
+msgctxt "view:stock.shipment.out:"
msgid "Force Assign"
msgstr "Forzar Asignación"
-msgctxt "view:stock.shipment.out:0"
+msgctxt "view:stock.shipment.out:"
msgid "Inventory Moves"
msgstr "Movimientos de Inventario"
-msgctxt "view:stock.shipment.out:0"
+msgctxt "view:stock.shipment.out:"
msgid "Make shipment"
msgstr "Hacer Empaque"
-msgctxt "view:stock.shipment.out:0"
+msgctxt "view:stock.shipment.out:"
msgid "Outgoing Moves"
msgstr "Movimientos de Salida"
-msgctxt "view:stock.shipment.out:0"
+msgctxt "view:stock.shipment.out:"
msgid "Reset to Draft"
msgstr "Revertir a Borrador"
-msgctxt "view:stock.shipment.out:0"
+msgctxt "view:stock.shipment.out:"
msgid "Set Done"
msgstr "Marcar como Hecho"
-msgctxt "view:stock.shipment.out:0"
+msgctxt "view:stock.shipment.out:"
msgid "Set Waiting"
msgstr "Colocar en Espera"
-msgctxt "view:stock.shipment.out:0"
+msgctxt "view:stock.shipment.out:"
msgid "Unpack"
msgstr "Sin empaque"
-msgctxt "view:stock.shipment.out:0"
+msgctxt "view:stock.shipment.out:"
msgid "Waiting"
msgstr "En espera"
-msgctxt "wizard_button:stock.location.open,init,end:0"
+#, fuzzy
+msgctxt "wizard_button:product.by_location,start,end:"
msgid "Cancel"
msgstr "Cancelar"
-msgctxt "wizard_button:stock.location.open,init,open:0"
+#, fuzzy
+msgctxt "wizard_button:product.by_location,start,open:"
msgid "Open"
msgstr "Abrir"
-msgctxt "wizard_button:stock.product.open,init,end:0"
+#, fuzzy
+msgctxt "wizard_button:stock.products_by_locations,start,end:"
msgid "Cancel"
msgstr "Cancelar"
-msgctxt "wizard_button:stock.product.open,init,open:0"
+#, fuzzy
+msgctxt "wizard_button:stock.products_by_locations,start,open:"
msgid "Open"
msgstr "Abrir"
-msgctxt "wizard_button:stock.shipment.in.return.assign,ask_force,end:0"
+#, fuzzy
+msgctxt "wizard_button:stock.shipment.in.return.assign,failed,end:"
msgid "Ok"
msgstr "Aceptar"
-msgctxt "wizard_button:stock.shipment.in.return.assign,ask_force,force:0"
+#, fuzzy
+msgctxt "wizard_button:stock.shipment.in.return.assign,failed,force:"
msgid "Force Assign"
msgstr "Forzar Asignación"
-msgctxt "wizard_button:stock.shipment.in.return.assign,assign_failed,end:0"
-msgid "Ok"
-msgstr "Aceptar"
-
-msgctxt "wizard_button:stock.shipment.internal.assign,ask_force,end:0"
+#, fuzzy
+msgctxt "wizard_button:stock.shipment.internal.assign,failed,end:"
msgid "Ok"
msgstr "Aceptar"
-msgctxt "wizard_button:stock.shipment.internal.assign,ask_force,force:0"
+#, fuzzy
+msgctxt "wizard_button:stock.shipment.internal.assign,failed,force:"
msgid "Force Assign"
msgstr "Forzar Asignación"
-msgctxt "wizard_button:stock.shipment.internal.assign,assign_failed,end:0"
-msgid "Ok"
-msgstr "Aceptar"
-
-msgctxt "wizard_button:stock.shipment.out.assign,ask_force,end:0"
+#, fuzzy
+msgctxt "wizard_button:stock.shipment.out.assign,failed,end:"
msgid "Ok"
msgstr "Aceptar"
-msgctxt "wizard_button:stock.shipment.out.assign,ask_force,force:0"
+#, fuzzy
+msgctxt "wizard_button:stock.shipment.out.assign,failed,force:"
msgid "Force Assign"
msgstr "Forzar Asignación"
-
-msgctxt "wizard_button:stock.shipment.out.assign,assign_failed,end:0"
-msgid "Ok"
-msgstr "Aceptar"
diff --git a/locale/es_ES.po b/locale/es_ES.po
index 209eb81..aaba3c4 100644
--- a/locale/es_ES.po
+++ b/locale/es_ES.po
@@ -2,735 +2,1029 @@
msgid ""
msgstr "Content-Type: text/plain; charset=utf-8\n"
-msgctxt "error:product.template:0"
+msgctxt "error:product.template:"
msgid ""
"You cannot change the default uom for a product which is associated to stock"
" moves."
msgstr ""
-"No puede cambiar la UdM predeterminada de un producto que está asociado con "
-"movimientos de existencias."
+"No puede cambiar la UdM por defecto de un producto que está asociado con "
+"movimientos de stock."
-msgctxt "error:stock.inventory.line:0"
+msgctxt "error:stock.inventory.line:"
msgid "Line quantity must be positive!"
-msgstr "La cantidad de la lÃnea debe ser positiva"
+msgstr "La cantidad de la lÃnea debe ser positiva."
-msgctxt "error:stock.inventory.line:0"
+msgctxt "error:stock.inventory.line:"
msgid "Product must be unique by inventory!"
-msgstr "El producto debe ser único por inventario"
+msgstr "El producto debe ser único por inventario."
-msgctxt "error:stock.location:0"
+msgctxt "error:stock.inventory:"
+msgid "Inventory \"%s\" must be cancelled before deletion!"
+msgstr "Debe cancelar la ubicación \"%s\" antes de eliminarla."
+
+msgctxt "error:stock.location:"
msgid ""
"A location with existing moves cannot be changed to a type that does not "
"support moves."
msgstr ""
-"Una ubicación con movimientos no puede ser cambiado a un tipo que no soporte"
+"Una ubicación con movimientos no puede ser cambiada a un tipo que no soporte"
" movimientos."
-msgctxt "error:stock.location:0"
+msgctxt "error:stock.location:"
msgid "Location \"%s\" must be a child of warehouse \"%s\"!"
-msgstr "La ubicación «%s» debe ser hijo del almacén «%s»"
+msgstr "La ubicación \"%s\" debe ser hija del almacén \"%s\"."
-msgctxt "error:stock.location:0"
+msgctxt "error:stock.location:"
msgid "You can not create recursive locations!"
-msgstr "No puede crear ubicaciones recursivas"
+msgstr "No puede crear ubicaciones recursivas."
-msgctxt "error:stock.move:0"
+msgctxt "error:stock.move:"
msgid "Internal move quantity must be positive"
-msgstr ""
+msgstr "La cantidad del movimiento interno debe ser positiva."
-msgctxt "error:stock.move:0"
+msgctxt "error:stock.move:"
msgid "Move can be on only one Shipment"
-msgstr "Un movimiento solo puede hacerse con un envio."
+msgstr "Un movimiento sólo puede estar en un único albarán."
-msgctxt "error:stock.move:0"
+msgctxt "error:stock.move:"
msgid "Move quantity must be positive"
-msgstr "La cantidad a mover tiene que ser positiva"
+msgstr "La cantidad a mover tiene que ser positiva."
-msgctxt "error:stock.move:0"
+msgctxt "error:stock.move:"
msgid "Source and destination location must be different"
-msgstr "Los lugares origen y destino deben ser distintos"
+msgstr "Las ubicaciones origen y destino deben ser distintas."
-msgctxt "error:stock.move:0"
+msgctxt "error:stock.move:"
msgid "You can not modify a move in the state: \"Assigned\", \"Done\" or \"Cancel\""
msgstr ""
+"No puede modificar un movimiento en estado: \"Reservado\", \"Realizado\" o "
+"\"Cancelado\"."
-msgctxt "error:stock.move:0"
+msgctxt "error:stock.move:"
msgid "You can not modify move in closed period!"
-msgstr ""
+msgstr "No puede modificar un movimiento en un perÃodo cerrado."
-msgctxt "error:stock.move:0"
+msgctxt "error:stock.move:"
msgid "You can not set state to assigned!"
-msgstr "No puede establecer el estado como asignado"
+msgstr "No puede establecer el estado como reservado."
-msgctxt "error:stock.move:0"
+msgctxt "error:stock.move:"
msgid "You can not set state to done!"
-msgstr "No puede establecer el estado como terminado"
+msgstr "No puede establecer el estado como realizado."
-msgctxt "error:stock.move:0"
+msgctxt "error:stock.move:"
msgid "You can not set state to draft!"
-msgstr "No puede establecer el estado como borrador"
+msgstr "No puede establecer el estado como borrador."
-msgctxt "error:stock.move:0"
-msgid "You can not use service products for a move!"
-msgstr "No puede usar productos de servicio para un movimiento"
-
-msgctxt "error:stock.move:0"
+msgctxt "error:stock.move:"
msgid "You can only delete draft or cancelled moves!"
-msgstr "Solamente puede borrar movimientos en borrador o cancelados"
+msgstr "Sólo puede eliminar movimientos borrador o cancelados."
-msgctxt "error:stock.period:0"
+msgctxt "error:stock.period:"
msgid "You can not close a period in the future or today!"
-msgstr ""
+msgstr "No puede cerrar un perÃodo en fecha futura o de hoy."
-msgctxt "error:stock.period:0"
+msgctxt "error:stock.period:"
msgid "You can not close a period when there is still assigned moves!"
+msgstr "No puede cerrar un perÃodo cuando tiene movimientos reservados."
+
+msgctxt "error:stock.shipment.in.return:"
+msgid "Supplier Return Shipment \"%s\" must be cancelled before deletion!"
msgstr ""
+"Debe cancelar el abarán devolución de proveedor \"%s\" antes de eliminarlo."
-msgctxt "error:stock.shipment.in:0"
+msgctxt "error:stock.shipment.in:"
msgid ""
"Incoming Moves must have the warehouse input location as destination "
"location!"
msgstr ""
-"Los movimientos de entrada deben tener la ubicación del almacén de entrada "
-"como la ubicación de destino"
+"Los movimientos de entrada deben tener la ubicación de entrada del almacén "
+"como la ubicación de destino."
-msgctxt "error:stock.shipment.in:0"
+msgctxt "error:stock.shipment.in:"
msgid ""
"Inventory Moves must have the warehouse input location as source location!"
msgstr ""
-"Los movimientos de inventario deben tener la ubicación del almacén de "
-"entrada como la ubicación de origen"
+"Los movimientos internos deben tener la ubicación de entrada del almacén "
+"como la ubicación de 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 eliminarlo."
+
+msgctxt "error:stock.shipment.internal:"
+msgid "Internal Shipment \"%s\" must be cancelled before deletion!"
+msgstr "Debe cancelar el albarán interno \"%s\" antes de eliminarlo."
-msgctxt "error:stock.shipment.out.return.create:0"
+msgctxt "error:stock.shipment.out.return.create:"
msgid "The shipment with code %s is not yet sent."
-msgstr "El paquete con código %s no ha sido enviado aún."
+msgstr "El albarán con código %s aún no ha sido enviado."
-msgctxt "error:stock.shipment.out.return.create:0"
+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 albarán de devolución."
-msgctxt "error:stock.shipment.out.return:0"
-msgid ""
-"Incoming Moves must have the warehouse input location as destination "
-"location!"
-msgstr ""
-"Los movimientos de entrada deben tener la ubicación del almacén de entrada "
-"como la ubicación de destino"
+msgctxt "error:stock.shipment.out.return:"
+msgid "Customer Return Shipment \"%s\" must be cancelled before deletion!"
+msgstr "Debe cancelar el abarán devolución de cliente \"%s\" antes de eliminarlo."
-msgctxt "error:stock.shipment.out.return:0"
-msgid ""
-"Inventory Moves must have the warehouse input location as source location!"
-msgstr ""
-"Los movimientos de inventario deben tener la ubicación del almacén de "
-"entrada como la ubicación de origen"
-
-msgctxt "error:stock.shipment.out:0"
-msgid ""
-"Inventory Moves must have the warehouse output location as destination "
-"location!"
-msgstr ""
+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 eliminarlo."
-msgctxt "error:stock.shipment.out:0"
-msgid ""
-"Outgoing Moves must have the warehouse output location as source location!"
-msgstr ""
-
-msgctxt "field:party.address,delivery:0"
+msgctxt "field:party.address,delivery:"
msgid "Delivery"
msgstr "EnvÃo"
-msgctxt "field:party.party,customer_location:0"
+msgctxt "field:party.party,customer_location:"
msgid "Customer Location"
-msgstr "Ubicación del cliente"
+msgstr "Ubicación de cliente"
-msgctxt "field:party.party,supplier_location:0"
+msgctxt "field:party.party,supplier_location:"
msgid "Supplier Location"
-msgstr "Ubicación del proveedor"
+msgstr "Ubicación de proveedor"
+
+msgctxt "field:product.by_location.start,forecast_date:"
+msgid "At Date"
+msgstr "A fecha"
-msgctxt "field:product.product,forecast_quantity:0"
+msgctxt "field:product.by_location.start,id:"
+msgid "ID"
+msgstr "ID"
+
+msgctxt "field:product.product,cost_value:"
+msgid "Cost Value"
+msgstr "Valor de coste"
+
+msgctxt "field:product.product,forecast_quantity:"
msgid "Forecast Quantity"
msgstr "Cantidad prevista"
-msgctxt "field:product.product,quantity:0"
+msgctxt "field:product.product,quantity:"
msgid "Quantity"
msgstr "Cantidad"
-msgctxt "field:product.template,forecast_quantity:0"
+msgctxt "field:product.template,cost_value:"
+msgid "Cost Value"
+msgstr "Valor de coste"
+
+msgctxt "field:product.template,forecast_quantity:"
msgid "Forecast Quantity"
msgstr "Cantidad prevista"
-msgctxt "field:product.template,quantity:0"
+msgctxt "field:product.template,quantity:"
msgid "Quantity"
msgstr "Cantidad"
-#, fuzzy
-msgctxt "field:stock.configuration,rec_name:0"
+msgctxt "field:stock.configuration,create_date:"
+msgid "Create Date"
+msgstr "Fecha creación"
+
+msgctxt "field:stock.configuration,create_uid:"
+msgid "Create User"
+msgstr "Usuario creación"
+
+msgctxt "field:stock.configuration,id:"
+msgid "ID"
+msgstr "ID"
+
+msgctxt "field:stock.configuration,rec_name:"
msgid "Name"
-msgstr "Nombre del campo"
+msgstr "Nombre"
-msgctxt "field:stock.configuration,shipment_in_return_sequence:0"
+msgctxt "field:stock.configuration,shipment_in_return_sequence:"
msgid "Supplier Return Shipment Sequence"
-msgstr ""
+msgstr "Secuencia albarán devolución proveedor"
-msgctxt "field:stock.configuration,shipment_in_sequence:0"
+msgctxt "field:stock.configuration,shipment_in_sequence:"
msgid "Supplier Shipment Sequence"
-msgstr ""
+msgstr "Secuencia albarán proveedor"
-msgctxt "field:stock.configuration,shipment_internal_sequence:0"
+msgctxt "field:stock.configuration,shipment_internal_sequence:"
msgid "Internal Shipment Sequence"
-msgstr ""
+msgstr "Secuencia albarán interno"
-msgctxt "field:stock.configuration,shipment_out_return_sequence:0"
+msgctxt "field:stock.configuration,shipment_out_return_sequence:"
msgid "Customer Return Shipment Sequence"
-msgstr ""
+msgstr "Secuencia albarán devolución cliente"
-msgctxt "field:stock.configuration,shipment_out_sequence:0"
+msgctxt "field:stock.configuration,shipment_out_sequence:"
msgid "Customer Shipment Sequence"
-msgstr ""
+msgstr "Secuencia albarán cliente"
-msgctxt "field:stock.inventory,company:0"
+msgctxt "field:stock.configuration,write_date:"
+msgid "Write Date"
+msgstr "Fecha modificación"
+
+msgctxt "field:stock.configuration,write_uid:"
+msgid "Write User"
+msgstr "Usuario modificación"
+
+msgctxt "field:stock.inventory,company:"
msgid "Company"
msgstr "Empresa"
-msgctxt "field:stock.inventory,date:0"
+msgctxt "field:stock.inventory,create_date:"
+msgid "Create Date"
+msgstr "Fecha creación"
+
+msgctxt "field:stock.inventory,create_uid:"
+msgid "Create User"
+msgstr "Usuario creación"
+
+msgctxt "field:stock.inventory,date:"
msgid "Date"
msgstr "Fecha"
-msgctxt "field:stock.inventory,lines:0"
+msgctxt "field:stock.inventory,id:"
+msgid "ID"
+msgstr "ID"
+
+msgctxt "field:stock.inventory,lines:"
msgid "Lines"
msgstr "LÃneas"
-msgctxt "field:stock.inventory,location:0"
+msgctxt "field:stock.inventory,location:"
msgid "Location"
msgstr "Ubicación"
-msgctxt "field:stock.inventory,lost_found:0"
+msgctxt "field:stock.inventory,lost_found:"
msgid "Lost and Found"
-msgstr "Perdido y encontrado"
+msgstr "Perdido/encontrado"
-msgctxt "field:stock.inventory,rec_name:0"
+msgctxt "field:stock.inventory,rec_name:"
msgid "Name"
msgstr "Nombre"
-msgctxt "field:stock.inventory,state:0"
+msgctxt "field:stock.inventory,state:"
msgid "State"
msgstr "Estado"
-msgctxt "field:stock.inventory.line,expected_quantity:0"
+msgctxt "field:stock.inventory,write_date:"
+msgid "Write Date"
+msgstr "Fecha modificación"
+
+msgctxt "field:stock.inventory,write_uid:"
+msgid "Write User"
+msgstr "Usuario modificación"
+
+msgctxt "field:stock.inventory.line,create_date:"
+msgid "Create Date"
+msgstr "Fecha creación"
+
+msgctxt "field:stock.inventory.line,create_uid:"
+msgid "Create User"
+msgstr "Usuario creación"
+
+msgctxt "field:stock.inventory.line,expected_quantity:"
msgid "Expected Quantity"
-msgstr "Cantidad esperada"
+msgstr "Cantidad estimada"
-msgctxt "field:stock.inventory.line,inventory:0"
+msgctxt "field:stock.inventory.line,id:"
+msgid "ID"
+msgstr "ID"
+
+msgctxt "field:stock.inventory.line,inventory:"
msgid "Inventory"
msgstr "Inventario"
-msgctxt "field:stock.inventory.line,move:0"
+msgctxt "field:stock.inventory.line,move:"
msgid "Move"
msgstr "Movimiento"
-msgctxt "field:stock.inventory.line,product:0"
+msgctxt "field:stock.inventory.line,product:"
msgid "Product"
msgstr "Producto"
-msgctxt "field:stock.inventory.line,quantity:0"
+msgctxt "field:stock.inventory.line,quantity:"
msgid "Quantity"
msgstr "Cantidad"
-msgctxt "field:stock.inventory.line,rec_name:0"
+msgctxt "field:stock.inventory.line,rec_name:"
msgid "Name"
msgstr "Nombre"
-msgctxt "field:stock.inventory.line,unit_digits:0"
+msgctxt "field:stock.inventory.line,unit_digits:"
msgid "Unit Digits"
-msgstr "DÃgitos de la unidad"
+msgstr "Decimales de la unidad"
-msgctxt "field:stock.inventory.line,uom:0"
+msgctxt "field:stock.inventory.line,uom:"
msgid "UOM"
msgstr "UdM"
-msgctxt "field:stock.location,active:0"
+msgctxt "field:stock.inventory.line,write_date:"
+msgid "Write Date"
+msgstr "Fecha modificación"
+
+msgctxt "field:stock.inventory.line,write_uid:"
+msgid "Write User"
+msgstr "Usuario modificación"
+
+msgctxt "field:stock.location,active:"
msgid "Active"
msgstr "Activo"
-msgctxt "field:stock.location,address:0"
+msgctxt "field:stock.location,address:"
msgid "Address"
msgstr "Direcciones"
-msgctxt "field:stock.location,childs:0"
+msgctxt "field:stock.location,childs:"
msgid "Children"
msgstr "Hijos"
-msgctxt "field:stock.location,code:0"
+msgctxt "field:stock.location,code:"
msgid "Code"
msgstr "Código"
-msgctxt "field:stock.location,forecast_quantity:0"
+msgctxt "field:stock.location,cost_value:"
+msgid "Cost Value"
+msgstr "Valor de coste"
+
+msgctxt "field:stock.location,create_date:"
+msgid "Create Date"
+msgstr "Fecha creación"
+
+msgctxt "field:stock.location,create_uid:"
+msgid "Create User"
+msgstr "Usuario creación"
+
+msgctxt "field:stock.location,forecast_quantity:"
msgid "Forecast Quantity"
msgstr "Cantidad prevista"
-msgctxt "field:stock.location,input_location:0"
+msgctxt "field:stock.location,id:"
+msgid "ID"
+msgstr "ID"
+
+msgctxt "field:stock.location,input_location:"
msgid "Input"
msgstr "Entrada"
-msgctxt "field:stock.location,left:0"
+msgctxt "field:stock.location,left:"
msgid "Left"
msgstr "Izquierda"
-msgctxt "field:stock.location,name:0"
+msgctxt "field:stock.location,name:"
msgid "Name"
msgstr "Nombre"
-msgctxt "field:stock.location,output_location:0"
+msgctxt "field:stock.location,output_location:"
msgid "Output"
msgstr "Salida"
-msgctxt "field:stock.location,parent:0"
+msgctxt "field:stock.location,parent:"
msgid "Parent"
msgstr "Padre"
-msgctxt "field:stock.location,quantity:0"
+msgctxt "field:stock.location,quantity:"
msgid "Quantity"
msgstr "Cantidad"
-msgctxt "field:stock.location,rec_name:0"
+msgctxt "field:stock.location,rec_name:"
msgid "Name"
msgstr "Nombre"
-msgctxt "field:stock.location,right:0"
+msgctxt "field:stock.location,right:"
msgid "Right"
msgstr "Derecha"
-msgctxt "field:stock.location,storage_location:0"
+msgctxt "field:stock.location,storage_location:"
msgid "Storage"
-msgstr "Almacén"
+msgstr "Interna"
-msgctxt "field:stock.location,type:0"
+msgctxt "field:stock.location,type:"
msgid "Location type"
msgstr "Tipo de ubicación"
-msgctxt "field:stock.location_stock_date.init,forecast_date:0"
-msgid "At Date"
-msgstr "En la fecha"
+msgctxt "field:stock.location,write_date:"
+msgid "Write Date"
+msgstr "Fecha modificación"
-msgctxt "field:stock.move,company:0"
+msgctxt "field:stock.location,write_uid:"
+msgid "Write User"
+msgstr "Usuario modificación"
+
+msgctxt "field:stock.move,company:"
msgid "Company"
msgstr "Empresa"
-msgctxt "field:stock.move,cost_price:0"
+msgctxt "field:stock.move,cost_price:"
msgid "Cost Price"
msgstr "Precio de coste"
-msgctxt "field:stock.move,currency:0"
+msgctxt "field:stock.move,create_date:"
+msgid "Create Date"
+msgstr "Fecha creación"
+
+msgctxt "field:stock.move,create_uid:"
+msgid "Create User"
+msgstr "Usuario creación"
+
+msgctxt "field:stock.move,currency:"
msgid "Currency"
msgstr "Divisa"
-msgctxt "field:stock.move,effective_date:0"
+msgctxt "field:stock.move,effective_date:"
msgid "Effective Date"
msgstr "Fecha efectiva"
-msgctxt "field:stock.move,from_location:0"
+msgctxt "field:stock.move,from_location:"
msgid "From Location"
msgstr "Desde ubicación"
-msgctxt "field:stock.move,internal_quantity:0"
+msgctxt "field:stock.move,id:"
+msgid "ID"
+msgstr "ID"
+
+msgctxt "field:stock.move,internal_quantity:"
msgid "Internal Quantity"
-msgstr ""
+msgstr "Cantidad interna"
-msgctxt "field:stock.move,planned_date:0"
+msgctxt "field:stock.move,planned_date:"
msgid "Planned Date"
msgstr "Fecha estimada"
-msgctxt "field:stock.move,product:0"
+msgctxt "field:stock.move,product:"
msgid "Product"
msgstr "Producto"
-msgctxt "field:stock.move,quantity:0"
+msgctxt "field:stock.move,product_uom_category:"
+msgid "Product Uom Category"
+msgstr "CategorÃa UdM del producto"
+
+msgctxt "field:stock.move,quantity:"
msgid "Quantity"
msgstr "Cantidad"
-msgctxt "field:stock.move,rec_name:0"
+msgctxt "field:stock.move,rec_name:"
msgid "Name"
msgstr "Nombre"
-msgctxt "field:stock.move,shipment_in:0"
+msgctxt "field:stock.move,shipment_in:"
msgid "Supplier Shipment"
-msgstr "EnvÃo del proveedor"
+msgstr "Albarán proveedor"
-msgctxt "field:stock.move,shipment_in_return:0"
+msgctxt "field:stock.move,shipment_in_return:"
msgid "Supplier Return Shipment"
-msgstr "Envio de devolución a proveedor"
+msgstr "Albarán devolución proveedor"
-msgctxt "field:stock.move,shipment_internal:0"
+msgctxt "field:stock.move,shipment_internal:"
msgid "Internal Shipment"
-msgstr "EnvÃo interno"
+msgstr "Albarán interno"
-msgctxt "field:stock.move,shipment_out:0"
+msgctxt "field:stock.move,shipment_out:"
msgid "Customer Shipment"
-msgstr "EnvÃo a cliente"
+msgstr "Albarán cliente"
-msgctxt "field:stock.move,shipment_out_return:0"
+msgctxt "field:stock.move,shipment_out_return:"
msgid "Customer Return Shipment"
-msgstr "Envio de devolución de cliente"
+msgstr "Albarán devolución cliente"
-msgctxt "field:stock.move,state:0"
+msgctxt "field:stock.move,state:"
msgid "State"
msgstr "Estado"
-msgctxt "field:stock.move,to_location:0"
+msgctxt "field:stock.move,to_location:"
msgid "To Location"
msgstr "A ubicación"
-msgctxt "field:stock.move,unit_digits:0"
+msgctxt "field:stock.move,unit_digits:"
msgid "Unit Digits"
-msgstr "DÃgitos de unidad"
+msgstr "Decimales de la unidad"
-msgctxt "field:stock.move,unit_price:0"
+msgctxt "field:stock.move,unit_price:"
msgid "Unit Price"
-msgstr "Precio unitario"
+msgstr "Precio unidad"
-msgctxt "field:stock.move,unit_price_required:0"
+msgctxt "field:stock.move,unit_price_required:"
msgid "Unit Price Required"
-msgstr "Requiere precio unitario"
+msgstr "Precio unidad requerido"
-msgctxt "field:stock.move,uom:0"
+msgctxt "field:stock.move,uom:"
msgid "Uom"
msgstr "UdM"
-msgctxt "field:stock.period,caches:0"
+msgctxt "field:stock.move,write_date:"
+msgid "Write Date"
+msgstr "Fecha modificación"
+
+msgctxt "field:stock.move,write_uid:"
+msgid "Write User"
+msgstr "Usuario modificación"
+
+msgctxt "field:stock.period,caches:"
msgid "Caches"
-msgstr ""
+msgstr "Precalculado"
-#, fuzzy
-msgctxt "field:stock.period,company:0"
+msgctxt "field:stock.period,company:"
msgid "Company"
msgstr "Empresa"
-#, fuzzy
-msgctxt "field:stock.period,date:0"
+msgctxt "field:stock.period,create_date:"
+msgid "Create Date"
+msgstr "Fecha creación"
+
+msgctxt "field:stock.period,create_uid:"
+msgid "Create User"
+msgstr "Usuario creación"
+
+msgctxt "field:stock.period,date:"
msgid "Date"
msgstr "Fecha"
-#, fuzzy
-msgctxt "field:stock.period,rec_name:0"
+msgctxt "field:stock.period,id:"
+msgid "ID"
+msgstr "ID"
+
+msgctxt "field:stock.period,rec_name:"
msgid "Name"
-msgstr "Nombre del campo"
+msgstr "Nombre"
-#, fuzzy
-msgctxt "field:stock.period,state:0"
+msgctxt "field:stock.period,state:"
msgid "State"
msgstr "Estado"
-msgctxt "field:stock.period.cache,internal_quantity:0"
+msgctxt "field:stock.period,write_date:"
+msgid "Write Date"
+msgstr "Fecha modificación"
+
+msgctxt "field:stock.period,write_uid:"
+msgid "Write User"
+msgstr "Usuario modificación"
+
+msgctxt "field:stock.period.cache,create_date:"
+msgid "Create Date"
+msgstr "Fecha creación"
+
+msgctxt "field:stock.period.cache,create_uid:"
+msgid "Create User"
+msgstr "Usuario creación"
+
+msgctxt "field:stock.period.cache,id:"
+msgid "ID"
+msgstr "ID"
+
+msgctxt "field:stock.period.cache,internal_quantity:"
msgid "Internal Quantity"
-msgstr ""
+msgstr "Cantidad interna"
-#, fuzzy
-msgctxt "field:stock.period.cache,location:0"
+msgctxt "field:stock.period.cache,location:"
msgid "Location"
msgstr "Ubicación"
-#, fuzzy
-msgctxt "field:stock.period.cache,period:0"
+msgctxt "field:stock.period.cache,period:"
msgid "Period"
msgstr "PerÃodo"
-#, fuzzy
-msgctxt "field:stock.period.cache,product:0"
+msgctxt "field:stock.period.cache,product:"
msgid "Product"
msgstr "Producto"
-#, fuzzy
-msgctxt "field:stock.period.cache,rec_name:0"
+msgctxt "field:stock.period.cache,rec_name:"
msgid "Name"
-msgstr "Nombre del campo"
+msgstr "Nombre"
-msgctxt "field:stock.product_stock_date.init,forecast_date:0"
+msgctxt "field:stock.period.cache,write_date:"
+msgid "Write Date"
+msgstr "Fecha modificación"
+
+msgctxt "field:stock.period.cache,write_uid:"
+msgid "Write User"
+msgstr "Usuario modificación"
+
+msgctxt "field:stock.products_by_locations.start,forecast_date:"
msgid "At Date"
-msgstr "En la fecha"
+msgstr "A fecha"
+
+msgctxt "field:stock.products_by_locations.start,id:"
+msgid "ID"
+msgstr "ID"
-msgctxt "field:stock.shipment.in,code:0"
+msgctxt "field:stock.shipment.in,code:"
msgid "Code"
msgstr "Código"
-#, fuzzy
-msgctxt "field:stock.shipment.in,company:0"
+msgctxt "field:stock.shipment.in,company:"
msgid "Company"
msgstr "Empresa"
-msgctxt "field:stock.shipment.in,contact_address:0"
+msgctxt "field:stock.shipment.in,contact_address:"
msgid "Contact Address"
-msgstr "Dirección de contacto"
+msgstr "Dirección contacto"
+
+msgctxt "field:stock.shipment.in,create_date:"
+msgid "Create Date"
+msgstr "Fecha creación"
-msgctxt "field:stock.shipment.in,effective_date:0"
+msgctxt "field:stock.shipment.in,create_uid:"
+msgid "Create User"
+msgstr "Usuario creación"
+
+msgctxt "field:stock.shipment.in,effective_date:"
msgid "Effective Date"
msgstr "Fecha efectiva"
-msgctxt "field:stock.shipment.in,incoming_moves:0"
+msgctxt "field:stock.shipment.in,id:"
+msgid "ID"
+msgstr "ID"
+
+msgctxt "field:stock.shipment.in,incoming_moves:"
msgid "Incoming Moves"
msgstr "Movimientos de entrada"
-msgctxt "field:stock.shipment.in,inventory_moves:0"
+msgctxt "field:stock.shipment.in,inventory_moves:"
msgid "Inventory Moves"
-msgstr "Movimientos de inventario"
+msgstr "Movimientos internos"
-msgctxt "field:stock.shipment.in,moves:0"
+msgctxt "field:stock.shipment.in,moves:"
msgid "Moves"
msgstr "Movimientos"
-msgctxt "field:stock.shipment.in,planned_date:0"
+msgctxt "field:stock.shipment.in,planned_date:"
msgid "Planned Date"
msgstr "Fecha estimada"
-msgctxt "field:stock.shipment.in,rec_name:0"
+msgctxt "field:stock.shipment.in,rec_name:"
msgid "Name"
msgstr "Nombre"
-msgctxt "field:stock.shipment.in,reference:0"
+msgctxt "field:stock.shipment.in,reference:"
msgid "Reference"
msgstr "Referencia"
-msgctxt "field:stock.shipment.in,state:0"
+msgctxt "field:stock.shipment.in,state:"
msgid "State"
msgstr "Estado"
-msgctxt "field:stock.shipment.in,supplier:0"
+msgctxt "field:stock.shipment.in,supplier:"
msgid "Supplier"
msgstr "Proveedor"
-msgctxt "field:stock.shipment.in,warehouse:0"
+msgctxt "field:stock.shipment.in,supplier_location:"
+msgid "Supplier Location"
+msgstr "Ubicación de proveedor"
+
+msgctxt "field:stock.shipment.in,warehouse:"
msgid "Warehouse"
msgstr "Almacén"
-msgctxt "field:stock.shipment.in.return,code:0"
+msgctxt "field:stock.shipment.in,warehouse_input:"
+msgid "Warehouse Input"
+msgstr "Almacén entrada"
+
+msgctxt "field:stock.shipment.in,warehouse_storage:"
+msgid "Warehouse Storage"
+msgstr "Almacén interno"
+
+msgctxt "field:stock.shipment.in,write_date:"
+msgid "Write Date"
+msgstr "Fecha modificación"
+
+msgctxt "field:stock.shipment.in,write_uid:"
+msgid "Write User"
+msgstr "Usuario modificación"
+
+msgctxt "field:stock.shipment.in.return,code:"
msgid "Code"
msgstr "Código"
-#, fuzzy
-msgctxt "field:stock.shipment.in.return,company:0"
+msgctxt "field:stock.shipment.in.return,company:"
msgid "Company"
msgstr "Empresa"
-msgctxt "field:stock.shipment.in.return,effective_date:0"
+msgctxt "field:stock.shipment.in.return,create_date:"
+msgid "Create Date"
+msgstr "Fecha creación"
+
+msgctxt "field:stock.shipment.in.return,create_uid:"
+msgid "Create User"
+msgstr "Usuario creación"
+
+msgctxt "field:stock.shipment.in.return,effective_date:"
msgid "Effective Date"
msgstr "Fecha efectiva"
-msgctxt "field:stock.shipment.in.return,from_location:0"
+msgctxt "field:stock.shipment.in.return,from_location:"
msgid "From Location"
msgstr "Desde ubicación"
-msgctxt "field:stock.shipment.in.return,moves:0"
+msgctxt "field:stock.shipment.in.return,id:"
+msgid "ID"
+msgstr "ID"
+
+msgctxt "field:stock.shipment.in.return,moves:"
msgid "Moves"
msgstr "Movimientos"
-msgctxt "field:stock.shipment.in.return,planned_date:0"
+msgctxt "field:stock.shipment.in.return,planned_date:"
msgid "Planned Date"
msgstr "Fecha estimada"
-msgctxt "field:stock.shipment.in.return,rec_name:0"
+msgctxt "field:stock.shipment.in.return,rec_name:"
msgid "Name"
msgstr "Nombre"
-msgctxt "field:stock.shipment.in.return,reference:0"
+msgctxt "field:stock.shipment.in.return,reference:"
msgid "Reference"
msgstr "Referencia"
-msgctxt "field:stock.shipment.in.return,state:0"
+msgctxt "field:stock.shipment.in.return,state:"
msgid "State"
msgstr "Estado"
-msgctxt "field:stock.shipment.in.return,to_location:0"
+msgctxt "field:stock.shipment.in.return,to_location:"
msgid "To Location"
msgstr "A ubicación"
-msgctxt "field:stock.shipment.in.return.assign.assign_failed,moves:0"
+msgctxt "field:stock.shipment.in.return,write_date:"
+msgid "Write Date"
+msgstr "Fecha modificación"
+
+msgctxt "field:stock.shipment.in.return,write_uid:"
+msgid "Write User"
+msgstr "Usuario modificación"
+
+msgctxt "field:stock.shipment.in.return.assign.failed,id:"
+msgid "ID"
+msgstr "ID"
+
+msgctxt "field:stock.shipment.in.return.assign.failed,moves:"
msgid "Moves"
msgstr "Movimientos"
-msgctxt "field:stock.shipment.internal,code:0"
+msgctxt "field:stock.shipment.internal,code:"
msgid "Code"
msgstr "Código"
-#, fuzzy
-msgctxt "field:stock.shipment.internal,company:0"
+msgctxt "field:stock.shipment.internal,company:"
msgid "Company"
msgstr "Empresa"
-msgctxt "field:stock.shipment.internal,effective_date:0"
+msgctxt "field:stock.shipment.internal,create_date:"
+msgid "Create Date"
+msgstr "Fecha creación"
+
+msgctxt "field:stock.shipment.internal,create_uid:"
+msgid "Create User"
+msgstr "Usuario creación"
+
+msgctxt "field:stock.shipment.internal,effective_date:"
msgid "Effective Date"
msgstr "Fecha efectiva"
-msgctxt "field:stock.shipment.internal,from_location:0"
+msgctxt "field:stock.shipment.internal,from_location:"
msgid "From Location"
msgstr "Desde ubicación"
-msgctxt "field:stock.shipment.internal,moves:0"
+msgctxt "field:stock.shipment.internal,id:"
+msgid "ID"
+msgstr "ID"
+
+msgctxt "field:stock.shipment.internal,moves:"
msgid "Moves"
msgstr "Movimientos"
-msgctxt "field:stock.shipment.internal,planned_date:0"
+msgctxt "field:stock.shipment.internal,planned_date:"
msgid "Planned Date"
msgstr "Fecha estimada"
-msgctxt "field:stock.shipment.internal,rec_name:0"
+msgctxt "field:stock.shipment.internal,rec_name:"
msgid "Name"
msgstr "Nombre"
-msgctxt "field:stock.shipment.internal,reference:0"
+msgctxt "field:stock.shipment.internal,reference:"
msgid "Reference"
msgstr "Referencia"
-msgctxt "field:stock.shipment.internal,state:0"
+msgctxt "field:stock.shipment.internal,state:"
msgid "State"
msgstr "Estado"
-msgctxt "field:stock.shipment.internal,to_location:0"
+msgctxt "field:stock.shipment.internal,to_location:"
msgid "To Location"
msgstr "A ubicación"
-msgctxt "field:stock.shipment.internal.assign.assign_failed,moves:0"
+msgctxt "field:stock.shipment.internal,write_date:"
+msgid "Write Date"
+msgstr "Fecha modificación"
+
+msgctxt "field:stock.shipment.internal,write_uid:"
+msgid "Write User"
+msgstr "Usuario modificación"
+
+msgctxt "field:stock.shipment.internal.assign.failed,id:"
+msgid "ID"
+msgstr "ID"
+
+msgctxt "field:stock.shipment.internal.assign.failed,moves:"
msgid "Moves"
msgstr "Movimientos"
-msgctxt "field:stock.shipment.out,code:0"
+msgctxt "field:stock.shipment.out,code:"
msgid "Code"
msgstr "Código"
-#, fuzzy
-msgctxt "field:stock.shipment.out,company:0"
+msgctxt "field:stock.shipment.out,company:"
msgid "Company"
msgstr "Empresa"
-msgctxt "field:stock.shipment.out,customer:0"
+msgctxt "field:stock.shipment.out,create_date:"
+msgid "Create Date"
+msgstr "Fecha creación"
+
+msgctxt "field:stock.shipment.out,create_uid:"
+msgid "Create User"
+msgstr "Usuario creación"
+
+msgctxt "field:stock.shipment.out,customer:"
msgid "Customer"
msgstr "Cliente"
-msgctxt "field:stock.shipment.out,delivery_address:0"
+msgctxt "field:stock.shipment.out,customer_location:"
+msgid "Customer Location"
+msgstr "Ubicación de cliente"
+
+msgctxt "field:stock.shipment.out,delivery_address:"
msgid "Delivery Address"
-msgstr "Dirección de envÃo"
+msgstr "Dirección envÃo"
-msgctxt "field:stock.shipment.out,effective_date:0"
+msgctxt "field:stock.shipment.out,effective_date:"
msgid "Effective Date"
msgstr "Fecha efectiva"
-msgctxt "field:stock.shipment.out,inventory_moves:0"
+msgctxt "field:stock.shipment.out,id:"
+msgid "ID"
+msgstr "ID"
+
+msgctxt "field:stock.shipment.out,inventory_moves:"
msgid "Inventory Moves"
-msgstr "Movimientos de inventario"
+msgstr "Movimientos internos"
-msgctxt "field:stock.shipment.out,moves:0"
+msgctxt "field:stock.shipment.out,moves:"
msgid "Moves"
msgstr "Movimientos"
-msgctxt "field:stock.shipment.out,outgoing_moves:0"
+msgctxt "field:stock.shipment.out,outgoing_moves:"
msgid "Outgoing Moves"
msgstr "Movimientos de salida"
-msgctxt "field:stock.shipment.out,planned_date:0"
+msgctxt "field:stock.shipment.out,planned_date:"
msgid "Planned Date"
msgstr "Fecha estimada"
-msgctxt "field:stock.shipment.out,rec_name:0"
+msgctxt "field:stock.shipment.out,rec_name:"
msgid "Name"
msgstr "Nombre"
-msgctxt "field:stock.shipment.out,reference:0"
+msgctxt "field:stock.shipment.out,reference:"
msgid "Reference"
msgstr "Referencia"
-msgctxt "field:stock.shipment.out,state:0"
+msgctxt "field:stock.shipment.out,state:"
msgid "State"
msgstr "Estado"
-msgctxt "field:stock.shipment.out,warehouse:0"
+msgctxt "field:stock.shipment.out,warehouse:"
msgid "Warehouse"
msgstr "Almacén"
-msgctxt "field:stock.shipment.out.assign.assign_failed,inventory_moves:0"
+msgctxt "field:stock.shipment.out,warehouse_output:"
+msgid "Warehouse Output"
+msgstr "Almacén salida"
+
+msgctxt "field:stock.shipment.out,warehouse_storage:"
+msgid "Warehouse Storage"
+msgstr "Almacén interno"
+
+msgctxt "field:stock.shipment.out,write_date:"
+msgid "Write Date"
+msgstr "Fecha modificación"
+
+msgctxt "field:stock.shipment.out,write_uid:"
+msgid "Write User"
+msgstr "Usuario modificación"
+
+msgctxt "field:stock.shipment.out.assign.failed,id:"
+msgid "ID"
+msgstr "ID"
+
+msgctxt "field:stock.shipment.out.assign.failed,inventory_moves:"
msgid "Inventory Moves"
-msgstr "Movimientos de inventario"
+msgstr "Movimientos internos"
-msgctxt "field:stock.shipment.out.return,code:0"
+msgctxt "field:stock.shipment.out.return,code:"
msgid "Code"
msgstr "Código"
-#, fuzzy
-msgctxt "field:stock.shipment.out.return,company:0"
+msgctxt "field:stock.shipment.out.return,company:"
msgid "Company"
msgstr "Empresa"
-msgctxt "field:stock.shipment.out.return,customer:0"
+msgctxt "field:stock.shipment.out.return,create_date:"
+msgid "Create Date"
+msgstr "Fecha creación"
+
+msgctxt "field:stock.shipment.out.return,create_uid:"
+msgid "Create User"
+msgstr "Usuario creación"
+
+msgctxt "field:stock.shipment.out.return,customer:"
msgid "Customer"
msgstr "Cliente"
-msgctxt "field:stock.shipment.out.return,delivery_address:0"
+msgctxt "field:stock.shipment.out.return,customer_location:"
+msgid "Customer Location"
+msgstr "Ubicación de cliente"
+
+msgctxt "field:stock.shipment.out.return,delivery_address:"
msgid "Delivery Address"
-msgstr "Dirección de envÃo"
+msgstr "Dirección envÃo"
-msgctxt "field:stock.shipment.out.return,effective_date:0"
+msgctxt "field:stock.shipment.out.return,effective_date:"
msgid "Effective Date"
msgstr "Fecha efectiva"
-msgctxt "field:stock.shipment.out.return,incoming_moves:0"
+msgctxt "field:stock.shipment.out.return,id:"
+msgid "ID"
+msgstr "ID"
+
+msgctxt "field:stock.shipment.out.return,incoming_moves:"
msgid "Incoming Moves"
msgstr "Movimientos de entrada"
-msgctxt "field:stock.shipment.out.return,inventory_moves:0"
+msgctxt "field:stock.shipment.out.return,inventory_moves:"
msgid "Inventory Moves"
-msgstr "Movimientos de inventario"
+msgstr "Movimientos internos"
-msgctxt "field:stock.shipment.out.return,moves:0"
+msgctxt "field:stock.shipment.out.return,moves:"
msgid "Moves"
msgstr "Movimientos"
-msgctxt "field:stock.shipment.out.return,planned_date:0"
+msgctxt "field:stock.shipment.out.return,planned_date:"
msgid "Planned Date"
msgstr "Fecha estimada"
-msgctxt "field:stock.shipment.out.return,rec_name:0"
+msgctxt "field:stock.shipment.out.return,rec_name:"
msgid "Name"
msgstr "Nombre"
-msgctxt "field:stock.shipment.out.return,reference:0"
+msgctxt "field:stock.shipment.out.return,reference:"
msgid "Reference"
msgstr "Referencia"
-msgctxt "field:stock.shipment.out.return,state:0"
+msgctxt "field:stock.shipment.out.return,state:"
msgid "State"
msgstr "Estado"
-msgctxt "field:stock.shipment.out.return,warehouse:0"
+msgctxt "field:stock.shipment.out.return,warehouse:"
msgid "Warehouse"
msgstr "Almacén"
-msgctxt "help:party.party,customer_location:0"
+msgctxt "field:stock.shipment.out.return,warehouse_input:"
+msgid "Warehouse Input"
+msgstr "Almacén entrada"
+
+msgctxt "field:stock.shipment.out.return,warehouse_storage:"
+msgid "Warehouse Storage"
+msgstr "Almacén interno"
+
+msgctxt "field:stock.shipment.out.return,write_date:"
+msgid "Write Date"
+msgstr "Fecha modificación"
+
+msgctxt "field:stock.shipment.out.return,write_uid:"
+msgid "Write User"
+msgstr "Usuario modificación"
+
+msgctxt "help:party.party,customer_location:"
msgid "The default destination location when sending products to the party."
msgstr ""
-"El lugar de destino predeterminado cuando se envian productos al tercero."
+"La ubicación de destino por defecto cuando se envÃan productos al tercero."
-msgctxt "help:party.party,supplier_location:0"
+msgctxt "help:party.party,supplier_location:"
msgid "The default source location when receiving products from the party."
msgstr ""
-"La ubicación de origen predeterminado cuando se reciben productos del "
-"tercero."
+"La ubicación de origen por defecto cuando se reciben productos del tercero."
-msgctxt "help:stock.location_stock_date.init,forecast_date:0"
+msgctxt "help:product.by_location.start,forecast_date:"
msgid ""
"Allow to compute expected stock quantities for this date.\n"
"* An empty value is an infinite date in the future.\n"
"* A date in the past will provide historical values."
msgstr ""
-"Permite calcular las existencias esperadas para esta fecha.\n"
-"* Un valor vacÃo es una fecha infinita en el futuro.\n"
-"* Una fecha pasada proveerá de datos históricos."
+"Permite calcular las cantidades previstas de stock para esta fecha.\n"
+"* Un valor vacÃo es un fecha infinita en el futuro.\n"
+"* Una fecha en el pasado proporcionará valores históricos."
-msgctxt "help:stock.product_stock_date.init,forecast_date:0"
+msgctxt "help:stock.products_by_locations.start,forecast_date:"
msgid ""
"Allow to compute expected stock quantities for this date.\n"
"* An empty value is an infinite date in the future.\n"
"* A date in the past will provide historical values."
msgstr ""
-"Permite calcular las existencias esperadas para esta fecha.\n"
-"* Un valor vacÃo es una fecha infinita en el futuro.\n"
-"* Una fecha pasada proveerá de datos históricos."
+"Permite calcular las cantidades previstas de stock para esta fecha.\n"
+"* Un valor vacÃo es un fecha infinita en el futuro.\n"
+"* Una fecha en el pasado proporcionará valores históricos."
msgctxt "model:ir.action,name:act_inventory_form"
msgid "Inventories"
@@ -738,16 +1032,16 @@ msgstr "Inventarios"
msgctxt "model:ir.action,name:act_inventory_form_draft"
msgid "Draft Inventories"
-msgstr ""
+msgstr "Inventario borrador"
-#, fuzzy
msgctxt "model:ir.action,name:act_location_form"
msgid "Locations"
msgstr "Editar ubicaciones"
+#, fuzzy
msgctxt "model:ir.action,name:act_location_quantity_tree"
-msgid "Product Stock"
-msgstr "Existencias de producto"
+msgid "Location Quantity & Cost Value"
+msgstr "Cantidad y valor coste por ubicación"
msgctxt "model:ir.action,name:act_location_tree"
msgid "Locations"
@@ -759,176 +1053,171 @@ msgstr "Movimientos"
msgctxt "model:ir.action,name:act_move_form_cust"
msgid "Moves to Customers"
-msgstr "Movimientos hacia clientes"
+msgstr "Movimientos clientes"
msgctxt "model:ir.action,name:act_move_form_supp"
msgid "Moves from Suppliers"
-msgstr "Movimientos de proveedores"
+msgstr "Movimientos proveedores"
msgctxt "model:ir.action,name:act_move_form_supp_proceed"
msgid "Moves from Suppliers Waiting Arrival"
-msgstr "Movimientos de proveedores en espera de llegada"
+msgstr "Movimientos proveedor esperando llegada"
-#, fuzzy
msgctxt "model:ir.action,name:act_period_list"
msgid "Periods"
msgstr "PerÃodos"
-msgctxt "model:ir.action,name:act_product_by_location"
+msgctxt "model:ir.action,name:act_products_by_locations"
msgid "Products by Locations"
-msgstr "Productos por Ubicaciones"
+msgstr "Productos por ubicación"
msgctxt "model:ir.action,name:act_shipment_in_draft"
msgid "Draft Supplier Shipment"
-msgstr ""
+msgstr "Albarán proveedor borrador"
msgctxt "model:ir.action,name:act_shipment_in_form"
msgid "Supplier Shipments"
-msgstr "EnvÃos del proveedor"
+msgstr "Albaranes proveedor"
msgctxt "model:ir.action,name:act_shipment_in_form_received"
msgid "Received Supplier shipments"
-msgstr "Paquetes recibidos de proveedores"
+msgstr "Albaranes de proveedor recibidos"
msgctxt "model:ir.action,name:act_shipment_in_return_form"
msgid "Supplier Return Shipments"
-msgstr "Envios de devolución a proveedor"
+msgstr "Albaranes devolución a proveedor"
msgctxt "model:ir.action,name:act_shipment_internal_assigned_form"
msgid "Assigned Internal Shipments"
-msgstr "EnvÃos internos asignados"
+msgstr "Albaranes internos reservados"
msgctxt "model:ir.action,name:act_shipment_internal_draft_form"
msgid "Draft Internal Shipments"
-msgstr "EnvÃos internos en borrador"
+msgstr "Albaranes internos borrador"
msgctxt "model:ir.action,name:act_shipment_internal_form"
msgid "Internal Shipments"
-msgstr "EnvÃos internos"
+msgstr "Albaranes internos"
msgctxt "model:ir.action,name:act_shipment_internal_waiting_form"
msgid "Internal Shipments Waiting Assignation"
-msgstr "EnvÃos internos esperando asignación"
+msgstr "Albaranes internos esperando reserva"
msgctxt "model:ir.action,name:act_shipment_out_form"
msgid "Customer Shipments"
-msgstr "EnvÃos a cliente"
+msgstr "Albaranes cliente"
msgctxt "model:ir.action,name:act_shipment_out_form2"
msgid "Customer Shipments"
-msgstr "EnvÃos de cliente"
+msgstr "Albaranes cliente"
msgctxt "model:ir.action,name:act_shipment_out_form3"
msgid "Supplier Shipments"
-msgstr "Envios a proveedor"
+msgstr "Albaranes de proveedor"
msgctxt "model:ir.action,name:act_shipment_out_form_assigned"
msgid "Assigned Customer Shipments"
-msgstr "EnvÃos a clientes asignados"
+msgstr "Albaranes a clientes reservados"
msgctxt "model:ir.action,name:act_shipment_out_form_ready"
msgid "Customer Shipments Ready for Shipping"
-msgstr "EnvÃos a cliente listos para ser enviados"
+msgstr "Albaranes a cliente listos para ser enviados"
msgctxt "model:ir.action,name:act_shipment_out_form_waiting"
msgid "Customer Shipments Waiting Assignation"
-msgstr "EnvÃos a cliente esperando asignación"
+msgstr "Albaranes a cliente esperando reserva"
msgctxt "model:ir.action,name:act_shipment_out_return_form"
msgid "Customer Return Shipments"
-msgstr "Envios de devoluciones de cliente"
+msgstr "Albaranes de devolución de cliente"
msgctxt "model:ir.action,name:act_stock_configuration_form"
msgid "Stock Configuration"
-msgstr ""
+msgstr "Configuración stock"
msgctxt "model:ir.action,name:create_shipment_out_return"
msgid "Create Return Shipment"
-msgstr "Crear envio de devolución"
+msgstr "Crear albarán de devolución"
msgctxt "model:ir.action,name:report_shipment_in_restocking_list"
msgid "Restocking List"
-msgstr "Lista de renovación de inventario"
+msgstr "Lista reabastecimiento"
msgctxt "model:ir.action,name:report_shipment_internal"
msgid "Internal Shipment"
-msgstr "EnvÃo interno"
+msgstr "Albarán interno"
msgctxt "model:ir.action,name:report_shipment_out_delivery_note"
msgid "Delivery Note"
-msgstr "Albarán de envÃo"
+msgstr "Nota de envÃo"
msgctxt "model:ir.action,name:report_shipment_out_picking_list"
msgid "Picking List"
-msgstr "Lista de selección"
+msgstr "Lista recogida"
msgctxt "model:ir.action,name:report_shipment_out_return_restocking_list"
msgid "Restocking List"
-msgstr "Lista de renovación de inventario"
+msgstr "Lista reabastecimiento"
-msgctxt "model:ir.action,name:wizard_complete_inventory"
-msgid "Complete Inventory"
-msgstr "Inventario completo"
-
-msgctxt "model:ir.action,name:wizard_location_open"
+msgctxt "model:ir.action,name:wizard_product_by_location"
msgid "Product by Location"
msgstr "Producto por ubicación"
-msgctxt "model:ir.action,name:wizard_product_open"
-msgid "Product Quantities"
-msgstr "Cantidades de producto"
+msgctxt "model:ir.action,name:wizard_products_by_locations"
+msgid "Products by Locations"
+msgstr "Productos por ubicación"
msgctxt "model:ir.action,name:wizard_shipment_in_return_assign"
msgid "Assign Purchase Return Shipment"
-msgstr "Asignar envio de devolución de compra"
+msgstr "Reservar albarán de devolución de compra"
msgctxt "model:ir.action,name:wizard_shipment_internal_assign"
msgid "Assign Shipment Internal"
-msgstr "Asignar envÃo interno"
+msgstr "Reservar albarán interno"
msgctxt "model:ir.action,name:wizard_shipment_out_assign"
msgid "Assign Shipment Out"
-msgstr "Asignación de salida de envÃo"
+msgstr "Reservar albarán de salida"
msgctxt "model:ir.sequence,name:sequence_shipment_in"
msgid "Supplier Shipment"
-msgstr "EnvÃo de proveedor"
+msgstr "Albarán de proveedor"
msgctxt "model:ir.sequence,name:sequence_shipment_in_return"
msgid "Supplier Return Shipment"
-msgstr "Envio de devolución a proveedor"
+msgstr "Albarán devolución proveedor"
msgctxt "model:ir.sequence,name:sequence_shipment_internal"
msgid "Internal Shipment"
-msgstr "EnvÃo interno"
+msgstr "Albarán interno"
msgctxt "model:ir.sequence,name:sequence_shipment_out"
msgid "Customer Shipment"
-msgstr "EnvÃo a cliente"
+msgstr "Albarán cliente"
msgctxt "model:ir.sequence,name:sequence_shipment_out_return"
msgid "Customer Return Shipment"
-msgstr "Envio de devolución de cliente"
+msgstr "Albarán devolución de cliente"
msgctxt "model:ir.sequence.type,name:sequence_type_shipment_in"
msgid "Supplier Shipment"
-msgstr "EnvÃo de proveedor"
+msgstr "Albarán proveedor"
msgctxt "model:ir.sequence.type,name:sequence_type_shipment_in_return"
msgid "Supplier Return Shipment"
-msgstr "Envio de devolución a proveedor"
+msgstr "Albarán devolución proveedor"
msgctxt "model:ir.sequence.type,name:sequence_type_shipment_internal"
msgid "Internal Shipment"
-msgstr "EnvÃo interno"
+msgstr "Albarán interno"
msgctxt "model:ir.sequence.type,name:sequence_type_shipment_out"
msgid "Customer Shipment"
-msgstr "EnvÃo a cliente"
+msgstr "Albarán cliente"
msgctxt "model:ir.sequence.type,name:sequence_type_shipment_out_return"
msgid "Customer Return Shipment"
-msgstr "Envio de devolución de cliente"
+msgstr "Albarán devolución cliente"
msgctxt "model:ir.ui.menu,name:menu_configuration"
msgid "Configuration"
@@ -940,12 +1229,11 @@ msgstr "Inventarios"
msgctxt "model:ir.ui.menu,name:menu_inventory_form_draft"
msgid "Draft Inventories"
-msgstr ""
+msgstr "Inventarios borrador"
-#, fuzzy
msgctxt "model:ir.ui.menu,name:menu_location_form"
msgid "Locations"
-msgstr "Editar ubicaciones"
+msgstr "Ubicaciones"
msgctxt "model:ir.ui.menu,name:menu_location_tree"
msgid "Locations"
@@ -957,17 +1245,16 @@ msgstr "Movimientos"
msgctxt "model:ir.ui.menu,name:menu_move_form_cust"
msgid "Moves to Customers"
-msgstr "Movimientos hacia clientes"
+msgstr "Movimientos clientes"
msgctxt "model:ir.ui.menu,name:menu_move_form_supp"
msgid "Moves from Suppliers"
-msgstr "Movimientos de proveedores"
+msgstr "Movimientos proveedores"
msgctxt "model:ir.ui.menu,name:menu_move_form_supp_proceed"
msgid "Moves from Suppliers Waiting Arrival"
-msgstr "Movimientos de proveedores en espera de llegada"
+msgstr "Proveedor esperando llegada"
-#, fuzzy
msgctxt "model:ir.ui.menu,name:menu_period_list"
msgid "Periods"
msgstr "PerÃodos"
@@ -978,92 +1265,95 @@ msgstr "Informes"
msgctxt "model:ir.ui.menu,name:menu_shipment_in_draft"
msgid "Draft Supplier Shipment"
-msgstr ""
+msgstr "Proveedor borrador"
msgctxt "model:ir.ui.menu,name:menu_shipment_in_form"
msgid "Supplier Shipments"
-msgstr "EnvÃos del proveedor"
+msgstr "Albaranes proveedor"
msgctxt "model:ir.ui.menu,name:menu_shipment_in_received"
msgid "Received Supplier shipments"
-msgstr "Paquetes de proveedores recibidos"
+msgstr "Proveedor recibidos"
msgctxt "model:ir.ui.menu,name:menu_shipment_in_return_form"
msgid "Supplier Return Shipments"
-msgstr "Envios de devolución a proveedor"
+msgstr "Proveedor devolución"
msgctxt "model:ir.ui.menu,name:menu_shipment_internal_assigned_form"
msgid "Assigned Internal Shipments"
-msgstr "EnvÃos internos asignados"
+msgstr "Internos reservados"
msgctxt "model:ir.ui.menu,name:menu_shipment_internal_draft_form"
msgid "Draft Internal Shipments"
-msgstr "EnvÃos Internos en borrador"
+msgstr "Internos borrador"
msgctxt "model:ir.ui.menu,name:menu_shipment_internal_form"
msgid "Internal Shipments"
-msgstr "EnvÃos internos"
+msgstr "Albaranes internos"
msgctxt "model:ir.ui.menu,name:menu_shipment_internal_waiting_form"
msgid "Internal Shipments Waiting Assignation"
-msgstr "EnvÃo internos esperando asignación"
+msgstr "Internos esperando reserva"
msgctxt "model:ir.ui.menu,name:menu_shipment_out_assigned"
msgid "Assigned Customer Shipments"
-msgstr "EnvÃos a clientes asignados"
+msgstr "Cliente reservados"
msgctxt "model:ir.ui.menu,name:menu_shipment_out_form"
msgid "Customer Shipments"
-msgstr "EnvÃos al cliente"
+msgstr "Albaranes cliente"
msgctxt "model:ir.ui.menu,name:menu_shipment_out_ready"
msgid "Customer Shipments Ready for Shipping"
-msgstr "EnvÃos al cliente listos para su envio"
+msgstr "Cliente listos para envÃo"
msgctxt "model:ir.ui.menu,name:menu_shipment_out_return_form"
msgid "Customer Return Shipments"
-msgstr "Envio de devolución de cliente"
+msgstr "Cliente devolución"
msgctxt "model:ir.ui.menu,name:menu_shipment_out_waiting"
msgid "Customer Shipments Waiting Assignation"
-msgstr "EnvÃos a cliente esperando asignación"
+msgstr "Cliente esperando reserva"
-#, fuzzy
msgctxt "model:ir.ui.menu,name:menu_stock"
msgid "Inventory & Stock"
-msgstr "Gestión de Inventarios"
+msgstr "LogÃstica"
msgctxt "model:ir.ui.menu,name:menu_stock_configuration"
msgid "Stock Configuration"
-msgstr ""
+msgstr "Stock"
+
+msgctxt "model:product.by_location.start,name:"
+msgid "Product by Location"
+msgstr "Producto por ubicación"
msgctxt "model:res.group,name:group_stock"
msgid "Stock"
-msgstr "Existencias"
+msgstr "Stock"
msgctxt "model:res.group,name:group_stock_admin"
msgid "Stock Administration"
-msgstr "Administración de existencias"
+msgstr "Administración de stock"
msgctxt "model:res.group,name:group_stock_force_assignment"
msgid "Stock Force Assignment"
-msgstr "Asignación forzada de existencias"
+msgstr "Reserva forzada de stock"
-msgctxt "model:stock.configuration,name:0"
+msgctxt "model:stock.configuration,name:"
msgid "Stock Configuration"
-msgstr ""
+msgstr "Configuración stock"
-msgctxt "model:stock.inventory,name:0"
+msgctxt "model:stock.inventory,name:"
msgid "Stock Inventory"
-msgstr "Inventario de existencia"
+msgstr "Inventario de stock"
-msgctxt "model:stock.inventory.line,name:0"
+msgctxt "model:stock.inventory.line,name:"
msgid "Stock Inventory Line"
-msgstr "LÃnea de existencia en Inventario "
+msgstr "LÃnea inventario de stock"
-msgctxt "model:stock.location,name:0"
+msgctxt "model:stock.location,name:"
msgid "Stock Location"
-msgstr "Ubicación de existencia"
+msgstr "Ubicación de stock"
msgctxt "model:stock.location,name:location_customer"
msgid "Customer"
@@ -1093,1048 +1383,891 @@ msgctxt "model:stock.location,name:location_warehouse"
msgid "Warehouse"
msgstr "Almacén"
-msgctxt "model:stock.location_stock_date.init,name:0"
-msgid "Compute stock quantities"
-msgstr "Calcular cantidades de existencias"
-
-msgctxt "model:stock.move,name:0"
+msgctxt "model:stock.move,name:"
msgid "Stock Move"
-msgstr "Movimiento de existencias"
+msgstr "Movimiento de stock"
-msgctxt "model:stock.period,name:0"
+msgctxt "model:stock.period,name:"
msgid "Stock Period"
-msgstr ""
+msgstr "PerÃodo de stock"
-msgctxt "model:stock.period.cache,name:0"
-msgid ""
-"\n"
-" Stock Period Cache\n"
-"\n"
-" It is used to store cached computation of stock quantities.\n"
-" "
-msgstr ""
+#, fuzzy
+msgctxt "model:stock.period.cache,name:"
+msgid "stock.period.cache"
+msgstr "stock.period.cache"
-msgctxt "model:stock.product_stock_date.init,name:0"
-msgid "Compute stock quantities"
-msgstr "Calcular cantidades de existencias"
+msgctxt "model:stock.products_by_locations.start,name:"
+msgid "Products by Locations"
+msgstr "Productos por ubicación"
-msgctxt "model:stock.shipment.in,name:0"
+msgctxt "model:stock.shipment.in,name:"
msgid "Supplier Shipment"
-msgstr "EnvÃo de proveedor"
+msgstr "Albaranes proveedor"
-msgctxt "model:stock.shipment.in.return,name:0"
+msgctxt "model:stock.shipment.in.return,name:"
msgid "Supplier Return Shipment"
-msgstr "Envio de devolución a proveedor"
+msgstr "Albarán devolución proveedor"
-#, fuzzy
-msgctxt "model:stock.shipment.in.return.assign.assign_failed,name:0"
-msgid "Assign Supplier Return Shipment Assign Failed"
-msgstr "Asignar envio interno de proveedor - Solicitud forzosa"
+msgctxt "model:stock.shipment.in.return.assign.failed,name:"
+msgid "Assign Supplier Return Shipment"
+msgstr "Reservar albaranes de devolución de proveedor"
-msgctxt "model:stock.shipment.internal,name:0"
+msgctxt "model:stock.shipment.internal,name:"
msgid "Internal Shipment"
-msgstr "EnvÃo interno"
+msgstr "Albarán interno"
-#, fuzzy
-msgctxt "model:stock.shipment.internal.assign.assign_failed,name:0"
-msgid "Assign Shipment Internal Assign Failed"
-msgstr "Asignar envio interno - Solicitud forzosa"
+msgctxt "model:stock.shipment.internal.assign.failed,name:"
+msgid "Assign Shipment Internal"
+msgstr "Reservar albarán interno"
-msgctxt "model:stock.shipment.out,name:0"
+msgctxt "model:stock.shipment.out,name:"
msgid "Customer Shipment"
-msgstr "EnvÃo a cliente"
-
-#, fuzzy
-msgctxt "model:stock.shipment.out.assign.assign_failed,name:0"
-msgid "Assign Shipment Out Assign Failed"
-msgstr "Asignar envio de salida - Solicitud forzosa"
+msgstr "Albarán cliente"
-msgctxt "model:stock.shipment.out.return,name:0"
-msgid "Customer Return Shipment"
-msgstr "Envio de devolución de cliente"
-
-msgctxt "model:workflow,name:wkf_inventory"
-msgid "Inventory"
-msgstr "Inventario"
-
-msgctxt "model:workflow,name:wkf_shipment_in_return"
-msgid "Supplier Return Shipment"
-msgstr "Envio de devolución a proveedor"
+msgctxt "model:stock.shipment.out.assign.failed,name:"
+msgid "Assign Shipment Out"
+msgstr "Reservar albarán de salida"
-msgctxt "model:workflow,name:wkf_shipment_out_return"
+msgctxt "model:stock.shipment.out.return,name:"
msgid "Customer Return Shipment"
-msgstr "Envio de devolución de Cliente"
-
-msgctxt "model:workflow,name:wkf_shipmentin"
-msgid "Supplier Shipment"
-msgstr "EnvÃo de proveedor"
-
-msgctxt "model:workflow,name:wkf_shipmentinternal"
-msgid "Internal Shipment"
-msgstr "EnvÃo interno"
-
-msgctxt "model:workflow,name:wkf_shipmentout"
-msgid "Customer Shipment"
-msgstr "EnvÃo a cliente"
-
-msgctxt "model:workflow.activity,name:inventory_act_cancel"
-msgid "Canceled"
-msgstr "Cancelado"
-
-msgctxt "model:workflow.activity,name:inventory_act_done"
-msgid "Done"
-msgstr "Terminado"
-
-msgctxt "model:workflow.activity,name:inventory_act_draft"
-msgid "Draft"
-msgstr "Borrador"
-
-msgctxt "model:workflow.activity,name:shipment_in_return_act_assigned"
-msgid "Assigned"
-msgstr "Asignado"
-
-msgctxt "model:workflow.activity,name:shipment_in_return_act_cancel"
-msgid "Canceled"
-msgstr "Cancelado"
-
-msgctxt "model:workflow.activity,name:shipment_in_return_act_done"
-msgid "Done"
-msgstr "Terminado"
-
-msgctxt "model:workflow.activity,name:shipment_in_return_act_draft"
-msgid "Draft"
-msgstr "Borrador"
-
-msgctxt "model:workflow.activity,name:shipment_in_return_act_waiting"
-msgid "Waiting"
-msgstr "En espera"
-
-msgctxt "model:workflow.activity,name:shipment_out_return_act_cancel"
-msgid "Canceled"
-msgstr "Cancelado"
-
-msgctxt "model:workflow.activity,name:shipment_out_return_act_done"
-msgid "Done"
-msgstr "Terminado"
-
-msgctxt "model:workflow.activity,name:shipment_out_return_act_draft"
-msgid "Draft"
-msgstr "Borrador"
-
-msgctxt "model:workflow.activity,name:shipment_out_return_act_received"
-msgid "Received"
-msgstr "Recibido"
-
-msgctxt "model:workflow.activity,name:shipmentin_act_cancel"
-msgid "Canceled"
-msgstr "Cancelado"
-
-msgctxt "model:workflow.activity,name:shipmentin_act_done"
-msgid "Done"
-msgstr "Terminado"
-
-msgctxt "model:workflow.activity,name:shipmentin_act_draft"
-msgid "Draft"
-msgstr "Borrador"
-
-msgctxt "model:workflow.activity,name:shipmentin_act_received"
-msgid "Received"
-msgstr "Recibido"
+msgstr "Albarán devolución cliente"
-msgctxt "model:workflow.activity,name:shipmentinternal_act_assigned"
-msgid "Assigned"
-msgstr "Asignado"
-
-msgctxt "model:workflow.activity,name:shipmentinternal_act_cancel"
-msgid "Canceled"
-msgstr "Cancelado"
-
-msgctxt "model:workflow.activity,name:shipmentinternal_act_done"
-msgid "Done"
-msgstr "Terminado"
-
-msgctxt "model:workflow.activity,name:shipmentinternal_act_draft"
-msgid "Draft"
-msgstr "Borrador"
-
-msgctxt "model:workflow.activity,name:shipmentinternal_act_waiting"
-msgid "Waiting"
-msgstr "En espera"
-
-msgctxt "model:workflow.activity,name:shipmentout_act_assigned"
-msgid "Assigned"
-msgstr "Asignado"
-
-msgctxt "model:workflow.activity,name:shipmentout_act_cancel"
-msgid "Canceled"
-msgstr "Cancelado"
-
-msgctxt "model:workflow.activity,name:shipmentout_act_done"
-msgid "Done"
-msgstr "Terminado"
-
-msgctxt "model:workflow.activity,name:shipmentout_act_draft"
-msgid "Draft"
-msgstr "Borrador"
-
-msgctxt "model:workflow.activity,name:shipmentout_act_packed"
-msgid "Packed"
-msgstr "Empaquetado"
-
-msgctxt "model:workflow.activity,name:shipmentout_act_waiting"
-msgid "Waiting"
-msgstr "En espera"
-
-msgctxt "odt:stock.shipment.in.restocking_list:0"
+msgctxt "odt:stock.shipment.in.restocking_list:"
msgid "/"
msgstr "/"
-msgctxt "odt:stock.shipment.in.restocking_list:0"
+msgctxt "odt:stock.shipment.in.restocking_list:"
msgid "Code:"
msgstr "Código:"
-msgctxt "odt:stock.shipment.in.restocking_list:0"
+msgctxt "odt:stock.shipment.in.restocking_list:"
msgid "E-Mail:"
msgstr "Correo electrónico:"
-msgctxt "odt:stock.shipment.in.restocking_list:0"
+msgctxt "odt:stock.shipment.in.restocking_list:"
msgid "From Location"
msgstr "Desde ubicación"
-msgctxt "odt:stock.shipment.in.restocking_list:0"
+msgctxt "odt:stock.shipment.in.restocking_list:"
msgid "Phone:"
msgstr "Teléfono:"
-msgctxt "odt:stock.shipment.in.restocking_list:0"
+msgctxt "odt:stock.shipment.in.restocking_list:"
msgid "Planned Date:"
-msgstr "Fecha planeada:"
+msgstr "Fecha estimada:"
-msgctxt "odt:stock.shipment.in.restocking_list:0"
+msgctxt "odt:stock.shipment.in.restocking_list:"
msgid "Product"
msgstr "Producto"
-msgctxt "odt:stock.shipment.in.restocking_list:0"
+msgctxt "odt:stock.shipment.in.restocking_list:"
msgid "Quantity"
msgstr "Cantidad"
-msgctxt "odt:stock.shipment.in.restocking_list:0"
+msgctxt "odt:stock.shipment.in.restocking_list:"
msgid "Reference:"
msgstr "Referencia:"
-msgctxt "odt:stock.shipment.in.restocking_list:0"
+msgctxt "odt:stock.shipment.in.restocking_list:"
msgid "Restocking List"
-msgstr "Lista de renovación de existencias"
+msgstr "Lista reabastecimiento"
-msgctxt "odt:stock.shipment.in.restocking_list:0"
+msgctxt "odt:stock.shipment.in.restocking_list:"
msgid "Supplier:"
msgstr "Proveedor:"
-msgctxt "odt:stock.shipment.in.restocking_list:0"
+msgctxt "odt:stock.shipment.in.restocking_list:"
msgid "To Location"
msgstr "A ubicación"
-msgctxt "odt:stock.shipment.in.restocking_list:0"
+msgctxt "odt:stock.shipment.in.restocking_list:"
msgid "VAT Number:"
-msgstr ""
+msgstr "Número CIF/NIF:"
-msgctxt "odt:stock.shipment.in.restocking_list:0"
+msgctxt "odt:stock.shipment.in.restocking_list:"
msgid "Warehouse:"
msgstr "Almacén:"
-msgctxt "odt:stock.shipment.internal.report:0"
+msgctxt "odt:stock.shipment.internal.report:"
msgid "/"
msgstr "/"
-msgctxt "odt:stock.shipment.internal.report:0"
+msgctxt "odt:stock.shipment.internal.report:"
msgid "Code:"
msgstr "Código:"
-msgctxt "odt:stock.shipment.internal.report:0"
+msgctxt "odt:stock.shipment.internal.report:"
msgid "E-Mail:"
msgstr "Correo electrónico:"
-msgctxt "odt:stock.shipment.internal.report:0"
+msgctxt "odt:stock.shipment.internal.report:"
msgid "From Location"
msgstr "Desde ubicación"
-msgctxt "odt:stock.shipment.internal.report:0"
+msgctxt "odt:stock.shipment.internal.report:"
msgid "From Location:"
msgstr "Desde ubicación:"
-msgctxt "odt:stock.shipment.internal.report:0"
+msgctxt "odt:stock.shipment.internal.report:"
msgid "Internal Shipment"
-msgstr "EnvÃo interno"
+msgstr "Albarán interno"
-msgctxt "odt:stock.shipment.internal.report:0"
+msgctxt "odt:stock.shipment.internal.report:"
msgid "Phone:"
msgstr "Teléfono:"
-msgctxt "odt:stock.shipment.internal.report:0"
+msgctxt "odt:stock.shipment.internal.report:"
msgid "Planned Date:"
msgstr "Fecha estimada:"
-msgctxt "odt:stock.shipment.internal.report:0"
+msgctxt "odt:stock.shipment.internal.report:"
msgid "Product"
msgstr "Producto"
-msgctxt "odt:stock.shipment.internal.report:0"
+msgctxt "odt:stock.shipment.internal.report:"
msgid "Quantity"
msgstr "Cantidad"
-msgctxt "odt:stock.shipment.internal.report:0"
+msgctxt "odt:stock.shipment.internal.report:"
msgid "Reference:"
msgstr "Referencia:"
-msgctxt "odt:stock.shipment.internal.report:0"
+msgctxt "odt:stock.shipment.internal.report:"
msgid "To Location"
msgstr "A ubicación"
-msgctxt "odt:stock.shipment.internal.report:0"
+msgctxt "odt:stock.shipment.internal.report:"
msgid "To Location:"
msgstr "A ubicación:"
-msgctxt "odt:stock.shipment.internal.report:0"
+msgctxt "odt:stock.shipment.internal.report:"
msgid "VAT Number:"
-msgstr ""
+msgstr "Número CIF/NIF:"
-msgctxt "odt:stock.shipment.out.delivery_note:0"
+msgctxt "odt:stock.shipment.out.delivery_note:"
msgid "/"
msgstr "/"
-msgctxt "odt:stock.shipment.out.delivery_note:0"
+msgctxt "odt:stock.shipment.out.delivery_note:"
msgid "Customer Code:"
msgstr "Código de cliente:"
-msgctxt "odt:stock.shipment.out.delivery_note:0"
+msgctxt "odt:stock.shipment.out.delivery_note:"
msgid "Date:"
msgstr "Fecha:"
-msgctxt "odt:stock.shipment.out.delivery_note:0"
+msgctxt "odt:stock.shipment.out.delivery_note:"
msgid "Delivery Note"
-msgstr "Albarán de envio"
+msgstr "Notas de envÃo"
-msgctxt "odt:stock.shipment.out.delivery_note:0"
+msgctxt "odt:stock.shipment.out.delivery_note:"
msgid "E-Mail:"
msgstr "Correo electrónico:"
-msgctxt "odt:stock.shipment.out.delivery_note:0"
+msgctxt "odt:stock.shipment.out.delivery_note:"
msgid "Phone:"
msgstr "Teléfono:"
-msgctxt "odt:stock.shipment.out.delivery_note:0"
+msgctxt "odt:stock.shipment.out.delivery_note:"
msgid "Product"
msgstr "Producto"
-msgctxt "odt:stock.shipment.out.delivery_note:0"
+msgctxt "odt:stock.shipment.out.delivery_note:"
msgid "Quantity"
msgstr "Cantidad"
-msgctxt "odt:stock.shipment.out.delivery_note:0"
+msgctxt "odt:stock.shipment.out.delivery_note:"
msgid "Reference:"
msgstr "Referencia:"
-msgctxt "odt:stock.shipment.out.delivery_note:0"
+msgctxt "odt:stock.shipment.out.delivery_note:"
msgid "Shipment Number:"
-msgstr "Número de envÃo:"
+msgstr "Número de albarán:"
-msgctxt "odt:stock.shipment.out.delivery_note:0"
+msgctxt "odt:stock.shipment.out.delivery_note:"
msgid "VAT Number:"
-msgstr ""
+msgstr "Número CIF/NIF:"
-msgctxt "odt:stock.shipment.out.picking_list:0"
+msgctxt "odt:stock.shipment.out.picking_list:"
msgid "/"
msgstr "/"
-msgctxt "odt:stock.shipment.out.picking_list:0"
+msgctxt "odt:stock.shipment.out.picking_list:"
msgid "Code:"
msgstr "Código:"
-msgctxt "odt:stock.shipment.out.picking_list:0"
+msgctxt "odt:stock.shipment.out.picking_list:"
msgid "Customer:"
msgstr "Cliente:"
-msgctxt "odt:stock.shipment.out.picking_list:0"
+msgctxt "odt:stock.shipment.out.picking_list:"
msgid "E-Mail:"
msgstr "Correo electrónico:"
-msgctxt "odt:stock.shipment.out.picking_list:0"
+msgctxt "odt:stock.shipment.out.picking_list:"
msgid "From Location"
msgstr "Desde ubicación"
-msgctxt "odt:stock.shipment.out.picking_list:0"
+msgctxt "odt:stock.shipment.out.picking_list:"
msgid "Phone:"
msgstr "Teléfono:"
-msgctxt "odt:stock.shipment.out.picking_list:0"
+msgctxt "odt:stock.shipment.out.picking_list:"
msgid "Picking List"
-msgstr "Lista de selección"
+msgstr "Lista recogida"
-msgctxt "odt:stock.shipment.out.picking_list:0"
+msgctxt "odt:stock.shipment.out.picking_list:"
msgid "Planned Date:"
msgstr "Fecha estimada:"
-msgctxt "odt:stock.shipment.out.picking_list:0"
+msgctxt "odt:stock.shipment.out.picking_list:"
msgid "Product"
msgstr "Producto"
-msgctxt "odt:stock.shipment.out.picking_list:0"
+msgctxt "odt:stock.shipment.out.picking_list:"
msgid "Quantity"
msgstr "Cantidad"
-msgctxt "odt:stock.shipment.out.picking_list:0"
+msgctxt "odt:stock.shipment.out.picking_list:"
msgid "Reference:"
msgstr "Referencia:"
-msgctxt "odt:stock.shipment.out.picking_list:0"
+msgctxt "odt:stock.shipment.out.picking_list:"
msgid "To Location"
msgstr "A ubicación"
-msgctxt "odt:stock.shipment.out.picking_list:0"
+msgctxt "odt:stock.shipment.out.picking_list:"
msgid "VAT Number:"
-msgstr ""
+msgstr "Número CIF/NIF:"
-msgctxt "odt:stock.shipment.out.picking_list:0"
+msgctxt "odt:stock.shipment.out.picking_list:"
msgid "Warehouse:"
msgstr "Almacén:"
-msgctxt "odt:stock.shipment.out.return.restocking_list:0"
+msgctxt "odt:stock.shipment.out.return.restocking_list:"
msgid "/"
msgstr "/"
-msgctxt "odt:stock.shipment.out.return.restocking_list:0"
+msgctxt "odt:stock.shipment.out.return.restocking_list:"
msgid "Code:"
msgstr "Código:"
-msgctxt "odt:stock.shipment.out.return.restocking_list:0"
+msgctxt "odt:stock.shipment.out.return.restocking_list:"
msgid "E-Mail:"
msgstr "Correo electrónico:"
-msgctxt "odt:stock.shipment.out.return.restocking_list:0"
+msgctxt "odt:stock.shipment.out.return.restocking_list:"
msgid "From Location"
-msgstr "De ubicación"
+msgstr "Desde ubicación"
-msgctxt "odt:stock.shipment.out.return.restocking_list:0"
+msgctxt "odt:stock.shipment.out.return.restocking_list:"
msgid "Phone:"
msgstr "Teléfono:"
-msgctxt "odt:stock.shipment.out.return.restocking_list:0"
+msgctxt "odt:stock.shipment.out.return.restocking_list:"
msgid "Planned Date:"
msgstr "Fecha estimada:"
-msgctxt "odt:stock.shipment.out.return.restocking_list:0"
+msgctxt "odt:stock.shipment.out.return.restocking_list:"
msgid "Product"
msgstr "Producto"
-msgctxt "odt:stock.shipment.out.return.restocking_list:0"
+msgctxt "odt:stock.shipment.out.return.restocking_list:"
msgid "Quantity"
msgstr "Cantidad"
-msgctxt "odt:stock.shipment.out.return.restocking_list:0"
+msgctxt "odt:stock.shipment.out.return.restocking_list:"
msgid "Reference:"
msgstr "Referencia:"
-msgctxt "odt:stock.shipment.out.return.restocking_list:0"
+msgctxt "odt:stock.shipment.out.return.restocking_list:"
msgid "Restocking List"
-msgstr "Lista de renovación de existencias"
+msgstr "Lista reabastecimiento"
-msgctxt "odt:stock.shipment.out.return.restocking_list:0"
+msgctxt "odt:stock.shipment.out.return.restocking_list:"
msgid "Supplier:"
msgstr "Proveedor:"
-msgctxt "odt:stock.shipment.out.return.restocking_list:0"
+msgctxt "odt:stock.shipment.out.return.restocking_list:"
msgid "To Location"
msgstr "A ubicación"
-msgctxt "odt:stock.shipment.out.return.restocking_list:0"
+msgctxt "odt:stock.shipment.out.return.restocking_list:"
msgid "VAT Number:"
-msgstr ""
+msgstr "Número CIF/NIF:"
-msgctxt "odt:stock.shipment.out.return.restocking_list:0"
+msgctxt "odt:stock.shipment.out.return.restocking_list:"
msgid "Warehouse:"
msgstr "Almacén:"
-msgctxt "selection:stock.inventory,state:0"
+msgctxt "selection:stock.inventory,state:"
msgid "Canceled"
msgstr "Cancelado"
-msgctxt "selection:stock.inventory,state:0"
+msgctxt "selection:stock.inventory,state:"
msgid "Done"
-msgstr "Terminado"
+msgstr "Realizado"
-msgctxt "selection:stock.inventory,state:0"
+msgctxt "selection:stock.inventory,state:"
msgid "Draft"
msgstr "Borrador"
-msgctxt "selection:stock.location,type:0"
+msgctxt "selection:stock.location,type:"
msgid "Customer"
msgstr "Cliente"
-msgctxt "selection:stock.location,type:0"
+msgctxt "selection:stock.location,type:"
msgid "Lost and Found"
-msgstr "Perdido y encontrado"
+msgstr "Perdido/encontrado"
-msgctxt "selection:stock.location,type:0"
+msgctxt "selection:stock.location,type:"
msgid "Production"
msgstr "Producción"
-msgctxt "selection:stock.location,type:0"
+msgctxt "selection:stock.location,type:"
msgid "Storage"
-msgstr "Almacén"
+msgstr "Interna"
-msgctxt "selection:stock.location,type:0"
+msgctxt "selection:stock.location,type:"
msgid "Supplier"
msgstr "Proveedor"
-msgctxt "selection:stock.location,type:0"
+msgctxt "selection:stock.location,type:"
msgid "View"
msgstr "Vista"
-msgctxt "selection:stock.location,type:0"
+msgctxt "selection:stock.location,type:"
msgid "Warehouse"
msgstr "Almacén"
-msgctxt "selection:stock.move,state:0"
+msgctxt "selection:stock.move,state:"
msgid "Assigned"
-msgstr "Asignado"
+msgstr "Reservado"
-msgctxt "selection:stock.move,state:0"
+msgctxt "selection:stock.move,state:"
msgid "Canceled"
msgstr "Cancelado"
-msgctxt "selection:stock.move,state:0"
+msgctxt "selection:stock.move,state:"
msgid "Done"
-msgstr "Terminado"
+msgstr "Realizado"
-msgctxt "selection:stock.move,state:0"
+msgctxt "selection:stock.move,state:"
msgid "Draft"
msgstr "Borrador"
-#, fuzzy
-msgctxt "selection:stock.period,state:0"
+msgctxt "selection:stock.period,state:"
msgid "Closed"
msgstr "Cerrado"
-#, fuzzy
-msgctxt "selection:stock.period,state:0"
+msgctxt "selection:stock.period,state:"
msgid "Draft"
msgstr "Borrador"
-msgctxt "selection:stock.shipment.in,state:0"
+msgctxt "selection:stock.shipment.in,state:"
msgid "Canceled"
msgstr "Cancelado"
-msgctxt "selection:stock.shipment.in,state:0"
+msgctxt "selection:stock.shipment.in,state:"
msgid "Done"
-msgstr "Terminado"
+msgstr "Realizado"
-msgctxt "selection:stock.shipment.in,state:0"
+msgctxt "selection:stock.shipment.in,state:"
msgid "Draft"
msgstr "Borrador"
-msgctxt "selection:stock.shipment.in,state:0"
+msgctxt "selection:stock.shipment.in,state:"
msgid "Received"
msgstr "Recibido"
-msgctxt "selection:stock.shipment.in.return,state:0"
+msgctxt "selection:stock.shipment.in.return,state:"
msgid "Assigned"
-msgstr "Asignado"
+msgstr "Reservado"
-msgctxt "selection:stock.shipment.in.return,state:0"
+msgctxt "selection:stock.shipment.in.return,state:"
msgid "Canceled"
msgstr "Cancelado"
-msgctxt "selection:stock.shipment.in.return,state:0"
+msgctxt "selection:stock.shipment.in.return,state:"
msgid "Done"
-msgstr "Terminado"
+msgstr "Realizado"
-msgctxt "selection:stock.shipment.in.return,state:0"
+msgctxt "selection:stock.shipment.in.return,state:"
msgid "Draft"
msgstr "Borrador"
-msgctxt "selection:stock.shipment.in.return,state:0"
+msgctxt "selection:stock.shipment.in.return,state:"
msgid "Waiting"
msgstr "En espera"
-msgctxt "selection:stock.shipment.internal,state:0"
+msgctxt "selection:stock.shipment.internal,state:"
msgid "Assigned"
-msgstr "Asignado"
+msgstr "Reservado"
-msgctxt "selection:stock.shipment.internal,state:0"
+msgctxt "selection:stock.shipment.internal,state:"
msgid "Canceled"
msgstr "Cancelado"
-msgctxt "selection:stock.shipment.internal,state:0"
+msgctxt "selection:stock.shipment.internal,state:"
msgid "Done"
-msgstr "Terminado"
+msgstr "Realizado"
-msgctxt "selection:stock.shipment.internal,state:0"
+msgctxt "selection:stock.shipment.internal,state:"
msgid "Draft"
msgstr "Borrador"
-msgctxt "selection:stock.shipment.internal,state:0"
+msgctxt "selection:stock.shipment.internal,state:"
msgid "Waiting"
msgstr "En espera"
-msgctxt "selection:stock.shipment.out,state:0"
+msgctxt "selection:stock.shipment.out,state:"
msgid "Assigned"
-msgstr "Asignado"
+msgstr "Reservado"
-msgctxt "selection:stock.shipment.out,state:0"
+msgctxt "selection:stock.shipment.out,state:"
msgid "Canceled"
msgstr "Cancelado"
-msgctxt "selection:stock.shipment.out,state:0"
+msgctxt "selection:stock.shipment.out,state:"
msgid "Done"
-msgstr "Terminado"
+msgstr "Realizado"
-msgctxt "selection:stock.shipment.out,state:0"
+msgctxt "selection:stock.shipment.out,state:"
msgid "Draft"
msgstr "Borrador"
-msgctxt "selection:stock.shipment.out,state:0"
+msgctxt "selection:stock.shipment.out,state:"
msgid "Packed"
msgstr "Empaquetado"
-msgctxt "selection:stock.shipment.out,state:0"
+msgctxt "selection:stock.shipment.out,state:"
msgid "Waiting"
msgstr "En espera"
-msgctxt "selection:stock.shipment.out.return,state:0"
+msgctxt "selection:stock.shipment.out.return,state:"
msgid "Canceled"
msgstr "Cancelado"
-msgctxt "selection:stock.shipment.out.return,state:0"
+msgctxt "selection:stock.shipment.out.return,state:"
msgid "Done"
-msgstr "Terminado"
+msgstr "Realizado"
-msgctxt "selection:stock.shipment.out.return,state:0"
+msgctxt "selection:stock.shipment.out.return,state:"
msgid "Draft"
msgstr "Borrador"
-msgctxt "selection:stock.shipment.out.return,state:0"
+msgctxt "selection:stock.shipment.out.return,state:"
msgid "Received"
msgstr "Recibido"
-msgctxt "view:party.party:0"
+msgctxt "view:party.party:"
msgid "Stock"
-msgstr "Existencias"
+msgstr "Stock"
-msgctxt "view:party.party:0"
+msgctxt "view:party.party:"
msgid "_Stock"
-msgstr "_Existencias"
+msgstr "_Stock"
+
+msgctxt "view:product.by_location.start:"
+msgid "Product by Location"
+msgstr "Productos por ubicación"
-msgctxt "view:product.product:0"
+msgctxt "view:product.product:"
msgid "Products"
msgstr "Productos"
-msgctxt "view:stock.configuration:0"
+msgctxt "view:stock.configuration:"
msgid "Stock Configuration"
-msgstr ""
+msgstr "Configuración stock"
-msgctxt "view:stock.inventory.line:0"
+msgctxt "view:stock.inventory.line:"
msgid "Inventory Line"
msgstr "LÃnea de inventario"
-msgctxt "view:stock.inventory.line:0"
+msgctxt "view:stock.inventory.line:"
msgid "Inventory Lines"
msgstr "LÃneas de inventario"
-msgctxt "view:stock.inventory:0"
+msgctxt "view:stock.inventory:"
msgid "Add an inventory line for each missing products"
msgstr "Añadir una lÃnea de inventario por cada producto que falta"
-msgctxt "view:stock.inventory:0"
+msgctxt "view:stock.inventory:"
msgid "All generated moves will be cancelled!"
msgstr "Se cancelarán todos los movimientos generados"
-msgctxt "view:stock.inventory:0"
+msgctxt "view:stock.inventory:"
msgid "Cancel"
msgstr "Cancelar"
-msgctxt "view:stock.inventory:0"
+msgctxt "view:stock.inventory:"
msgid "Complete Inventory"
msgstr "Inventario completo"
-msgctxt "view:stock.inventory:0"
+msgctxt "view:stock.inventory:"
msgid "Confirm"
msgstr "Confirmar"
-msgctxt "view:stock.inventory:0"
+msgctxt "view:stock.inventory:"
msgid "Inventories"
msgstr "Inventarios"
-msgctxt "view:stock.inventory:0"
+msgctxt "view:stock.inventory:"
msgid "Inventory"
msgstr "Inventario"
-msgctxt "view:stock.inventory:0"
+msgctxt "view:stock.inventory:"
msgid "Re-Open"
msgstr "Reabrir"
-msgctxt "view:stock.location:0"
+msgctxt "view:stock.location:"
msgid "Location"
msgstr "Ubicación"
-msgctxt "view:stock.location:0"
+msgctxt "view:stock.location:"
+msgid "Location Quantity"
+msgstr "Cantidad en ubicación"
+
+msgctxt "view:stock.location:"
msgid "Locations"
msgstr "Ubicaciones"
-msgctxt "view:stock.location:0"
+msgctxt "view:stock.location:"
msgid "Product Stock"
-msgstr "Existencias del producto"
-
-msgctxt "view:stock.location_stock_date.init:0"
-msgid "Product Quantity."
-msgstr "Cantidad de producto."
+msgstr "Stock del producto"
-msgctxt "view:stock.move:0"
+msgctxt "view:stock.move:"
msgid "Cancel"
msgstr "Cancelar"
-msgctxt "view:stock.move:0"
+msgctxt "view:stock.move:"
msgid "Move"
msgstr "Movimiento"
-msgctxt "view:stock.move:0"
+msgctxt "view:stock.move:"
msgid "Moves"
msgstr "Movimientos"
-msgctxt "view:stock.move:0"
+msgctxt "view:stock.move:"
msgid "Set Done"
-msgstr "Marcar como terminado"
+msgstr "Marcar como realizado"
-msgctxt "view:stock.move:0"
+msgctxt "view:stock.move:"
msgid "Set Draft"
msgstr "Marcar como borrador"
-msgctxt "view:stock.period.cache:0"
+msgctxt "view:stock.period.cache:"
msgid "Period Cache"
-msgstr ""
+msgstr "PerÃodo precalculado"
-msgctxt "view:stock.period.cache:0"
+msgctxt "view:stock.period.cache:"
msgid "Period Caches"
-msgstr ""
+msgstr "PerÃodo precalculado"
-#, fuzzy
-msgctxt "view:stock.period:0"
+msgctxt "view:stock.period:"
msgid "Close"
msgstr "Cerrar"
-#, fuzzy
-msgctxt "view:stock.period:0"
+msgctxt "view:stock.period:"
msgid "Draft"
msgstr "Borrador"
-#, fuzzy
-msgctxt "view:stock.period:0"
+msgctxt "view:stock.period:"
msgid "Period"
msgstr "PerÃodo"
-#, fuzzy
-msgctxt "view:stock.period:0"
+msgctxt "view:stock.period:"
msgid "Periods"
msgstr "PerÃodos"
-msgctxt "view:stock.product_stock_date.init:0"
-msgid "Product Quantity."
-msgstr "Cantidad de producto."
-
-msgctxt "view:stock.shipment.in.return.assign.assign_failed:0"
-msgid "Moves"
-msgstr "Movimientos"
+msgctxt "view:stock.products_by_locations.start:"
+msgid "Products by Locations"
+msgstr "Productos por ubicación"
-msgctxt "view:stock.shipment.in.return.assign.assign_failed:0"
+msgctxt "view:stock.shipment.in.return.assign.failed:"
msgid "Unable to Assign"
-msgstr "No es posible asignar"
+msgstr "No se puede reservar"
-msgctxt "view:stock.shipment.in.return.assign.assign_failed:0"
+msgctxt "view:stock.shipment.in.return.assign.failed:"
msgid "Unable to assign those products:"
-msgstr "No es posible asignar esos productos:"
+msgstr "No se pueden reservar estos productos:"
-msgctxt "view:stock.shipment.in.return:0"
+msgctxt "view:stock.shipment.in.return:"
msgid "Assign"
-msgstr "Asignar"
+msgstr "Reservar"
-msgctxt "view:stock.shipment.in.return:0"
+msgctxt "view:stock.shipment.in.return:"
msgid "Cancel"
msgstr "Cancelar"
-msgctxt "view:stock.shipment.in.return:0"
+msgctxt "view:stock.shipment.in.return:"
msgid "Done"
-msgstr "Terminado"
+msgstr "Realizado"
-msgctxt "view:stock.shipment.in.return:0"
+msgctxt "view:stock.shipment.in.return:"
msgid "Draft"
msgstr "Borrador"
-msgctxt "view:stock.shipment.in.return:0"
+msgctxt "view:stock.shipment.in.return:"
msgid "Reset to Draft"
msgstr "Restablecer a borrador"
-msgctxt "view:stock.shipment.in.return:0"
+msgctxt "view:stock.shipment.in.return:"
msgid "Supplier Return Shipment"
-msgstr "Envio de devolución a proveedor"
+msgstr "Albarán devolución proveedor"
-msgctxt "view:stock.shipment.in.return:0"
+msgctxt "view:stock.shipment.in.return:"
msgid "Supplier Return Shipments"
-msgstr "Envios de devolución a proveedor"
+msgstr "Albaranes devolución proveedor"
+
+msgctxt "view:stock.shipment.in.return:"
+msgid "Wait"
+msgstr "Esperando"
-msgctxt "view:stock.shipment.in.return:0"
+msgctxt "view:stock.shipment.in.return:"
msgid "Waiting"
msgstr "En espera"
-msgctxt "view:stock.shipment.in:0"
+msgctxt "view:stock.shipment.in:"
msgid "Cancel"
msgstr "Cancelar"
-msgctxt "view:stock.shipment.in:0"
+msgctxt "view:stock.shipment.in:"
msgid "Done"
-msgstr "Terminado"
+msgstr "Realizado"
-msgctxt "view:stock.shipment.in:0"
+msgctxt "view:stock.shipment.in:"
msgid "Draft"
msgstr "Borrador"
-msgctxt "view:stock.shipment.in:0"
+msgctxt "view:stock.shipment.in:"
msgid "Incoming Moves"
msgstr "Movimientos de entrada"
-msgctxt "view:stock.shipment.in:0"
+msgctxt "view:stock.shipment.in:"
msgid "Inventory Moves"
-msgstr "Movimientos de inventario"
+msgstr "Movimientos internos"
-msgctxt "view:stock.shipment.in:0"
+msgctxt "view:stock.shipment.in:"
msgid "Moves"
msgstr "Movimientos"
-msgctxt "view:stock.shipment.in:0"
+msgctxt "view:stock.shipment.in:"
+msgid "Receive"
+msgstr "Recibir"
+
+msgctxt "view:stock.shipment.in:"
msgid "Received"
msgstr "Recibido"
-msgctxt "view:stock.shipment.in:0"
+msgctxt "view:stock.shipment.in:"
msgid "Reset to Draft"
msgstr "Restablecer a borrador"
-msgctxt "view:stock.shipment.in:0"
+msgctxt "view:stock.shipment.in:"
msgid "Supplier Shipment"
-msgstr "EnvÃo de proveedor"
+msgstr "Albarán proveedor"
-msgctxt "view:stock.shipment.in:0"
+msgctxt "view:stock.shipment.in:"
msgid "Supplier Shipments"
-msgstr "EnvÃos de proveedor"
+msgstr "Albaranes proveedor"
-msgctxt "view:stock.shipment.internal.assign.assign_failed:0"
-msgid "Moves"
-msgstr "Movimientos"
-
-msgctxt "view:stock.shipment.internal.assign.assign_failed:0"
+msgctxt "view:stock.shipment.internal.assign.failed:"
msgid "Unable to Assign"
-msgstr "No es posible asignar"
+msgstr "No se puede reservar"
-msgctxt "view:stock.shipment.internal.assign.assign_failed:0"
+msgctxt "view:stock.shipment.internal.assign.failed:"
msgid "Unable to assign those products:"
-msgstr "No es posible asignar esos productos:"
+msgstr "No se pueden reservar estos productos:"
-msgctxt "view:stock.shipment.internal:0"
+msgctxt "view:stock.shipment.internal:"
msgid "Assign"
-msgstr "Asignar"
+msgstr "Reservar"
-msgctxt "view:stock.shipment.internal:0"
+msgctxt "view:stock.shipment.internal:"
msgid "Cancel"
msgstr "Cancelar"
-msgctxt "view:stock.shipment.internal:0"
+msgctxt "view:stock.shipment.internal:"
msgid "Done"
-msgstr "Terminado"
+msgstr "Realizado"
-msgctxt "view:stock.shipment.internal:0"
+msgctxt "view:stock.shipment.internal:"
msgid "Draft"
msgstr "Borrador"
-msgctxt "view:stock.shipment.internal:0"
+msgctxt "view:stock.shipment.internal:"
msgid "Force Assign"
-msgstr "Forzar asignación"
+msgstr "Forzar reserva"
-msgctxt "view:stock.shipment.internal:0"
+msgctxt "view:stock.shipment.internal:"
msgid "Internal Shipment"
-msgstr "EnvÃo interno"
+msgstr "Albarán interno"
-msgctxt "view:stock.shipment.internal:0"
+msgctxt "view:stock.shipment.internal:"
msgid "Internal Shipments"
-msgstr "EnvÃos internos"
+msgstr "Albaranes internos"
-msgctxt "view:stock.shipment.internal:0"
+msgctxt "view:stock.shipment.internal:"
msgid "Reset to Draft"
msgstr "Restablecer a borrador"
-msgctxt "view:stock.shipment.internal:0"
+msgctxt "view:stock.shipment.internal:"
msgid "Set Done"
-msgstr "Marcar como terminado"
+msgstr "Marcar como realizado"
-msgctxt "view:stock.shipment.internal:0"
+msgctxt "view:stock.shipment.internal:"
msgid "Set Waiting"
msgstr "Colocar en espera"
-msgctxt "view:stock.shipment.internal:0"
+msgctxt "view:stock.shipment.internal:"
msgid "Waiting"
msgstr "En espera"
-msgctxt "view:stock.shipment.out.assign.assign_failed:0"
-msgid "Inventory Moves"
-msgstr "Movimientos de inventario"
-
-msgctxt "view:stock.shipment.out.assign.assign_failed:0"
+msgctxt "view:stock.shipment.out.assign.failed:"
msgid "Unable to Assign"
-msgstr "No es posible asignar"
+msgstr "No se puede reservar"
-msgctxt "view:stock.shipment.out.assign.assign_failed:0"
+msgctxt "view:stock.shipment.out.assign.failed:"
msgid "Unable to assign those products:"
-msgstr "No es posible asignar esos productos:"
+msgstr "No se pueden reservar estos productos:"
-msgctxt "view:stock.shipment.out.return:0"
+msgctxt "view:stock.shipment.out.return:"
msgid "Cancel"
msgstr "Cancelar"
-msgctxt "view:stock.shipment.out.return:0"
+msgctxt "view:stock.shipment.out.return:"
msgid "Customer Return Shipment"
-msgstr "Envio de devolución de cliente"
+msgstr "Albarán devolución cliente"
-msgctxt "view:stock.shipment.out.return:0"
+msgctxt "view:stock.shipment.out.return:"
msgid "Customer Return Shipments"
-msgstr "Envios de devolución de cliente"
+msgstr "Albaranes devolución cliente"
-msgctxt "view:stock.shipment.out.return:0"
+msgctxt "view:stock.shipment.out.return:"
msgid "Done"
-msgstr "Terminado"
+msgstr "Realizado"
+
+msgctxt "view:stock.shipment.out.return:"
+msgid "Draft"
+msgstr "Borrador"
-msgctxt "view:stock.shipment.out.return:0"
+msgctxt "view:stock.shipment.out.return:"
msgid "Incoming Moves"
msgstr "Movimientos de entrada"
-msgctxt "view:stock.shipment.out.return:0"
+msgctxt "view:stock.shipment.out.return:"
msgid "Inventory Moves"
-msgstr "Movimientos de inventario"
+msgstr "Movimientos internos"
-msgctxt "view:stock.shipment.out.return:0"
+msgctxt "view:stock.shipment.out.return:"
msgid "Moves"
msgstr "Movimientos"
-msgctxt "view:stock.shipment.out.return:0"
+msgctxt "view:stock.shipment.out.return:"
msgid "Received"
msgstr "Recibido"
-msgctxt "view:stock.shipment.out.return:0"
+msgctxt "view:stock.shipment.out.return:"
msgid "Reset to Draft"
msgstr "Restablecer a borrador"
-msgctxt "view:stock.shipment.out:0"
+msgctxt "view:stock.shipment.out:"
msgid "Assign"
-msgstr "Asignar"
+msgstr "Reservar"
-msgctxt "view:stock.shipment.out:0"
+msgctxt "view:stock.shipment.out:"
msgid "Cancel"
msgstr "Cancelar"
-msgctxt "view:stock.shipment.out:0"
+msgctxt "view:stock.shipment.out:"
msgid "Customer Shipment"
-msgstr "EnvÃo a cliente"
+msgstr "Albarán cliente"
-msgctxt "view:stock.shipment.out:0"
+msgctxt "view:stock.shipment.out:"
msgid "Customer Shipments"
-msgstr "EnvÃos a clientes"
+msgstr "Albaranes cliente"
-msgctxt "view:stock.shipment.out:0"
+msgctxt "view:stock.shipment.out:"
msgid "Done"
-msgstr "Terminado"
+msgstr "Realizado"
-msgctxt "view:stock.shipment.out:0"
+msgctxt "view:stock.shipment.out:"
msgid "Draft"
msgstr "Borrador"
-msgctxt "view:stock.shipment.out:0"
+msgctxt "view:stock.shipment.out:"
msgid "Force Assign"
-msgstr "Forzar asignación"
+msgstr "Forzar reserva"
-msgctxt "view:stock.shipment.out:0"
+msgctxt "view:stock.shipment.out:"
msgid "Inventory Moves"
-msgstr "Movimientos de inventario"
+msgstr "Movimientos internos"
-msgctxt "view:stock.shipment.out:0"
+msgctxt "view:stock.shipment.out:"
msgid "Make shipment"
-msgstr "Hacer empaquetado"
+msgstr "Realizar envÃo"
-msgctxt "view:stock.shipment.out:0"
+msgctxt "view:stock.shipment.out:"
msgid "Outgoing Moves"
msgstr "Movimientos de salida"
-msgctxt "view:stock.shipment.out:0"
+msgctxt "view:stock.shipment.out:"
msgid "Reset to Draft"
msgstr "Restablecer a borrador"
-msgctxt "view:stock.shipment.out:0"
+msgctxt "view:stock.shipment.out:"
msgid "Set Done"
-msgstr "Marcar como terminado"
+msgstr "Marcar como realizado"
-msgctxt "view:stock.shipment.out:0"
+msgctxt "view:stock.shipment.out:"
msgid "Set Waiting"
msgstr "Colocar en espera"
-msgctxt "view:stock.shipment.out:0"
+msgctxt "view:stock.shipment.out:"
msgid "Unpack"
msgstr "Desempaquetar"
-msgctxt "view:stock.shipment.out:0"
+msgctxt "view:stock.shipment.out:"
msgid "Waiting"
msgstr "En espera"
-msgctxt "wizard_button:stock.location.open,init,end:0"
+msgctxt "wizard_button:product.by_location,start,end:"
msgid "Cancel"
msgstr "Cancelar"
-msgctxt "wizard_button:stock.location.open,init,open:0"
+msgctxt "wizard_button:product.by_location,start,open:"
msgid "Open"
msgstr "Abrir"
-msgctxt "wizard_button:stock.product.open,init,end:0"
+msgctxt "wizard_button:stock.products_by_locations,start,end:"
msgid "Cancel"
msgstr "Cancelar"
-msgctxt "wizard_button:stock.product.open,init,open:0"
+msgctxt "wizard_button:stock.products_by_locations,start,open:"
msgid "Open"
msgstr "Abrir"
-msgctxt "wizard_button:stock.shipment.in.return.assign,ask_force,end:0"
+msgctxt "wizard_button:stock.shipment.in.return.assign,failed,end:"
msgid "Ok"
msgstr "Aceptar"
-msgctxt "wizard_button:stock.shipment.in.return.assign,ask_force,force:0"
+msgctxt "wizard_button:stock.shipment.in.return.assign,failed,force:"
msgid "Force Assign"
-msgstr "Forzar asignación"
+msgstr "Forzar reserva"
-msgctxt "wizard_button:stock.shipment.in.return.assign,assign_failed,end:0"
+msgctxt "wizard_button:stock.shipment.internal.assign,failed,end:"
msgid "Ok"
msgstr "Aceptar"
-msgctxt "wizard_button:stock.shipment.internal.assign,ask_force,end:0"
-msgid "Ok"
-msgstr "Aceptar"
-
-msgctxt "wizard_button:stock.shipment.internal.assign,ask_force,force:0"
+msgctxt "wizard_button:stock.shipment.internal.assign,failed,force:"
msgid "Force Assign"
-msgstr "Forzar asignación"
+msgstr "Forzar reserva"
-msgctxt "wizard_button:stock.shipment.internal.assign,assign_failed,end:0"
+msgctxt "wizard_button:stock.shipment.out.assign,failed,end:"
msgid "Ok"
msgstr "Aceptar"
-msgctxt "wizard_button:stock.shipment.out.assign,ask_force,end:0"
-msgid "Ok"
-msgstr "Aceptar"
-
-msgctxt "wizard_button:stock.shipment.out.assign,ask_force,force:0"
+msgctxt "wizard_button:stock.shipment.out.assign,failed,force:"
msgid "Force Assign"
-msgstr "Forzar asignación"
-
-msgctxt "wizard_button:stock.shipment.out.assign,assign_failed,end:0"
-msgid "Ok"
-msgstr "Aceptar"
+msgstr "Forzar reserva"
diff --git a/locale/fr_FR.po b/locale/fr_FR.po
index a80455b..a954c6d 100644
--- a/locale/fr_FR.po
+++ b/locale/fr_FR.po
@@ -2,7 +2,7 @@
msgid ""
msgstr "Content-Type: text/plain; charset=utf-8\n"
-msgctxt "error:product.template:0"
+msgctxt "error:product.template:"
msgid ""
"You cannot change the default uom for a product which is associated to stock"
" moves."
@@ -10,15 +10,43 @@ 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:0"
+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 "Les quantités sur les lignes doivent être positives!"
+
+msgctxt "error:stock.inventory.line:"
msgid "Line quantity must be positive!"
msgstr "Les quantités sur les lignes doivent être positives!"
-msgctxt "error:stock.inventory.line:0"
+msgctxt "error:stock.inventory.line:"
+msgid "Product must be unique by inventory!"
+msgstr "Chaque produit ne peut apparaître qu'une seule fois par inventaire"
+
+msgctxt "error:stock.inventory.line:"
msgid "Product must be unique by inventory!"
msgstr "Chaque produit ne peut apparaître qu'une seule fois par inventaire"
-msgctxt "error:stock.location:0"
+msgctxt "error:stock.inventory:"
+msgid "Inventory \"%s\" must be cancelled before deletion!"
+msgstr "L'inventaire \"%s\" doit être annulé avant suppression"
+
+msgctxt "error:stock.location:"
+msgid ""
+"A location with existing moves cannot be changed to a type that does not "
+"support moves."
+msgstr ""
+"Un emplacement avec des mouvements ne peut pas être changé en un type qui ne"
+" supporte pas les mouvements."
+
+msgctxt "error:stock.location:"
msgid ""
"A location with existing moves cannot be changed to a type that does not "
"support moves."
@@ -26,76 +54,140 @@ msgstr ""
"Un emplacement avec des mouvements ne peut pas être changé en un type qui ne"
" supporte pas les mouvements."
-msgctxt "error:stock.location:0"
+msgctxt "error:stock.location:"
+msgid "Location \"%s\" must be a child of warehouse \"%s\"!"
+msgstr "L'emplacement \"%s\" doit être un sous-emplacement de l'entrepôt \"%s\" !"
+
+msgctxt "error:stock.location:"
msgid "Location \"%s\" must be a child of warehouse \"%s\"!"
msgstr "L'emplacement \"%s\" doit être un sous-emplacement de l'entrepôt \"%s\" !"
-msgctxt "error:stock.location:0"
+msgctxt "error:stock.location:"
msgid "You can not create recursive locations!"
msgstr "Vous ne pouvez pas créer des emplacements récursifs !"
-msgctxt "error:stock.move:0"
+msgctxt "error:stock.location:"
+msgid "You can not create recursive locations!"
+msgstr "Vous ne pouvez pas créer des emplacements récursifs !"
+
+msgctxt "error:stock.move:"
+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:0"
+msgctxt "error:stock.move:"
+msgid "Move can be on only one Shipment"
+msgstr "Un mouvement ne peut être que sur une seule expédition"
+
+msgctxt "error:stock.move:"
msgid "Move can be on only one Shipment"
msgstr "Un mouvement ne peut être que sur une seule expédition"
-msgctxt "error:stock.move:0"
+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:0"
+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:0"
+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 "You can not modify a move in the state: \"Assigned\", \"Done\" or \"Cancel\""
+msgstr ""
+"Vous ne pouvez modifier un mouvement dans un des états : \"Assigné\", "
+"\"Terminé\" ou \"Annulé\""
+
+msgctxt "error:stock.move:"
msgid "You can not modify a move in the state: \"Assigned\", \"Done\" or \"Cancel\""
msgstr ""
"Vous ne pouvez modifier un mouvement dans un des états : \"Assigné\", "
"\"Terminé\" ou \"Annulé\""
-msgctxt "error:stock.move:0"
+msgctxt "error:stock.move:"
msgid "You can not modify move in closed period!"
msgstr "Vous ne pouvez modifier un mouvement d'une période fermée !"
-msgctxt "error:stock.move:0"
+msgctxt "error:stock.move:"
+msgid "You can not modify move in closed period!"
+msgstr "Vous ne pouvez modifier un mouvement d'une période fermée !"
+
+msgctxt "error:stock.move:"
+msgid "You can not set state to assigned!"
+msgstr "Vous ne pouvez pas mettre l'état à assigné !"
+
+msgctxt "error:stock.move:"
msgid "You can not set state to assigned!"
msgstr "Vous ne pouvez pas mettre l'état à assigné !"
-msgctxt "error:stock.move:0"
+msgctxt "error:stock.move:"
+msgid "You can not set state to done!"
+msgstr "Vous ne pouvez pas mettre l'état à fait !"
+
+msgctxt "error:stock.move:"
msgid "You can not set state to done!"
msgstr "Vous ne pouvez pas mettre l'état à fait !"
-msgctxt "error:stock.move:0"
+msgctxt "error:stock.move:"
+msgid "You can not set state to draft!"
+msgstr "Vous ne pouvez pas mettre l'état à brouillon !"
+
+msgctxt "error:stock.move:"
msgid "You can not set state to draft!"
msgstr "Vous ne pouvez pas mettre l'état à brouillon !"
-msgctxt "error:stock.move:0"
-msgid "You can not use service products for a move!"
+msgctxt "error:stock.move:"
+msgid "You can only delete draft or cancelled moves!"
msgstr ""
-"Vous ne pouvez pas utiliser un produit de type service sur un mouvement !"
+"Vous ne pouvez supprimer que des mouvements qui sont annulés ou à l'état de "
+"brouillon !"
-msgctxt "error:stock.move:0"
+msgctxt "error:stock.move:"
msgid "You can only delete draft or cancelled moves!"
msgstr ""
-"Vous pouvez supprimer que des mouvements qui sont annulés ou a l'état de "
+"Vous ne pouvez supprimer que des mouvements qui sont annulés ou à l'état de "
"brouillon !"
-msgctxt "error:stock.period:0"
+msgctxt "error:stock.period:"
+msgid "You can not close a period in the future or today!"
+msgstr ""
+"Vous ne pouvez fermer une période qui se termine aujourd'hui ou dans le "
+"futur !"
+
+msgctxt "error:stock.period:"
msgid "You can not close a period in the future or today!"
msgstr ""
"Vous ne pouvez fermer une période qui se termine aujourd'hui ou dans le "
"futur !"
-msgctxt "error:stock.period:0"
+msgctxt "error:stock.period:"
+msgid "You can not close a period when there is still assigned moves!"
+msgstr ""
+"Vous ne pouvez fermer une période alors que des mouvements sont toujours "
+"assignés !"
+
+msgctxt "error:stock.period:"
msgid "You can not close a period when there is still assigned moves!"
msgstr ""
"Vous ne pouvez fermer une période alors que des mouvements sont toujours "
"assignés !"
-msgctxt "error:stock.shipment.in:0"
+msgctxt "error:stock.shipment.in.return:"
+msgid "Supplier Return Shipment \"%s\" must be cancelled before deletion!"
+msgstr ""
+"Le retour d'expédition fournisseur \"%s\" doit être annulé avant suppression"
+
+msgctxt "error:stock.shipment.in:"
msgid ""
"Incoming Moves must have the warehouse input location as destination "
"location!"
@@ -103,22 +195,7 @@ msgstr ""
"Les mouvements d'entrée doivent avoir l'emplacement d'entrée de l'entrepôt "
"comme destination !"
-msgctxt "error:stock.shipment.in:0"
-msgid ""
-"Inventory Moves must have the warehouse input location as source location!"
-msgstr ""
-"Les mouvements d'inventaire doivent avoir l'emplacement d'entrée de "
-"l'entrepôt comme source !"
-
-msgctxt "error:stock.shipment.out.return.create:0"
-msgid "The shipment with code %s is not yet sent."
-msgstr "L'emballage avec le code %s n'est pas encore envoyé."
-
-msgctxt "error:stock.shipment.out.return.create:0"
-msgid "You can not create return shipment"
-msgstr "Vous ne pouvez pas créer d'expédition retour"
-
-msgctxt "error:stock.shipment.out.return:0"
+msgctxt "error:stock.shipment.in:"
msgid ""
"Incoming Moves must have the warehouse input location as destination "
"location!"
@@ -126,611 +203,941 @@ msgstr ""
"Les mouvements d'entrée doivent avoir l'emplacement d'entrée de l'entrepôt "
"comme destination !"
-msgctxt "error:stock.shipment.out.return:0"
+msgctxt "error:stock.shipment.in:"
msgid ""
"Inventory Moves must have the warehouse input location as source location!"
msgstr ""
"Les mouvements d'inventaire doivent avoir l'emplacement d'entrée de "
"l'entrepôt comme source !"
-msgctxt "error:stock.shipment.out:0"
+msgctxt "error:stock.shipment.in:"
msgid ""
-"Inventory Moves must have the warehouse output location as destination "
-"location!"
+"Inventory Moves must have the warehouse input location as source location!"
msgstr ""
-"Les mouvements d'inventaires doivent avoir une sortie d'entrepôt comme "
-"location de destination."
+"Les mouvements d'inventaire doivent avoir l'emplacement d'entrée de "
+"l'entrepôt comme source !"
-msgctxt "error:stock.shipment.out:0"
-msgid ""
-"Outgoing Moves must have the warehouse output location as source location!"
-msgstr ""
-"Les mouvements de sortie doivent avoir une sortie d'entrepôt comme location "
-"source !"
+msgctxt "error:stock.shipment.in:"
+msgid "Supplier Shipment \"%s\" must be cancelled before deletion!"
+msgstr "L'expédition fournisseur \"%s\" doit être annulée avant suppression"
+
+msgctxt "error:stock.shipment.internal:"
+msgid "Internal Shipment \"%s\" must be cancelled before deletion!"
+msgstr "L'expédition interne \"%s\" doit être annulée avant suppression"
+
+msgctxt "error:stock.shipment.out.return.create:"
+msgid "The shipment with code %s is not yet sent."
+msgstr "L'emballage avec le code %s n'est pas encore envoyé."
+
+msgctxt "error:stock.shipment.out.return.create:"
+msgid "The shipment with code %s is not yet sent."
+msgstr "L'emballage avec le code %s n'est pas encore envoyé."
+
+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 "L'expédition de retour client \"%s\" doit être annulée avant suppression"
-msgctxt "field:party.address,delivery:0"
+msgctxt "error:stock.shipment.out:"
+msgid "Customer Shipment \"%s\" must be cancelled before deletion!"
+msgstr "L'expédition cliente \"%s\" doit être annulée avant suppression"
+
+msgctxt "field:party.address,delivery:"
msgid "Delivery"
msgstr "Livraison"
-msgctxt "field:party.party,customer_location:0"
+msgctxt "field:party.party,customer_location:"
msgid "Customer Location"
msgstr "Emplacement client"
-msgctxt "field:party.party,supplier_location:0"
+msgctxt "field:party.party,supplier_location:"
msgid "Supplier Location"
msgstr "Emplacement fournisseur"
-msgctxt "field:product.product,forecast_quantity:0"
+msgctxt "field:product.by_location.start,forecast_date:"
+msgid "At Date"
+msgstr "A la date"
+
+msgctxt "field:product.by_location.start,id:"
+msgid "ID"
+msgstr "ID"
+
+msgctxt "field:product.product,cost_value:"
+msgid "Cost Value"
+msgstr "Valeur du coût"
+
+msgctxt "field:product.product,forecast_quantity:"
msgid "Forecast Quantity"
msgstr "Quantités prévisionnelles"
-msgctxt "field:product.product,quantity:0"
+msgctxt "field:product.product,quantity:"
msgid "Quantity"
msgstr "Quantité"
-msgctxt "field:product.template,forecast_quantity:0"
+msgctxt "field:product.template,cost_value:"
+msgid "Cost Value"
+msgstr "Valeur du coût"
+
+msgctxt "field:product.template,forecast_quantity:"
msgid "Forecast Quantity"
msgstr "Quantité prévue"
-msgctxt "field:product.template,quantity:0"
+msgctxt "field:product.template,quantity:"
msgid "Quantity"
msgstr "Quantité"
-msgctxt "field:stock.configuration,rec_name:0"
+msgctxt "field:stock.configuration,create_date:"
+msgid "Create Date"
+msgstr "Date de création"
+
+msgctxt "field:stock.configuration,create_uid:"
+msgid "Create User"
+msgstr "Créé par"
+
+msgctxt "field:stock.configuration,id:"
+msgid "ID"
+msgstr "ID"
+
+msgctxt "field:stock.configuration,rec_name:"
msgid "Name"
msgstr "Nom"
-msgctxt "field:stock.configuration,shipment_in_return_sequence:0"
+msgctxt "field:stock.configuration,shipment_in_return_sequence:"
msgid "Supplier Return Shipment Sequence"
msgstr "Séquence des retours expédition fournisseur"
-msgctxt "field:stock.configuration,shipment_in_sequence:0"
+msgctxt "field:stock.configuration,shipment_in_sequence:"
msgid "Supplier Shipment Sequence"
msgstr "Séquence des expédition fournisseur"
-msgctxt "field:stock.configuration,shipment_internal_sequence:0"
+msgctxt "field:stock.configuration,shipment_internal_sequence:"
msgid "Internal Shipment Sequence"
msgstr "Séquence des expédition interne"
-msgctxt "field:stock.configuration,shipment_out_return_sequence:0"
+msgctxt "field:stock.configuration,shipment_out_return_sequence:"
msgid "Customer Return Shipment Sequence"
msgstr "Séquence des retours d'expédition client"
-msgctxt "field:stock.configuration,shipment_out_sequence:0"
+msgctxt "field:stock.configuration,shipment_out_sequence:"
msgid "Customer Shipment Sequence"
msgstr "Séquence des expéditions client"
-msgctxt "field:stock.inventory,company:0"
+msgctxt "field:stock.configuration,write_date:"
+msgid "Write Date"
+msgstr "Date de mise à jour"
+
+msgctxt "field:stock.configuration,write_uid:"
+msgid "Write User"
+msgstr "Mis à jour par"
+
+msgctxt "field:stock.inventory,company:"
msgid "Company"
msgstr "Société"
-msgctxt "field:stock.inventory,date:0"
+msgctxt "field:stock.inventory,create_date:"
+msgid "Create Date"
+msgstr "Date de création"
+
+msgctxt "field:stock.inventory,create_uid:"
+msgid "Create User"
+msgstr "Créé par"
+
+msgctxt "field:stock.inventory,date:"
msgid "Date"
msgstr "Date"
-msgctxt "field:stock.inventory,lines:0"
+msgctxt "field:stock.inventory,id:"
+msgid "ID"
+msgstr "ID"
+
+msgctxt "field:stock.inventory,lines:"
msgid "Lines"
msgstr "Lignes"
-msgctxt "field:stock.inventory,location:0"
+msgctxt "field:stock.inventory,location:"
msgid "Location"
msgstr "Emplacement"
-msgctxt "field:stock.inventory,lost_found:0"
+msgctxt "field:stock.inventory,lost_found:"
msgid "Lost and Found"
msgstr "Pertes et surplus"
-msgctxt "field:stock.inventory,rec_name:0"
+msgctxt "field:stock.inventory,rec_name:"
msgid "Name"
msgstr "Nom"
-msgctxt "field:stock.inventory,state:0"
+msgctxt "field:stock.inventory,state:"
msgid "State"
msgstr "Ãtat"
-msgctxt "field:stock.inventory.line,expected_quantity:0"
+msgctxt "field:stock.inventory,write_date:"
+msgid "Write Date"
+msgstr "Date de mise à jour"
+
+msgctxt "field:stock.inventory,write_uid:"
+msgid "Write User"
+msgstr "Mis à jour par"
+
+msgctxt "field:stock.inventory.line,create_date:"
+msgid "Create Date"
+msgstr "Date de création"
+
+msgctxt "field:stock.inventory.line,create_uid:"
+msgid "Create User"
+msgstr "Créé par"
+
+msgctxt "field:stock.inventory.line,expected_quantity:"
msgid "Expected Quantity"
msgstr "Quantité attendue"
-msgctxt "field:stock.inventory.line,inventory:0"
+msgctxt "field:stock.inventory.line,id:"
+msgid "ID"
+msgstr "ID"
+
+msgctxt "field:stock.inventory.line,inventory:"
msgid "Inventory"
msgstr "Inventaire"
-msgctxt "field:stock.inventory.line,move:0"
+msgctxt "field:stock.inventory.line,move:"
msgid "Move"
msgstr "Mouvement"
-msgctxt "field:stock.inventory.line,product:0"
+msgctxt "field:stock.inventory.line,product:"
msgid "Product"
msgstr "Produit"
-msgctxt "field:stock.inventory.line,quantity:0"
+msgctxt "field:stock.inventory.line,quantity:"
msgid "Quantity"
msgstr "Quantité"
-msgctxt "field:stock.inventory.line,rec_name:0"
+msgctxt "field:stock.inventory.line,rec_name:"
msgid "Name"
msgstr "Nom"
-msgctxt "field:stock.inventory.line,unit_digits:0"
+msgctxt "field:stock.inventory.line,unit_digits:"
msgid "Unit Digits"
msgstr "Décimales de l'unité"
-msgctxt "field:stock.inventory.line,uom:0"
+msgctxt "field:stock.inventory.line,uom:"
msgid "UOM"
msgstr "UDM"
-msgctxt "field:stock.location,active:0"
+msgctxt "field:stock.inventory.line,write_date:"
+msgid "Write Date"
+msgstr "Date de mise à jour"
+
+msgctxt "field:stock.inventory.line,write_uid:"
+msgid "Write User"
+msgstr "Mis à jour par"
+
+msgctxt "field:stock.location,active:"
msgid "Active"
msgstr "Actif"
-msgctxt "field:stock.location,address:0"
+msgctxt "field:stock.location,address:"
msgid "Address"
msgstr "Adresse"
-msgctxt "field:stock.location,childs:0"
+msgctxt "field:stock.location,childs:"
msgid "Children"
msgstr "Enfants"
-msgctxt "field:stock.location,code:0"
+msgctxt "field:stock.location,code:"
msgid "Code"
msgstr "Code"
-msgctxt "field:stock.location,forecast_quantity:0"
+msgctxt "field:stock.location,cost_value:"
+msgid "Cost Value"
+msgstr "Valeur du coût"
+
+msgctxt "field:stock.location,create_date:"
+msgid "Create Date"
+msgstr "Date de création"
+
+msgctxt "field:stock.location,create_uid:"
+msgid "Create User"
+msgstr "Créé par"
+
+msgctxt "field:stock.location,forecast_quantity:"
msgid "Forecast Quantity"
msgstr "Quantité prévisionnelle"
-msgctxt "field:stock.location,input_location:0"
+msgctxt "field:stock.location,id:"
+msgid "ID"
+msgstr "ID"
+
+msgctxt "field:stock.location,input_location:"
msgid "Input"
msgstr "Réception"
-msgctxt "field:stock.location,left:0"
+msgctxt "field:stock.location,left:"
msgid "Left"
msgstr "Gauche"
-msgctxt "field:stock.location,name:0"
+msgctxt "field:stock.location,name:"
msgid "Name"
msgstr "Nom"
-msgctxt "field:stock.location,output_location:0"
+msgctxt "field:stock.location,output_location:"
msgid "Output"
msgstr "Expédition"
-msgctxt "field:stock.location,parent:0"
+msgctxt "field:stock.location,parent:"
msgid "Parent"
msgstr "Parent"
-msgctxt "field:stock.location,quantity:0"
+msgctxt "field:stock.location,quantity:"
msgid "Quantity"
msgstr "Quantité"
-msgctxt "field:stock.location,rec_name:0"
+msgctxt "field:stock.location,rec_name:"
msgid "Name"
msgstr "Nom"
-msgctxt "field:stock.location,right:0"
+msgctxt "field:stock.location,right:"
msgid "Right"
msgstr "Droit"
-msgctxt "field:stock.location,storage_location:0"
+msgctxt "field:stock.location,storage_location:"
msgid "Storage"
msgstr "Magasin"
-msgctxt "field:stock.location,type:0"
+msgctxt "field:stock.location,type:"
msgid "Location type"
msgstr "Type d'emplacement"
-msgctxt "field:stock.location_stock_date.init,forecast_date:0"
-msgid "At Date"
-msgstr "Ã la date"
+msgctxt "field:stock.location,write_date:"
+msgid "Write Date"
+msgstr "Date de mise à jour"
-msgctxt "field:stock.move,company:0"
+msgctxt "field:stock.location,write_uid:"
+msgid "Write User"
+msgstr "Mis à jour par"
+
+msgctxt "field:stock.move,company:"
msgid "Company"
msgstr "Société"
-msgctxt "field:stock.move,cost_price:0"
+msgctxt "field:stock.move,cost_price:"
msgid "Cost Price"
msgstr "Prix de revient"
-msgctxt "field:stock.move,currency:0"
+msgctxt "field:stock.move,create_date:"
+msgid "Create Date"
+msgstr "Date de création"
+
+msgctxt "field:stock.move,create_uid:"
+msgid "Create User"
+msgstr "Créé par"
+
+msgctxt "field:stock.move,currency:"
msgid "Currency"
msgstr "Devise"
-msgctxt "field:stock.move,effective_date:0"
+msgctxt "field:stock.move,effective_date:"
msgid "Effective Date"
msgstr "Date effective"
-msgctxt "field:stock.move,from_location:0"
+msgctxt "field:stock.move,from_location:"
msgid "From Location"
msgstr "Emplacement d'origine"
-msgctxt "field:stock.move,internal_quantity:0"
+msgctxt "field:stock.move,id:"
+msgid "ID"
+msgstr "ID"
+
+msgctxt "field:stock.move,internal_quantity:"
msgid "Internal Quantity"
msgstr "Quantité interne"
-msgctxt "field:stock.move,planned_date:0"
+msgctxt "field:stock.move,planned_date:"
msgid "Planned Date"
msgstr "Date planifiée"
-msgctxt "field:stock.move,product:0"
+msgctxt "field:stock.move,product:"
msgid "Product"
msgstr "Produit"
-msgctxt "field:stock.move,quantity:0"
+msgctxt "field:stock.move,product_uom_category:"
+msgid "Product Uom Category"
+msgstr "Catégorie d'unité de mesure"
+
+msgctxt "field:stock.move,quantity:"
msgid "Quantity"
msgstr "Quantité"
-msgctxt "field:stock.move,rec_name:0"
+msgctxt "field:stock.move,rec_name:"
msgid "Name"
msgstr "Nom"
-msgctxt "field:stock.move,shipment_in:0"
+msgctxt "field:stock.move,shipment_in:"
msgid "Supplier Shipment"
msgstr "Expédition fournisseur"
-msgctxt "field:stock.move,shipment_in_return:0"
+msgctxt "field:stock.move,shipment_in_return:"
msgid "Supplier Return Shipment"
msgstr "Retour expédition fournisseur"
-msgctxt "field:stock.move,shipment_internal:0"
+msgctxt "field:stock.move,shipment_internal:"
msgid "Internal Shipment"
msgstr "Expédition interne"
-msgctxt "field:stock.move,shipment_out:0"
+msgctxt "field:stock.move,shipment_out:"
msgid "Customer Shipment"
msgstr "Expédition client"
-msgctxt "field:stock.move,shipment_out_return:0"
+msgctxt "field:stock.move,shipment_out_return:"
msgid "Customer Return Shipment"
msgstr "Retour d'expédition client"
-msgctxt "field:stock.move,state:0"
+msgctxt "field:stock.move,state:"
msgid "State"
msgstr "Etat"
-msgctxt "field:stock.move,to_location:0"
+msgctxt "field:stock.move,to_location:"
msgid "To Location"
msgstr "Emplacement de destination"
-msgctxt "field:stock.move,unit_digits:0"
+msgctxt "field:stock.move,unit_digits:"
msgid "Unit Digits"
msgstr "Décimales de l'unité"
-msgctxt "field:stock.move,unit_price:0"
+msgctxt "field:stock.move,unit_price:"
msgid "Unit Price"
msgstr "Prix unitaire"
-msgctxt "field:stock.move,unit_price_required:0"
+msgctxt "field:stock.move,unit_price_required:"
msgid "Unit Price Required"
msgstr "Prix unitaire requis"
-msgctxt "field:stock.move,uom:0"
+msgctxt "field:stock.move,uom:"
msgid "Uom"
msgstr "UDM"
-msgctxt "field:stock.period,caches:0"
+msgctxt "field:stock.move,write_date:"
+msgid "Write Date"
+msgstr "Date de mise à jour"
+
+msgctxt "field:stock.move,write_uid:"
+msgid "Write User"
+msgstr "Mis à jour par"
+
+msgctxt "field:stock.period,caches:"
msgid "Caches"
msgstr "Caches"
-msgctxt "field:stock.period,company:0"
+msgctxt "field:stock.period,company:"
msgid "Company"
msgstr "Société"
-msgctxt "field:stock.period,date:0"
+msgctxt "field:stock.period,create_date:"
+msgid "Create Date"
+msgstr "Date de création"
+
+msgctxt "field:stock.period,create_uid:"
+msgid "Create User"
+msgstr "Créé par"
+
+msgctxt "field:stock.period,date:"
msgid "Date"
msgstr "Date"
-msgctxt "field:stock.period,rec_name:0"
+msgctxt "field:stock.period,id:"
+msgid "ID"
+msgstr "ID"
+
+msgctxt "field:stock.period,rec_name:"
msgid "Name"
msgstr "Nom"
-msgctxt "field:stock.period,state:0"
+msgctxt "field:stock.period,state:"
msgid "State"
msgstr "Ãtat"
-msgctxt "field:stock.period.cache,internal_quantity:0"
+msgctxt "field:stock.period,write_date:"
+msgid "Write Date"
+msgstr "Date de mise à jour"
+
+msgctxt "field:stock.period,write_uid:"
+msgid "Write User"
+msgstr "Mis à jour par"
+
+msgctxt "field:stock.period.cache,create_date:"
+msgid "Create Date"
+msgstr "Date de création"
+
+msgctxt "field:stock.period.cache,create_uid:"
+msgid "Create User"
+msgstr "Créé par"
+
+msgctxt "field:stock.period.cache,id:"
+msgid "ID"
+msgstr "ID"
+
+msgctxt "field:stock.period.cache,internal_quantity:"
msgid "Internal Quantity"
msgstr "Quantité interne"
-msgctxt "field:stock.period.cache,location:0"
+msgctxt "field:stock.period.cache,location:"
msgid "Location"
msgstr "Emplacement"
-msgctxt "field:stock.period.cache,period:0"
+msgctxt "field:stock.period.cache,period:"
msgid "Period"
msgstr "Période"
-msgctxt "field:stock.period.cache,product:0"
+msgctxt "field:stock.period.cache,product:"
msgid "Product"
msgstr "Produit"
-msgctxt "field:stock.period.cache,rec_name:0"
+msgctxt "field:stock.period.cache,rec_name:"
msgid "Name"
msgstr "Nom"
-msgctxt "field:stock.product_stock_date.init,forecast_date:0"
+msgctxt "field:stock.period.cache,write_date:"
+msgid "Write Date"
+msgstr "Date de mise à jour"
+
+msgctxt "field:stock.period.cache,write_uid:"
+msgid "Write User"
+msgstr "Mis à jour par"
+
+msgctxt "field:stock.products_by_locations.start,forecast_date:"
msgid "At Date"
-msgstr "Ã la date"
+msgstr "A la date"
+
+msgctxt "field:stock.products_by_locations.start,id:"
+msgid "ID"
+msgstr "ID"
-msgctxt "field:stock.shipment.in,code:0"
+msgctxt "field:stock.shipment.in,code:"
msgid "Code"
msgstr "Code"
-msgctxt "field:stock.shipment.in,company:0"
+msgctxt "field:stock.shipment.in,company:"
msgid "Company"
msgstr "Société"
-msgctxt "field:stock.shipment.in,contact_address:0"
+msgctxt "field:stock.shipment.in,contact_address:"
msgid "Contact Address"
msgstr "Adresse de contact"
-msgctxt "field:stock.shipment.in,effective_date:0"
+msgctxt "field:stock.shipment.in,create_date:"
+msgid "Create Date"
+msgstr "Date de création"
+
+msgctxt "field:stock.shipment.in,create_uid:"
+msgid "Create User"
+msgstr "Créé par"
+
+msgctxt "field:stock.shipment.in,effective_date:"
msgid "Effective Date"
msgstr "Date effective"
-msgctxt "field:stock.shipment.in,incoming_moves:0"
+msgctxt "field:stock.shipment.in,id:"
+msgid "ID"
+msgstr "ID"
+
+msgctxt "field:stock.shipment.in,incoming_moves:"
msgid "Incoming Moves"
msgstr "Mouvements entrants"
-msgctxt "field:stock.shipment.in,inventory_moves:0"
+msgctxt "field:stock.shipment.in,inventory_moves:"
msgid "Inventory Moves"
msgstr "Mouvement internes"
-msgctxt "field:stock.shipment.in,moves:0"
+msgctxt "field:stock.shipment.in,moves:"
msgid "Moves"
msgstr "Mouvements"
-msgctxt "field:stock.shipment.in,planned_date:0"
+msgctxt "field:stock.shipment.in,planned_date:"
msgid "Planned Date"
msgstr "Date planifiée"
-msgctxt "field:stock.shipment.in,rec_name:0"
+msgctxt "field:stock.shipment.in,rec_name:"
msgid "Name"
msgstr "Nom"
-msgctxt "field:stock.shipment.in,reference:0"
+msgctxt "field:stock.shipment.in,reference:"
msgid "Reference"
msgstr "Référence"
-msgctxt "field:stock.shipment.in,state:0"
+msgctxt "field:stock.shipment.in,state:"
msgid "State"
msgstr "Ãtat"
-msgctxt "field:stock.shipment.in,supplier:0"
+msgctxt "field:stock.shipment.in,supplier:"
msgid "Supplier"
msgstr "Fournisseur"
-msgctxt "field:stock.shipment.in,warehouse:0"
+msgctxt "field:stock.shipment.in,supplier_location:"
+msgid "Supplier Location"
+msgstr "Emplacement fournisseur"
+
+msgctxt "field:stock.shipment.in,warehouse:"
msgid "Warehouse"
msgstr "Entrepôt"
-msgctxt "field:stock.shipment.in.return,code:0"
+msgctxt "field:stock.shipment.in,warehouse_input:"
+msgid "Warehouse Input"
+msgstr "Entrée entrepôt"
+
+msgctxt "field:stock.shipment.in,warehouse_storage:"
+msgid "Warehouse Storage"
+msgstr "Magasin de l'entrepôt"
+
+msgctxt "field:stock.shipment.in,write_date:"
+msgid "Write Date"
+msgstr "Date de mise à jour"
+
+msgctxt "field:stock.shipment.in,write_uid:"
+msgid "Write User"
+msgstr "Mis à jour par"
+
+msgctxt "field:stock.shipment.in.return,code:"
msgid "Code"
msgstr "Code"
-msgctxt "field:stock.shipment.in.return,company:0"
+msgctxt "field:stock.shipment.in.return,company:"
msgid "Company"
msgstr "Société"
-msgctxt "field:stock.shipment.in.return,effective_date:0"
+msgctxt "field:stock.shipment.in.return,create_date:"
+msgid "Create Date"
+msgstr "Date de création"
+
+msgctxt "field:stock.shipment.in.return,create_uid:"
+msgid "Create User"
+msgstr "Créé par"
+
+msgctxt "field:stock.shipment.in.return,effective_date:"
msgid "Effective Date"
msgstr "Date effective"
-msgctxt "field:stock.shipment.in.return,from_location:0"
+msgctxt "field:stock.shipment.in.return,from_location:"
msgid "From Location"
msgstr "Emplacement d'origine"
-msgctxt "field:stock.shipment.in.return,moves:0"
+msgctxt "field:stock.shipment.in.return,id:"
+msgid "ID"
+msgstr "ID"
+
+msgctxt "field:stock.shipment.in.return,moves:"
msgid "Moves"
msgstr "Mouvements"
-msgctxt "field:stock.shipment.in.return,planned_date:0"
+msgctxt "field:stock.shipment.in.return,planned_date:"
msgid "Planned Date"
msgstr "Date planifiée"
-msgctxt "field:stock.shipment.in.return,rec_name:0"
+msgctxt "field:stock.shipment.in.return,rec_name:"
msgid "Name"
msgstr "Nom"
-msgctxt "field:stock.shipment.in.return,reference:0"
+msgctxt "field:stock.shipment.in.return,reference:"
msgid "Reference"
msgstr "Référence"
-msgctxt "field:stock.shipment.in.return,state:0"
+msgctxt "field:stock.shipment.in.return,state:"
msgid "State"
msgstr "Ãtat"
-msgctxt "field:stock.shipment.in.return,to_location:0"
+msgctxt "field:stock.shipment.in.return,to_location:"
msgid "To Location"
msgstr "Emplacement de destination"
-msgctxt "field:stock.shipment.in.return.assign.assign_failed,moves:0"
+msgctxt "field:stock.shipment.in.return,write_date:"
+msgid "Write Date"
+msgstr "Date de mise à jour"
+
+msgctxt "field:stock.shipment.in.return,write_uid:"
+msgid "Write User"
+msgstr "Mis à jour par"
+
+msgctxt "field:stock.shipment.in.return.assign.failed,id:"
+msgid "ID"
+msgstr "ID"
+
+msgctxt "field:stock.shipment.in.return.assign.failed,moves:"
msgid "Moves"
msgstr "Mouvements"
-msgctxt "field:stock.shipment.internal,code:0"
+msgctxt "field:stock.shipment.internal,code:"
msgid "Code"
msgstr "Code"
-msgctxt "field:stock.shipment.internal,company:0"
+msgctxt "field:stock.shipment.internal,company:"
msgid "Company"
msgstr "Société"
-msgctxt "field:stock.shipment.internal,effective_date:0"
+msgctxt "field:stock.shipment.internal,create_date:"
+msgid "Create Date"
+msgstr "Date de création"
+
+msgctxt "field:stock.shipment.internal,create_uid:"
+msgid "Create User"
+msgstr "Créé par"
+
+msgctxt "field:stock.shipment.internal,effective_date:"
msgid "Effective Date"
msgstr "Date effective"
-msgctxt "field:stock.shipment.internal,from_location:0"
+msgctxt "field:stock.shipment.internal,from_location:"
msgid "From Location"
msgstr "Emplacement d'origine"
-msgctxt "field:stock.shipment.internal,moves:0"
+msgctxt "field:stock.shipment.internal,id:"
+msgid "ID"
+msgstr "ID"
+
+msgctxt "field:stock.shipment.internal,moves:"
msgid "Moves"
msgstr "Mouvements"
-msgctxt "field:stock.shipment.internal,planned_date:0"
+msgctxt "field:stock.shipment.internal,planned_date:"
msgid "Planned Date"
msgstr "Date planifiée"
-msgctxt "field:stock.shipment.internal,rec_name:0"
+msgctxt "field:stock.shipment.internal,rec_name:"
msgid "Name"
msgstr "Nom"
-msgctxt "field:stock.shipment.internal,reference:0"
+msgctxt "field:stock.shipment.internal,reference:"
msgid "Reference"
msgstr "Référence"
-msgctxt "field:stock.shipment.internal,state:0"
+msgctxt "field:stock.shipment.internal,state:"
msgid "State"
msgstr "Ãtat"
-msgctxt "field:stock.shipment.internal,to_location:0"
+msgctxt "field:stock.shipment.internal,to_location:"
msgid "To Location"
msgstr "Emplacement de destination"
-msgctxt "field:stock.shipment.internal.assign.assign_failed,moves:0"
+msgctxt "field:stock.shipment.internal,write_date:"
+msgid "Write Date"
+msgstr "Date de mise à jour"
+
+msgctxt "field:stock.shipment.internal,write_uid:"
+msgid "Write User"
+msgstr "Mis à jour par"
+
+msgctxt "field:stock.shipment.internal.assign.failed,id:"
+msgid "ID"
+msgstr "ID"
+
+msgctxt "field:stock.shipment.internal.assign.failed,moves:"
msgid "Moves"
msgstr "Mouvements"
-msgctxt "field:stock.shipment.out,code:0"
+msgctxt "field:stock.shipment.out,code:"
msgid "Code"
msgstr "Code"
-msgctxt "field:stock.shipment.out,company:0"
+msgctxt "field:stock.shipment.out,company:"
msgid "Company"
msgstr "Société"
-msgctxt "field:stock.shipment.out,customer:0"
+msgctxt "field:stock.shipment.out,create_date:"
+msgid "Create Date"
+msgstr "Date de création"
+
+msgctxt "field:stock.shipment.out,create_uid:"
+msgid "Create User"
+msgstr "Créé par"
+
+msgctxt "field:stock.shipment.out,customer:"
msgid "Customer"
msgstr "Client"
-msgctxt "field:stock.shipment.out,delivery_address:0"
+msgctxt "field:stock.shipment.out,customer_location:"
+msgid "Customer Location"
+msgstr "Emplacement client"
+
+msgctxt "field:stock.shipment.out,delivery_address:"
msgid "Delivery Address"
msgstr "Adresse de livraison"
-msgctxt "field:stock.shipment.out,effective_date:0"
+msgctxt "field:stock.shipment.out,effective_date:"
msgid "Effective Date"
msgstr "Date effective"
-msgctxt "field:stock.shipment.out,inventory_moves:0"
+msgctxt "field:stock.shipment.out,id:"
+msgid "ID"
+msgstr "ID"
+
+msgctxt "field:stock.shipment.out,inventory_moves:"
msgid "Inventory Moves"
msgstr "Mouvements internes"
-msgctxt "field:stock.shipment.out,moves:0"
+msgctxt "field:stock.shipment.out,moves:"
msgid "Moves"
msgstr "Mouvements"
-msgctxt "field:stock.shipment.out,outgoing_moves:0"
+msgctxt "field:stock.shipment.out,outgoing_moves:"
msgid "Outgoing Moves"
msgstr "Mouvements de sortie"
-msgctxt "field:stock.shipment.out,planned_date:0"
+msgctxt "field:stock.shipment.out,planned_date:"
msgid "Planned Date"
msgstr "Date planifiée"
-msgctxt "field:stock.shipment.out,rec_name:0"
+msgctxt "field:stock.shipment.out,rec_name:"
msgid "Name"
msgstr "Nom"
-msgctxt "field:stock.shipment.out,reference:0"
+msgctxt "field:stock.shipment.out,reference:"
msgid "Reference"
msgstr "Référence"
-msgctxt "field:stock.shipment.out,state:0"
+msgctxt "field:stock.shipment.out,state:"
msgid "State"
msgstr "Ãtat"
-msgctxt "field:stock.shipment.out,warehouse:0"
+msgctxt "field:stock.shipment.out,warehouse:"
msgid "Warehouse"
msgstr "Entrepôt"
-msgctxt "field:stock.shipment.out.assign.assign_failed,inventory_moves:0"
+msgctxt "field:stock.shipment.out,warehouse_output:"
+msgid "Warehouse Output"
+msgstr "Sortie entrepôt"
+
+msgctxt "field:stock.shipment.out,warehouse_storage:"
+msgid "Warehouse Storage"
+msgstr "Magasin de l'entrepôt"
+
+msgctxt "field:stock.shipment.out,write_date:"
+msgid "Write Date"
+msgstr "Date de mise à jour"
+
+msgctxt "field:stock.shipment.out,write_uid:"
+msgid "Write User"
+msgstr "Mis à jour par"
+
+msgctxt "field:stock.shipment.out.assign.failed,id:"
+msgid "ID"
+msgstr "ID"
+
+msgctxt "field:stock.shipment.out.assign.failed,inventory_moves:"
msgid "Inventory Moves"
msgstr "Mouvements internes"
-msgctxt "field:stock.shipment.out.return,code:0"
+msgctxt "field:stock.shipment.out.return,code:"
msgid "Code"
msgstr "Code"
-msgctxt "field:stock.shipment.out.return,company:0"
+msgctxt "field:stock.shipment.out.return,company:"
msgid "Company"
msgstr "Société"
-msgctxt "field:stock.shipment.out.return,customer:0"
+msgctxt "field:stock.shipment.out.return,create_date:"
+msgid "Create Date"
+msgstr "Date de création"
+
+msgctxt "field:stock.shipment.out.return,create_uid:"
+msgid "Create User"
+msgstr "Créé par"
+
+msgctxt "field:stock.shipment.out.return,customer:"
msgid "Customer"
msgstr "Client"
-msgctxt "field:stock.shipment.out.return,delivery_address:0"
+msgctxt "field:stock.shipment.out.return,customer_location:"
+msgid "Customer Location"
+msgstr "Emplacement client"
+
+msgctxt "field:stock.shipment.out.return,delivery_address:"
msgid "Delivery Address"
msgstr "Adresse de livraison"
-msgctxt "field:stock.shipment.out.return,effective_date:0"
+msgctxt "field:stock.shipment.out.return,effective_date:"
msgid "Effective Date"
msgstr "Date effective"
-msgctxt "field:stock.shipment.out.return,incoming_moves:0"
+msgctxt "field:stock.shipment.out.return,id:"
+msgid "ID"
+msgstr "ID"
+
+msgctxt "field:stock.shipment.out.return,incoming_moves:"
msgid "Incoming Moves"
msgstr "Mouvements entrants"
-msgctxt "field:stock.shipment.out.return,inventory_moves:0"
+msgctxt "field:stock.shipment.out.return,inventory_moves:"
msgid "Inventory Moves"
msgstr "Mouvements internes"
-msgctxt "field:stock.shipment.out.return,moves:0"
+msgctxt "field:stock.shipment.out.return,moves:"
msgid "Moves"
msgstr "Mouvements"
-msgctxt "field:stock.shipment.out.return,planned_date:0"
+msgctxt "field:stock.shipment.out.return,planned_date:"
msgid "Planned Date"
msgstr "Date planifiée"
-msgctxt "field:stock.shipment.out.return,rec_name:0"
+msgctxt "field:stock.shipment.out.return,rec_name:"
msgid "Name"
msgstr "Nom"
-msgctxt "field:stock.shipment.out.return,reference:0"
+msgctxt "field:stock.shipment.out.return,reference:"
msgid "Reference"
msgstr "Référence"
-msgctxt "field:stock.shipment.out.return,state:0"
+msgctxt "field:stock.shipment.out.return,state:"
msgid "State"
msgstr "Ãtat"
-msgctxt "field:stock.shipment.out.return,warehouse:0"
+msgctxt "field:stock.shipment.out.return,warehouse:"
msgid "Warehouse"
msgstr "Entrepôt"
-msgctxt "help:party.party,customer_location:0"
+msgctxt "field:stock.shipment.out.return,warehouse_input:"
+msgid "Warehouse Input"
+msgstr "Entrée entrepôt"
+
+msgctxt "field:stock.shipment.out.return,warehouse_storage:"
+msgid "Warehouse Storage"
+msgstr "Magasin de l'entrepôt"
+
+msgctxt "field:stock.shipment.out.return,write_date:"
+msgid "Write Date"
+msgstr "Date de mise à jour"
+
+msgctxt "field:stock.shipment.out.return,write_uid:"
+msgid "Write User"
+msgstr "Mis à jour par"
+
+msgctxt "help:party.party,customer_location:"
msgid "The default destination location when sending products to the party."
msgstr ""
"L'emplacement de destination par défaut quand des produits sont envoyés vers"
" ce tiers."
-msgctxt "help:party.party,supplier_location:0"
+msgctxt "help:party.party,supplier_location:"
msgid "The default source location when receiving products from the party."
msgstr ""
"L'emplacement d'origine par défaut quand des produits sont reçus depuis ce "
"tiers."
-msgctxt "help:stock.location_stock_date.init,forecast_date:0"
+msgctxt "help:product.by_location.start,forecast_date:"
msgid ""
"Allow to compute expected stock quantities for this date.\n"
"* An empty value is an infinite date in the future.\n"
"* A date in the past will provide historical values."
-msgstr ""
-"Permet de calculer les quantités en stock attendues pour cette date.\n"
-"* Une valeur vide correspond à une date infinie dans le futur.\n"
-"* Une date dans le passé retournera des données historiques."
+msgstr "Prévoir le calcul du stock prévisionel pour cette date"
-msgctxt "help:stock.product_stock_date.init,forecast_date:0"
+msgctxt "help:stock.products_by_locations.start,forecast_date:"
msgid ""
"Allow to compute expected stock quantities for this date.\n"
"* An empty value is an infinite date in the future.\n"
"* A date in the past will provide historical values."
-msgstr ""
-"Permet de calculer les quantités en stock attendues pour cette date.\n"
-"* Une valeur vide correspond à une date infinie dans le futur.\n"
-"* Une date dans le passé retournera des données historiques."
+msgstr "Prévoir le calcul du stock prévisionel pour cette date"
msgctxt "model:ir.action,name:act_inventory_form"
msgid "Inventories"
@@ -745,7 +1152,7 @@ msgid "Locations"
msgstr "Ãditer les emplacements"
msgctxt "model:ir.action,name:act_location_quantity_tree"
-msgid "Product Stock"
+msgid "Location Quantity & Cost Value"
msgstr "Quantités en stock"
msgctxt "model:ir.action,name:act_location_tree"
@@ -772,7 +1179,7 @@ msgctxt "model:ir.action,name:act_period_list"
msgid "Periods"
msgstr "Périodes"
-msgctxt "model:ir.action,name:act_product_by_location"
+msgctxt "model:ir.action,name:act_products_by_locations"
msgid "Products by Locations"
msgstr "Produits par emplacements"
@@ -864,17 +1271,13 @@ msgctxt "model:ir.action,name:report_shipment_out_return_restocking_list"
msgid "Restocking List"
msgstr "Liste de restockage"
-msgctxt "model:ir.action,name:wizard_complete_inventory"
-msgid "Complete Inventory"
-msgstr "Compléter l'inventaire"
-
-msgctxt "model:ir.action,name:wizard_location_open"
+msgctxt "model:ir.action,name:wizard_product_by_location"
msgid "Product by Location"
msgstr "Produits par emplacement"
-msgctxt "model:ir.action,name:wizard_product_open"
-msgid "Product Quantities"
-msgstr "Quantités de produit"
+msgctxt "model:ir.action,name:wizard_products_by_locations"
+msgid "Products by Locations"
+msgstr "Produits par emplacements"
msgctxt "model:ir.action,name:wizard_shipment_in_return_assign"
msgid "Assign Purchase Return Shipment"
@@ -1032,6 +1435,10 @@ msgctxt "model:ir.ui.menu,name:menu_stock_configuration"
msgid "Stock Configuration"
msgstr "Configuration des stocks"
+msgctxt "model:product.by_location.start,name:"
+msgid "Product by Location"
+msgstr "Produits par emplacement"
+
msgctxt "model:res.group,name:group_stock"
msgid "Stock"
msgstr "Stock"
@@ -1044,19 +1451,19 @@ msgctxt "model:res.group,name:group_stock_force_assignment"
msgid "Stock Force Assignment"
msgstr "Stock forcer assignation"
-msgctxt "model:stock.configuration,name:0"
+msgctxt "model:stock.configuration,name:"
msgid "Stock Configuration"
msgstr "Configuration des stocks"
-msgctxt "model:stock.inventory,name:0"
+msgctxt "model:stock.inventory,name:"
msgid "Stock Inventory"
msgstr "Inventaire du stock"
-msgctxt "model:stock.inventory.line,name:0"
+msgctxt "model:stock.inventory.line,name:"
msgid "Stock Inventory Line"
msgstr "Ligne d'inventaire de stock"
-msgctxt "model:stock.location,name:0"
+msgctxt "model:stock.location,name:"
msgid "Stock Location"
msgstr "Lieu de Stockage"
@@ -1088,1019 +1495,1530 @@ msgctxt "model:stock.location,name:location_warehouse"
msgid "Warehouse"
msgstr "Entrepôt"
-msgctxt "model:stock.location_stock_date.init,name:0"
-msgid "Compute stock quantities"
-msgstr "Quantité de stock calculées"
-
-msgctxt "model:stock.move,name:0"
+msgctxt "model:stock.move,name:"
msgid "Stock Move"
msgstr "Mouvement de stock"
-msgctxt "model:stock.period,name:0"
+msgctxt "model:stock.period,name:"
msgid "Stock Period"
msgstr "Période de stock"
-msgctxt "model:stock.period.cache,name:0"
-msgid ""
-"\n"
-" Stock Period Cache\n"
-"\n"
-" It is used to store cached computation of stock quantities.\n"
-" "
+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."
-msgctxt "model:stock.product_stock_date.init,name:0"
-msgid "Compute stock quantities"
-msgstr "Quantités de stock calculées"
+msgctxt "model:stock.products_by_locations.start,name:"
+msgid "Products by Locations"
+msgstr "Produits par emplacements"
-msgctxt "model:stock.shipment.in,name:0"
+msgctxt "model:stock.shipment.in,name:"
msgid "Supplier Shipment"
msgstr "Expédition fournisseur"
-msgctxt "model:stock.shipment.in.return,name:0"
+msgctxt "model:stock.shipment.in.return,name:"
msgid "Supplier Return Shipment"
msgstr "Retour d'expédition fournisseur"
-msgctxt "model:stock.shipment.in.return.assign.assign_failed,name:0"
-msgid "Assign Supplier Return Shipment Assign Failed"
-msgstr "Assigner le retour d'expédition fournisseur - Demande forcée"
+msgctxt "model:stock.shipment.in.return.assign.failed,name:"
+msgid "Assign Supplier Return Shipment"
+msgstr "Assigner les éxpéditions de retour fournisseur"
-msgctxt "model:stock.shipment.internal,name:0"
+msgctxt "model:stock.shipment.internal,name:"
msgid "Internal Shipment"
msgstr "Expédition interne"
-msgctxt "model:stock.shipment.internal.assign.assign_failed,name:0"
-msgid "Assign Shipment Internal Assign Failed"
-msgstr "Assigner l'expédition interne - Demande forcée"
+msgctxt "model:stock.shipment.internal.assign.failed,name:"
+msgid "Assign Shipment Internal"
+msgstr "Assigner l'expédition interne"
-msgctxt "model:stock.shipment.out,name:0"
+msgctxt "model:stock.shipment.out,name:"
msgid "Customer Shipment"
msgstr "Expédition Client"
-msgctxt "model:stock.shipment.out.assign.assign_failed,name:0"
-msgid "Assign Shipment Out Assign Failed"
-msgstr "Assigner l'expédition de sortie - Demande forcée"
+msgctxt "model:stock.shipment.out.assign.failed,name:"
+msgid "Assign Shipment Out"
+msgstr "Assigner l'expédition de sortie"
-msgctxt "model:stock.shipment.out.return,name:0"
+msgctxt "model:stock.shipment.out.return,name:"
msgid "Customer Return Shipment"
msgstr "Retour d'expédition client"
-msgctxt "model:workflow,name:wkf_inventory"
-msgid "Inventory"
-msgstr "Inventaire"
+msgctxt "odt:stock.shipment.in.restocking_list:"
+msgid "/"
+msgstr "/"
-msgctxt "model:workflow,name:wkf_shipment_in_return"
-msgid "Supplier Return Shipment"
-msgstr "Retour d'expédition fournisseur"
+msgctxt "odt:stock.shipment.in.restocking_list:"
+msgid "/"
+msgstr "/"
-msgctxt "model:workflow,name:wkf_shipment_out_return"
-msgid "Customer Return Shipment"
-msgstr "Retour d'expédition client"
+msgctxt "odt:stock.shipment.in.restocking_list:"
+msgid "Code:"
+msgstr "Code :"
-msgctxt "model:workflow,name:wkf_shipmentin"
-msgid "Supplier Shipment"
-msgstr "Expédition fournisseur"
+msgctxt "odt:stock.shipment.in.restocking_list:"
+msgid "Code:"
+msgstr "Code :"
-msgctxt "model:workflow,name:wkf_shipmentinternal"
-msgid "Internal Shipment"
-msgstr "Expédition interne"
+msgctxt "odt:stock.shipment.in.restocking_list:"
+msgid "E-Mail:"
+msgstr "E-Mail :"
-msgctxt "model:workflow,name:wkf_shipmentout"
-msgid "Customer Shipment"
-msgstr "Expédition client"
+msgctxt "odt:stock.shipment.in.restocking_list:"
+msgid "E-Mail:"
+msgstr "E-Mail :"
-msgctxt "model:workflow.activity,name:inventory_act_cancel"
-msgid "Canceled"
-msgstr "Annulé"
+msgctxt "odt:stock.shipment.in.restocking_list:"
+msgid "From Location"
+msgstr "Emplacement d'origine"
-msgctxt "model:workflow.activity,name:inventory_act_done"
-msgid "Done"
-msgstr "Fait"
+msgctxt "odt:stock.shipment.in.restocking_list:"
+msgid "From Location"
+msgstr "Emplacement d'origine"
-msgctxt "model:workflow.activity,name:inventory_act_draft"
-msgid "Draft"
-msgstr "Brouillon"
+msgctxt "odt:stock.shipment.in.restocking_list:"
+msgid "Phone:"
+msgstr "Téléphone :"
-msgctxt "model:workflow.activity,name:shipment_in_return_act_assigned"
-msgid "Assigned"
-msgstr "Assigné"
+msgctxt "odt:stock.shipment.in.restocking_list:"
+msgid "Phone:"
+msgstr "Téléphone :"
-msgctxt "model:workflow.activity,name:shipment_in_return_act_cancel"
-msgid "Canceled"
-msgstr "Annuler"
+msgctxt "odt:stock.shipment.in.restocking_list:"
+msgid "Planned Date:"
+msgstr "Date planifiée :"
-msgctxt "model:workflow.activity,name:shipment_in_return_act_done"
-msgid "Done"
-msgstr "Fait"
-
-msgctxt "model:workflow.activity,name:shipment_in_return_act_draft"
-msgid "Draft"
-msgstr "Brouillon"
-
-msgctxt "model:workflow.activity,name:shipment_in_return_act_waiting"
-msgid "Waiting"
-msgstr "En attente"
-
-msgctxt "model:workflow.activity,name:shipment_out_return_act_cancel"
-msgid "Canceled"
-msgstr "Annuler"
-
-msgctxt "model:workflow.activity,name:shipment_out_return_act_done"
-msgid "Done"
-msgstr "Fait"
-
-msgctxt "model:workflow.activity,name:shipment_out_return_act_draft"
-msgid "Draft"
-msgstr "Brouillon"
-
-msgctxt "model:workflow.activity,name:shipment_out_return_act_received"
-msgid "Received"
-msgstr "Reçu"
-
-msgctxt "model:workflow.activity,name:shipmentin_act_cancel"
-msgid "Canceled"
-msgstr "Annulé"
-
-msgctxt "model:workflow.activity,name:shipmentin_act_done"
-msgid "Done"
-msgstr "Fait"
-
-msgctxt "model:workflow.activity,name:shipmentin_act_draft"
-msgid "Draft"
-msgstr "Brouillon"
-
-msgctxt "model:workflow.activity,name:shipmentin_act_received"
-msgid "Received"
-msgstr "Reçu"
-
-msgctxt "model:workflow.activity,name:shipmentinternal_act_assigned"
-msgid "Assigned"
-msgstr "Assigné"
-
-msgctxt "model:workflow.activity,name:shipmentinternal_act_cancel"
-msgid "Canceled"
-msgstr "Annulé"
-
-msgctxt "model:workflow.activity,name:shipmentinternal_act_done"
-msgid "Done"
-msgstr "Fait"
-
-msgctxt "model:workflow.activity,name:shipmentinternal_act_draft"
-msgid "Draft"
-msgstr "Brouillon"
-
-msgctxt "model:workflow.activity,name:shipmentinternal_act_waiting"
-msgid "Waiting"
-msgstr "En attente"
-
-msgctxt "model:workflow.activity,name:shipmentout_act_assigned"
-msgid "Assigned"
-msgstr "Assigné"
-
-msgctxt "model:workflow.activity,name:shipmentout_act_cancel"
-msgid "Canceled"
-msgstr "Annulé"
-
-msgctxt "model:workflow.activity,name:shipmentout_act_done"
-msgid "Done"
-msgstr "Fait"
-
-msgctxt "model:workflow.activity,name:shipmentout_act_draft"
-msgid "Draft"
-msgstr "Brouillon"
-
-msgctxt "model:workflow.activity,name:shipmentout_act_packed"
-msgid "Packed"
-msgstr "Emballé"
-
-msgctxt "model:workflow.activity,name:shipmentout_act_waiting"
-msgid "Waiting"
-msgstr "En attente"
-
-msgctxt "odt:stock.shipment.in.restocking_list:0"
-msgid "/"
-msgstr "/"
-
-msgctxt "odt:stock.shipment.in.restocking_list:0"
-msgid "Code:"
-msgstr "Code :"
-
-msgctxt "odt:stock.shipment.in.restocking_list:0"
-msgid "E-Mail:"
-msgstr "E-Mail :"
-
-msgctxt "odt:stock.shipment.in.restocking_list:0"
-msgid "From Location"
-msgstr "Emplacement d'origine"
-
-msgctxt "odt:stock.shipment.in.restocking_list:0"
-msgid "Phone:"
-msgstr "Téléphone :"
-
-msgctxt "odt:stock.shipment.in.restocking_list:0"
+msgctxt "odt:stock.shipment.in.restocking_list:"
msgid "Planned Date:"
msgstr "Date planifiée :"
-msgctxt "odt:stock.shipment.in.restocking_list:0"
+msgctxt "odt:stock.shipment.in.restocking_list:"
+msgid "Product"
+msgstr "Produit"
+
+msgctxt "odt:stock.shipment.in.restocking_list:"
msgid "Product"
msgstr "Produit"
-msgctxt "odt:stock.shipment.in.restocking_list:0"
+msgctxt "odt:stock.shipment.in.restocking_list:"
msgid "Quantity"
msgstr "Quantité"
-msgctxt "odt:stock.shipment.in.restocking_list:0"
+msgctxt "odt:stock.shipment.in.restocking_list:"
+msgid "Quantity"
+msgstr "Quantité"
+
+msgctxt "odt:stock.shipment.in.restocking_list:"
+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:0"
+msgctxt "odt:stock.shipment.in.restocking_list:"
msgid "Restocking List"
msgstr "Liste de restockage"
-msgctxt "odt:stock.shipment.in.restocking_list:0"
+msgctxt "odt:stock.shipment.in.restocking_list:"
+msgid "Restocking List"
+msgstr "Liste de restockage"
+
+msgctxt "odt:stock.shipment.in.restocking_list:"
msgid "Supplier:"
msgstr "Fournisseur :"
-msgctxt "odt:stock.shipment.in.restocking_list:0"
+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:0"
+msgctxt "odt:stock.shipment.in.restocking_list:"
+msgid "To Location"
+msgstr "Emplacement de destination"
+
+msgctxt "odt:stock.shipment.in.restocking_list:"
+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:0"
+msgctxt "odt:stock.shipment.in.restocking_list:"
+msgid "Warehouse:"
+msgstr "Entrepôt :"
+
+msgctxt "odt:stock.shipment.in.restocking_list:"
msgid "Warehouse:"
msgstr "Entrepôt :"
-msgctxt "odt:stock.shipment.internal.report:0"
+msgctxt "odt:stock.shipment.internal.report:"
msgid "/"
msgstr "/"
-msgctxt "odt:stock.shipment.internal.report:0"
+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 :"
-msgctxt "odt:stock.shipment.internal.report:0"
+msgctxt "odt:stock.shipment.internal.report:"
msgid "E-Mail:"
msgstr "E-Mail :"
-msgctxt "odt:stock.shipment.internal.report:0"
+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"
-msgctxt "odt:stock.shipment.internal.report:0"
+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 :"
-msgctxt "odt:stock.shipment.internal.report:0"
+msgctxt "odt:stock.shipment.internal.report:"
msgid "Internal Shipment"
msgstr "Expédition interne"
-msgctxt "odt:stock.shipment.internal.report:0"
+msgctxt "odt:stock.shipment.internal.report:"
+msgid "Internal Shipment"
+msgstr "Expédition interne"
+
+msgctxt "odt:stock.shipment.internal.report:"
msgid "Phone:"
msgstr "Téléphone :"
-msgctxt "odt:stock.shipment.internal.report:0"
+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:0"
+msgctxt "odt:stock.shipment.internal.report:"
+msgid "Planned Date:"
+msgstr "Date planifiée :"
+
+msgctxt "odt:stock.shipment.internal.report:"
+msgid "Product"
+msgstr "Produit"
+
+msgctxt "odt:stock.shipment.internal.report:"
msgid "Product"
msgstr "Produit"
-msgctxt "odt:stock.shipment.internal.report:0"
+msgctxt "odt:stock.shipment.internal.report:"
+msgid "Quantity"
+msgstr "Quantité"
+
+msgctxt "odt:stock.shipment.internal.report:"
msgid "Quantity"
msgstr "Quantité"
-msgctxt "odt:stock.shipment.internal.report:0"
+msgctxt "odt:stock.shipment.internal.report:"
msgid "Reference:"
msgstr "Référence :"
-msgctxt "odt:stock.shipment.internal.report:0"
+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"
-msgctxt "odt:stock.shipment.internal.report:0"
+msgctxt "odt:stock.shipment.internal.report:"
msgid "To Location:"
msgstr "Emplacement de destination :"
-msgctxt "odt:stock.shipment.internal.report:0"
+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 :"
-msgctxt "odt:stock.shipment.out.delivery_note:0"
+msgctxt "odt:stock.shipment.out.delivery_note:"
+msgid "/"
+msgstr "/"
+
+msgctxt "odt:stock.shipment.out.delivery_note:"
msgid "/"
msgstr "/"
-msgctxt "odt:stock.shipment.out.delivery_note:0"
+msgctxt "odt:stock.shipment.out.delivery_note:"
msgid "Customer Code:"
msgstr "Code client :"
-msgctxt "odt:stock.shipment.out.delivery_note:0"
+msgctxt "odt:stock.shipment.out.delivery_note:"
+msgid "Customer Code:"
+msgstr "Code client :"
+
+msgctxt "odt:stock.shipment.out.delivery_note:"
+msgid "Date:"
+msgstr "Date :"
+
+msgctxt "odt:stock.shipment.out.delivery_note:"
msgid "Date:"
msgstr "Date :"
-msgctxt "odt:stock.shipment.out.delivery_note:0"
+msgctxt "odt:stock.shipment.out.delivery_note:"
msgid "Delivery Note"
msgstr "Bon de livraison"
-msgctxt "odt:stock.shipment.out.delivery_note:0"
+msgctxt "odt:stock.shipment.out.delivery_note:"
+msgid "Delivery Note"
+msgstr "Bon de livraison"
+
+msgctxt "odt:stock.shipment.out.delivery_note:"
+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:0"
+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 :"
-msgctxt "odt:stock.shipment.out.delivery_note:0"
+msgctxt "odt:stock.shipment.out.delivery_note:"
msgid "Product"
msgstr "Produit"
-msgctxt "odt:stock.shipment.out.delivery_note:0"
+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é"
-msgctxt "odt:stock.shipment.out.delivery_note:0"
+msgctxt "odt:stock.shipment.out.delivery_note:"
msgid "Reference:"
msgstr "Référence :"
-msgctxt "odt:stock.shipment.out.delivery_note:0"
+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:0"
+msgctxt "odt:stock.shipment.out.delivery_note:"
+msgid "Shipment Number:"
+msgstr "Numéro d'expédition :"
+
+msgctxt "odt:stock.shipment.out.delivery_note:"
msgid "VAT Number:"
msgstr "Numéro TVA :"
-msgctxt "odt:stock.shipment.out.picking_list:0"
+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 "/"
-msgctxt "odt:stock.shipment.out.picking_list:0"
+msgctxt "odt:stock.shipment.out.picking_list:"
+msgid "Code:"
+msgstr "Code :"
+
+msgctxt "odt:stock.shipment.out.picking_list:"
msgid "Code:"
msgstr "Code :"
-msgctxt "odt:stock.shipment.out.picking_list:0"
+msgctxt "odt:stock.shipment.out.picking_list:"
msgid "Customer:"
msgstr "Client :"
-msgctxt "odt:stock.shipment.out.picking_list:0"
+msgctxt "odt:stock.shipment.out.picking_list:"
+msgid "Customer:"
+msgstr "Client :"
+
+msgctxt "odt:stock.shipment.out.picking_list:"
+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:0"
+msgctxt "odt:stock.shipment.out.picking_list:"
msgid "From Location"
msgstr "Emplacement d'origine"
-msgctxt "odt:stock.shipment.out.picking_list:0"
+msgctxt "odt:stock.shipment.out.picking_list:"
+msgid "From Location"
+msgstr "Emplacement d'origine"
+
+msgctxt "odt:stock.shipment.out.picking_list:"
+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:0"
+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"
-msgctxt "odt:stock.shipment.out.picking_list:0"
+msgctxt "odt:stock.shipment.out.picking_list:"
msgid "Planned Date:"
msgstr "Date planifiée :"
-msgctxt "odt:stock.shipment.out.picking_list:0"
+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:0"
+msgctxt "odt:stock.shipment.out.picking_list:"
+msgid "Product"
+msgstr "Produit"
+
+msgctxt "odt:stock.shipment.out.picking_list:"
msgid "Quantity"
msgstr "Quantité"
-msgctxt "odt:stock.shipment.out.picking_list:0"
+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 :"
-msgctxt "odt:stock.shipment.out.picking_list:0"
+msgctxt "odt:stock.shipment.out.picking_list:"
+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:0"
+msgctxt "odt:stock.shipment.out.picking_list:"
msgid "VAT Number:"
msgstr "Numéro TVA :"
-msgctxt "odt:stock.shipment.out.picking_list:0"
+msgctxt "odt:stock.shipment.out.picking_list:"
+msgid "VAT Number:"
+msgstr "Numéro TVA :"
+
+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:0"
+msgctxt "odt:stock.shipment.out.return.restocking_list:"
msgid "/"
msgstr "/"
-msgctxt "odt:stock.shipment.out.return.restocking_list:0"
+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 "Code:"
msgstr "Code :"
-msgctxt "odt:stock.shipment.out.return.restocking_list:0"
+msgctxt "odt:stock.shipment.out.return.restocking_list:"
+msgid "E-Mail:"
+msgstr "E-Mail :"
+
+msgctxt "odt:stock.shipment.out.return.restocking_list:"
msgid "E-Mail:"
msgstr "E-Mail :"
-msgctxt "odt:stock.shipment.out.return.restocking_list:0"
+msgctxt "odt:stock.shipment.out.return.restocking_list:"
msgid "From Location"
msgstr "Emplacement d'origine"
-msgctxt "odt:stock.shipment.out.return.restocking_list:0"
+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 :"
-msgctxt "odt:stock.shipment.out.return.restocking_list:0"
+msgctxt "odt:stock.shipment.out.return.restocking_list:"
msgid "Planned Date:"
msgstr "Date planifiée :"
-msgctxt "odt:stock.shipment.out.return.restocking_list:0"
+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"
-msgctxt "odt:stock.shipment.out.return.restocking_list:0"
+msgctxt "odt:stock.shipment.out.return.restocking_list:"
+msgid "Quantity"
+msgstr "Quantité"
+
+msgctxt "odt:stock.shipment.out.return.restocking_list:"
msgid "Quantity"
msgstr "Quantité"
-msgctxt "odt:stock.shipment.out.return.restocking_list:0"
+msgctxt "odt:stock.shipment.out.return.restocking_list:"
msgid "Reference:"
msgstr "Référence :"
-msgctxt "odt:stock.shipment.out.return.restocking_list:0"
+msgctxt "odt:stock.shipment.out.return.restocking_list:"
+msgid "Reference:"
+msgstr "Référence :"
+
+msgctxt "odt:stock.shipment.out.return.restocking_list:"
+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:0"
+msgctxt "odt:stock.shipment.out.return.restocking_list:"
msgid "Supplier:"
msgstr "Fournisseur :"
-msgctxt "odt:stock.shipment.out.return.restocking_list:0"
+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:0"
+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:0"
+msgctxt "odt:stock.shipment.out.return.restocking_list:"
+msgid "VAT Number:"
+msgstr "Numéro TVA :"
+
+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:0"
+msgctxt "selection:stock.inventory,state:"
+msgid "Canceled"
+msgstr "Annulé"
+
+msgctxt "selection:stock.inventory,state:"
msgid "Canceled"
msgstr "Annulé"
-msgctxt "selection:stock.inventory,state:0"
+msgctxt "selection:stock.inventory,state:"
msgid "Done"
msgstr "Fait"
-msgctxt "selection:stock.inventory,state:0"
+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"
-msgctxt "selection:stock.location,type:0"
+msgctxt "selection:stock.location,type:"
msgid "Customer"
msgstr "Client"
-msgctxt "selection:stock.location,type:0"
+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:0"
+msgctxt "selection:stock.location,type:"
+msgid "Production"
+msgstr "Production"
+
+msgctxt "selection:stock.location,type:"
msgid "Production"
msgstr "Production"
-msgctxt "selection:stock.location,type:0"
+msgctxt "selection:stock.location,type:"
msgid "Storage"
msgstr "Magasin"
-msgctxt "selection:stock.location,type:0"
+msgctxt "selection:stock.location,type:"
+msgid "Storage"
+msgstr "Magasin"
+
+msgctxt "selection:stock.location,type:"
msgid "Supplier"
msgstr "Fournisseur"
-msgctxt "selection:stock.location,type:0"
+msgctxt "selection:stock.location,type:"
+msgid "Supplier"
+msgstr "Fournisseur"
+
+msgctxt "selection:stock.location,type:"
msgid "View"
msgstr "Vue"
-msgctxt "selection:stock.location,type:0"
+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"
-msgctxt "selection:stock.move,state:0"
+msgctxt "selection:stock.move,state:"
+msgid "Assigned"
+msgstr "Assigné"
+
+msgctxt "selection:stock.move,state:"
msgid "Assigned"
msgstr "Assigné"
-msgctxt "selection:stock.move,state:0"
+msgctxt "selection:stock.move,state:"
msgid "Canceled"
msgstr "Annulé"
-msgctxt "selection:stock.move,state:0"
+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"
-msgctxt "selection:stock.move,state:0"
+msgctxt "selection:stock.move,state:"
msgid "Draft"
msgstr "Brouillon"
-msgctxt "selection:stock.period,state:0"
+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é"
-msgctxt "selection:stock.period,state:0"
+msgctxt "selection:stock.period,state:"
+msgid "Draft"
+msgstr "Brouillon"
+
+msgctxt "selection:stock.period,state:"
msgid "Draft"
msgstr "Brouillon"
-msgctxt "selection:stock.shipment.in,state:0"
+msgctxt "selection:stock.shipment.in,state:"
msgid "Canceled"
msgstr "Annulé"
-msgctxt "selection:stock.shipment.in,state:0"
+msgctxt "selection:stock.shipment.in,state:"
+msgid "Canceled"
+msgstr "Annulé"
+
+msgctxt "selection:stock.shipment.in,state:"
+msgid "Done"
+msgstr "Fait"
+
+msgctxt "selection:stock.shipment.in,state:"
msgid "Done"
msgstr "Fait"
-msgctxt "selection:stock.shipment.in,state:0"
+msgctxt "selection:stock.shipment.in,state:"
msgid "Draft"
msgstr "Brouillon"
-msgctxt "selection:stock.shipment.in,state:0"
+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"
-msgctxt "selection:stock.shipment.in.return,state:0"
+msgctxt "selection:stock.shipment.in.return,state:"
+msgid "Assigned"
+msgstr "Assigné"
+
+msgctxt "selection:stock.shipment.in.return,state:"
msgid "Assigned"
msgstr "Assigné"
-msgctxt "selection:stock.shipment.in.return,state:0"
+msgctxt "selection:stock.shipment.in.return,state:"
msgid "Canceled"
-msgstr "Annuler"
+msgstr "Annulé"
+
+msgctxt "selection:stock.shipment.in.return,state:"
+msgid "Canceled"
+msgstr "Annulé"
+
+msgctxt "selection:stock.shipment.in.return,state:"
+msgid "Done"
+msgstr "Fait"
-msgctxt "selection:stock.shipment.in.return,state:0"
+msgctxt "selection:stock.shipment.in.return,state:"
msgid "Done"
msgstr "Fait"
-msgctxt "selection:stock.shipment.in.return,state:0"
+msgctxt "selection:stock.shipment.in.return,state:"
msgid "Draft"
msgstr "Brouillon"
-msgctxt "selection:stock.shipment.in.return,state:0"
+msgctxt "selection:stock.shipment.in.return,state:"
+msgid "Draft"
+msgstr "Brouillon"
+
+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:0"
+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:0"
+msgctxt "selection:stock.shipment.internal,state:"
+msgid "Canceled"
+msgstr "Annulé"
+
+msgctxt "selection:stock.shipment.internal,state:"
msgid "Canceled"
msgstr "Annulé"
-msgctxt "selection:stock.shipment.internal,state:0"
+msgctxt "selection:stock.shipment.internal,state:"
msgid "Done"
msgstr "Fait"
-msgctxt "selection:stock.shipment.internal,state:0"
+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"
-msgctxt "selection:stock.shipment.internal,state:0"
+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:0"
+msgctxt "selection:stock.shipment.out,state:"
+msgid "Assigned"
+msgstr "Assigné"
+
+msgctxt "selection:stock.shipment.out,state:"
msgid "Assigned"
msgstr "Assigné"
-msgctxt "selection:stock.shipment.out,state:0"
+msgctxt "selection:stock.shipment.out,state:"
msgid "Canceled"
msgstr "Annulé"
-msgctxt "selection:stock.shipment.out,state:0"
+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:0"
+msgctxt "selection:stock.shipment.out,state:"
+msgid "Draft"
+msgstr "Brouillon"
+
+msgctxt "selection:stock.shipment.out,state:"
msgid "Draft"
msgstr "Brouillon"
-msgctxt "selection:stock.shipment.out,state:0"
+msgctxt "selection:stock.shipment.out,state:"
+msgid "Packed"
+msgstr "Emballé"
+
+msgctxt "selection:stock.shipment.out,state:"
msgid "Packed"
msgstr "Emballé"
-msgctxt "selection:stock.shipment.out,state:0"
+msgctxt "selection:stock.shipment.out,state:"
msgid "Waiting"
msgstr "En attente"
-msgctxt "selection:stock.shipment.out.return,state:0"
+msgctxt "selection:stock.shipment.out,state:"
+msgid "Waiting"
+msgstr "En attente"
+
+msgctxt "selection:stock.shipment.out.return,state:"
+msgid "Canceled"
+msgstr "Annulé"
+
+msgctxt "selection:stock.shipment.out.return,state:"
msgid "Canceled"
msgstr "Annulé"
-msgctxt "selection:stock.shipment.out.return,state:0"
+msgctxt "selection:stock.shipment.out.return,state:"
+msgid "Done"
+msgstr "Fait"
+
+msgctxt "selection:stock.shipment.out.return,state:"
msgid "Done"
msgstr "Fait"
-msgctxt "selection:stock.shipment.out.return,state:0"
+msgctxt "selection:stock.shipment.out.return,state:"
+msgid "Draft"
+msgstr "Brouillon"
+
+msgctxt "selection:stock.shipment.out.return,state:"
msgid "Draft"
msgstr "Brouillon"
-msgctxt "selection:stock.shipment.out.return,state:0"
+msgctxt "selection:stock.shipment.out.return,state:"
msgid "Received"
msgstr "Reçu"
-msgctxt "view:party.party:0"
+msgctxt "selection:stock.shipment.out.return,state:"
+msgid "Received"
+msgstr "Reçu"
+
+msgctxt "view:party.party:"
+msgid "Stock"
+msgstr "Stock"
+
+msgctxt "view:party.party:"
msgid "Stock"
msgstr "Stock"
-msgctxt "view:party.party:0"
+msgctxt "view:party.party:"
msgid "_Stock"
msgstr "_Stocks"
-msgctxt "view:product.product:0"
+msgctxt "view:product.by_location.start:"
+msgid "Product by Location"
+msgstr "Produits par emplacement"
+
+msgctxt "view:product.product:"
+msgid "Products"
+msgstr "Produits"
+
+msgctxt "view:product.product:"
msgid "Products"
msgstr "Produits"
-msgctxt "view:stock.configuration:0"
+msgctxt "view:stock.configuration:"
msgid "Stock Configuration"
msgstr "Configuration des stocks"
-msgctxt "view:stock.inventory.line:0"
+msgctxt "view:stock.configuration:"
+msgid "Stock Configuration"
+msgstr "Configuration des stocks"
+
+msgctxt "view:stock.inventory.line:"
+msgid "Inventory Line"
+msgstr "Ligne d'inventaire"
+
+msgctxt "view:stock.inventory.line:"
msgid "Inventory Line"
msgstr "Ligne d'inventaire"
-msgctxt "view:stock.inventory.line:0"
+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:0"
+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"
-msgctxt "view:stock.inventory:0"
+msgctxt "view:stock.inventory:"
msgid "All generated moves will be cancelled!"
msgstr "Tous les mouvements générés vont être annulés"
-msgctxt "view:stock.inventory:0"
+msgctxt "view:stock.inventory:"
msgid "Cancel"
msgstr "Annuler"
-msgctxt "view:stock.inventory:0"
+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"
-msgctxt "view:stock.inventory:0"
+msgctxt "view:stock.inventory:"
+msgid "Confirm"
+msgstr "Confirmer"
+
+msgctxt "view:stock.inventory:"
msgid "Confirm"
msgstr "Confirmer"
-msgctxt "view:stock.inventory:0"
+msgctxt "view:stock.inventory:"
+msgid "Inventories"
+msgstr "Inventaires"
+
+msgctxt "view:stock.inventory:"
msgid "Inventories"
msgstr "Inventaires"
-msgctxt "view:stock.inventory:0"
+msgctxt "view:stock.inventory:"
msgid "Inventory"
msgstr "Inventaire"
-msgctxt "view:stock.inventory:0"
+msgctxt "view:stock.inventory:"
+msgid "Inventory"
+msgstr "Inventaire"
+
+msgctxt "view:stock.inventory:"
msgid "Re-Open"
msgstr "Ré-Ouvrir"
-msgctxt "view:stock.location:0"
+msgctxt "view:stock.location:"
+msgid "Location"
+msgstr "Emplacement"
+
+msgctxt "view:stock.location:"
msgid "Location"
msgstr "Emplacement"
-msgctxt "view:stock.location:0"
+msgctxt "view:stock.location:"
+msgid "Location Quantity"
+msgstr "Quantité de la location"
+
+msgctxt "view:stock.location:"
+msgid "Locations"
+msgstr "Emplacements"
+
+msgctxt "view:stock.location:"
msgid "Locations"
msgstr "Emplacements"
-msgctxt "view:stock.location:0"
+msgctxt "view:stock.location:"
msgid "Product Stock"
msgstr "Quantités en stock"
-msgctxt "view:stock.location_stock_date.init:0"
-msgid "Product Quantity."
-msgstr "Quantité de produit"
+msgctxt "view:stock.move:"
+msgid "Move"
+msgstr "Mouvement"
-msgctxt "view:stock.move:0"
+msgctxt "view:stock.move:"
msgid "Move"
msgstr "Mouvement"
-msgctxt "view:stock.move:0"
+msgctxt "view:stock.move:"
msgid "Moves"
msgstr "Mouvements"
-msgctxt "view:stock.period.cache:0"
+msgctxt "view:stock.move:"
+msgid "Moves"
+msgstr "Mouvements"
+
+msgctxt "view:stock.period.cache:"
+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:0"
+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"
-msgctxt "view:stock.period:0"
+msgctxt "view:stock.period:"
+msgid "Close"
+msgstr "Fermer"
+
+msgctxt "view:stock.period:"
msgid "Close"
msgstr "Fermer"
-msgctxt "view:stock.period:0"
+msgctxt "view:stock.period:"
msgid "Draft"
msgstr "Brouillon"
-msgctxt "view:stock.period:0"
+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"
-msgctxt "view:stock.period:0"
+msgctxt "view:stock.period:"
msgid "Periods"
msgstr "Périodes"
-msgctxt "view:stock.product_stock_date.init:0"
-msgid "Product Quantity."
-msgstr "Quantité Produit :"
+msgctxt "view:stock.period:"
+msgid "Periods"
+msgstr "Périodes"
-msgctxt "view:stock.shipment.in.return.assign.assign_failed:0"
-msgid "Moves"
-msgstr "Mouvements"
+msgctxt "view:stock.products_by_locations.start:"
+msgid "Products by Locations"
+msgstr "Produits par emplacements"
-msgctxt "view:stock.shipment.in.return.assign.assign_failed:0"
+msgctxt "view:stock.shipment.in.return.assign.failed:"
msgid "Unable to Assign"
msgstr "Impossible d'assigner"
-msgctxt "view:stock.shipment.in.return.assign.assign_failed:0"
+msgctxt "view:stock.shipment.in.return.assign.failed:"
msgid "Unable to assign those products:"
msgstr "Impossible d'assigner ces produits :"
-msgctxt "view:stock.shipment.in.return:0"
+msgctxt "view:stock.shipment.in.return:"
msgid "Assign"
msgstr "Assigner"
-msgctxt "view:stock.shipment.in.return:0"
+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:0"
+msgctxt "view:stock.shipment.in.return:"
+msgid "Done"
+msgstr "Fait"
+
+msgctxt "view:stock.shipment.in.return:"
msgid "Done"
msgstr "Fait"
-msgctxt "view:stock.shipment.in.return:0"
+msgctxt "view:stock.shipment.in.return:"
+msgid "Draft"
+msgstr "Brouillon"
+
+msgctxt "view:stock.shipment.in.return:"
msgid "Draft"
msgstr "Brouillon"
-msgctxt "view:stock.shipment.in.return:0"
+msgctxt "view:stock.shipment.in.return:"
msgid "Reset to Draft"
msgstr "Remettre en brouillon"
-msgctxt "view:stock.shipment.in.return:0"
+msgctxt "view:stock.shipment.in.return:"
msgid "Supplier Return Shipment"
msgstr "Retour d'expédition fournisseur"
-msgctxt "view:stock.shipment.in.return:0"
+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:0"
+msgctxt "view:stock.shipment.in.return:"
+msgid "Wait"
+msgstr "Attente"
+
+msgctxt "view:stock.shipment.in.return:"
msgid "Waiting"
msgstr "En attente"
-msgctxt "view:stock.shipment.in:0"
+msgctxt "view:stock.shipment.in:"
+msgid "Cancel"
+msgstr "Annuler"
+
+msgctxt "view:stock.shipment.in:"
msgid "Cancel"
msgstr "Annuler"
-msgctxt "view:stock.shipment.in:0"
+msgctxt "view:stock.shipment.in:"
+msgid "Done"
+msgstr "Fait"
+
+msgctxt "view:stock.shipment.in:"
msgid "Done"
msgstr "Fait"
-msgctxt "view:stock.shipment.in:0"
+msgctxt "view:stock.shipment.in:"
msgid "Draft"
msgstr "Brouillon"
-msgctxt "view:stock.shipment.in:0"
+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:0"
+msgctxt "view:stock.shipment.in:"
msgid "Inventory Moves"
msgstr "Mouvements internes"
-msgctxt "view:stock.shipment.in:0"
+msgctxt "view:stock.shipment.in:"
+msgid "Inventory Moves"
+msgstr "Mouvements internes"
+
+msgctxt "view:stock.shipment.in:"
msgid "Moves"
msgstr "Mouvements"
-msgctxt "view:stock.shipment.in:0"
+msgctxt "view:stock.shipment.in:"
+msgid "Receive"
+msgstr "Réception"
+
+msgctxt "view:stock.shipment.in:"
msgid "Received"
msgstr "Réception"
-msgctxt "view:stock.shipment.in:0"
+msgctxt "view:stock.shipment.in:"
+msgid "Reset to Draft"
+msgstr "Remettre en brouillon"
+
+msgctxt "view:stock.shipment.in:"
msgid "Reset to Draft"
msgstr "Remettre en brouillon"
-msgctxt "view:stock.shipment.in:0"
+msgctxt "view:stock.shipment.in:"
msgid "Supplier Shipment"
msgstr "Expédition fournisseur"
-msgctxt "view:stock.shipment.in:0"
+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.internal.assign.assign_failed:0"
-msgid "Moves"
-msgstr "Mouvements"
+msgctxt "view:stock.shipment.in:"
+msgid "Supplier Shipments"
+msgstr "Expéditions fournisseur"
-msgctxt "view:stock.shipment.internal.assign.assign_failed:0"
+msgctxt "view:stock.shipment.internal.assign.failed:"
msgid "Unable to Assign"
msgstr "Impossible d'assigner"
-msgctxt "view:stock.shipment.internal.assign.assign_failed:0"
+msgctxt "view:stock.shipment.internal.assign.failed:"
msgid "Unable to assign those products:"
msgstr "Impossible d'assigner ces produits :"
-msgctxt "view:stock.shipment.internal:0"
+msgctxt "view:stock.shipment.internal:"
+msgid "Assign"
+msgstr "Assigner"
+
+msgctxt "view:stock.shipment.internal:"
msgid "Assign"
msgstr "Assigner"
-msgctxt "view:stock.shipment.internal:0"
+msgctxt "view:stock.shipment.internal:"
+msgid "Cancel"
+msgstr "Annuler"
+
+msgctxt "view:stock.shipment.internal:"
msgid "Cancel"
msgstr "Annuler"
-msgctxt "view:stock.shipment.internal:0"
+msgctxt "view:stock.shipment.internal:"
+msgid "Done"
+msgstr "Fait"
+
+msgctxt "view:stock.shipment.internal:"
msgid "Done"
msgstr "Fait"
-msgctxt "view:stock.shipment.internal:0"
+msgctxt "view:stock.shipment.internal:"
msgid "Draft"
msgstr "Brouillon"
-msgctxt "view:stock.shipment.internal:0"
+msgctxt "view:stock.shipment.internal:"
+msgid "Draft"
+msgstr "Brouillon"
+
+msgctxt "view:stock.shipment.internal:"
msgid "Force Assign"
msgstr "Forcer l'assignation"
-msgctxt "view:stock.shipment.internal:0"
+msgctxt "view:stock.shipment.internal:"
+msgid "Internal Shipment"
+msgstr "Expédition interne"
+
+msgctxt "view:stock.shipment.internal:"
msgid "Internal Shipment"
msgstr "Expédition interne"
-msgctxt "view:stock.shipment.internal:0"
+msgctxt "view:stock.shipment.internal:"
+msgid "Internal Shipments"
+msgstr "Expéditions internes"
+
+msgctxt "view:stock.shipment.internal:"
msgid "Internal Shipments"
msgstr "Expéditions internes"
-msgctxt "view:stock.shipment.internal:0"
+msgctxt "view:stock.shipment.internal:"
msgid "Reset to Draft"
msgstr "Remettre en brouillon"
-msgctxt "view:stock.shipment.internal:0"
+msgctxt "view:stock.shipment.internal:"
msgid "Waiting"
msgstr "En attente"
-msgctxt "view:stock.shipment.out.assign.assign_failed:0"
-msgid "Inventory Moves"
-msgstr "Mouvements internes"
+msgctxt "view:stock.shipment.internal:"
+msgid "Waiting"
+msgstr "En attente"
-msgctxt "view:stock.shipment.out.assign.assign_failed:0"
+msgctxt "view:stock.shipment.out.assign.failed:"
msgid "Unable to Assign"
msgstr "Impossible d'assigner"
-msgctxt "view:stock.shipment.out.assign.assign_failed:0"
+msgctxt "view:stock.shipment.out.assign.failed:"
msgid "Unable to assign those products:"
msgstr "Impossible d'assigner ces produits :"
-msgctxt "view:stock.shipment.out.return:0"
+msgctxt "view:stock.shipment.out.return:"
+msgid "Cancel"
+msgstr "Annuler"
+
+msgctxt "view:stock.shipment.out.return:"
msgid "Cancel"
msgstr "Annuler"
-msgctxt "view:stock.shipment.out.return:0"
+msgctxt "view:stock.shipment.out.return:"
msgid "Customer Return Shipment"
msgstr "Retour d'expédition client"
-msgctxt "view:stock.shipment.out.return:0"
+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 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:0"
+msgctxt "view:stock.shipment.out.return:"
+msgid "Done"
+msgstr "Fait"
+
+msgctxt "view:stock.shipment.out.return:"
msgid "Done"
msgstr "Fait"
-msgctxt "view:stock.shipment.out.return:0"
+msgctxt "view:stock.shipment.out.return:"
+msgid "Draft"
+msgstr "Brouillon"
+
+msgctxt "view:stock.shipment.out.return:"
msgid "Incoming Moves"
msgstr "Mouvements entrants"
-msgctxt "view:stock.shipment.out.return:0"
+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:0"
+msgctxt "view:stock.shipment.out.return:"
msgid "Moves"
msgstr "Mouvements"
-msgctxt "view:stock.shipment.out.return:0"
+msgctxt "view:stock.shipment.out.return:"
+msgid "Received"
+msgstr "Reçu"
+
+msgctxt "view:stock.shipment.out.return:"
msgid "Received"
msgstr "Reçu"
-msgctxt "view:stock.shipment.out.return:0"
+msgctxt "view:stock.shipment.out.return:"
msgid "Reset to Draft"
msgstr "Remettre en brouillon"
-msgctxt "view:stock.shipment.out:0"
+msgctxt "view:stock.shipment.out:"
msgid "Are you sure to force assignation?"
msgstr "Ãtes-vous sûr de forcer l'assignation ?"
-msgctxt "view:stock.shipment.out:0"
+msgctxt "view:stock.shipment.out:"
+msgid "Assign"
+msgstr "Assigner"
+
+msgctxt "view:stock.shipment.out:"
msgid "Assign"
msgstr "Assigner"
-msgctxt "view:stock.shipment.out:0"
+msgctxt "view:stock.shipment.out:"
msgid "Cancel"
msgstr "Annuler"
-msgctxt "view:stock.shipment.out:0"
+msgctxt "view:stock.shipment.out:"
+msgid "Cancel"
+msgstr "Annuler"
+
+msgctxt "view:stock.shipment.out:"
+msgid "Customer Shipment"
+msgstr "Expédition client"
+
+msgctxt "view:stock.shipment.out:"
msgid "Customer Shipment"
msgstr "Expédition client"
-msgctxt "view:stock.shipment.out:0"
+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:0"
+msgctxt "view:stock.shipment.out:"
+msgid "Done"
+msgstr "Fait"
+
+msgctxt "view:stock.shipment.out:"
msgid "Done"
msgstr "Fait"
-msgctxt "view:stock.shipment.out:0"
+msgctxt "view:stock.shipment.out:"
msgid "Draft"
msgstr "Brouillon"
-msgctxt "view:stock.shipment.out:0"
+msgctxt "view:stock.shipment.out:"
+msgid "Draft"
+msgstr "Brouillon"
+
+msgctxt "view:stock.shipment.out:"
msgid "Force Assign"
msgstr "Forcer l'assignation"
-msgctxt "view:stock.shipment.out:0"
+msgctxt "view:stock.shipment.out:"
+msgid "Inventory Moves"
+msgstr "Mouvements internes"
+
+msgctxt "view:stock.shipment.out:"
msgid "Inventory Moves"
msgstr "Mouvements internes"
-msgctxt "view:stock.shipment.out:0"
+msgctxt "view:stock.shipment.out:"
+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:0"
+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:0"
+msgctxt "view:stock.shipment.out:"
msgid "Reset to Draft"
msgstr "Remettre en brouillon"
-msgctxt "view:stock.shipment.out:0"
+msgctxt "view:stock.shipment.out:"
msgid "Unpack"
msgstr "Déballer"
-msgctxt "view:stock.shipment.out:0"
+msgctxt "view:stock.shipment.out:"
msgid "Waiting"
msgstr "En attente"
-msgctxt "wizard_button:stock.location.open,init,end:0"
+msgctxt "view:stock.shipment.out:"
+msgid "Waiting"
+msgstr "En attente"
+
+msgctxt "wizard_button:product.by_location,start,end:"
msgid "Cancel"
msgstr "Annuler"
-msgctxt "wizard_button:stock.location.open,init,open:0"
+msgctxt "wizard_button:product.by_location,start,open:"
msgid "Open"
msgstr "Ouvrir"
-msgctxt "wizard_button:stock.product.open,init,end:0"
+msgctxt "wizard_button:stock.products_by_locations,start,end:"
msgid "Cancel"
msgstr "Annuler"
-msgctxt "wizard_button:stock.product.open,init,open:0"
+msgctxt "wizard_button:stock.products_by_locations,start,open:"
msgid "Open"
msgstr "Ouvrir"
-msgctxt "wizard_button:stock.shipment.in.return.assign,ask_force,end:0"
+msgctxt "wizard_button:stock.shipment.in.return.assign,failed,end:"
msgid "Ok"
msgstr "Ok"
-msgctxt "wizard_button:stock.shipment.in.return.assign,ask_force,force:0"
+msgctxt "wizard_button:stock.shipment.in.return.assign,failed,force:"
msgid "Force Assign"
msgstr "Forcer l'assignation"
-msgctxt "wizard_button:stock.shipment.in.return.assign,assign_failed,end:0"
-msgid "Ok"
-msgstr "Ok"
-
-msgctxt "wizard_button:stock.shipment.internal.assign,ask_force,end:0"
+msgctxt "wizard_button:stock.shipment.internal.assign,failed,end:"
msgid "Ok"
msgstr "Ok"
-msgctxt "wizard_button:stock.shipment.internal.assign,ask_force,force:0"
+msgctxt "wizard_button:stock.shipment.internal.assign,failed,force:"
msgid "Force Assign"
msgstr "Forcer l'assignation"
-msgctxt "wizard_button:stock.shipment.internal.assign,assign_failed,end:0"
-msgid "Ok"
-msgstr "Ok"
-
-msgctxt "wizard_button:stock.shipment.out.assign,ask_force,end:0"
+msgctxt "wizard_button:stock.shipment.out.assign,failed,end:"
msgid "Ok"
msgstr "Ok"
-msgctxt "wizard_button:stock.shipment.out.assign,ask_force,force:0"
+msgctxt "wizard_button:stock.shipment.out.assign,failed,force:"
msgid "Force Assign"
msgstr "Forcer l'assignation"
-
-msgctxt "wizard_button:stock.shipment.out.assign,assign_failed,end:0"
-msgid "Ok"
-msgstr "Ok"
diff --git a/locale/nl_NL.po b/locale/nl_NL.po
index 4eb6b2d..72e365b 100644
--- a/locale/nl_NL.po
+++ b/locale/nl_NL.po
@@ -2,778 +2,1088 @@
msgid ""
msgstr "Content-Type: text/plain; charset=utf-8\n"
-msgctxt "error:product.template:0"
+msgctxt "error:product.template:"
msgid ""
"You cannot change the default uom for a product which is associated to stock"
" moves."
msgstr ""
-msgctxt "error:stock.inventory.line:0"
+msgctxt "error:stock.inventory.line:"
msgid "Line quantity must be positive!"
msgstr ""
-msgctxt "error:stock.inventory.line:0"
+msgctxt "error:stock.inventory.line:"
msgid "Product must be unique by inventory!"
msgstr ""
-msgctxt "error:stock.location:0"
+msgctxt "error:stock.inventory:"
+msgid "Inventory \"%s\" must be cancelled before deletion!"
+msgstr ""
+
+msgctxt "error:stock.location:"
msgid ""
"A location with existing moves cannot be changed to a type that does not "
"support moves."
msgstr ""
-msgctxt "error:stock.location:0"
+msgctxt "error:stock.location:"
msgid "Location \"%s\" must be a child of warehouse \"%s\"!"
msgstr ""
-msgctxt "error:stock.location:0"
+msgctxt "error:stock.location:"
msgid "You can not create recursive locations!"
msgstr ""
-msgctxt "error:stock.move:0"
+msgctxt "error:stock.move:"
msgid "Internal move quantity must be positive"
msgstr ""
-msgctxt "error:stock.move:0"
+msgctxt "error:stock.move:"
msgid "Move can be on only one Shipment"
msgstr ""
-msgctxt "error:stock.move:0"
+msgctxt "error:stock.move:"
msgid "Move quantity must be positive"
msgstr ""
-msgctxt "error:stock.move:0"
+msgctxt "error:stock.move:"
msgid "Source and destination location must be different"
msgstr ""
-msgctxt "error:stock.move:0"
+msgctxt "error:stock.move:"
msgid "You can not modify a move in the state: \"Assigned\", \"Done\" or \"Cancel\""
msgstr ""
-msgctxt "error:stock.move:0"
+msgctxt "error:stock.move:"
msgid "You can not modify move in closed period!"
msgstr ""
-msgctxt "error:stock.move:0"
+msgctxt "error:stock.move:"
msgid "You can not set state to assigned!"
msgstr ""
-msgctxt "error:stock.move:0"
+msgctxt "error:stock.move:"
msgid "You can not set state to done!"
msgstr ""
-msgctxt "error:stock.move:0"
+msgctxt "error:stock.move:"
msgid "You can not set state to draft!"
msgstr ""
-msgctxt "error:stock.move:0"
-msgid "You can not use service products for a move!"
-msgstr ""
-
-msgctxt "error:stock.move:0"
+msgctxt "error:stock.move:"
msgid "You can only delete draft or cancelled moves!"
msgstr ""
-msgctxt "error:stock.period:0"
+msgctxt "error:stock.period:"
msgid "You can not close a period in the future or today!"
msgstr ""
-msgctxt "error:stock.period:0"
+msgctxt "error:stock.period:"
msgid "You can not close a period when there is still assigned moves!"
msgstr ""
-msgctxt "error:stock.shipment.in:0"
+msgctxt "error:stock.shipment.in.return:"
+msgid "Supplier Return Shipment \"%s\" must be cancelled before deletion!"
+msgstr ""
+
+msgctxt "error:stock.shipment.in:"
msgid ""
"Incoming Moves must have the warehouse input location as destination "
"location!"
msgstr ""
-msgctxt "error:stock.shipment.in:0"
+msgctxt "error:stock.shipment.in:"
msgid ""
"Inventory Moves must have the warehouse input location as source location!"
msgstr ""
-msgctxt "error:stock.shipment.out.return.create:0"
-msgid "The shipment with code %s is not yet sent."
+msgctxt "error:stock.shipment.in:"
+msgid "Supplier Shipment \"%s\" must be cancelled before deletion!"
msgstr ""
-msgctxt "error:stock.shipment.out.return.create:0"
-msgid "You can not create return shipment"
+msgctxt "error:stock.shipment.internal:"
+msgid "Internal Shipment \"%s\" must be cancelled before deletion!"
msgstr ""
-msgctxt "error:stock.shipment.out.return:0"
-msgid ""
-"Incoming Moves must have the warehouse input location as destination "
-"location!"
+msgctxt "error:stock.shipment.out.return.create:"
+msgid "The shipment with code %s is not yet sent."
msgstr ""
-msgctxt "error:stock.shipment.out.return:0"
-msgid ""
-"Inventory Moves must have the warehouse input location as source location!"
+msgctxt "error:stock.shipment.out.return.create:"
+msgid "You can not create return shipment"
msgstr ""
-msgctxt "error:stock.shipment.out:0"
-msgid ""
-"Inventory Moves must have the warehouse output location as destination "
-"location!"
+msgctxt "error:stock.shipment.out.return:"
+msgid "Customer Return Shipment \"%s\" must be cancelled before deletion!"
msgstr ""
-msgctxt "error:stock.shipment.out:0"
-msgid ""
-"Outgoing Moves must have the warehouse output location as source location!"
+msgctxt "error:stock.shipment.out:"
+msgid "Customer Shipment \"%s\" must be cancelled before deletion!"
msgstr ""
-msgctxt "field:party.address,delivery:0"
+msgctxt "field:party.address,delivery:"
msgid "Delivery"
msgstr ""
-msgctxt "field:party.party,customer_location:0"
+msgctxt "field:party.party,customer_location:"
msgid "Customer Location"
msgstr ""
-msgctxt "field:party.party,supplier_location:0"
+msgctxt "field:party.party,supplier_location:"
msgid "Supplier Location"
msgstr ""
-msgctxt "field:product.product,forecast_quantity:0"
+msgctxt "field:product.by_location.start,forecast_date:"
+msgid "At Date"
+msgstr ""
+
+msgctxt "field:product.by_location.start,id:"
+msgid "ID"
+msgstr ""
+
+msgctxt "field:product.product,cost_value:"
+msgid "Cost Value"
+msgstr ""
+
+msgctxt "field:product.product,forecast_quantity:"
msgid "Forecast Quantity"
msgstr ""
#, fuzzy
-msgctxt "field:product.product,quantity:0"
+msgctxt "field:product.product,quantity:"
msgid "Quantity"
msgstr "Hoeveelheid"
-msgctxt "field:product.template,forecast_quantity:0"
+msgctxt "field:product.template,cost_value:"
+msgid "Cost Value"
+msgstr ""
+
+msgctxt "field:product.template,forecast_quantity:"
msgid "Forecast Quantity"
msgstr ""
#, fuzzy
-msgctxt "field:product.template,quantity:0"
+msgctxt "field:product.template,quantity:"
msgid "Quantity"
msgstr "Hoeveelheid"
+msgctxt "field:stock.configuration,create_date:"
+msgid "Create Date"
+msgstr ""
+
+msgctxt "field:stock.configuration,create_uid:"
+msgid "Create User"
+msgstr ""
+
+msgctxt "field:stock.configuration,id:"
+msgid "ID"
+msgstr ""
+
#, fuzzy
-msgctxt "field:stock.configuration,rec_name:0"
+msgctxt "field:stock.configuration,rec_name:"
msgid "Name"
msgstr "Naam bijlage"
-msgctxt "field:stock.configuration,shipment_in_return_sequence:0"
+msgctxt "field:stock.configuration,shipment_in_return_sequence:"
msgid "Supplier Return Shipment Sequence"
msgstr ""
-msgctxt "field:stock.configuration,shipment_in_sequence:0"
+msgctxt "field:stock.configuration,shipment_in_sequence:"
msgid "Supplier Shipment Sequence"
msgstr ""
-msgctxt "field:stock.configuration,shipment_internal_sequence:0"
+msgctxt "field:stock.configuration,shipment_internal_sequence:"
msgid "Internal Shipment Sequence"
msgstr ""
-msgctxt "field:stock.configuration,shipment_out_return_sequence:0"
+msgctxt "field:stock.configuration,shipment_out_return_sequence:"
msgid "Customer Return Shipment Sequence"
msgstr ""
-msgctxt "field:stock.configuration,shipment_out_sequence:0"
+msgctxt "field:stock.configuration,shipment_out_sequence:"
msgid "Customer Shipment Sequence"
msgstr ""
+msgctxt "field:stock.configuration,write_date:"
+msgid "Write Date"
+msgstr ""
+
+msgctxt "field:stock.configuration,write_uid:"
+msgid "Write User"
+msgstr ""
+
#, fuzzy
-msgctxt "field:stock.inventory,company:0"
+msgctxt "field:stock.inventory,company:"
msgid "Company"
msgstr "Bedrijf"
+msgctxt "field:stock.inventory,create_date:"
+msgid "Create Date"
+msgstr ""
+
+msgctxt "field:stock.inventory,create_uid:"
+msgid "Create User"
+msgstr ""
+
#, fuzzy
-msgctxt "field:stock.inventory,date:0"
+msgctxt "field:stock.inventory,date:"
msgid "Date"
msgstr "Vervaldatum"
+msgctxt "field:stock.inventory,id:"
+msgid "ID"
+msgstr ""
+
#, fuzzy
-msgctxt "field:stock.inventory,lines:0"
+msgctxt "field:stock.inventory,lines:"
msgid "Lines"
msgstr "Regels"
-msgctxt "field:stock.inventory,location:0"
+msgctxt "field:stock.inventory,location:"
msgid "Location"
msgstr ""
-msgctxt "field:stock.inventory,lost_found:0"
+msgctxt "field:stock.inventory,lost_found:"
msgid "Lost and Found"
msgstr ""
#, fuzzy
-msgctxt "field:stock.inventory,rec_name:0"
+msgctxt "field:stock.inventory,rec_name:"
msgid "Name"
msgstr "Naam bijlage"
#, fuzzy
-msgctxt "field:stock.inventory,state:0"
+msgctxt "field:stock.inventory,state:"
msgid "State"
msgstr "Status"
-msgctxt "field:stock.inventory.line,expected_quantity:0"
+msgctxt "field:stock.inventory,write_date:"
+msgid "Write Date"
+msgstr ""
+
+msgctxt "field:stock.inventory,write_uid:"
+msgid "Write User"
+msgstr ""
+
+msgctxt "field:stock.inventory.line,create_date:"
+msgid "Create Date"
+msgstr ""
+
+msgctxt "field:stock.inventory.line,create_uid:"
+msgid "Create User"
+msgstr ""
+
+msgctxt "field:stock.inventory.line,expected_quantity:"
msgid "Expected Quantity"
msgstr ""
-msgctxt "field:stock.inventory.line,inventory:0"
+msgctxt "field:stock.inventory.line,id:"
+msgid "ID"
+msgstr ""
+
+msgctxt "field:stock.inventory.line,inventory:"
msgid "Inventory"
msgstr ""
#, fuzzy
-msgctxt "field:stock.inventory.line,move:0"
+msgctxt "field:stock.inventory.line,move:"
msgid "Move"
msgstr "Boeking"
#, fuzzy
-msgctxt "field:stock.inventory.line,product:0"
+msgctxt "field:stock.inventory.line,product:"
msgid "Product"
msgstr "Producten"
#, fuzzy
-msgctxt "field:stock.inventory.line,quantity:0"
+msgctxt "field:stock.inventory.line,quantity:"
msgid "Quantity"
msgstr "Hoeveelheid"
#, fuzzy
-msgctxt "field:stock.inventory.line,rec_name:0"
+msgctxt "field:stock.inventory.line,rec_name:"
msgid "Name"
msgstr "Naam bijlage"
#, fuzzy
-msgctxt "field:stock.inventory.line,unit_digits:0"
+msgctxt "field:stock.inventory.line,unit_digits:"
msgid "Unit Digits"
msgstr "Decimalen eenheid"
-msgctxt "field:stock.inventory.line,uom:0"
+msgctxt "field:stock.inventory.line,uom:"
msgid "UOM"
msgstr ""
+msgctxt "field:stock.inventory.line,write_date:"
+msgid "Write Date"
+msgstr ""
+
+msgctxt "field:stock.inventory.line,write_uid:"
+msgid "Write User"
+msgstr ""
+
#, fuzzy
-msgctxt "field:stock.location,active:0"
+msgctxt "field:stock.location,active:"
msgid "Active"
msgstr "Actief"
#, fuzzy
-msgctxt "field:stock.location,address:0"
+msgctxt "field:stock.location,address:"
msgid "Address"
msgstr "Adres"
#, fuzzy
-msgctxt "field:stock.location,childs:0"
+msgctxt "field:stock.location,childs:"
msgid "Children"
msgstr "Onderliggende niveaus"
#, fuzzy
-msgctxt "field:stock.location,code:0"
+msgctxt "field:stock.location,code:"
msgid "Code"
msgstr "Code"
-msgctxt "field:stock.location,forecast_quantity:0"
+msgctxt "field:stock.location,cost_value:"
+msgid "Cost Value"
+msgstr ""
+
+msgctxt "field:stock.location,create_date:"
+msgid "Create Date"
+msgstr ""
+
+msgctxt "field:stock.location,create_uid:"
+msgid "Create User"
+msgstr ""
+
+msgctxt "field:stock.location,forecast_quantity:"
msgid "Forecast Quantity"
msgstr ""
-msgctxt "field:stock.location,input_location:0"
+msgctxt "field:stock.location,id:"
+msgid "ID"
+msgstr ""
+
+msgctxt "field:stock.location,input_location:"
msgid "Input"
msgstr ""
#, fuzzy
-msgctxt "field:stock.location,left:0"
+msgctxt "field:stock.location,left:"
msgid "Left"
msgstr "Links"
#, fuzzy
-msgctxt "field:stock.location,name:0"
+msgctxt "field:stock.location,name:"
msgid "Name"
msgstr "Naam bijlage"
-msgctxt "field:stock.location,output_location:0"
+msgctxt "field:stock.location,output_location:"
msgid "Output"
msgstr ""
#, fuzzy
-msgctxt "field:stock.location,parent:0"
+msgctxt "field:stock.location,parent:"
msgid "Parent"
msgstr "Bovenliggend niveau"
#, fuzzy
-msgctxt "field:stock.location,quantity:0"
+msgctxt "field:stock.location,quantity:"
msgid "Quantity"
msgstr "Hoeveelheid"
#, fuzzy
-msgctxt "field:stock.location,rec_name:0"
+msgctxt "field:stock.location,rec_name:"
msgid "Name"
msgstr "Naam bijlage"
#, fuzzy
-msgctxt "field:stock.location,right:0"
+msgctxt "field:stock.location,right:"
msgid "Right"
msgstr "Rechts"
-msgctxt "field:stock.location,storage_location:0"
+msgctxt "field:stock.location,storage_location:"
msgid "Storage"
msgstr ""
-msgctxt "field:stock.location,type:0"
+msgctxt "field:stock.location,type:"
msgid "Location type"
msgstr ""
-msgctxt "field:stock.location_stock_date.init,forecast_date:0"
-msgid "At Date"
+msgctxt "field:stock.location,write_date:"
+msgid "Write Date"
+msgstr ""
+
+msgctxt "field:stock.location,write_uid:"
+msgid "Write User"
msgstr ""
#, fuzzy
-msgctxt "field:stock.move,company:0"
+msgctxt "field:stock.move,company:"
msgid "Company"
msgstr "Bedrijf"
#, fuzzy
-msgctxt "field:stock.move,cost_price:0"
+msgctxt "field:stock.move,cost_price:"
msgid "Cost Price"
msgstr "Kostprijs"
+msgctxt "field:stock.move,create_date:"
+msgid "Create Date"
+msgstr ""
+
+msgctxt "field:stock.move,create_uid:"
+msgid "Create User"
+msgstr ""
+
#, fuzzy
-msgctxt "field:stock.move,currency:0"
+msgctxt "field:stock.move,currency:"
msgid "Currency"
msgstr "Valuta"
#, fuzzy
-msgctxt "field:stock.move,effective_date:0"
+msgctxt "field:stock.move,effective_date:"
msgid "Effective Date"
msgstr "Effectieve datum"
-msgctxt "field:stock.move,from_location:0"
+msgctxt "field:stock.move,from_location:"
msgid "From Location"
msgstr ""
-msgctxt "field:stock.move,internal_quantity:0"
+msgctxt "field:stock.move,id:"
+msgid "ID"
+msgstr ""
+
+msgctxt "field:stock.move,internal_quantity:"
msgid "Internal Quantity"
msgstr ""
-msgctxt "field:stock.move,planned_date:0"
+msgctxt "field:stock.move,planned_date:"
msgid "Planned Date"
msgstr ""
#, fuzzy
-msgctxt "field:stock.move,product:0"
+msgctxt "field:stock.move,product:"
msgid "Product"
msgstr "Producten"
+msgctxt "field:stock.move,product_uom_category:"
+msgid "Product Uom Category"
+msgstr ""
+
#, fuzzy
-msgctxt "field:stock.move,quantity:0"
+msgctxt "field:stock.move,quantity:"
msgid "Quantity"
msgstr "Hoeveelheid"
#, fuzzy
-msgctxt "field:stock.move,rec_name:0"
+msgctxt "field:stock.move,rec_name:"
msgid "Name"
msgstr "Naam bijlage"
-msgctxt "field:stock.move,shipment_in:0"
+msgctxt "field:stock.move,shipment_in:"
msgid "Supplier Shipment"
msgstr ""
-msgctxt "field:stock.move,shipment_in_return:0"
+msgctxt "field:stock.move,shipment_in_return:"
msgid "Supplier Return Shipment"
msgstr ""
-msgctxt "field:stock.move,shipment_internal:0"
+msgctxt "field:stock.move,shipment_internal:"
msgid "Internal Shipment"
msgstr ""
-msgctxt "field:stock.move,shipment_out:0"
+msgctxt "field:stock.move,shipment_out:"
msgid "Customer Shipment"
msgstr ""
-msgctxt "field:stock.move,shipment_out_return:0"
+msgctxt "field:stock.move,shipment_out_return:"
msgid "Customer Return Shipment"
msgstr ""
#, fuzzy
-msgctxt "field:stock.move,state:0"
+msgctxt "field:stock.move,state:"
msgid "State"
msgstr "Status"
-msgctxt "field:stock.move,to_location:0"
+msgctxt "field:stock.move,to_location:"
msgid "To Location"
msgstr ""
#, fuzzy
-msgctxt "field:stock.move,unit_digits:0"
+msgctxt "field:stock.move,unit_digits:"
msgid "Unit Digits"
msgstr "Decimalen eenheid"
#, fuzzy
-msgctxt "field:stock.move,unit_price:0"
+msgctxt "field:stock.move,unit_price:"
msgid "Unit Price"
msgstr "Eenheidsprijs"
-msgctxt "field:stock.move,unit_price_required:0"
+msgctxt "field:stock.move,unit_price_required:"
msgid "Unit Price Required"
msgstr ""
-msgctxt "field:stock.move,uom:0"
+msgctxt "field:stock.move,uom:"
msgid "Uom"
msgstr ""
-msgctxt "field:stock.period,caches:0"
+msgctxt "field:stock.move,write_date:"
+msgid "Write Date"
+msgstr ""
+
+msgctxt "field:stock.move,write_uid:"
+msgid "Write User"
+msgstr ""
+
+msgctxt "field:stock.period,caches:"
msgid "Caches"
msgstr ""
#, fuzzy
-msgctxt "field:stock.period,company:0"
+msgctxt "field:stock.period,company:"
msgid "Company"
msgstr "Bedrijf"
+msgctxt "field:stock.period,create_date:"
+msgid "Create Date"
+msgstr ""
+
+msgctxt "field:stock.period,create_uid:"
+msgid "Create User"
+msgstr ""
+
#, fuzzy
-msgctxt "field:stock.period,date:0"
+msgctxt "field:stock.period,date:"
msgid "Date"
msgstr "Vervaldatum"
+msgctxt "field:stock.period,id:"
+msgid "ID"
+msgstr ""
+
#, fuzzy
-msgctxt "field:stock.period,rec_name:0"
+msgctxt "field:stock.period,rec_name:"
msgid "Name"
msgstr "Naam bijlage"
#, fuzzy
-msgctxt "field:stock.period,state:0"
+msgctxt "field:stock.period,state:"
msgid "State"
msgstr "Status"
-msgctxt "field:stock.period.cache,internal_quantity:0"
+msgctxt "field:stock.period,write_date:"
+msgid "Write Date"
+msgstr ""
+
+msgctxt "field:stock.period,write_uid:"
+msgid "Write User"
+msgstr ""
+
+msgctxt "field:stock.period.cache,create_date:"
+msgid "Create Date"
+msgstr ""
+
+msgctxt "field:stock.period.cache,create_uid:"
+msgid "Create User"
+msgstr ""
+
+msgctxt "field:stock.period.cache,id:"
+msgid "ID"
+msgstr ""
+
+msgctxt "field:stock.period.cache,internal_quantity:"
msgid "Internal Quantity"
msgstr ""
-msgctxt "field:stock.period.cache,location:0"
+msgctxt "field:stock.period.cache,location:"
msgid "Location"
msgstr ""
#, fuzzy
-msgctxt "field:stock.period.cache,period:0"
+msgctxt "field:stock.period.cache,period:"
msgid "Period"
msgstr "Periode"
#, fuzzy
-msgctxt "field:stock.period.cache,product:0"
+msgctxt "field:stock.period.cache,product:"
msgid "Product"
msgstr "Producten"
#, fuzzy
-msgctxt "field:stock.period.cache,rec_name:0"
+msgctxt "field:stock.period.cache,rec_name:"
msgid "Name"
msgstr "Naam bijlage"
-msgctxt "field:stock.product_stock_date.init,forecast_date:0"
+msgctxt "field:stock.period.cache,write_date:"
+msgid "Write Date"
+msgstr ""
+
+msgctxt "field:stock.period.cache,write_uid:"
+msgid "Write User"
+msgstr ""
+
+msgctxt "field:stock.products_by_locations.start,forecast_date:"
msgid "At Date"
msgstr ""
+msgctxt "field:stock.products_by_locations.start,id:"
+msgid "ID"
+msgstr ""
+
#, fuzzy
-msgctxt "field:stock.shipment.in,code:0"
+msgctxt "field:stock.shipment.in,code:"
msgid "Code"
msgstr "Code"
#, fuzzy
-msgctxt "field:stock.shipment.in,company:0"
+msgctxt "field:stock.shipment.in,company:"
msgid "Company"
msgstr "Bedrijf"
-msgctxt "field:stock.shipment.in,contact_address:0"
+msgctxt "field:stock.shipment.in,contact_address:"
msgid "Contact Address"
msgstr ""
+msgctxt "field:stock.shipment.in,create_date:"
+msgid "Create Date"
+msgstr ""
+
+msgctxt "field:stock.shipment.in,create_uid:"
+msgid "Create User"
+msgstr ""
+
#, fuzzy
-msgctxt "field:stock.shipment.in,effective_date:0"
+msgctxt "field:stock.shipment.in,effective_date:"
msgid "Effective Date"
msgstr "Effectieve datum"
-msgctxt "field:stock.shipment.in,incoming_moves:0"
+msgctxt "field:stock.shipment.in,id:"
+msgid "ID"
+msgstr ""
+
+msgctxt "field:stock.shipment.in,incoming_moves:"
msgid "Incoming Moves"
msgstr ""
-msgctxt "field:stock.shipment.in,inventory_moves:0"
+msgctxt "field:stock.shipment.in,inventory_moves:"
msgid "Inventory Moves"
msgstr ""
#, fuzzy
-msgctxt "field:stock.shipment.in,moves:0"
+msgctxt "field:stock.shipment.in,moves:"
msgid "Moves"
msgstr "Boekingen"
-msgctxt "field:stock.shipment.in,planned_date:0"
+msgctxt "field:stock.shipment.in,planned_date:"
msgid "Planned Date"
msgstr ""
#, fuzzy
-msgctxt "field:stock.shipment.in,rec_name:0"
+msgctxt "field:stock.shipment.in,rec_name:"
msgid "Name"
msgstr "Naam bijlage"
#, fuzzy
-msgctxt "field:stock.shipment.in,reference:0"
+msgctxt "field:stock.shipment.in,reference:"
msgid "Reference"
msgstr "Referentie"
#, fuzzy
-msgctxt "field:stock.shipment.in,state:0"
+msgctxt "field:stock.shipment.in,state:"
msgid "State"
msgstr "Status"
#, fuzzy
-msgctxt "field:stock.shipment.in,supplier:0"
+msgctxt "field:stock.shipment.in,supplier:"
msgid "Supplier"
msgstr "Leverancier"
+msgctxt "field:stock.shipment.in,supplier_location:"
+msgid "Supplier Location"
+msgstr ""
+
#, fuzzy
-msgctxt "field:stock.shipment.in,warehouse:0"
+msgctxt "field:stock.shipment.in,warehouse:"
msgid "Warehouse"
msgstr "Magazijn"
+msgctxt "field:stock.shipment.in,warehouse_input:"
+msgid "Warehouse Input"
+msgstr ""
+
+msgctxt "field:stock.shipment.in,warehouse_storage:"
+msgid "Warehouse Storage"
+msgstr ""
+
+msgctxt "field:stock.shipment.in,write_date:"
+msgid "Write Date"
+msgstr ""
+
+msgctxt "field:stock.shipment.in,write_uid:"
+msgid "Write User"
+msgstr ""
+
#, fuzzy
-msgctxt "field:stock.shipment.in.return,code:0"
+msgctxt "field:stock.shipment.in.return,code:"
msgid "Code"
msgstr "Code"
#, fuzzy
-msgctxt "field:stock.shipment.in.return,company:0"
+msgctxt "field:stock.shipment.in.return,company:"
msgid "Company"
msgstr "Bedrijf"
+msgctxt "field:stock.shipment.in.return,create_date:"
+msgid "Create Date"
+msgstr ""
+
+msgctxt "field:stock.shipment.in.return,create_uid:"
+msgid "Create User"
+msgstr ""
+
#, fuzzy
-msgctxt "field:stock.shipment.in.return,effective_date:0"
+msgctxt "field:stock.shipment.in.return,effective_date:"
msgid "Effective Date"
msgstr "Effectieve datum"
-msgctxt "field:stock.shipment.in.return,from_location:0"
+msgctxt "field:stock.shipment.in.return,from_location:"
msgid "From Location"
msgstr ""
+msgctxt "field:stock.shipment.in.return,id:"
+msgid "ID"
+msgstr ""
+
#, fuzzy
-msgctxt "field:stock.shipment.in.return,moves:0"
+msgctxt "field:stock.shipment.in.return,moves:"
msgid "Moves"
msgstr "Boekingen"
-msgctxt "field:stock.shipment.in.return,planned_date:0"
+msgctxt "field:stock.shipment.in.return,planned_date:"
msgid "Planned Date"
msgstr ""
#, fuzzy
-msgctxt "field:stock.shipment.in.return,rec_name:0"
+msgctxt "field:stock.shipment.in.return,rec_name:"
msgid "Name"
msgstr "Naam bijlage"
#, fuzzy
-msgctxt "field:stock.shipment.in.return,reference:0"
+msgctxt "field:stock.shipment.in.return,reference:"
msgid "Reference"
msgstr "Referentie"
#, fuzzy
-msgctxt "field:stock.shipment.in.return,state:0"
+msgctxt "field:stock.shipment.in.return,state:"
msgid "State"
msgstr "Status"
-msgctxt "field:stock.shipment.in.return,to_location:0"
+msgctxt "field:stock.shipment.in.return,to_location:"
msgid "To Location"
msgstr ""
+msgctxt "field:stock.shipment.in.return,write_date:"
+msgid "Write Date"
+msgstr ""
+
+msgctxt "field:stock.shipment.in.return,write_uid:"
+msgid "Write User"
+msgstr ""
+
+msgctxt "field:stock.shipment.in.return.assign.failed,id:"
+msgid "ID"
+msgstr ""
+
#, fuzzy
-msgctxt "field:stock.shipment.in.return.assign.assign_failed,moves:0"
+msgctxt "field:stock.shipment.in.return.assign.failed,moves:"
msgid "Moves"
msgstr "Boekingen"
#, fuzzy
-msgctxt "field:stock.shipment.internal,code:0"
+msgctxt "field:stock.shipment.internal,code:"
msgid "Code"
msgstr "Code"
#, fuzzy
-msgctxt "field:stock.shipment.internal,company:0"
+msgctxt "field:stock.shipment.internal,company:"
msgid "Company"
msgstr "Bedrijf"
+msgctxt "field:stock.shipment.internal,create_date:"
+msgid "Create Date"
+msgstr ""
+
+msgctxt "field:stock.shipment.internal,create_uid:"
+msgid "Create User"
+msgstr ""
+
#, fuzzy
-msgctxt "field:stock.shipment.internal,effective_date:0"
+msgctxt "field:stock.shipment.internal,effective_date:"
msgid "Effective Date"
msgstr "Effectieve datum"
-msgctxt "field:stock.shipment.internal,from_location:0"
+msgctxt "field:stock.shipment.internal,from_location:"
msgid "From Location"
msgstr ""
+msgctxt "field:stock.shipment.internal,id:"
+msgid "ID"
+msgstr ""
+
#, fuzzy
-msgctxt "field:stock.shipment.internal,moves:0"
+msgctxt "field:stock.shipment.internal,moves:"
msgid "Moves"
msgstr "Boekingen"
-msgctxt "field:stock.shipment.internal,planned_date:0"
+msgctxt "field:stock.shipment.internal,planned_date:"
msgid "Planned Date"
msgstr ""
#, fuzzy
-msgctxt "field:stock.shipment.internal,rec_name:0"
+msgctxt "field:stock.shipment.internal,rec_name:"
msgid "Name"
msgstr "Naam bijlage"
#, fuzzy
-msgctxt "field:stock.shipment.internal,reference:0"
+msgctxt "field:stock.shipment.internal,reference:"
msgid "Reference"
msgstr "Referentie"
#, fuzzy
-msgctxt "field:stock.shipment.internal,state:0"
+msgctxt "field:stock.shipment.internal,state:"
msgid "State"
msgstr "Status"
-msgctxt "field:stock.shipment.internal,to_location:0"
+msgctxt "field:stock.shipment.internal,to_location:"
msgid "To Location"
msgstr ""
+msgctxt "field:stock.shipment.internal,write_date:"
+msgid "Write Date"
+msgstr ""
+
+msgctxt "field:stock.shipment.internal,write_uid:"
+msgid "Write User"
+msgstr ""
+
+msgctxt "field:stock.shipment.internal.assign.failed,id:"
+msgid "ID"
+msgstr ""
+
#, fuzzy
-msgctxt "field:stock.shipment.internal.assign.assign_failed,moves:0"
+msgctxt "field:stock.shipment.internal.assign.failed,moves:"
msgid "Moves"
msgstr "Boekingen"
#, fuzzy
-msgctxt "field:stock.shipment.out,code:0"
+msgctxt "field:stock.shipment.out,code:"
msgid "Code"
msgstr "Code"
#, fuzzy
-msgctxt "field:stock.shipment.out,company:0"
+msgctxt "field:stock.shipment.out,company:"
msgid "Company"
msgstr "Bedrijf"
+msgctxt "field:stock.shipment.out,create_date:"
+msgid "Create Date"
+msgstr ""
+
+msgctxt "field:stock.shipment.out,create_uid:"
+msgid "Create User"
+msgstr ""
+
#, fuzzy
-msgctxt "field:stock.shipment.out,customer:0"
+msgctxt "field:stock.shipment.out,customer:"
msgid "Customer"
msgstr "Klant"
-msgctxt "field:stock.shipment.out,delivery_address:0"
+msgctxt "field:stock.shipment.out,customer_location:"
+msgid "Customer Location"
+msgstr ""
+
+msgctxt "field:stock.shipment.out,delivery_address:"
msgid "Delivery Address"
msgstr ""
#, fuzzy
-msgctxt "field:stock.shipment.out,effective_date:0"
+msgctxt "field:stock.shipment.out,effective_date:"
msgid "Effective Date"
msgstr "Effectieve datum"
-msgctxt "field:stock.shipment.out,inventory_moves:0"
+msgctxt "field:stock.shipment.out,id:"
+msgid "ID"
+msgstr ""
+
+msgctxt "field:stock.shipment.out,inventory_moves:"
msgid "Inventory Moves"
msgstr ""
#, fuzzy
-msgctxt "field:stock.shipment.out,moves:0"
+msgctxt "field:stock.shipment.out,moves:"
msgid "Moves"
msgstr "Boekingen"
-msgctxt "field:stock.shipment.out,outgoing_moves:0"
+msgctxt "field:stock.shipment.out,outgoing_moves:"
msgid "Outgoing Moves"
msgstr ""
-msgctxt "field:stock.shipment.out,planned_date:0"
+msgctxt "field:stock.shipment.out,planned_date:"
msgid "Planned Date"
msgstr ""
#, fuzzy
-msgctxt "field:stock.shipment.out,rec_name:0"
+msgctxt "field:stock.shipment.out,rec_name:"
msgid "Name"
msgstr "Naam bijlage"
#, fuzzy
-msgctxt "field:stock.shipment.out,reference:0"
+msgctxt "field:stock.shipment.out,reference:"
msgid "Reference"
msgstr "Referentie"
#, fuzzy
-msgctxt "field:stock.shipment.out,state:0"
+msgctxt "field:stock.shipment.out,state:"
msgid "State"
msgstr "Status"
#, fuzzy
-msgctxt "field:stock.shipment.out,warehouse:0"
+msgctxt "field:stock.shipment.out,warehouse:"
msgid "Warehouse"
msgstr "Magazijn"
-msgctxt "field:stock.shipment.out.assign.assign_failed,inventory_moves:0"
+msgctxt "field:stock.shipment.out,warehouse_output:"
+msgid "Warehouse Output"
+msgstr ""
+
+msgctxt "field:stock.shipment.out,warehouse_storage:"
+msgid "Warehouse Storage"
+msgstr ""
+
+msgctxt "field:stock.shipment.out,write_date:"
+msgid "Write Date"
+msgstr ""
+
+msgctxt "field:stock.shipment.out,write_uid:"
+msgid "Write User"
+msgstr ""
+
+msgctxt "field:stock.shipment.out.assign.failed,id:"
+msgid "ID"
+msgstr ""
+
+msgctxt "field:stock.shipment.out.assign.failed,inventory_moves:"
msgid "Inventory Moves"
msgstr ""
#, fuzzy
-msgctxt "field:stock.shipment.out.return,code:0"
+msgctxt "field:stock.shipment.out.return,code:"
msgid "Code"
msgstr "Code"
#, fuzzy
-msgctxt "field:stock.shipment.out.return,company:0"
+msgctxt "field:stock.shipment.out.return,company:"
msgid "Company"
msgstr "Bedrijf"
+msgctxt "field:stock.shipment.out.return,create_date:"
+msgid "Create Date"
+msgstr ""
+
+msgctxt "field:stock.shipment.out.return,create_uid:"
+msgid "Create User"
+msgstr ""
+
#, fuzzy
-msgctxt "field:stock.shipment.out.return,customer:0"
+msgctxt "field:stock.shipment.out.return,customer:"
msgid "Customer"
msgstr "Klant"
-msgctxt "field:stock.shipment.out.return,delivery_address:0"
+msgctxt "field:stock.shipment.out.return,customer_location:"
+msgid "Customer Location"
+msgstr ""
+
+msgctxt "field:stock.shipment.out.return,delivery_address:"
msgid "Delivery Address"
msgstr ""
#, fuzzy
-msgctxt "field:stock.shipment.out.return,effective_date:0"
+msgctxt "field:stock.shipment.out.return,effective_date:"
msgid "Effective Date"
msgstr "Effectieve datum"
-msgctxt "field:stock.shipment.out.return,incoming_moves:0"
+msgctxt "field:stock.shipment.out.return,id:"
+msgid "ID"
+msgstr ""
+
+msgctxt "field:stock.shipment.out.return,incoming_moves:"
msgid "Incoming Moves"
msgstr ""
-msgctxt "field:stock.shipment.out.return,inventory_moves:0"
+msgctxt "field:stock.shipment.out.return,inventory_moves:"
msgid "Inventory Moves"
msgstr ""
#, fuzzy
-msgctxt "field:stock.shipment.out.return,moves:0"
+msgctxt "field:stock.shipment.out.return,moves:"
msgid "Moves"
msgstr "Boekingen"
-msgctxt "field:stock.shipment.out.return,planned_date:0"
+msgctxt "field:stock.shipment.out.return,planned_date:"
msgid "Planned Date"
msgstr ""
#, fuzzy
-msgctxt "field:stock.shipment.out.return,rec_name:0"
+msgctxt "field:stock.shipment.out.return,rec_name:"
msgid "Name"
msgstr "Naam bijlage"
#, fuzzy
-msgctxt "field:stock.shipment.out.return,reference:0"
+msgctxt "field:stock.shipment.out.return,reference:"
msgid "Reference"
msgstr "Referentie"
#, fuzzy
-msgctxt "field:stock.shipment.out.return,state:0"
+msgctxt "field:stock.shipment.out.return,state:"
msgid "State"
msgstr "Status"
#, fuzzy
-msgctxt "field:stock.shipment.out.return,warehouse:0"
+msgctxt "field:stock.shipment.out.return,warehouse:"
msgid "Warehouse"
msgstr "Magazijn"
-msgctxt "help:party.party,customer_location:0"
+msgctxt "field:stock.shipment.out.return,warehouse_input:"
+msgid "Warehouse Input"
+msgstr ""
+
+msgctxt "field:stock.shipment.out.return,warehouse_storage:"
+msgid "Warehouse Storage"
+msgstr ""
+
+msgctxt "field:stock.shipment.out.return,write_date:"
+msgid "Write Date"
+msgstr ""
+
+msgctxt "field:stock.shipment.out.return,write_uid:"
+msgid "Write User"
+msgstr ""
+
+msgctxt "help:party.party,customer_location:"
msgid "The default destination location when sending products to the party."
msgstr ""
-msgctxt "help:party.party,supplier_location:0"
+msgctxt "help:party.party,supplier_location:"
msgid "The default source location when receiving products from the party."
msgstr ""
-msgctxt "help:stock.location_stock_date.init,forecast_date:0"
+msgctxt "help:product.by_location.start,forecast_date:"
msgid ""
"Allow to compute expected stock quantities for this date.\n"
"* An empty value is an infinite date in the future.\n"
"* A date in the past will provide historical values."
msgstr ""
-msgctxt "help:stock.product_stock_date.init,forecast_date:0"
+msgctxt "help:stock.products_by_locations.start,forecast_date:"
msgid ""
"Allow to compute expected stock quantities for this date.\n"
"* An empty value is an infinite date in the future.\n"
@@ -793,7 +1103,7 @@ msgid "Locations"
msgstr ""
msgctxt "model:ir.action,name:act_location_quantity_tree"
-msgid "Product Stock"
+msgid "Location Quantity & Cost Value"
msgstr ""
msgctxt "model:ir.action,name:act_location_tree"
@@ -822,7 +1132,7 @@ msgctxt "model:ir.action,name:act_period_list"
msgid "Periods"
msgstr "Perioden"
-msgctxt "model:ir.action,name:act_product_by_location"
+msgctxt "model:ir.action,name:act_products_by_locations"
msgid "Products by Locations"
msgstr ""
@@ -914,16 +1224,12 @@ msgctxt "model:ir.action,name:report_shipment_out_return_restocking_list"
msgid "Restocking List"
msgstr ""
-msgctxt "model:ir.action,name:wizard_complete_inventory"
-msgid "Complete Inventory"
-msgstr ""
-
-msgctxt "model:ir.action,name:wizard_location_open"
+msgctxt "model:ir.action,name:wizard_product_by_location"
msgid "Product by Location"
msgstr ""
-msgctxt "model:ir.action,name:wizard_product_open"
-msgid "Product Quantities"
+msgctxt "model:ir.action,name:wizard_products_by_locations"
+msgid "Products by Locations"
msgstr ""
msgctxt "model:ir.action,name:wizard_shipment_in_return_assign"
@@ -1086,6 +1392,10 @@ msgctxt "model:ir.ui.menu,name:menu_stock_configuration"
msgid "Stock Configuration"
msgstr ""
+msgctxt "model:product.by_location.start,name:"
+msgid "Product by Location"
+msgstr ""
+
#, fuzzy
msgctxt "model:res.group,name:group_stock"
msgid "Stock"
@@ -1099,19 +1409,19 @@ msgctxt "model:res.group,name:group_stock_force_assignment"
msgid "Stock Force Assignment"
msgstr ""
-msgctxt "model:stock.configuration,name:0"
+msgctxt "model:stock.configuration,name:"
msgid "Stock Configuration"
msgstr ""
-msgctxt "model:stock.inventory,name:0"
+msgctxt "model:stock.inventory,name:"
msgid "Stock Inventory"
msgstr ""
-msgctxt "model:stock.inventory.line,name:0"
+msgctxt "model:stock.inventory.line,name:"
msgid "Stock Inventory Line"
msgstr ""
-msgctxt "model:stock.location,name:0"
+msgctxt "model:stock.location,name:"
msgid "Stock Location"
msgstr ""
@@ -1146,1109 +1456,935 @@ msgctxt "model:stock.location,name:location_warehouse"
msgid "Warehouse"
msgstr "Magazijn"
-msgctxt "model:stock.location_stock_date.init,name:0"
-msgid "Compute stock quantities"
-msgstr ""
-
-msgctxt "model:stock.move,name:0"
+msgctxt "model:stock.move,name:"
msgid "Stock Move"
msgstr ""
-msgctxt "model:stock.period,name:0"
+msgctxt "model:stock.period,name:"
msgid "Stock Period"
msgstr ""
-msgctxt "model:stock.period.cache,name:0"
-msgid ""
-"\n"
-" Stock Period Cache\n"
-"\n"
-" It is used to store cached computation of stock quantities.\n"
-" "
+msgctxt "model:stock.period.cache,name:"
+msgid "stock.period.cache"
msgstr ""
-msgctxt "model:stock.product_stock_date.init,name:0"
-msgid "Compute stock quantities"
+msgctxt "model:stock.products_by_locations.start,name:"
+msgid "Products by Locations"
msgstr ""
-msgctxt "model:stock.shipment.in,name:0"
+msgctxt "model:stock.shipment.in,name:"
msgid "Supplier Shipment"
msgstr ""
-msgctxt "model:stock.shipment.in.return,name:0"
+msgctxt "model:stock.shipment.in.return,name:"
msgid "Supplier Return Shipment"
msgstr ""
-msgctxt "model:stock.shipment.in.return.assign.assign_failed,name:0"
-msgid "Assign Supplier Return Shipment Assign Failed"
+msgctxt "model:stock.shipment.in.return.assign.failed,name:"
+msgid "Assign Supplier Return Shipment"
msgstr ""
-msgctxt "model:stock.shipment.internal,name:0"
+msgctxt "model:stock.shipment.internal,name:"
msgid "Internal Shipment"
msgstr ""
-msgctxt "model:stock.shipment.internal.assign.assign_failed,name:0"
-msgid "Assign Shipment Internal Assign Failed"
+msgctxt "model:stock.shipment.internal.assign.failed,name:"
+msgid "Assign Shipment Internal"
msgstr ""
-msgctxt "model:stock.shipment.out,name:0"
+msgctxt "model:stock.shipment.out,name:"
msgid "Customer Shipment"
msgstr ""
-msgctxt "model:stock.shipment.out.assign.assign_failed,name:0"
-msgid "Assign Shipment Out Assign Failed"
-msgstr ""
-
-msgctxt "model:stock.shipment.out.return,name:0"
-msgid "Customer Return Shipment"
-msgstr ""
-
-msgctxt "model:workflow,name:wkf_inventory"
-msgid "Inventory"
-msgstr ""
-
-msgctxt "model:workflow,name:wkf_shipment_in_return"
-msgid "Supplier Return Shipment"
+msgctxt "model:stock.shipment.out.assign.failed,name:"
+msgid "Assign Shipment Out"
msgstr ""
-msgctxt "model:workflow,name:wkf_shipment_out_return"
+msgctxt "model:stock.shipment.out.return,name:"
msgid "Customer Return Shipment"
msgstr ""
-msgctxt "model:workflow,name:wkf_shipmentin"
-msgid "Supplier Shipment"
-msgstr ""
-
-msgctxt "model:workflow,name:wkf_shipmentinternal"
-msgid "Internal Shipment"
-msgstr ""
-
-msgctxt "model:workflow,name:wkf_shipmentout"
-msgid "Customer Shipment"
-msgstr ""
-
-#, fuzzy
-msgctxt "model:workflow.activity,name:inventory_act_cancel"
-msgid "Canceled"
-msgstr "Geannuleerd"
-
-#, fuzzy
-msgctxt "model:workflow.activity,name:inventory_act_done"
-msgid "Done"
-msgstr "Klaar"
-
-#, fuzzy
-msgctxt "model:workflow.activity,name:inventory_act_draft"
-msgid "Draft"
-msgstr "Concept"
-
-msgctxt "model:workflow.activity,name:shipment_in_return_act_assigned"
-msgid "Assigned"
-msgstr ""
-
-#, fuzzy
-msgctxt "model:workflow.activity,name:shipment_in_return_act_cancel"
-msgid "Canceled"
-msgstr "Geannuleerd"
-
-#, fuzzy
-msgctxt "model:workflow.activity,name:shipment_in_return_act_done"
-msgid "Done"
-msgstr "Klaar"
-
-#, fuzzy
-msgctxt "model:workflow.activity,name:shipment_in_return_act_draft"
-msgid "Draft"
-msgstr "Concept"
-
-#, fuzzy
-msgctxt "model:workflow.activity,name:shipment_in_return_act_waiting"
-msgid "Waiting"
-msgstr "In afwachting"
-
-#, fuzzy
-msgctxt "model:workflow.activity,name:shipment_out_return_act_cancel"
-msgid "Canceled"
-msgstr "Geannuleerd"
-
-#, fuzzy
-msgctxt "model:workflow.activity,name:shipment_out_return_act_done"
-msgid "Done"
-msgstr "Klaar"
-
-#, fuzzy
-msgctxt "model:workflow.activity,name:shipment_out_return_act_draft"
-msgid "Draft"
-msgstr "Concept"
-
-msgctxt "model:workflow.activity,name:shipment_out_return_act_received"
-msgid "Received"
-msgstr ""
-
-#, fuzzy
-msgctxt "model:workflow.activity,name:shipmentin_act_cancel"
-msgid "Canceled"
-msgstr "Geannuleerd"
-
-#, fuzzy
-msgctxt "model:workflow.activity,name:shipmentin_act_done"
-msgid "Done"
-msgstr "Klaar"
-
-#, fuzzy
-msgctxt "model:workflow.activity,name:shipmentin_act_draft"
-msgid "Draft"
-msgstr "Concept"
-
-msgctxt "model:workflow.activity,name:shipmentin_act_received"
-msgid "Received"
-msgstr ""
-
-msgctxt "model:workflow.activity,name:shipmentinternal_act_assigned"
-msgid "Assigned"
-msgstr ""
-
-#, fuzzy
-msgctxt "model:workflow.activity,name:shipmentinternal_act_cancel"
-msgid "Canceled"
-msgstr "Geannuleerd"
-
-#, fuzzy
-msgctxt "model:workflow.activity,name:shipmentinternal_act_done"
-msgid "Done"
-msgstr "Klaar"
-
-#, fuzzy
-msgctxt "model:workflow.activity,name:shipmentinternal_act_draft"
-msgid "Draft"
-msgstr "Concept"
-
-#, fuzzy
-msgctxt "model:workflow.activity,name:shipmentinternal_act_waiting"
-msgid "Waiting"
-msgstr "In afwachting"
-
-msgctxt "model:workflow.activity,name:shipmentout_act_assigned"
-msgid "Assigned"
-msgstr ""
-
-#, fuzzy
-msgctxt "model:workflow.activity,name:shipmentout_act_cancel"
-msgid "Canceled"
-msgstr "Geannuleerd"
-
-#, fuzzy
-msgctxt "model:workflow.activity,name:shipmentout_act_done"
-msgid "Done"
-msgstr "Klaar"
-
-#, fuzzy
-msgctxt "model:workflow.activity,name:shipmentout_act_draft"
-msgid "Draft"
-msgstr "Concept"
-
-msgctxt "model:workflow.activity,name:shipmentout_act_packed"
-msgid "Packed"
-msgstr ""
-
-#, fuzzy
-msgctxt "model:workflow.activity,name:shipmentout_act_waiting"
-msgid "Waiting"
-msgstr "In afwachting"
-
-msgctxt "odt:stock.shipment.in.restocking_list:0"
+msgctxt "odt:stock.shipment.in.restocking_list:"
msgid "/"
msgstr ""
-msgctxt "odt:stock.shipment.in.restocking_list:0"
+msgctxt "odt:stock.shipment.in.restocking_list:"
msgid "Code:"
msgstr ""
#, fuzzy
-msgctxt "odt:stock.shipment.in.restocking_list:0"
+msgctxt "odt:stock.shipment.in.restocking_list:"
msgid "E-Mail:"
msgstr "E-mail:"
-msgctxt "odt:stock.shipment.in.restocking_list:0"
+msgctxt "odt:stock.shipment.in.restocking_list:"
msgid "From Location"
msgstr ""
#, fuzzy
-msgctxt "odt:stock.shipment.in.restocking_list:0"
+msgctxt "odt:stock.shipment.in.restocking_list:"
msgid "Phone:"
msgstr "Telefoon:"
-msgctxt "odt:stock.shipment.in.restocking_list:0"
+msgctxt "odt:stock.shipment.in.restocking_list:"
msgid "Planned Date:"
msgstr ""
#, fuzzy
-msgctxt "odt:stock.shipment.in.restocking_list:0"
+msgctxt "odt:stock.shipment.in.restocking_list:"
msgid "Product"
msgstr "Producten"
#, fuzzy
-msgctxt "odt:stock.shipment.in.restocking_list:0"
+msgctxt "odt:stock.shipment.in.restocking_list:"
msgid "Quantity"
msgstr "Hoeveelheid"
#, fuzzy
-msgctxt "odt:stock.shipment.in.restocking_list:0"
+msgctxt "odt:stock.shipment.in.restocking_list:"
msgid "Reference:"
msgstr "Referentie:"
-msgctxt "odt:stock.shipment.in.restocking_list:0"
+msgctxt "odt:stock.shipment.in.restocking_list:"
msgid "Restocking List"
msgstr ""
-msgctxt "odt:stock.shipment.in.restocking_list:0"
+msgctxt "odt:stock.shipment.in.restocking_list:"
msgid "Supplier:"
msgstr ""
-msgctxt "odt:stock.shipment.in.restocking_list:0"
+msgctxt "odt:stock.shipment.in.restocking_list:"
msgid "To Location"
msgstr ""
#, fuzzy
-msgctxt "odt:stock.shipment.in.restocking_list:0"
+msgctxt "odt:stock.shipment.in.restocking_list:"
msgid "VAT Number:"
msgstr "BTW-nummer:"
-msgctxt "odt:stock.shipment.in.restocking_list:0"
+msgctxt "odt:stock.shipment.in.restocking_list:"
msgid "Warehouse:"
msgstr ""
-msgctxt "odt:stock.shipment.internal.report:0"
+msgctxt "odt:stock.shipment.internal.report:"
msgid "/"
msgstr ""
-msgctxt "odt:stock.shipment.internal.report:0"
+msgctxt "odt:stock.shipment.internal.report:"
msgid "Code:"
msgstr ""
#, fuzzy
-msgctxt "odt:stock.shipment.internal.report:0"
+msgctxt "odt:stock.shipment.internal.report:"
msgid "E-Mail:"
msgstr "E-mail:"
-msgctxt "odt:stock.shipment.internal.report:0"
+msgctxt "odt:stock.shipment.internal.report:"
msgid "From Location"
msgstr ""
-msgctxt "odt:stock.shipment.internal.report:0"
+msgctxt "odt:stock.shipment.internal.report:"
msgid "From Location:"
msgstr ""
-msgctxt "odt:stock.shipment.internal.report:0"
+msgctxt "odt:stock.shipment.internal.report:"
msgid "Internal Shipment"
msgstr ""
#, fuzzy
-msgctxt "odt:stock.shipment.internal.report:0"
+msgctxt "odt:stock.shipment.internal.report:"
msgid "Phone:"
msgstr "Telefoon:"
-msgctxt "odt:stock.shipment.internal.report:0"
+msgctxt "odt:stock.shipment.internal.report:"
msgid "Planned Date:"
msgstr ""
#, fuzzy
-msgctxt "odt:stock.shipment.internal.report:0"
+msgctxt "odt:stock.shipment.internal.report:"
msgid "Product"
msgstr "Producten"
#, fuzzy
-msgctxt "odt:stock.shipment.internal.report:0"
+msgctxt "odt:stock.shipment.internal.report:"
msgid "Quantity"
msgstr "Hoeveelheid"
#, fuzzy
-msgctxt "odt:stock.shipment.internal.report:0"
+msgctxt "odt:stock.shipment.internal.report:"
msgid "Reference:"
msgstr "Referentie:"
-msgctxt "odt:stock.shipment.internal.report:0"
+msgctxt "odt:stock.shipment.internal.report:"
msgid "To Location"
msgstr ""
-msgctxt "odt:stock.shipment.internal.report:0"
+msgctxt "odt:stock.shipment.internal.report:"
msgid "To Location:"
msgstr ""
#, fuzzy
-msgctxt "odt:stock.shipment.internal.report:0"
+msgctxt "odt:stock.shipment.internal.report:"
msgid "VAT Number:"
msgstr "BTW-nummer:"
-msgctxt "odt:stock.shipment.out.delivery_note:0"
+msgctxt "odt:stock.shipment.out.delivery_note:"
msgid "/"
msgstr ""
-msgctxt "odt:stock.shipment.out.delivery_note:0"
+msgctxt "odt:stock.shipment.out.delivery_note:"
msgid "Customer Code:"
msgstr ""
#, fuzzy
-msgctxt "odt:stock.shipment.out.delivery_note:0"
+msgctxt "odt:stock.shipment.out.delivery_note:"
msgid "Date:"
msgstr "Datum:"
-msgctxt "odt:stock.shipment.out.delivery_note:0"
+msgctxt "odt:stock.shipment.out.delivery_note:"
msgid "Delivery Note"
msgstr ""
#, fuzzy
-msgctxt "odt:stock.shipment.out.delivery_note:0"
+msgctxt "odt:stock.shipment.out.delivery_note:"
msgid "E-Mail:"
msgstr "E-mail:"
#, fuzzy
-msgctxt "odt:stock.shipment.out.delivery_note:0"
+msgctxt "odt:stock.shipment.out.delivery_note:"
msgid "Phone:"
msgstr "Telefoon:"
#, fuzzy
-msgctxt "odt:stock.shipment.out.delivery_note:0"
+msgctxt "odt:stock.shipment.out.delivery_note:"
msgid "Product"
msgstr "Producten"
#, fuzzy
-msgctxt "odt:stock.shipment.out.delivery_note:0"
+msgctxt "odt:stock.shipment.out.delivery_note:"
msgid "Quantity"
msgstr "Hoeveelheid"
#, fuzzy
-msgctxt "odt:stock.shipment.out.delivery_note:0"
+msgctxt "odt:stock.shipment.out.delivery_note:"
msgid "Reference:"
msgstr "Referentie:"
-msgctxt "odt:stock.shipment.out.delivery_note:0"
+msgctxt "odt:stock.shipment.out.delivery_note:"
msgid "Shipment Number:"
msgstr ""
#, fuzzy
-msgctxt "odt:stock.shipment.out.delivery_note:0"
+msgctxt "odt:stock.shipment.out.delivery_note:"
msgid "VAT Number:"
msgstr "BTW-nummer:"
-msgctxt "odt:stock.shipment.out.picking_list:0"
+msgctxt "odt:stock.shipment.out.picking_list:"
msgid "/"
msgstr ""
-msgctxt "odt:stock.shipment.out.picking_list:0"
+msgctxt "odt:stock.shipment.out.picking_list:"
msgid "Code:"
msgstr ""
-msgctxt "odt:stock.shipment.out.picking_list:0"
+msgctxt "odt:stock.shipment.out.picking_list:"
msgid "Customer:"
msgstr ""
#, fuzzy
-msgctxt "odt:stock.shipment.out.picking_list:0"
+msgctxt "odt:stock.shipment.out.picking_list:"
msgid "E-Mail:"
msgstr "E-mail:"
-msgctxt "odt:stock.shipment.out.picking_list:0"
+msgctxt "odt:stock.shipment.out.picking_list:"
msgid "From Location"
msgstr ""
#, fuzzy
-msgctxt "odt:stock.shipment.out.picking_list:0"
+msgctxt "odt:stock.shipment.out.picking_list:"
msgid "Phone:"
msgstr "Telefoon:"
-msgctxt "odt:stock.shipment.out.picking_list:0"
+msgctxt "odt:stock.shipment.out.picking_list:"
msgid "Picking List"
msgstr ""
-msgctxt "odt:stock.shipment.out.picking_list:0"
+msgctxt "odt:stock.shipment.out.picking_list:"
msgid "Planned Date:"
msgstr ""
#, fuzzy
-msgctxt "odt:stock.shipment.out.picking_list:0"
+msgctxt "odt:stock.shipment.out.picking_list:"
msgid "Product"
msgstr "Producten"
#, fuzzy
-msgctxt "odt:stock.shipment.out.picking_list:0"
+msgctxt "odt:stock.shipment.out.picking_list:"
msgid "Quantity"
msgstr "Hoeveelheid"
#, fuzzy
-msgctxt "odt:stock.shipment.out.picking_list:0"
+msgctxt "odt:stock.shipment.out.picking_list:"
msgid "Reference:"
msgstr "Referentie:"
-msgctxt "odt:stock.shipment.out.picking_list:0"
+msgctxt "odt:stock.shipment.out.picking_list:"
msgid "To Location"
msgstr ""
#, fuzzy
-msgctxt "odt:stock.shipment.out.picking_list:0"
+msgctxt "odt:stock.shipment.out.picking_list:"
msgid "VAT Number:"
msgstr "BTW-nummer:"
-msgctxt "odt:stock.shipment.out.picking_list:0"
+msgctxt "odt:stock.shipment.out.picking_list:"
msgid "Warehouse:"
msgstr ""
-msgctxt "odt:stock.shipment.out.return.restocking_list:0"
+msgctxt "odt:stock.shipment.out.return.restocking_list:"
msgid "/"
msgstr ""
-msgctxt "odt:stock.shipment.out.return.restocking_list:0"
+msgctxt "odt:stock.shipment.out.return.restocking_list:"
msgid "Code:"
msgstr ""
#, fuzzy
-msgctxt "odt:stock.shipment.out.return.restocking_list:0"
+msgctxt "odt:stock.shipment.out.return.restocking_list:"
msgid "E-Mail:"
msgstr "E-mail:"
-msgctxt "odt:stock.shipment.out.return.restocking_list:0"
+msgctxt "odt:stock.shipment.out.return.restocking_list:"
msgid "From Location"
msgstr ""
#, fuzzy
-msgctxt "odt:stock.shipment.out.return.restocking_list:0"
+msgctxt "odt:stock.shipment.out.return.restocking_list:"
msgid "Phone:"
msgstr "Telefoon:"
-msgctxt "odt:stock.shipment.out.return.restocking_list:0"
+msgctxt "odt:stock.shipment.out.return.restocking_list:"
msgid "Planned Date:"
msgstr ""
#, fuzzy
-msgctxt "odt:stock.shipment.out.return.restocking_list:0"
+msgctxt "odt:stock.shipment.out.return.restocking_list:"
msgid "Product"
msgstr "Producten"
#, fuzzy
-msgctxt "odt:stock.shipment.out.return.restocking_list:0"
+msgctxt "odt:stock.shipment.out.return.restocking_list:"
msgid "Quantity"
msgstr "Hoeveelheid"
#, fuzzy
-msgctxt "odt:stock.shipment.out.return.restocking_list:0"
+msgctxt "odt:stock.shipment.out.return.restocking_list:"
msgid "Reference:"
msgstr "Referentie:"
-msgctxt "odt:stock.shipment.out.return.restocking_list:0"
+msgctxt "odt:stock.shipment.out.return.restocking_list:"
msgid "Restocking List"
msgstr ""
-msgctxt "odt:stock.shipment.out.return.restocking_list:0"
+msgctxt "odt:stock.shipment.out.return.restocking_list:"
msgid "Supplier:"
msgstr ""
-msgctxt "odt:stock.shipment.out.return.restocking_list:0"
+msgctxt "odt:stock.shipment.out.return.restocking_list:"
msgid "To Location"
msgstr ""
#, fuzzy
-msgctxt "odt:stock.shipment.out.return.restocking_list:0"
+msgctxt "odt:stock.shipment.out.return.restocking_list:"
msgid "VAT Number:"
msgstr "BTW-nummer:"
-msgctxt "odt:stock.shipment.out.return.restocking_list:0"
+msgctxt "odt:stock.shipment.out.return.restocking_list:"
msgid "Warehouse:"
msgstr ""
#, fuzzy
-msgctxt "selection:stock.inventory,state:0"
+msgctxt "selection:stock.inventory,state:"
msgid "Canceled"
msgstr "Geannuleerd"
#, fuzzy
-msgctxt "selection:stock.inventory,state:0"
+msgctxt "selection:stock.inventory,state:"
msgid "Done"
msgstr "Klaar"
#, fuzzy
-msgctxt "selection:stock.inventory,state:0"
+msgctxt "selection:stock.inventory,state:"
msgid "Draft"
msgstr "Concept"
#, fuzzy
-msgctxt "selection:stock.location,type:0"
+msgctxt "selection:stock.location,type:"
msgid "Customer"
msgstr "Klant"
-msgctxt "selection:stock.location,type:0"
+msgctxt "selection:stock.location,type:"
msgid "Lost and Found"
msgstr ""
-msgctxt "selection:stock.location,type:0"
+msgctxt "selection:stock.location,type:"
msgid "Production"
msgstr ""
-msgctxt "selection:stock.location,type:0"
+msgctxt "selection:stock.location,type:"
msgid "Storage"
msgstr ""
#, fuzzy
-msgctxt "selection:stock.location,type:0"
+msgctxt "selection:stock.location,type:"
msgid "Supplier"
msgstr "Leverancier"
#, fuzzy
-msgctxt "selection:stock.location,type:0"
+msgctxt "selection:stock.location,type:"
msgid "View"
msgstr "Overzicht"
#, fuzzy
-msgctxt "selection:stock.location,type:0"
+msgctxt "selection:stock.location,type:"
msgid "Warehouse"
msgstr "Magazijn"
-msgctxt "selection:stock.move,state:0"
+msgctxt "selection:stock.move,state:"
msgid "Assigned"
msgstr ""
#, fuzzy
-msgctxt "selection:stock.move,state:0"
+msgctxt "selection:stock.move,state:"
msgid "Canceled"
msgstr "Geannuleerd"
#, fuzzy
-msgctxt "selection:stock.move,state:0"
+msgctxt "selection:stock.move,state:"
msgid "Done"
msgstr "Klaar"
#, fuzzy
-msgctxt "selection:stock.move,state:0"
+msgctxt "selection:stock.move,state:"
msgid "Draft"
msgstr "Concept"
-msgctxt "selection:stock.period,state:0"
+msgctxt "selection:stock.period,state:"
msgid "Closed"
msgstr ""
#, fuzzy
-msgctxt "selection:stock.period,state:0"
+msgctxt "selection:stock.period,state:"
msgid "Draft"
msgstr "Concept"
#, fuzzy
-msgctxt "selection:stock.shipment.in,state:0"
+msgctxt "selection:stock.shipment.in,state:"
msgid "Canceled"
msgstr "Geannuleerd"
#, fuzzy
-msgctxt "selection:stock.shipment.in,state:0"
+msgctxt "selection:stock.shipment.in,state:"
msgid "Done"
msgstr "Klaar"
#, fuzzy
-msgctxt "selection:stock.shipment.in,state:0"
+msgctxt "selection:stock.shipment.in,state:"
msgid "Draft"
msgstr "Concept"
-msgctxt "selection:stock.shipment.in,state:0"
+msgctxt "selection:stock.shipment.in,state:"
msgid "Received"
msgstr ""
-msgctxt "selection:stock.shipment.in.return,state:0"
+msgctxt "selection:stock.shipment.in.return,state:"
msgid "Assigned"
msgstr ""
#, fuzzy
-msgctxt "selection:stock.shipment.in.return,state:0"
+msgctxt "selection:stock.shipment.in.return,state:"
msgid "Canceled"
msgstr "Geannuleerd"
#, fuzzy
-msgctxt "selection:stock.shipment.in.return,state:0"
+msgctxt "selection:stock.shipment.in.return,state:"
msgid "Done"
msgstr "Klaar"
#, fuzzy
-msgctxt "selection:stock.shipment.in.return,state:0"
+msgctxt "selection:stock.shipment.in.return,state:"
msgid "Draft"
msgstr "Concept"
#, fuzzy
-msgctxt "selection:stock.shipment.in.return,state:0"
+msgctxt "selection:stock.shipment.in.return,state:"
msgid "Waiting"
msgstr "In afwachting"
-msgctxt "selection:stock.shipment.internal,state:0"
+msgctxt "selection:stock.shipment.internal,state:"
msgid "Assigned"
msgstr ""
#, fuzzy
-msgctxt "selection:stock.shipment.internal,state:0"
+msgctxt "selection:stock.shipment.internal,state:"
msgid "Canceled"
msgstr "Geannuleerd"
#, fuzzy
-msgctxt "selection:stock.shipment.internal,state:0"
+msgctxt "selection:stock.shipment.internal,state:"
msgid "Done"
msgstr "Klaar"
#, fuzzy
-msgctxt "selection:stock.shipment.internal,state:0"
+msgctxt "selection:stock.shipment.internal,state:"
msgid "Draft"
msgstr "Concept"
#, fuzzy
-msgctxt "selection:stock.shipment.internal,state:0"
+msgctxt "selection:stock.shipment.internal,state:"
msgid "Waiting"
msgstr "In afwachting"
-msgctxt "selection:stock.shipment.out,state:0"
+msgctxt "selection:stock.shipment.out,state:"
msgid "Assigned"
msgstr ""
#, fuzzy
-msgctxt "selection:stock.shipment.out,state:0"
+msgctxt "selection:stock.shipment.out,state:"
msgid "Canceled"
msgstr "Geannuleerd"
#, fuzzy
-msgctxt "selection:stock.shipment.out,state:0"
+msgctxt "selection:stock.shipment.out,state:"
msgid "Done"
msgstr "Klaar"
#, fuzzy
-msgctxt "selection:stock.shipment.out,state:0"
+msgctxt "selection:stock.shipment.out,state:"
msgid "Draft"
msgstr "Concept"
-msgctxt "selection:stock.shipment.out,state:0"
+msgctxt "selection:stock.shipment.out,state:"
msgid "Packed"
msgstr ""
#, fuzzy
-msgctxt "selection:stock.shipment.out,state:0"
+msgctxt "selection:stock.shipment.out,state:"
msgid "Waiting"
msgstr "In afwachting"
#, fuzzy
-msgctxt "selection:stock.shipment.out.return,state:0"
+msgctxt "selection:stock.shipment.out.return,state:"
msgid "Canceled"
msgstr "Geannuleerd"
#, fuzzy
-msgctxt "selection:stock.shipment.out.return,state:0"
+msgctxt "selection:stock.shipment.out.return,state:"
msgid "Done"
msgstr "Klaar"
#, fuzzy
-msgctxt "selection:stock.shipment.out.return,state:0"
+msgctxt "selection:stock.shipment.out.return,state:"
msgid "Draft"
msgstr "Concept"
-msgctxt "selection:stock.shipment.out.return,state:0"
+msgctxt "selection:stock.shipment.out.return,state:"
msgid "Received"
msgstr ""
#, fuzzy
-msgctxt "view:party.party:0"
+msgctxt "view:party.party:"
msgid "Stock"
msgstr "Voorraad"
+msgctxt "view:product.by_location.start:"
+msgid "Product by Location"
+msgstr ""
+
#, fuzzy
-msgctxt "view:product.product:0"
+msgctxt "view:product.product:"
msgid "Products"
msgstr "Producten"
-msgctxt "view:stock.configuration:0"
+msgctxt "view:stock.configuration:"
msgid "Stock Configuration"
msgstr ""
-msgctxt "view:stock.inventory.line:0"
+msgctxt "view:stock.inventory.line:"
msgid "Inventory Line"
msgstr ""
-msgctxt "view:stock.inventory.line:0"
+msgctxt "view:stock.inventory.line:"
msgid "Inventory Lines"
msgstr ""
-msgctxt "view:stock.inventory:0"
+msgctxt "view:stock.inventory:"
msgid "Add an inventory line for each missing products"
msgstr ""
#, fuzzy
-msgctxt "view:stock.inventory:0"
+msgctxt "view:stock.inventory:"
msgid "Cancel"
msgstr "Annuleren"
-msgctxt "view:stock.inventory:0"
+msgctxt "view:stock.inventory:"
msgid "Complete Inventory"
msgstr ""
#, fuzzy
-msgctxt "view:stock.inventory:0"
+msgctxt "view:stock.inventory:"
msgid "Confirm"
msgstr "Bevestig"
-msgctxt "view:stock.inventory:0"
+msgctxt "view:stock.inventory:"
msgid "Inventories"
msgstr ""
-msgctxt "view:stock.inventory:0"
+msgctxt "view:stock.inventory:"
msgid "Inventory"
msgstr ""
-msgctxt "view:stock.location:0"
+msgctxt "view:stock.location:"
msgid "Location"
msgstr ""
-msgctxt "view:stock.location:0"
-msgid "Locations"
+msgctxt "view:stock.location:"
+msgid "Location Quantity"
msgstr ""
-msgctxt "view:stock.location:0"
-msgid "Product Stock"
+msgctxt "view:stock.location:"
+msgid "Locations"
msgstr ""
-msgctxt "view:stock.location_stock_date.init:0"
-msgid "Product Quantity."
+msgctxt "view:stock.location:"
+msgid "Product Stock"
msgstr ""
#, fuzzy
-msgctxt "view:stock.move:0"
+msgctxt "view:stock.move:"
msgid "Move"
msgstr "Boeking"
#, fuzzy
-msgctxt "view:stock.move:0"
+msgctxt "view:stock.move:"
msgid "Moves"
msgstr "Boekingen"
-msgctxt "view:stock.period.cache:0"
+msgctxt "view:stock.period.cache:"
msgid "Period Cache"
msgstr ""
-msgctxt "view:stock.period.cache:0"
+msgctxt "view:stock.period.cache:"
msgid "Period Caches"
msgstr ""
#, fuzzy
-msgctxt "view:stock.period:0"
+msgctxt "view:stock.period:"
msgid "Close"
msgstr "Sluiten"
#, fuzzy
-msgctxt "view:stock.period:0"
+msgctxt "view:stock.period:"
msgid "Draft"
msgstr "Concept"
#, fuzzy
-msgctxt "view:stock.period:0"
+msgctxt "view:stock.period:"
msgid "Period"
msgstr "Periode"
#, fuzzy
-msgctxt "view:stock.period:0"
+msgctxt "view:stock.period:"
msgid "Periods"
msgstr "Perioden"
-msgctxt "view:stock.product_stock_date.init:0"
-msgid "Product Quantity."
+msgctxt "view:stock.products_by_locations.start:"
+msgid "Products by Locations"
msgstr ""
-#, fuzzy
-msgctxt "view:stock.shipment.in.return.assign.assign_failed:0"
-msgid "Moves"
-msgstr "Boekingen"
-
-msgctxt "view:stock.shipment.in.return.assign.assign_failed:0"
+msgctxt "view:stock.shipment.in.return.assign.failed:"
msgid "Unable to Assign"
msgstr ""
-msgctxt "view:stock.shipment.in.return.assign.assign_failed:0"
+msgctxt "view:stock.shipment.in.return.assign.failed:"
msgid "Unable to assign those products:"
msgstr ""
-msgctxt "view:stock.shipment.in.return:0"
+msgctxt "view:stock.shipment.in.return:"
msgid "Assign"
msgstr ""
#, fuzzy
-msgctxt "view:stock.shipment.in.return:0"
+msgctxt "view:stock.shipment.in.return:"
msgid "Cancel"
msgstr "Annuleren"
#, fuzzy
-msgctxt "view:stock.shipment.in.return:0"
+msgctxt "view:stock.shipment.in.return:"
msgid "Done"
msgstr "Klaar"
#, fuzzy
-msgctxt "view:stock.shipment.in.return:0"
+msgctxt "view:stock.shipment.in.return:"
msgid "Draft"
msgstr "Concept"
#, fuzzy
-msgctxt "view:stock.shipment.in.return:0"
+msgctxt "view:stock.shipment.in.return:"
msgid "Reset to Draft"
msgstr "Terug naar concept"
-msgctxt "view:stock.shipment.in.return:0"
+msgctxt "view:stock.shipment.in.return:"
msgid "Supplier Return Shipment"
msgstr ""
-msgctxt "view:stock.shipment.in.return:0"
+msgctxt "view:stock.shipment.in.return:"
msgid "Supplier Return Shipments"
msgstr ""
+msgctxt "view:stock.shipment.in.return:"
+msgid "Wait"
+msgstr ""
+
#, fuzzy
-msgctxt "view:stock.shipment.in.return:0"
+msgctxt "view:stock.shipment.in.return:"
msgid "Waiting"
msgstr "In afwachting"
#, fuzzy
-msgctxt "view:stock.shipment.in:0"
+msgctxt "view:stock.shipment.in:"
msgid "Cancel"
msgstr "Annuleren"
#, fuzzy
-msgctxt "view:stock.shipment.in:0"
+msgctxt "view:stock.shipment.in:"
msgid "Done"
msgstr "Klaar"
-msgctxt "view:stock.shipment.in:0"
+msgctxt "view:stock.shipment.in:"
msgid "Incoming Moves"
msgstr ""
-msgctxt "view:stock.shipment.in:0"
+msgctxt "view:stock.shipment.in:"
msgid "Inventory Moves"
msgstr ""
#, fuzzy
-msgctxt "view:stock.shipment.in:0"
+msgctxt "view:stock.shipment.in:"
msgid "Moves"
msgstr "Boekingen"
-msgctxt "view:stock.shipment.in:0"
+msgctxt "view:stock.shipment.in:"
+msgid "Receive"
+msgstr ""
+
+msgctxt "view:stock.shipment.in:"
msgid "Received"
msgstr ""
#, fuzzy
-msgctxt "view:stock.shipment.in:0"
+msgctxt "view:stock.shipment.in:"
msgid "Reset to Draft"
msgstr "Terug naar concept"
-msgctxt "view:stock.shipment.in:0"
+msgctxt "view:stock.shipment.in:"
msgid "Supplier Shipment"
msgstr ""
-msgctxt "view:stock.shipment.in:0"
+msgctxt "view:stock.shipment.in:"
msgid "Supplier Shipments"
msgstr ""
-#, fuzzy
-msgctxt "view:stock.shipment.internal.assign.assign_failed:0"
-msgid "Moves"
-msgstr "Boekingen"
-
-msgctxt "view:stock.shipment.internal.assign.assign_failed:0"
+msgctxt "view:stock.shipment.internal.assign.failed:"
msgid "Unable to Assign"
msgstr ""
-msgctxt "view:stock.shipment.internal.assign.assign_failed:0"
+msgctxt "view:stock.shipment.internal.assign.failed:"
msgid "Unable to assign those products:"
msgstr ""
-msgctxt "view:stock.shipment.internal:0"
+msgctxt "view:stock.shipment.internal:"
msgid "Assign"
msgstr ""
#, fuzzy
-msgctxt "view:stock.shipment.internal:0"
+msgctxt "view:stock.shipment.internal:"
msgid "Cancel"
msgstr "Annuleren"
#, fuzzy
-msgctxt "view:stock.shipment.internal:0"
+msgctxt "view:stock.shipment.internal:"
msgid "Done"
msgstr "Klaar"
#, fuzzy
-msgctxt "view:stock.shipment.internal:0"
+msgctxt "view:stock.shipment.internal:"
msgid "Draft"
msgstr "Concept"
-msgctxt "view:stock.shipment.internal:0"
+msgctxt "view:stock.shipment.internal:"
msgid "Internal Shipment"
msgstr ""
-msgctxt "view:stock.shipment.internal:0"
+msgctxt "view:stock.shipment.internal:"
msgid "Internal Shipments"
msgstr ""
#, fuzzy
-msgctxt "view:stock.shipment.internal:0"
+msgctxt "view:stock.shipment.internal:"
msgid "Reset to Draft"
msgstr "Terug naar concept"
#, fuzzy
-msgctxt "view:stock.shipment.internal:0"
+msgctxt "view:stock.shipment.internal:"
msgid "Waiting"
msgstr "In afwachting"
-msgctxt "view:stock.shipment.out.assign.assign_failed:0"
-msgid "Inventory Moves"
-msgstr ""
-
-msgctxt "view:stock.shipment.out.assign.assign_failed:0"
+msgctxt "view:stock.shipment.out.assign.failed:"
msgid "Unable to Assign"
msgstr ""
-msgctxt "view:stock.shipment.out.assign.assign_failed:0"
+msgctxt "view:stock.shipment.out.assign.failed:"
msgid "Unable to assign those products:"
msgstr ""
#, fuzzy
-msgctxt "view:stock.shipment.out.return:0"
+msgctxt "view:stock.shipment.out.return:"
msgid "Cancel"
msgstr "Annuleren"
-msgctxt "view:stock.shipment.out.return:0"
+msgctxt "view:stock.shipment.out.return:"
msgid "Customer Return Shipment"
msgstr ""
-msgctxt "view:stock.shipment.out.return:0"
+msgctxt "view:stock.shipment.out.return:"
msgid "Customer Return Shipments"
msgstr ""
#, fuzzy
-msgctxt "view:stock.shipment.out.return:0"
+msgctxt "view:stock.shipment.out.return:"
msgid "Done"
msgstr "Klaar"
-msgctxt "view:stock.shipment.out.return:0"
+#, fuzzy
+msgctxt "view:stock.shipment.out.return:"
+msgid "Draft"
+msgstr "Concept"
+
+msgctxt "view:stock.shipment.out.return:"
msgid "Incoming Moves"
msgstr ""
-msgctxt "view:stock.shipment.out.return:0"
+msgctxt "view:stock.shipment.out.return:"
msgid "Inventory Moves"
msgstr ""
#, fuzzy
-msgctxt "view:stock.shipment.out.return:0"
+msgctxt "view:stock.shipment.out.return:"
msgid "Moves"
msgstr "Boekingen"
-msgctxt "view:stock.shipment.out.return:0"
+msgctxt "view:stock.shipment.out.return:"
msgid "Received"
msgstr ""
#, fuzzy
-msgctxt "view:stock.shipment.out.return:0"
+msgctxt "view:stock.shipment.out.return:"
msgid "Reset to Draft"
msgstr "Terug naar concept"
-msgctxt "view:stock.shipment.out:0"
+msgctxt "view:stock.shipment.out:"
msgid "Assign"
msgstr ""
#, fuzzy
-msgctxt "view:stock.shipment.out:0"
+msgctxt "view:stock.shipment.out:"
msgid "Cancel"
msgstr "Annuleren"
-msgctxt "view:stock.shipment.out:0"
+msgctxt "view:stock.shipment.out:"
msgid "Customer Shipment"
msgstr ""
-msgctxt "view:stock.shipment.out:0"
+msgctxt "view:stock.shipment.out:"
msgid "Customer Shipments"
msgstr ""
#, fuzzy
-msgctxt "view:stock.shipment.out:0"
+msgctxt "view:stock.shipment.out:"
msgid "Done"
msgstr "Klaar"
#, fuzzy
-msgctxt "view:stock.shipment.out:0"
+msgctxt "view:stock.shipment.out:"
msgid "Draft"
msgstr "Concept"
-msgctxt "view:stock.shipment.out:0"
+msgctxt "view:stock.shipment.out:"
msgid "Inventory Moves"
msgstr ""
-msgctxt "view:stock.shipment.out:0"
+msgctxt "view:stock.shipment.out:"
msgid "Make shipment"
msgstr ""
-msgctxt "view:stock.shipment.out:0"
+msgctxt "view:stock.shipment.out:"
msgid "Outgoing Moves"
msgstr ""
#, fuzzy
-msgctxt "view:stock.shipment.out:0"
+msgctxt "view:stock.shipment.out:"
msgid "Reset to Draft"
msgstr "Terug naar concept"
#, fuzzy
-msgctxt "view:stock.shipment.out:0"
+msgctxt "view:stock.shipment.out:"
msgid "Waiting"
msgstr "In afwachting"
#, fuzzy
-msgctxt "wizard_button:stock.location.open,init,end:0"
+msgctxt "wizard_button:product.by_location,start,end:"
msgid "Cancel"
msgstr "Annuleren"
#, fuzzy
-msgctxt "wizard_button:stock.location.open,init,open:0"
+msgctxt "wizard_button:product.by_location,start,open:"
msgid "Open"
msgstr "Open"
#, fuzzy
-msgctxt "wizard_button:stock.product.open,init,end:0"
+msgctxt "wizard_button:stock.products_by_locations,start,end:"
msgid "Cancel"
msgstr "Annuleren"
#, fuzzy
-msgctxt "wizard_button:stock.product.open,init,open:0"
+msgctxt "wizard_button:stock.products_by_locations,start,open:"
msgid "Open"
msgstr "Open"
#, fuzzy
-msgctxt "wizard_button:stock.shipment.in.return.assign,ask_force,end:0"
+msgctxt "wizard_button:stock.shipment.in.return.assign,failed,end:"
msgid "Ok"
msgstr "Oké"
-msgctxt "wizard_button:stock.shipment.in.return.assign,ask_force,force:0"
+msgctxt "wizard_button:stock.shipment.in.return.assign,failed,force:"
msgid "Force Assign"
msgstr ""
#, fuzzy
-msgctxt "wizard_button:stock.shipment.in.return.assign,assign_failed,end:0"
-msgid "Ok"
-msgstr "Oké"
-
-#, fuzzy
-msgctxt "wizard_button:stock.shipment.internal.assign,ask_force,end:0"
+msgctxt "wizard_button:stock.shipment.internal.assign,failed,end:"
msgid "Ok"
msgstr "Oké"
-msgctxt "wizard_button:stock.shipment.internal.assign,ask_force,force:0"
+msgctxt "wizard_button:stock.shipment.internal.assign,failed,force:"
msgid "Force Assign"
msgstr ""
#, fuzzy
-msgctxt "wizard_button:stock.shipment.internal.assign,assign_failed,end:0"
+msgctxt "wizard_button:stock.shipment.out.assign,failed,end:"
msgid "Ok"
msgstr "Oké"
-#, fuzzy
-msgctxt "wizard_button:stock.shipment.out.assign,ask_force,end:0"
-msgid "Ok"
-msgstr "Oké"
-
-msgctxt "wizard_button:stock.shipment.out.assign,ask_force,force:0"
+msgctxt "wizard_button:stock.shipment.out.assign,failed,force:"
msgid "Force Assign"
msgstr ""
-
-#, fuzzy
-msgctxt "wizard_button:stock.shipment.out.assign,assign_failed,end:0"
-msgid "Ok"
-msgstr "Oké"
diff --git a/locale/ru_RU.po b/locale/ru_RU.po
index 4efa7de..1dc9265 100644
--- a/locale/ru_RU.po
+++ b/locale/ru_RU.po
@@ -2,7 +2,7 @@
msgid ""
msgstr "Content-Type: text/plain; charset=utf-8\n"
-msgctxt "error:product.template:0"
+msgctxt "error:product.template:"
msgid ""
"You cannot change the default uom for a product which is associated to stock"
" moves."
@@ -10,706 +10,1017 @@ msgstr ""
"ÐÑ Ð½Ðµ можеÑе измениÑÑ ÐµÐ´Ð¸Ð½Ð¸ÑÑ Ð¸Ð·Ð¼ÐµÑÐµÐ½Ð¸Ñ Ð¿Ð¾ ÑмолÑÐ°Ð½Ð¸Ñ Ð´Ð»Ñ Ð¿ÑодÑкÑа, коÑоÑÑй "
"ÑвÑзан Ñо Ñкладом пеÑемеÑениÑ."
-msgctxt "error:stock.inventory.line:0"
+msgctxt "error:stock.inventory.line:"
msgid "Line quantity must be positive!"
msgstr "Ðол-во должно бÑÑÑ Ð¿Ð¾Ð»Ð¾Ð¶Ð¸ÑелÑнÑм"
-msgctxt "error:stock.inventory.line:0"
+msgctxt "error:stock.inventory.line:"
msgid "Product must be unique by inventory!"
msgstr "ТÐЦ должен бÑÑÑ ÑникалÑнÑм по инвенÑаÑизаÑии!"
-msgctxt "error:stock.location:0"
+msgctxt "error:stock.inventory:"
+msgid "Inventory \"%s\" must be cancelled before deletion!"
+msgstr ""
+
+msgctxt "error:stock.location:"
msgid ""
"A location with existing moves cannot be changed to a type that does not "
"support moves."
msgstr ""
-msgctxt "error:stock.location:0"
+msgctxt "error:stock.location:"
msgid "Location \"%s\" must be a child of warehouse \"%s\"!"
msgstr "ÐеÑÑо \"%s\" должно бÑÑÑ Ð½Ð° Ñкладе \"%s\"!"
-msgctxt "error:stock.location:0"
+msgctxt "error:stock.location:"
msgid "You can not create recursive locations!"
msgstr "ÐÑ Ð½Ðµ можеÑе ÑоздаваÑÑ ÑекÑÑÑивнÑе меÑÑа!"
-msgctxt "error:stock.move:0"
+msgctxt "error:stock.move:"
msgid "Internal move quantity must be positive"
msgstr ""
-msgctxt "error:stock.move:0"
+msgctxt "error:stock.move:"
msgid "Move can be on only one Shipment"
msgstr "ÐеÑемеÑение Ð¼Ð¾Ð¶ÐµÑ Ð¸Ð¼ÐµÑÑ ÑолÑко Ð¾Ð´Ð½Ñ Ð¾ÑгÑÑзкÑ"
-msgctxt "error:stock.move:0"
+msgctxt "error:stock.move:"
msgid "Move quantity must be positive"
msgstr "Ðол-во должно бÑÑÑ Ð¿Ð¾Ð»Ð¾Ð¶Ð¸ÑелÑнÑм"
-msgctxt "error:stock.move:0"
+msgctxt "error:stock.move:"
msgid "Source and destination location must be different"
msgstr "ÐÑÑоÑник и меÑÑо назнаÑÐµÐ½Ð¸Ñ Ð´Ð¾Ð»Ð¶Ð½Ñ Ð±ÑÑÑ ÑазнÑми"
-msgctxt "error:stock.move:0"
+msgctxt "error:stock.move:"
msgid "You can not modify a move in the state: \"Assigned\", \"Done\" or \"Cancel\""
msgstr ""
-msgctxt "error:stock.move:0"
+msgctxt "error:stock.move:"
msgid "You can not modify move in closed period!"
msgstr ""
-msgctxt "error:stock.move:0"
+msgctxt "error:stock.move:"
msgid "You can not set state to assigned!"
msgstr "ÐÑ Ð½Ðµ можеÑе ÑÑÑановиÑÑ ÑоÑÑоÑние 'пеÑедан'!"
-msgctxt "error:stock.move:0"
+msgctxt "error:stock.move:"
msgid "You can not set state to done!"
msgstr "ÐÑ Ð½Ðµ можеÑе ÑÑÑановиÑÑ ÑоÑÑоÑние 'гоÑово'!"
-msgctxt "error:stock.move:0"
+msgctxt "error:stock.move:"
msgid "You can not set state to draft!"
msgstr "ÐÑ Ð½Ðµ можеÑе ÑÑÑановиÑÑ ÑоÑÑоÑние 'ÑеÑновик'!"
-msgctxt "error:stock.move:0"
-msgid "You can not use service products for a move!"
-msgstr "ÐÑ Ð½Ðµ можеÑе вÑбÑаÑÑ ÑÑлÑÐ³Ñ Ð´Ð»Ñ Ð¿ÐµÑемеÑениÑ"
-
-msgctxt "error:stock.move:0"
+msgctxt "error:stock.move:"
msgid "You can only delete draft or cancelled moves!"
msgstr "ÐÑ Ð¼Ð¾Ð¶ÐµÑе ÑдалÑÑÑ ÑолÑко оÑмененнÑе пеÑемеÑÐµÐ½Ð¸Ñ Ð¸ ÑеÑновики"
-msgctxt "error:stock.period:0"
+msgctxt "error:stock.period:"
msgid "You can not close a period in the future or today!"
msgstr ""
-msgctxt "error:stock.period:0"
+msgctxt "error:stock.period:"
msgid "You can not close a period when there is still assigned moves!"
msgstr ""
-msgctxt "error:stock.shipment.in:0"
+msgctxt "error:stock.shipment.in.return:"
+msgid "Supplier Return Shipment \"%s\" must be cancelled before deletion!"
+msgstr ""
+
+msgctxt "error:stock.shipment.in:"
msgid ""
"Incoming Moves must have the warehouse input location as destination "
"location!"
msgstr "РпоÑÑÑплениÑÑ
должен бÑÑÑ Ñказан меÑÑом назнаÑÐµÐ½Ð¸Ñ ÑоваÑнÑй Ñклад"
-msgctxt "error:stock.shipment.in:0"
+msgctxt "error:stock.shipment.in:"
msgid ""
"Inventory Moves must have the warehouse input location as source location!"
msgstr ""
-msgctxt "error:stock.shipment.out.return.create:0"
+msgctxt "error:stock.shipment.in:"
+msgid "Supplier Shipment \"%s\" must be cancelled before deletion!"
+msgstr ""
+
+msgctxt "error:stock.shipment.internal:"
+msgid "Internal Shipment \"%s\" must be cancelled before deletion!"
+msgstr ""
+
+msgctxt "error:stock.shipment.out.return.create:"
msgid "The shipment with code %s is not yet sent."
msgstr "ÐÑгÑÑзка Ñ ÐºÐ¾Ð´Ð¾Ð¼ %s еÑе не оÑпÑавлена."
-msgctxt "error:stock.shipment.out.return.create:0"
+msgctxt "error:stock.shipment.out.return.create:"
msgid "You can not create return shipment"
msgstr "ÐÑ Ð½Ðµ можеÑе ÑоздаÑÑ Ð²Ð¾Ð·Ð²ÑаÑ"
-msgctxt "error:stock.shipment.out.return:0"
-msgid ""
-"Incoming Moves must have the warehouse input location as destination "
-"location!"
+msgctxt "error:stock.shipment.out.return:"
+msgid "Customer Return Shipment \"%s\" must be cancelled before deletion!"
msgstr ""
-"РвозвÑаÑаÑ
Ð¾Ñ Ð·Ð°ÐºÐ°Ð·Ñиков должен бÑÑÑ Ñказан меÑÑом назнаÑÐµÐ½Ð¸Ñ ÑоваÑнÑй "
-"Ñклад"
-msgctxt "error:stock.shipment.out.return:0"
-msgid ""
-"Inventory Moves must have the warehouse input location as source location!"
-msgstr ""
-
-msgctxt "error:stock.shipment.out:0"
-msgid ""
-"Inventory Moves must have the warehouse output location as destination "
-"location!"
+msgctxt "error:stock.shipment.out:"
+msgid "Customer Shipment \"%s\" must be cancelled before deletion!"
msgstr ""
-msgctxt "error:stock.shipment.out:0"
-msgid ""
-"Outgoing Moves must have the warehouse output location as source location!"
-msgstr ""
-
-msgctxt "field:party.address,delivery:0"
+msgctxt "field:party.address,delivery:"
msgid "Delivery"
msgstr "ÐоÑÑавка"
-msgctxt "field:party.party,customer_location:0"
+msgctxt "field:party.party,customer_location:"
msgid "Customer Location"
msgstr "ÐеÑÑо Ñ
ÑÐ°Ð½ÐµÐ½Ð¸Ñ Ð·Ð°ÐºÐ°Ð·Ñика"
-msgctxt "field:party.party,supplier_location:0"
+msgctxt "field:party.party,supplier_location:"
msgid "Supplier Location"
msgstr "ÐеÑÑо Ñ
ÑÐ°Ð½ÐµÐ½Ð¸Ñ Ð¿Ð¾ÑÑавÑика"
-msgctxt "field:product.product,forecast_quantity:0"
+msgctxt "field:product.by_location.start,forecast_date:"
+msgid "At Date"
+msgstr ""
+
+msgctxt "field:product.by_location.start,id:"
+msgid "ID"
+msgstr ""
+
+msgctxt "field:product.product,cost_value:"
+msgid "Cost Value"
+msgstr ""
+
+msgctxt "field:product.product,forecast_quantity:"
msgid "Forecast Quantity"
msgstr "ÐÑогноз ÐолиÑеÑÑво"
-msgctxt "field:product.product,quantity:0"
+msgctxt "field:product.product,quantity:"
msgid "Quantity"
msgstr "Ðол-во"
-msgctxt "field:product.template,forecast_quantity:0"
+msgctxt "field:product.template,cost_value:"
+msgid "Cost Value"
+msgstr ""
+
+msgctxt "field:product.template,forecast_quantity:"
msgid "Forecast Quantity"
msgstr "ÐÑогноз ÐолиÑеÑÑво"
-msgctxt "field:product.template,quantity:0"
+msgctxt "field:product.template,quantity:"
msgid "Quantity"
msgstr "Ðол-во"
-msgctxt "field:stock.configuration,rec_name:0"
+msgctxt "field:stock.configuration,create_date:"
+msgid "Create Date"
+msgstr ""
+
+msgctxt "field:stock.configuration,create_uid:"
+msgid "Create User"
+msgstr ""
+
+msgctxt "field:stock.configuration,id:"
+msgid "ID"
+msgstr ""
+
+msgctxt "field:stock.configuration,rec_name:"
msgid "Name"
msgstr "Ðаименование"
-msgctxt "field:stock.configuration,shipment_in_return_sequence:0"
+msgctxt "field:stock.configuration,shipment_in_return_sequence:"
msgid "Supplier Return Shipment Sequence"
msgstr "ÐозвÑÐ°Ñ Ð¿Ð¾ÑÑавÑÐ¸ÐºÑ Ð¿Ð¾ÑледоваÑелÑноÑÑÑ"
-msgctxt "field:stock.configuration,shipment_in_sequence:0"
+msgctxt "field:stock.configuration,shipment_in_sequence:"
msgid "Supplier Shipment Sequence"
msgstr "ÐÑиÑ
од Ð¾Ñ Ð¿Ð¾ÑÑавÑика поÑледоваÑелÑноÑÑÑ"
-msgctxt "field:stock.configuration,shipment_internal_sequence:0"
+msgctxt "field:stock.configuration,shipment_internal_sequence:"
msgid "Internal Shipment Sequence"
msgstr "ÐнÑÑÑенние пеÑемеÑение поÑледоваÑелÑноÑÑÑ"
-msgctxt "field:stock.configuration,shipment_out_return_sequence:0"
+msgctxt "field:stock.configuration,shipment_out_return_sequence:"
msgid "Customer Return Shipment Sequence"
msgstr "ÐозвÑÐ°Ñ Ð¾Ñ Ð·Ð°ÐºÐ°Ð·Ñика поÑледоваÑелÑноÑÑÑ"
-msgctxt "field:stock.configuration,shipment_out_sequence:0"
+msgctxt "field:stock.configuration,shipment_out_sequence:"
msgid "Customer Shipment Sequence"
msgstr "ÐÑгÑÑзка заказÑÐ¸ÐºÑ Ð¿Ð¾ÑледоваÑелÑноÑÑÑ"
-msgctxt "field:stock.inventory,company:0"
+msgctxt "field:stock.configuration,write_date:"
+msgid "Write Date"
+msgstr ""
+
+msgctxt "field:stock.configuration,write_uid:"
+msgid "Write User"
+msgstr ""
+
+msgctxt "field:stock.inventory,company:"
msgid "Company"
msgstr "ÐомпаниÑ"
-msgctxt "field:stock.inventory,date:0"
+msgctxt "field:stock.inventory,create_date:"
+msgid "Create Date"
+msgstr ""
+
+msgctxt "field:stock.inventory,create_uid:"
+msgid "Create User"
+msgstr ""
+
+msgctxt "field:stock.inventory,date:"
msgid "Date"
msgstr "ÐаÑа"
-msgctxt "field:stock.inventory,lines:0"
+msgctxt "field:stock.inventory,id:"
+msgid "ID"
+msgstr ""
+
+msgctxt "field:stock.inventory,lines:"
msgid "Lines"
msgstr "СÑÑоки"
-msgctxt "field:stock.inventory,location:0"
+msgctxt "field:stock.inventory,location:"
msgid "Location"
msgstr "ÐеÑÑо"
-msgctxt "field:stock.inventory,lost_found:0"
+msgctxt "field:stock.inventory,lost_found:"
msgid "Lost and Found"
msgstr "УÑÑаÑеннÑй и обÑеÑеннÑй"
-msgctxt "field:stock.inventory,rec_name:0"
+msgctxt "field:stock.inventory,rec_name:"
msgid "Name"
msgstr "Ðаименование"
-msgctxt "field:stock.inventory,state:0"
+msgctxt "field:stock.inventory,state:"
msgid "State"
msgstr "СоÑÑоÑние"
-msgctxt "field:stock.inventory.line,expected_quantity:0"
+msgctxt "field:stock.inventory,write_date:"
+msgid "Write Date"
+msgstr ""
+
+msgctxt "field:stock.inventory,write_uid:"
+msgid "Write User"
+msgstr ""
+
+msgctxt "field:stock.inventory.line,create_date:"
+msgid "Create Date"
+msgstr ""
+
+msgctxt "field:stock.inventory.line,create_uid:"
+msgid "Create User"
+msgstr ""
+
+msgctxt "field:stock.inventory.line,expected_quantity:"
msgid "Expected Quantity"
msgstr "Ðжидаемое колиÑеÑÑво"
-msgctxt "field:stock.inventory.line,inventory:0"
+msgctxt "field:stock.inventory.line,id:"
+msgid "ID"
+msgstr ""
+
+msgctxt "field:stock.inventory.line,inventory:"
msgid "Inventory"
msgstr "ÐнвенÑаÑизаÑиÑ"
-msgctxt "field:stock.inventory.line,move:0"
+msgctxt "field:stock.inventory.line,move:"
msgid "Move"
msgstr "ÐеÑемеÑение"
-msgctxt "field:stock.inventory.line,product:0"
+msgctxt "field:stock.inventory.line,product:"
msgid "Product"
msgstr "ТÐЦ"
-msgctxt "field:stock.inventory.line,quantity:0"
+msgctxt "field:stock.inventory.line,quantity:"
msgid "Quantity"
msgstr "Ðол-во"
-msgctxt "field:stock.inventory.line,rec_name:0"
+msgctxt "field:stock.inventory.line,rec_name:"
msgid "Name"
msgstr "Ðаименование"
-msgctxt "field:stock.inventory.line,unit_digits:0"
+msgctxt "field:stock.inventory.line,unit_digits:"
msgid "Unit Digits"
msgstr "ÐÑÑппа ÑиÑÑ"
-msgctxt "field:stock.inventory.line,uom:0"
+msgctxt "field:stock.inventory.line,uom:"
msgid "UOM"
msgstr "Ðд.изм."
-msgctxt "field:stock.location,active:0"
+msgctxt "field:stock.inventory.line,write_date:"
+msgid "Write Date"
+msgstr ""
+
+msgctxt "field:stock.inventory.line,write_uid:"
+msgid "Write User"
+msgstr ""
+
+msgctxt "field:stock.location,active:"
msgid "Active"
msgstr "ÐейÑÑвиÑелÑннÑй"
-msgctxt "field:stock.location,address:0"
+msgctxt "field:stock.location,address:"
msgid "Address"
msgstr "ÐдÑеÑ"
-msgctxt "field:stock.location,childs:0"
+msgctxt "field:stock.location,childs:"
msgid "Children"
msgstr "ÐодÑиненÑй"
-msgctxt "field:stock.location,code:0"
+msgctxt "field:stock.location,code:"
msgid "Code"
msgstr "Ðод локаÑии"
-msgctxt "field:stock.location,forecast_quantity:0"
+msgctxt "field:stock.location,cost_value:"
+msgid "Cost Value"
+msgstr ""
+
+msgctxt "field:stock.location,create_date:"
+msgid "Create Date"
+msgstr ""
+
+msgctxt "field:stock.location,create_uid:"
+msgid "Create User"
+msgstr ""
+
+msgctxt "field:stock.location,forecast_quantity:"
msgid "Forecast Quantity"
msgstr "ÐÑогноз ÐолиÑеÑÑво"
-msgctxt "field:stock.location,input_location:0"
+msgctxt "field:stock.location,id:"
+msgid "ID"
+msgstr ""
+
+msgctxt "field:stock.location,input_location:"
msgid "Input"
msgstr "ÐÑ
одÑÑий"
-msgctxt "field:stock.location,left:0"
+msgctxt "field:stock.location,left:"
msgid "Left"
msgstr "ÐÐµÐ²Ð°Ñ ÑÑоÑона"
-msgctxt "field:stock.location,name:0"
+msgctxt "field:stock.location,name:"
msgid "Name"
msgstr "Ðаименование"
-msgctxt "field:stock.location,output_location:0"
+msgctxt "field:stock.location,output_location:"
msgid "Output"
msgstr "ÐÑÑ
одÑÑий"
-msgctxt "field:stock.location,parent:0"
+msgctxt "field:stock.location,parent:"
msgid "Parent"
msgstr "ÐÑновной"
-msgctxt "field:stock.location,quantity:0"
+msgctxt "field:stock.location,quantity:"
msgid "Quantity"
msgstr "Ðол-во"
-msgctxt "field:stock.location,rec_name:0"
+msgctxt "field:stock.location,rec_name:"
msgid "Name"
msgstr "Ðаименование"
-msgctxt "field:stock.location,right:0"
+msgctxt "field:stock.location,right:"
msgid "Right"
msgstr "ÐÑÐ°Ð²Ð°Ñ ÑÑоÑона"
-msgctxt "field:stock.location,storage_location:0"
+msgctxt "field:stock.location,storage_location:"
msgid "Storage"
msgstr "Ð¥ÑанилиÑе"
-msgctxt "field:stock.location,type:0"
+msgctxt "field:stock.location,type:"
msgid "Location type"
msgstr "Тип ÑаÑположение"
-msgctxt "field:stock.location_stock_date.init,forecast_date:0"
-msgid "At Date"
-msgstr "Ðо даÑе"
+msgctxt "field:stock.location,write_date:"
+msgid "Write Date"
+msgstr ""
-msgctxt "field:stock.move,company:0"
+msgctxt "field:stock.location,write_uid:"
+msgid "Write User"
+msgstr ""
+
+msgctxt "field:stock.move,company:"
msgid "Company"
msgstr "ÐомпаниÑ"
-msgctxt "field:stock.move,cost_price:0"
+msgctxt "field:stock.move,cost_price:"
msgid "Cost Price"
msgstr "СебеÑÑоимоÑÑÑ"
-msgctxt "field:stock.move,currency:0"
+msgctxt "field:stock.move,create_date:"
+msgid "Create Date"
+msgstr ""
+
+msgctxt "field:stock.move,create_uid:"
+msgid "Create User"
+msgstr ""
+
+msgctxt "field:stock.move,currency:"
msgid "Currency"
msgstr "ÐалÑÑа"
-msgctxt "field:stock.move,effective_date:0"
+msgctxt "field:stock.move,effective_date:"
msgid "Effective Date"
msgstr "УÑеÑÐ½Ð°Ñ Ð´Ð°Ñа"
-msgctxt "field:stock.move,from_location:0"
+msgctxt "field:stock.move,from_location:"
msgid "From Location"
msgstr "Ðз меÑÑа"
-msgctxt "field:stock.move,internal_quantity:0"
+msgctxt "field:stock.move,id:"
+msgid "ID"
+msgstr ""
+
+msgctxt "field:stock.move,internal_quantity:"
msgid "Internal Quantity"
msgstr ""
-msgctxt "field:stock.move,planned_date:0"
+msgctxt "field:stock.move,planned_date:"
msgid "Planned Date"
msgstr "ÐÐ»Ð°Ð½Ð¾Ð²Ð°Ñ Ð´Ð°Ñа"
-msgctxt "field:stock.move,product:0"
+msgctxt "field:stock.move,product:"
msgid "Product"
msgstr "ТÐЦ"
-msgctxt "field:stock.move,quantity:0"
+msgctxt "field:stock.move,product_uom_category:"
+msgid "Product Uom Category"
+msgstr ""
+
+msgctxt "field:stock.move,quantity:"
msgid "Quantity"
msgstr "Ðол-во"
-msgctxt "field:stock.move,rec_name:0"
+msgctxt "field:stock.move,rec_name:"
msgid "Name"
msgstr "Ðаименование"
-msgctxt "field:stock.move,shipment_in:0"
+msgctxt "field:stock.move,shipment_in:"
msgid "Supplier Shipment"
msgstr "ÐÑиÑ
од Ð¾Ñ Ð¿Ð¾ÑÑавÑика"
-msgctxt "field:stock.move,shipment_in_return:0"
+msgctxt "field:stock.move,shipment_in_return:"
msgid "Supplier Return Shipment"
msgstr "ÐозвÑÐ°Ñ Ð¿Ð¾ÑÑавÑикÑ"
-msgctxt "field:stock.move,shipment_internal:0"
+msgctxt "field:stock.move,shipment_internal:"
msgid "Internal Shipment"
msgstr "ÐнÑÑÑеннее пеÑемеÑение"
-msgctxt "field:stock.move,shipment_out:0"
+msgctxt "field:stock.move,shipment_out:"
msgid "Customer Shipment"
msgstr "ÐÑгÑÑзка заказÑикÑ"
-msgctxt "field:stock.move,shipment_out_return:0"
+msgctxt "field:stock.move,shipment_out_return:"
msgid "Customer Return Shipment"
msgstr "ÐозвÑÐ°Ñ Ð¾Ñ Ð·Ð°ÐºÐ°Ð·Ñика"
-msgctxt "field:stock.move,state:0"
+msgctxt "field:stock.move,state:"
msgid "State"
msgstr "СоÑÑоÑние"
-msgctxt "field:stock.move,to_location:0"
+msgctxt "field:stock.move,to_location:"
msgid "To Location"
msgstr "РмеÑÑо"
-msgctxt "field:stock.move,unit_digits:0"
+msgctxt "field:stock.move,unit_digits:"
msgid "Unit Digits"
msgstr "ÐÑÑппа ÑиÑÑ"
-msgctxt "field:stock.move,unit_price:0"
+msgctxt "field:stock.move,unit_price:"
msgid "Unit Price"
msgstr "Цена за единиÑÑ"
-msgctxt "field:stock.move,unit_price_required:0"
+msgctxt "field:stock.move,unit_price_required:"
msgid "Unit Price Required"
msgstr "ТÑебÑеÑÑÑ Ñена за единиÑÑ"
-msgctxt "field:stock.move,uom:0"
+msgctxt "field:stock.move,uom:"
msgid "Uom"
msgstr "Ðд.изм."
-msgctxt "field:stock.period,caches:0"
+msgctxt "field:stock.move,write_date:"
+msgid "Write Date"
+msgstr ""
+
+msgctxt "field:stock.move,write_uid:"
+msgid "Write User"
+msgstr ""
+
+msgctxt "field:stock.period,caches:"
msgid "Caches"
msgstr ""
#, fuzzy
-msgctxt "field:stock.period,company:0"
+msgctxt "field:stock.period,company:"
msgid "Company"
msgstr "УÑеÑ.оÑг."
+msgctxt "field:stock.period,create_date:"
+msgid "Create Date"
+msgstr ""
+
+msgctxt "field:stock.period,create_uid:"
+msgid "Create User"
+msgstr ""
+
#, fuzzy
-msgctxt "field:stock.period,date:0"
+msgctxt "field:stock.period,date:"
msgid "Date"
msgstr "ÐаÑа"
+msgctxt "field:stock.period,id:"
+msgid "ID"
+msgstr ""
+
#, fuzzy
-msgctxt "field:stock.period,rec_name:0"
+msgctxt "field:stock.period,rec_name:"
msgid "Name"
msgstr "Ðаименование"
#, fuzzy
-msgctxt "field:stock.period,state:0"
+msgctxt "field:stock.period,state:"
msgid "State"
msgstr "СÑаÑÑÑ"
-msgctxt "field:stock.period.cache,internal_quantity:0"
+msgctxt "field:stock.period,write_date:"
+msgid "Write Date"
+msgstr ""
+
+msgctxt "field:stock.period,write_uid:"
+msgid "Write User"
+msgstr ""
+
+msgctxt "field:stock.period.cache,create_date:"
+msgid "Create Date"
+msgstr ""
+
+msgctxt "field:stock.period.cache,create_uid:"
+msgid "Create User"
+msgstr ""
+
+msgctxt "field:stock.period.cache,id:"
+msgid "ID"
+msgstr ""
+
+msgctxt "field:stock.period.cache,internal_quantity:"
msgid "Internal Quantity"
msgstr ""
#, fuzzy
-msgctxt "field:stock.period.cache,location:0"
+msgctxt "field:stock.period.cache,location:"
msgid "Location"
msgstr "ÐеÑÑоположение"
-msgctxt "field:stock.period.cache,period:0"
+msgctxt "field:stock.period.cache,period:"
msgid "Period"
msgstr ""
#, fuzzy
-msgctxt "field:stock.period.cache,product:0"
+msgctxt "field:stock.period.cache,product:"
msgid "Product"
msgstr "ТоваÑно маÑеÑиалÑнÑе ÑенноÑÑи (ТÐЦ)"
#, fuzzy
-msgctxt "field:stock.period.cache,rec_name:0"
+msgctxt "field:stock.period.cache,rec_name:"
msgid "Name"
msgstr "Ðаименование"
-msgctxt "field:stock.product_stock_date.init,forecast_date:0"
+msgctxt "field:stock.period.cache,write_date:"
+msgid "Write Date"
+msgstr ""
+
+msgctxt "field:stock.period.cache,write_uid:"
+msgid "Write User"
+msgstr ""
+
+msgctxt "field:stock.products_by_locations.start,forecast_date:"
msgid "At Date"
-msgstr "Ðо даÑе"
+msgstr ""
-msgctxt "field:stock.shipment.in,code:0"
+msgctxt "field:stock.products_by_locations.start,id:"
+msgid "ID"
+msgstr ""
+
+msgctxt "field:stock.shipment.in,code:"
msgid "Code"
msgstr "Ðод оÑгÑÑзки"
#, fuzzy
-msgctxt "field:stock.shipment.in,company:0"
+msgctxt "field:stock.shipment.in,company:"
msgid "Company"
msgstr "УÑеÑ.оÑг."
-msgctxt "field:stock.shipment.in,contact_address:0"
+msgctxt "field:stock.shipment.in,contact_address:"
msgid "Contact Address"
msgstr "ÐонÑакÑнÑй адÑеÑ"
-msgctxt "field:stock.shipment.in,effective_date:0"
+msgctxt "field:stock.shipment.in,create_date:"
+msgid "Create Date"
+msgstr ""
+
+msgctxt "field:stock.shipment.in,create_uid:"
+msgid "Create User"
+msgstr ""
+
+msgctxt "field:stock.shipment.in,effective_date:"
msgid "Effective Date"
msgstr "УÑеÑÐ½Ð°Ñ Ð´Ð°Ñа"
-msgctxt "field:stock.shipment.in,incoming_moves:0"
+msgctxt "field:stock.shipment.in,id:"
+msgid "ID"
+msgstr ""
+
+msgctxt "field:stock.shipment.in,incoming_moves:"
msgid "Incoming Moves"
msgstr "ÐÑ
одÑÑÐ°Ñ Ð¿Ð¾ÑÑавка"
-msgctxt "field:stock.shipment.in,inventory_moves:0"
+msgctxt "field:stock.shipment.in,inventory_moves:"
msgid "Inventory Moves"
msgstr "УÑÐµÑ Ð¿ÐµÑемеÑений"
-msgctxt "field:stock.shipment.in,moves:0"
+msgctxt "field:stock.shipment.in,moves:"
msgid "Moves"
msgstr "ÐеÑемеÑениÑ"
-msgctxt "field:stock.shipment.in,planned_date:0"
+msgctxt "field:stock.shipment.in,planned_date:"
msgid "Planned Date"
msgstr "ÐÐ»Ð°Ð½Ð¾Ð²Ð°Ñ Ð´Ð°Ñа"
-msgctxt "field:stock.shipment.in,rec_name:0"
+msgctxt "field:stock.shipment.in,rec_name:"
msgid "Name"
msgstr "Ðаименование"
-msgctxt "field:stock.shipment.in,reference:0"
+msgctxt "field:stock.shipment.in,reference:"
msgid "Reference"
msgstr "СÑÑлка"
-msgctxt "field:stock.shipment.in,state:0"
+msgctxt "field:stock.shipment.in,state:"
msgid "State"
msgstr "СоÑÑоÑние"
-msgctxt "field:stock.shipment.in,supplier:0"
+msgctxt "field:stock.shipment.in,supplier:"
msgid "Supplier"
msgstr "ÐоÑÑавÑик"
-msgctxt "field:stock.shipment.in,warehouse:0"
+#, fuzzy
+msgctxt "field:stock.shipment.in,supplier_location:"
+msgid "Supplier Location"
+msgstr "ÐеÑÑо Ñ
ÑÐ°Ð½ÐµÐ½Ð¸Ñ Ð¿Ð¾ÑÑавÑика"
+
+msgctxt "field:stock.shipment.in,warehouse:"
msgid "Warehouse"
msgstr "ТоваÑнÑй Ñклад"
-msgctxt "field:stock.shipment.in.return,code:0"
+msgctxt "field:stock.shipment.in,warehouse_input:"
+msgid "Warehouse Input"
+msgstr ""
+
+msgctxt "field:stock.shipment.in,warehouse_storage:"
+msgid "Warehouse Storage"
+msgstr ""
+
+msgctxt "field:stock.shipment.in,write_date:"
+msgid "Write Date"
+msgstr ""
+
+msgctxt "field:stock.shipment.in,write_uid:"
+msgid "Write User"
+msgstr ""
+
+msgctxt "field:stock.shipment.in.return,code:"
msgid "Code"
msgstr "Ðод возвÑаÑа оÑгÑÑзки"
#, fuzzy
-msgctxt "field:stock.shipment.in.return,company:0"
+msgctxt "field:stock.shipment.in.return,company:"
msgid "Company"
msgstr "УÑеÑ.оÑг."
-msgctxt "field:stock.shipment.in.return,effective_date:0"
+msgctxt "field:stock.shipment.in.return,create_date:"
+msgid "Create Date"
+msgstr ""
+
+msgctxt "field:stock.shipment.in.return,create_uid:"
+msgid "Create User"
+msgstr ""
+
+msgctxt "field:stock.shipment.in.return,effective_date:"
msgid "Effective Date"
msgstr "УÑеÑÐ½Ð°Ñ Ð´Ð°Ñа"
-msgctxt "field:stock.shipment.in.return,from_location:0"
+msgctxt "field:stock.shipment.in.return,from_location:"
msgid "From Location"
msgstr "Ðз меÑÑа"
-msgctxt "field:stock.shipment.in.return,moves:0"
+msgctxt "field:stock.shipment.in.return,id:"
+msgid "ID"
+msgstr ""
+
+msgctxt "field:stock.shipment.in.return,moves:"
msgid "Moves"
msgstr "ÐеÑемеÑениÑ"
-msgctxt "field:stock.shipment.in.return,planned_date:0"
+msgctxt "field:stock.shipment.in.return,planned_date:"
msgid "Planned Date"
msgstr "ÐÐ»Ð°Ð½Ð¾Ð²Ð°Ñ Ð´Ð°Ñа"
-msgctxt "field:stock.shipment.in.return,rec_name:0"
+msgctxt "field:stock.shipment.in.return,rec_name:"
msgid "Name"
msgstr "Ðаименование"
-msgctxt "field:stock.shipment.in.return,reference:0"
+msgctxt "field:stock.shipment.in.return,reference:"
msgid "Reference"
msgstr "СÑÑлка"
-msgctxt "field:stock.shipment.in.return,state:0"
+msgctxt "field:stock.shipment.in.return,state:"
msgid "State"
msgstr "СоÑÑоÑние"
-msgctxt "field:stock.shipment.in.return,to_location:0"
+msgctxt "field:stock.shipment.in.return,to_location:"
msgid "To Location"
msgstr "РмеÑÑо"
+msgctxt "field:stock.shipment.in.return,write_date:"
+msgid "Write Date"
+msgstr ""
+
+msgctxt "field:stock.shipment.in.return,write_uid:"
+msgid "Write User"
+msgstr ""
+
+msgctxt "field:stock.shipment.in.return.assign.failed,id:"
+msgid "ID"
+msgstr ""
+
#, fuzzy
-msgctxt "field:stock.shipment.in.return.assign.assign_failed,moves:0"
+msgctxt "field:stock.shipment.in.return.assign.failed,moves:"
msgid "Moves"
msgstr "ÐеÑемеÑениÑ"
-msgctxt "field:stock.shipment.internal,code:0"
+msgctxt "field:stock.shipment.internal,code:"
msgid "Code"
msgstr "Ðод внÑÑÑенней оÑгÑÑзки"
#, fuzzy
-msgctxt "field:stock.shipment.internal,company:0"
+msgctxt "field:stock.shipment.internal,company:"
msgid "Company"
msgstr "УÑеÑ.оÑг."
-msgctxt "field:stock.shipment.internal,effective_date:0"
+msgctxt "field:stock.shipment.internal,create_date:"
+msgid "Create Date"
+msgstr ""
+
+msgctxt "field:stock.shipment.internal,create_uid:"
+msgid "Create User"
+msgstr ""
+
+msgctxt "field:stock.shipment.internal,effective_date:"
msgid "Effective Date"
msgstr "УÑеÑÐ½Ð°Ñ Ð´Ð°Ñа"
-msgctxt "field:stock.shipment.internal,from_location:0"
+msgctxt "field:stock.shipment.internal,from_location:"
msgid "From Location"
msgstr "Ðз меÑÑа"
-msgctxt "field:stock.shipment.internal,moves:0"
+msgctxt "field:stock.shipment.internal,id:"
+msgid "ID"
+msgstr ""
+
+msgctxt "field:stock.shipment.internal,moves:"
msgid "Moves"
msgstr "ÐеÑемеÑениÑ"
-msgctxt "field:stock.shipment.internal,planned_date:0"
+msgctxt "field:stock.shipment.internal,planned_date:"
msgid "Planned Date"
msgstr "ÐÐ»Ð°Ð½Ð¾Ð²Ð°Ñ Ð´Ð°Ñа"
-msgctxt "field:stock.shipment.internal,rec_name:0"
+msgctxt "field:stock.shipment.internal,rec_name:"
msgid "Name"
msgstr "Ðаименование"
-msgctxt "field:stock.shipment.internal,reference:0"
+msgctxt "field:stock.shipment.internal,reference:"
msgid "Reference"
msgstr "СÑÑлка"
-msgctxt "field:stock.shipment.internal,state:0"
+msgctxt "field:stock.shipment.internal,state:"
msgid "State"
msgstr "СоÑÑоÑние"
-msgctxt "field:stock.shipment.internal,to_location:0"
+msgctxt "field:stock.shipment.internal,to_location:"
msgid "To Location"
msgstr "РмеÑÑо"
+msgctxt "field:stock.shipment.internal,write_date:"
+msgid "Write Date"
+msgstr ""
+
+msgctxt "field:stock.shipment.internal,write_uid:"
+msgid "Write User"
+msgstr ""
+
+msgctxt "field:stock.shipment.internal.assign.failed,id:"
+msgid "ID"
+msgstr ""
+
#, fuzzy
-msgctxt "field:stock.shipment.internal.assign.assign_failed,moves:0"
+msgctxt "field:stock.shipment.internal.assign.failed,moves:"
msgid "Moves"
msgstr "ÐеÑемеÑениÑ"
-msgctxt "field:stock.shipment.out,code:0"
+msgctxt "field:stock.shipment.out,code:"
msgid "Code"
msgstr "Ðод иÑÑ
одÑÑей оÑгÑÑзки"
#, fuzzy
-msgctxt "field:stock.shipment.out,company:0"
+msgctxt "field:stock.shipment.out,company:"
msgid "Company"
msgstr "УÑеÑ.оÑг."
-msgctxt "field:stock.shipment.out,customer:0"
+msgctxt "field:stock.shipment.out,create_date:"
+msgid "Create Date"
+msgstr ""
+
+msgctxt "field:stock.shipment.out,create_uid:"
+msgid "Create User"
+msgstr ""
+
+msgctxt "field:stock.shipment.out,customer:"
msgid "Customer"
msgstr "ÐаказÑик"
-msgctxt "field:stock.shipment.out,delivery_address:0"
+#, fuzzy
+msgctxt "field:stock.shipment.out,customer_location:"
+msgid "Customer Location"
+msgstr "ÐеÑÑо Ñ
ÑÐ°Ð½ÐµÐ½Ð¸Ñ Ð·Ð°ÐºÐ°Ð·Ñика"
+
+msgctxt "field:stock.shipment.out,delivery_address:"
msgid "Delivery Address"
msgstr "ÐдÑÐµÑ Ð´Ð¾ÑÑавки"
-msgctxt "field:stock.shipment.out,effective_date:0"
+msgctxt "field:stock.shipment.out,effective_date:"
msgid "Effective Date"
msgstr "УÑеÑÐ½Ð°Ñ Ð´Ð°Ñа"
-msgctxt "field:stock.shipment.out,inventory_moves:0"
+msgctxt "field:stock.shipment.out,id:"
+msgid "ID"
+msgstr ""
+
+msgctxt "field:stock.shipment.out,inventory_moves:"
msgid "Inventory Moves"
msgstr "УÑÐµÑ Ð¿ÐµÑемеÑений"
-msgctxt "field:stock.shipment.out,moves:0"
+msgctxt "field:stock.shipment.out,moves:"
msgid "Moves"
msgstr "ÐеÑемеÑениÑ"
-msgctxt "field:stock.shipment.out,outgoing_moves:0"
+msgctxt "field:stock.shipment.out,outgoing_moves:"
msgid "Outgoing Moves"
msgstr "ÐнеÑнее пеÑемеÑение"
-msgctxt "field:stock.shipment.out,planned_date:0"
+msgctxt "field:stock.shipment.out,planned_date:"
msgid "Planned Date"
msgstr "ÐÐ»Ð°Ð½Ð¾Ð²Ð°Ñ Ð´Ð°Ñа"
-msgctxt "field:stock.shipment.out,rec_name:0"
+msgctxt "field:stock.shipment.out,rec_name:"
msgid "Name"
msgstr "Ðаименование"
-msgctxt "field:stock.shipment.out,reference:0"
+msgctxt "field:stock.shipment.out,reference:"
msgid "Reference"
msgstr "СÑÑлка"
-msgctxt "field:stock.shipment.out,state:0"
+msgctxt "field:stock.shipment.out,state:"
msgid "State"
msgstr "СоÑÑоÑние"
-msgctxt "field:stock.shipment.out,warehouse:0"
+msgctxt "field:stock.shipment.out,warehouse:"
msgid "Warehouse"
msgstr "ТоваÑнÑй Ñклад"
+msgctxt "field:stock.shipment.out,warehouse_output:"
+msgid "Warehouse Output"
+msgstr ""
+
+msgctxt "field:stock.shipment.out,warehouse_storage:"
+msgid "Warehouse Storage"
+msgstr ""
+
+msgctxt "field:stock.shipment.out,write_date:"
+msgid "Write Date"
+msgstr ""
+
+msgctxt "field:stock.shipment.out,write_uid:"
+msgid "Write User"
+msgstr ""
+
+msgctxt "field:stock.shipment.out.assign.failed,id:"
+msgid "ID"
+msgstr ""
+
#, fuzzy
-msgctxt "field:stock.shipment.out.assign.assign_failed,inventory_moves:0"
+msgctxt "field:stock.shipment.out.assign.failed,inventory_moves:"
msgid "Inventory Moves"
msgstr "УÑÐµÑ Ð¿ÐµÑемеÑений"
-msgctxt "field:stock.shipment.out.return,code:0"
+msgctxt "field:stock.shipment.out.return,code:"
msgid "Code"
msgstr "Ðод возвÑаÑа оÑгÑÑзки"
#, fuzzy
-msgctxt "field:stock.shipment.out.return,company:0"
+msgctxt "field:stock.shipment.out.return,company:"
msgid "Company"
msgstr "УÑеÑ.оÑг."
-msgctxt "field:stock.shipment.out.return,customer:0"
+msgctxt "field:stock.shipment.out.return,create_date:"
+msgid "Create Date"
+msgstr ""
+
+msgctxt "field:stock.shipment.out.return,create_uid:"
+msgid "Create User"
+msgstr ""
+
+msgctxt "field:stock.shipment.out.return,customer:"
msgid "Customer"
msgstr "ÐаказÑик"
-msgctxt "field:stock.shipment.out.return,delivery_address:0"
+#, fuzzy
+msgctxt "field:stock.shipment.out.return,customer_location:"
+msgid "Customer Location"
+msgstr "ÐеÑÑо Ñ
ÑÐ°Ð½ÐµÐ½Ð¸Ñ Ð·Ð°ÐºÐ°Ð·Ñика"
+
+msgctxt "field:stock.shipment.out.return,delivery_address:"
msgid "Delivery Address"
msgstr "ÐдÑÐµÑ Ð´Ð¾ÑÑавки"
-msgctxt "field:stock.shipment.out.return,effective_date:0"
+msgctxt "field:stock.shipment.out.return,effective_date:"
msgid "Effective Date"
msgstr "УÑеÑÐ½Ð°Ñ Ð´Ð°Ñа"
-msgctxt "field:stock.shipment.out.return,incoming_moves:0"
+msgctxt "field:stock.shipment.out.return,id:"
+msgid "ID"
+msgstr ""
+
+msgctxt "field:stock.shipment.out.return,incoming_moves:"
msgid "Incoming Moves"
msgstr "ÐÑ
одÑÑÐ°Ñ Ð¿Ð¾ÑÑавка"
-msgctxt "field:stock.shipment.out.return,inventory_moves:0"
+msgctxt "field:stock.shipment.out.return,inventory_moves:"
msgid "Inventory Moves"
msgstr "УÑÐµÑ Ð¿ÐµÑемеÑений"
-msgctxt "field:stock.shipment.out.return,moves:0"
+msgctxt "field:stock.shipment.out.return,moves:"
msgid "Moves"
msgstr "ÐеÑемеÑениÑ"
-msgctxt "field:stock.shipment.out.return,planned_date:0"
+msgctxt "field:stock.shipment.out.return,planned_date:"
msgid "Planned Date"
msgstr "ÐÐ»Ð°Ð½Ð¾Ð²Ð°Ñ Ð´Ð°Ñа"
-msgctxt "field:stock.shipment.out.return,rec_name:0"
+msgctxt "field:stock.shipment.out.return,rec_name:"
msgid "Name"
msgstr "Ðаименование"
-msgctxt "field:stock.shipment.out.return,reference:0"
+msgctxt "field:stock.shipment.out.return,reference:"
msgid "Reference"
msgstr "СÑÑлка"
-msgctxt "field:stock.shipment.out.return,state:0"
+msgctxt "field:stock.shipment.out.return,state:"
msgid "State"
msgstr "СоÑÑоÑние"
-msgctxt "field:stock.shipment.out.return,warehouse:0"
+msgctxt "field:stock.shipment.out.return,warehouse:"
msgid "Warehouse"
msgstr "ТоваÑнÑй Ñклад"
-msgctxt "help:party.party,customer_location:0"
+msgctxt "field:stock.shipment.out.return,warehouse_input:"
+msgid "Warehouse Input"
+msgstr ""
+
+msgctxt "field:stock.shipment.out.return,warehouse_storage:"
+msgid "Warehouse Storage"
+msgstr ""
+
+msgctxt "field:stock.shipment.out.return,write_date:"
+msgid "Write Date"
+msgstr ""
+
+msgctxt "field:stock.shipment.out.return,write_uid:"
+msgid "Write User"
+msgstr ""
+
+msgctxt "help:party.party,customer_location:"
msgid "The default destination location when sending products to the party."
msgstr "ÐеÑÑо назнаÑÐµÐ½Ð¸Ñ Ð¿Ð¾ ÑмолÑÐ°Ð½Ð¸Ñ Ð¿Ñи оÑпÑавке пÑодÑкÑии конÑÑагенÑÑ."
-msgctxt "help:party.party,supplier_location:0"
+msgctxt "help:party.party,supplier_location:"
msgid "The default source location when receiving products from the party."
msgstr "Ðо ÑмолÑаниÑ, меÑÑоположение пÑи полÑÑении пÑодÑкÑии Ð¾Ñ ÐºÐ¾Ð½ÑÑагенÑа."
-msgctxt "help:stock.location_stock_date.init,forecast_date:0"
+msgctxt "help:product.by_location.start,forecast_date:"
msgid ""
"Allow to compute expected stock quantities for this date.\n"
"* An empty value is an infinite date in the future.\n"
"* A date in the past will provide historical values."
msgstr ""
-msgctxt "help:stock.product_stock_date.init,forecast_date:0"
+msgctxt "help:stock.products_by_locations.start,forecast_date:"
msgid ""
"Allow to compute expected stock quantities for this date.\n"
"* An empty value is an infinite date in the future.\n"
@@ -730,8 +1041,9 @@ msgctxt "model:ir.action,name:act_location_form"
msgid "Locations"
msgstr "ÐзмениÑÑ Ð¼ÐµÑÑа Ñ
ÑанениÑ"
+#, fuzzy
msgctxt "model:ir.action,name:act_location_quantity_tree"
-msgid "Product Stock"
+msgid "Location Quantity & Cost Value"
msgstr "Ð¥ÑанилиÑе ТÐЦ"
msgctxt "model:ir.action,name:act_location_tree"
@@ -758,9 +1070,9 @@ msgctxt "model:ir.action,name:act_period_list"
msgid "Periods"
msgstr ""
-msgctxt "model:ir.action,name:act_product_by_location"
+msgctxt "model:ir.action,name:act_products_by_locations"
msgid "Products by Locations"
-msgstr "ТÐЦ по меÑÑонаÑ
ождениÑм"
+msgstr ""
msgctxt "model:ir.action,name:act_shipment_in_draft"
msgid "Draft Supplier Shipment"
@@ -851,17 +1163,13 @@ msgctxt "model:ir.action,name:report_shipment_out_return_restocking_list"
msgid "Restocking List"
msgstr "СпиÑок пополнениÑ"
-msgctxt "model:ir.action,name:wizard_complete_inventory"
-msgid "Complete Inventory"
-msgstr "ÐÐ¾Ð»Ð½Ð°Ñ Ð¸Ð½Ð²ÐµÐ½ÑаÑизаÑиÑ"
-
-msgctxt "model:ir.action,name:wizard_location_open"
+msgctxt "model:ir.action,name:wizard_product_by_location"
msgid "Product by Location"
-msgstr "ТÐЦ по меÑÑонаÑ
ождениÑ"
+msgstr ""
-msgctxt "model:ir.action,name:wizard_product_open"
-msgid "Product Quantities"
-msgstr "ÐолиÑеÑÑва ТоваÑа"
+msgctxt "model:ir.action,name:wizard_products_by_locations"
+msgid "Products by Locations"
+msgstr ""
msgctxt "model:ir.action,name:wizard_shipment_in_return_assign"
msgid "Assign Purchase Return Shipment"
@@ -1021,6 +1329,10 @@ msgctxt "model:ir.ui.menu,name:menu_stock_configuration"
msgid "Stock Configuration"
msgstr "ÐонÑигÑÑаÑÐ¸Ñ Ñклада"
+msgctxt "model:product.by_location.start,name:"
+msgid "Product by Location"
+msgstr ""
+
msgctxt "model:res.group,name:group_stock"
msgid "Stock"
msgstr "Ð¥ÑанилиÑе"
@@ -1033,19 +1345,19 @@ msgctxt "model:res.group,name:group_stock_force_assignment"
msgid "Stock Force Assignment"
msgstr "Склад ÑÑкоÑенной погÑÑзки"
-msgctxt "model:stock.configuration,name:0"
+msgctxt "model:stock.configuration,name:"
msgid "Stock Configuration"
msgstr "ÐонÑигÑÑаÑÐ¸Ñ Ñклада"
-msgctxt "model:stock.inventory,name:0"
+msgctxt "model:stock.inventory,name:"
msgid "Stock Inventory"
msgstr "Ð¥ÑанилиÑе опиÑÑ"
-msgctxt "model:stock.inventory.line,name:0"
+msgctxt "model:stock.inventory.line,name:"
msgid "Stock Inventory Line"
msgstr "Ð¥ÑанилиÑе ÑÑÑока опиÑи"
-msgctxt "model:stock.location,name:0"
+msgctxt "model:stock.location,name:"
msgid "Stock Location"
msgstr "ÐеÑÑонаÑ
ождение Ñ
ÑанилиÑа"
@@ -1077,1027 +1389,882 @@ msgctxt "model:stock.location,name:location_warehouse"
msgid "Warehouse"
msgstr "ТоваÑнÑй Ñклад"
-msgctxt "model:stock.location_stock_date.init,name:0"
-msgid "Compute stock quantities"
-msgstr "ÐÑÑиÑление колиÑеÑÑво на Ñкладе"
-
-msgctxt "model:stock.move,name:0"
+msgctxt "model:stock.move,name:"
msgid "Stock Move"
msgstr "Ð¥ÑанилиÑе пеÑемеÑение ÑоваÑа"
-msgctxt "model:stock.period,name:0"
+msgctxt "model:stock.period,name:"
msgid "Stock Period"
msgstr ""
-msgctxt "model:stock.period.cache,name:0"
-msgid ""
-"\n"
-" Stock Period Cache\n"
-"\n"
-" It is used to store cached computation of stock quantities.\n"
-" "
+msgctxt "model:stock.period.cache,name:"
+msgid "stock.period.cache"
msgstr ""
-msgctxt "model:stock.product_stock_date.init,name:0"
-msgid "Compute stock quantities"
-msgstr "ÐÑÑиÑление колиÑеÑÑво на Ñкладе"
+msgctxt "model:stock.products_by_locations.start,name:"
+msgid "Products by Locations"
+msgstr ""
-msgctxt "model:stock.shipment.in,name:0"
+msgctxt "model:stock.shipment.in,name:"
msgid "Supplier Shipment"
msgstr "ÐÑиÑ
од Ð¾Ñ Ð¿Ð¾ÑÑавÑика"
-msgctxt "model:stock.shipment.in.return,name:0"
+msgctxt "model:stock.shipment.in.return,name:"
msgid "Supplier Return Shipment"
msgstr "ÐозвÑÐ°Ñ Ð¿Ð¾ÑÑавÑикÑ"
-msgctxt "model:stock.shipment.in.return.assign.assign_failed,name:0"
-msgid "Assign Supplier Return Shipment Assign Failed"
+msgctxt "model:stock.shipment.in.return.assign.failed,name:"
+msgid "Assign Supplier Return Shipment"
msgstr ""
-msgctxt "model:stock.shipment.internal,name:0"
+msgctxt "model:stock.shipment.internal,name:"
msgid "Internal Shipment"
msgstr "ÐнÑÑÑеннее пеÑемеÑение"
-msgctxt "model:stock.shipment.internal.assign.assign_failed,name:0"
-msgid "Assign Shipment Internal Assign Failed"
-msgstr ""
+#, fuzzy
+msgctxt "model:stock.shipment.internal.assign.failed,name:"
+msgid "Assign Shipment Internal"
+msgstr "ÐнÑÑÑенние назнаÑение поÑÑавки "
-msgctxt "model:stock.shipment.out,name:0"
+msgctxt "model:stock.shipment.out,name:"
msgid "Customer Shipment"
msgstr "ÐÑгÑÑзка заказÑикÑ"
-msgctxt "model:stock.shipment.out.assign.assign_failed,name:0"
-msgid "Assign Shipment Out Assign Failed"
-msgstr ""
-
-msgctxt "model:stock.shipment.out.return,name:0"
-msgid "Customer Return Shipment"
-msgstr "ÐозвÑÐ°Ñ Ð¾Ñ Ð·Ð°ÐºÐ°Ð·Ñика"
-
-msgctxt "model:workflow,name:wkf_inventory"
-msgid "Inventory"
-msgstr "ÐнвенÑаÑизаÑиÑ"
-
-msgctxt "model:workflow,name:wkf_shipment_in_return"
-msgid "Supplier Return Shipment"
-msgstr "ÐозвÑÐ°Ñ Ð¿Ð¾ÑÑавÑикÑ"
+#, fuzzy
+msgctxt "model:stock.shipment.out.assign.failed,name:"
+msgid "Assign Shipment Out"
+msgstr "ÐнеÑнее назнаÑение гÑÑза"
-msgctxt "model:workflow,name:wkf_shipment_out_return"
+msgctxt "model:stock.shipment.out.return,name:"
msgid "Customer Return Shipment"
msgstr "ÐозвÑÐ°Ñ Ð¾Ñ Ð·Ð°ÐºÐ°Ð·Ñика"
-msgctxt "model:workflow,name:wkf_shipmentin"
-msgid "Supplier Shipment"
-msgstr "ÐÑиÑ
од Ð¾Ñ Ð¿Ð¾ÑÑавÑика"
-
-msgctxt "model:workflow,name:wkf_shipmentinternal"
-msgid "Internal Shipment"
-msgstr "ÐнÑÑÑеннее пеÑемеÑение"
-
-msgctxt "model:workflow,name:wkf_shipmentout"
-msgid "Customer Shipment"
-msgstr "ÐÑгÑÑзка заказÑикÑ"
-
-msgctxt "model:workflow.activity,name:inventory_act_cancel"
-msgid "Canceled"
-msgstr "ÐÑменено"
-
-msgctxt "model:workflow.activity,name:inventory_act_done"
-msgid "Done"
-msgstr "ÐÑполнено"
-
-msgctxt "model:workflow.activity,name:inventory_act_draft"
-msgid "Draft"
-msgstr "ЧеÑновик"
-
-msgctxt "model:workflow.activity,name:shipment_in_return_act_assigned"
-msgid "Assigned"
-msgstr "ÐеÑеданнÑй"
-
-msgctxt "model:workflow.activity,name:shipment_in_return_act_cancel"
-msgid "Canceled"
-msgstr "ÐÑменено"
-
-msgctxt "model:workflow.activity,name:shipment_in_return_act_done"
-msgid "Done"
-msgstr "ÐÑполнено"
-
-msgctxt "model:workflow.activity,name:shipment_in_return_act_draft"
-msgid "Draft"
-msgstr "ЧеÑновик"
-
-msgctxt "model:workflow.activity,name:shipment_in_return_act_waiting"
-msgid "Waiting"
-msgstr "Ðжидание"
-
-msgctxt "model:workflow.activity,name:shipment_out_return_act_cancel"
-msgid "Canceled"
-msgstr "ÐÑменено"
-
-msgctxt "model:workflow.activity,name:shipment_out_return_act_done"
-msgid "Done"
-msgstr "ÐÑполнено"
-
-msgctxt "model:workflow.activity,name:shipment_out_return_act_draft"
-msgid "Draft"
-msgstr "ЧеÑновик"
-
-msgctxt "model:workflow.activity,name:shipment_out_return_act_received"
-msgid "Received"
-msgstr "ÐоÑÑÑпило"
-
-msgctxt "model:workflow.activity,name:shipmentin_act_cancel"
-msgid "Canceled"
-msgstr "ÐÑменено"
-
-msgctxt "model:workflow.activity,name:shipmentin_act_done"
-msgid "Done"
-msgstr "ÐÑполнено"
-
-msgctxt "model:workflow.activity,name:shipmentin_act_draft"
-msgid "Draft"
-msgstr "ЧеÑновик"
-
-msgctxt "model:workflow.activity,name:shipmentin_act_received"
-msgid "Received"
-msgstr "ÐоÑÑÑпило"
-
-msgctxt "model:workflow.activity,name:shipmentinternal_act_assigned"
-msgid "Assigned"
-msgstr "ÐеÑеданнÑй"
-
-msgctxt "model:workflow.activity,name:shipmentinternal_act_cancel"
-msgid "Canceled"
-msgstr "ÐÑменено"
-
-msgctxt "model:workflow.activity,name:shipmentinternal_act_done"
-msgid "Done"
-msgstr "ÐÑполнено"
-
-msgctxt "model:workflow.activity,name:shipmentinternal_act_draft"
-msgid "Draft"
-msgstr "ЧеÑновик"
-
-msgctxt "model:workflow.activity,name:shipmentinternal_act_waiting"
-msgid "Waiting"
-msgstr "Ðжидание"
-
-msgctxt "model:workflow.activity,name:shipmentout_act_assigned"
-msgid "Assigned"
-msgstr "ÐеÑеданнÑй"
-
-msgctxt "model:workflow.activity,name:shipmentout_act_cancel"
-msgid "Canceled"
-msgstr "ÐÑменено"
-
-msgctxt "model:workflow.activity,name:shipmentout_act_done"
-msgid "Done"
-msgstr "ÐÑполнено"
-
-msgctxt "model:workflow.activity,name:shipmentout_act_draft"
-msgid "Draft"
-msgstr "ЧеÑновик"
-
-msgctxt "model:workflow.activity,name:shipmentout_act_packed"
-msgid "Packed"
-msgstr "УпакованнÑй"
-
-msgctxt "model:workflow.activity,name:shipmentout_act_waiting"
-msgid "Waiting"
-msgstr "Ðжидание"
-
-msgctxt "odt:stock.shipment.in.restocking_list:0"
+msgctxt "odt:stock.shipment.in.restocking_list:"
msgid "/"
msgstr ""
-msgctxt "odt:stock.shipment.in.restocking_list:0"
+msgctxt "odt:stock.shipment.in.restocking_list:"
msgid "Code:"
msgstr ""
#, fuzzy
-msgctxt "odt:stock.shipment.in.restocking_list:0"
+msgctxt "odt:stock.shipment.in.restocking_list:"
msgid "E-Mail:"
msgstr "E-Mail:"
#, fuzzy
-msgctxt "odt:stock.shipment.in.restocking_list:0"
+msgctxt "odt:stock.shipment.in.restocking_list:"
msgid "From Location"
msgstr "Ðз меÑÑа"
#, fuzzy
-msgctxt "odt:stock.shipment.in.restocking_list:0"
+msgctxt "odt:stock.shipment.in.restocking_list:"
msgid "Phone:"
msgstr "ТелеÑон:"
-msgctxt "odt:stock.shipment.in.restocking_list:0"
+msgctxt "odt:stock.shipment.in.restocking_list:"
msgid "Planned Date:"
msgstr ""
#, fuzzy
-msgctxt "odt:stock.shipment.in.restocking_list:0"
+msgctxt "odt:stock.shipment.in.restocking_list:"
msgid "Product"
msgstr "ТоваÑно маÑеÑиалÑнÑе ÑенноÑÑи (ТÐЦ)"
#, fuzzy
-msgctxt "odt:stock.shipment.in.restocking_list:0"
+msgctxt "odt:stock.shipment.in.restocking_list:"
msgid "Quantity"
msgstr "Ðол-во"
-msgctxt "odt:stock.shipment.in.restocking_list:0"
+msgctxt "odt:stock.shipment.in.restocking_list:"
msgid "Reference:"
msgstr ""
#, fuzzy
-msgctxt "odt:stock.shipment.in.restocking_list:0"
+msgctxt "odt:stock.shipment.in.restocking_list:"
msgid "Restocking List"
msgstr "СпиÑок пополнениÑ"
-msgctxt "odt:stock.shipment.in.restocking_list:0"
+msgctxt "odt:stock.shipment.in.restocking_list:"
msgid "Supplier:"
msgstr ""
#, fuzzy
-msgctxt "odt:stock.shipment.in.restocking_list:0"
+msgctxt "odt:stock.shipment.in.restocking_list:"
msgid "To Location"
msgstr "РмеÑÑо"
-msgctxt "odt:stock.shipment.in.restocking_list:0"
+msgctxt "odt:stock.shipment.in.restocking_list:"
msgid "VAT Number:"
msgstr ""
-msgctxt "odt:stock.shipment.in.restocking_list:0"
+msgctxt "odt:stock.shipment.in.restocking_list:"
msgid "Warehouse:"
msgstr ""
-msgctxt "odt:stock.shipment.internal.report:0"
+msgctxt "odt:stock.shipment.internal.report:"
msgid "/"
msgstr ""
-msgctxt "odt:stock.shipment.internal.report:0"
+msgctxt "odt:stock.shipment.internal.report:"
msgid "Code:"
msgstr ""
#, fuzzy
-msgctxt "odt:stock.shipment.internal.report:0"
+msgctxt "odt:stock.shipment.internal.report:"
msgid "E-Mail:"
msgstr "E-Mail:"
#, fuzzy
-msgctxt "odt:stock.shipment.internal.report:0"
+msgctxt "odt:stock.shipment.internal.report:"
msgid "From Location"
msgstr "Ðз меÑÑа"
-msgctxt "odt:stock.shipment.internal.report:0"
+msgctxt "odt:stock.shipment.internal.report:"
msgid "From Location:"
msgstr ""
#, fuzzy
-msgctxt "odt:stock.shipment.internal.report:0"
+msgctxt "odt:stock.shipment.internal.report:"
msgid "Internal Shipment"
msgstr "ÐнÑÑÑеннее пеÑемеÑение"
#, fuzzy
-msgctxt "odt:stock.shipment.internal.report:0"
+msgctxt "odt:stock.shipment.internal.report:"
msgid "Phone:"
msgstr "ТелеÑон:"
-msgctxt "odt:stock.shipment.internal.report:0"
+msgctxt "odt:stock.shipment.internal.report:"
msgid "Planned Date:"
msgstr ""
#, fuzzy
-msgctxt "odt:stock.shipment.internal.report:0"
+msgctxt "odt:stock.shipment.internal.report:"
msgid "Product"
msgstr "ТоваÑно маÑеÑиалÑнÑе ÑенноÑÑи (ТÐЦ)"
#, fuzzy
-msgctxt "odt:stock.shipment.internal.report:0"
+msgctxt "odt:stock.shipment.internal.report:"
msgid "Quantity"
msgstr "Ðол-во"
-msgctxt "odt:stock.shipment.internal.report:0"
+msgctxt "odt:stock.shipment.internal.report:"
msgid "Reference:"
msgstr ""
#, fuzzy
-msgctxt "odt:stock.shipment.internal.report:0"
+msgctxt "odt:stock.shipment.internal.report:"
msgid "To Location"
msgstr "РмеÑÑо"
-msgctxt "odt:stock.shipment.internal.report:0"
+msgctxt "odt:stock.shipment.internal.report:"
msgid "To Location:"
msgstr ""
-msgctxt "odt:stock.shipment.internal.report:0"
+msgctxt "odt:stock.shipment.internal.report:"
msgid "VAT Number:"
msgstr ""
-msgctxt "odt:stock.shipment.out.delivery_note:0"
+msgctxt "odt:stock.shipment.out.delivery_note:"
msgid "/"
msgstr ""
-msgctxt "odt:stock.shipment.out.delivery_note:0"
+msgctxt "odt:stock.shipment.out.delivery_note:"
msgid "Customer Code:"
msgstr ""
#, fuzzy
-msgctxt "odt:stock.shipment.out.delivery_note:0"
+msgctxt "odt:stock.shipment.out.delivery_note:"
msgid "Date:"
msgstr "ÐаÑа:"
#, fuzzy
-msgctxt "odt:stock.shipment.out.delivery_note:0"
+msgctxt "odt:stock.shipment.out.delivery_note:"
msgid "Delivery Note"
msgstr "Ðакладной"
#, fuzzy
-msgctxt "odt:stock.shipment.out.delivery_note:0"
+msgctxt "odt:stock.shipment.out.delivery_note:"
msgid "E-Mail:"
msgstr "E-Mail:"
#, fuzzy
-msgctxt "odt:stock.shipment.out.delivery_note:0"
+msgctxt "odt:stock.shipment.out.delivery_note:"
msgid "Phone:"
msgstr "ТелеÑон:"
#, fuzzy
-msgctxt "odt:stock.shipment.out.delivery_note:0"
+msgctxt "odt:stock.shipment.out.delivery_note:"
msgid "Product"
msgstr "ТоваÑно маÑеÑиалÑнÑе ÑенноÑÑи (ТÐЦ)"
#, fuzzy
-msgctxt "odt:stock.shipment.out.delivery_note:0"
+msgctxt "odt:stock.shipment.out.delivery_note:"
msgid "Quantity"
msgstr "Ðол-во"
-msgctxt "odt:stock.shipment.out.delivery_note:0"
+msgctxt "odt:stock.shipment.out.delivery_note:"
msgid "Reference:"
msgstr ""
-msgctxt "odt:stock.shipment.out.delivery_note:0"
+msgctxt "odt:stock.shipment.out.delivery_note:"
msgid "Shipment Number:"
msgstr ""
-msgctxt "odt:stock.shipment.out.delivery_note:0"
+msgctxt "odt:stock.shipment.out.delivery_note:"
msgid "VAT Number:"
msgstr ""
-msgctxt "odt:stock.shipment.out.picking_list:0"
+msgctxt "odt:stock.shipment.out.picking_list:"
msgid "/"
msgstr ""
-msgctxt "odt:stock.shipment.out.picking_list:0"
+msgctxt "odt:stock.shipment.out.picking_list:"
msgid "Code:"
msgstr ""
-msgctxt "odt:stock.shipment.out.picking_list:0"
+msgctxt "odt:stock.shipment.out.picking_list:"
msgid "Customer:"
msgstr ""
#, fuzzy
-msgctxt "odt:stock.shipment.out.picking_list:0"
+msgctxt "odt:stock.shipment.out.picking_list:"
msgid "E-Mail:"
msgstr "E-Mail:"
#, fuzzy
-msgctxt "odt:stock.shipment.out.picking_list:0"
+msgctxt "odt:stock.shipment.out.picking_list:"
msgid "From Location"
msgstr "Ðз меÑÑа"
#, fuzzy
-msgctxt "odt:stock.shipment.out.picking_list:0"
+msgctxt "odt:stock.shipment.out.picking_list:"
msgid "Phone:"
msgstr "ТелеÑон:"
#, fuzzy
-msgctxt "odt:stock.shipment.out.picking_list:0"
+msgctxt "odt:stock.shipment.out.picking_list:"
msgid "Picking List"
msgstr "Ð¡Ð±Ð¾Ñ Ð¡Ð¿Ð¸Ñок"
-msgctxt "odt:stock.shipment.out.picking_list:0"
+msgctxt "odt:stock.shipment.out.picking_list:"
msgid "Planned Date:"
msgstr ""
#, fuzzy
-msgctxt "odt:stock.shipment.out.picking_list:0"
+msgctxt "odt:stock.shipment.out.picking_list:"
msgid "Product"
msgstr "ТоваÑно маÑеÑиалÑнÑе ÑенноÑÑи (ТÐЦ)"
#, fuzzy
-msgctxt "odt:stock.shipment.out.picking_list:0"
+msgctxt "odt:stock.shipment.out.picking_list:"
msgid "Quantity"
msgstr "Ðол-во"
-msgctxt "odt:stock.shipment.out.picking_list:0"
+msgctxt "odt:stock.shipment.out.picking_list:"
msgid "Reference:"
msgstr ""
#, fuzzy
-msgctxt "odt:stock.shipment.out.picking_list:0"
+msgctxt "odt:stock.shipment.out.picking_list:"
msgid "To Location"
msgstr "РмеÑÑо"
-msgctxt "odt:stock.shipment.out.picking_list:0"
+msgctxt "odt:stock.shipment.out.picking_list:"
msgid "VAT Number:"
msgstr ""
-msgctxt "odt:stock.shipment.out.picking_list:0"
+msgctxt "odt:stock.shipment.out.picking_list:"
msgid "Warehouse:"
msgstr ""
-msgctxt "odt:stock.shipment.out.return.restocking_list:0"
+msgctxt "odt:stock.shipment.out.return.restocking_list:"
msgid "/"
msgstr ""
-msgctxt "odt:stock.shipment.out.return.restocking_list:0"
+msgctxt "odt:stock.shipment.out.return.restocking_list:"
msgid "Code:"
msgstr ""
#, fuzzy
-msgctxt "odt:stock.shipment.out.return.restocking_list:0"
+msgctxt "odt:stock.shipment.out.return.restocking_list:"
msgid "E-Mail:"
msgstr "E-Mail:"
#, fuzzy
-msgctxt "odt:stock.shipment.out.return.restocking_list:0"
+msgctxt "odt:stock.shipment.out.return.restocking_list:"
msgid "From Location"
msgstr "Ðз меÑÑа"
#, fuzzy
-msgctxt "odt:stock.shipment.out.return.restocking_list:0"
+msgctxt "odt:stock.shipment.out.return.restocking_list:"
msgid "Phone:"
msgstr "ТелеÑон:"
-msgctxt "odt:stock.shipment.out.return.restocking_list:0"
+msgctxt "odt:stock.shipment.out.return.restocking_list:"
msgid "Planned Date:"
msgstr ""
#, fuzzy
-msgctxt "odt:stock.shipment.out.return.restocking_list:0"
+msgctxt "odt:stock.shipment.out.return.restocking_list:"
msgid "Product"
msgstr "ТоваÑно маÑеÑиалÑнÑе ÑенноÑÑи (ТÐЦ)"
#, fuzzy
-msgctxt "odt:stock.shipment.out.return.restocking_list:0"
+msgctxt "odt:stock.shipment.out.return.restocking_list:"
msgid "Quantity"
msgstr "Ðол-во"
-msgctxt "odt:stock.shipment.out.return.restocking_list:0"
+msgctxt "odt:stock.shipment.out.return.restocking_list:"
msgid "Reference:"
msgstr ""
#, fuzzy
-msgctxt "odt:stock.shipment.out.return.restocking_list:0"
+msgctxt "odt:stock.shipment.out.return.restocking_list:"
msgid "Restocking List"
msgstr "СпиÑок пополнениÑ"
-msgctxt "odt:stock.shipment.out.return.restocking_list:0"
+msgctxt "odt:stock.shipment.out.return.restocking_list:"
msgid "Supplier:"
msgstr ""
#, fuzzy
-msgctxt "odt:stock.shipment.out.return.restocking_list:0"
+msgctxt "odt:stock.shipment.out.return.restocking_list:"
msgid "To Location"
msgstr "РмеÑÑо"
-msgctxt "odt:stock.shipment.out.return.restocking_list:0"
+msgctxt "odt:stock.shipment.out.return.restocking_list:"
msgid "VAT Number:"
msgstr ""
-msgctxt "odt:stock.shipment.out.return.restocking_list:0"
+msgctxt "odt:stock.shipment.out.return.restocking_list:"
msgid "Warehouse:"
msgstr ""
-msgctxt "selection:stock.inventory,state:0"
+msgctxt "selection:stock.inventory,state:"
msgid "Canceled"
msgstr "ÐÑменено"
-msgctxt "selection:stock.inventory,state:0"
+msgctxt "selection:stock.inventory,state:"
msgid "Done"
msgstr "ÐÑполнено"
-msgctxt "selection:stock.inventory,state:0"
+msgctxt "selection:stock.inventory,state:"
msgid "Draft"
msgstr "ЧеÑновик"
-msgctxt "selection:stock.location,type:0"
+msgctxt "selection:stock.location,type:"
msgid "Customer"
msgstr "ÐаказÑик"
-msgctxt "selection:stock.location,type:0"
+msgctxt "selection:stock.location,type:"
msgid "Lost and Found"
msgstr "УÑÑаÑеннÑй и обÑеÑеннÑй"
-msgctxt "selection:stock.location,type:0"
+msgctxt "selection:stock.location,type:"
msgid "Production"
msgstr "ÐÑоизводÑÑво"
-msgctxt "selection:stock.location,type:0"
+msgctxt "selection:stock.location,type:"
msgid "Storage"
msgstr "Ð¥ÑанилиÑе"
-msgctxt "selection:stock.location,type:0"
+msgctxt "selection:stock.location,type:"
msgid "Supplier"
msgstr "ÐоÑÑавÑик"
-msgctxt "selection:stock.location,type:0"
+msgctxt "selection:stock.location,type:"
msgid "View"
msgstr "ÐÑоÑмоÑÑ"
-msgctxt "selection:stock.location,type:0"
+msgctxt "selection:stock.location,type:"
msgid "Warehouse"
msgstr "ТоваÑнÑй Ñклад"
-msgctxt "selection:stock.move,state:0"
+msgctxt "selection:stock.move,state:"
msgid "Assigned"
msgstr "ÐеÑеданнÑй"
-msgctxt "selection:stock.move,state:0"
+msgctxt "selection:stock.move,state:"
msgid "Canceled"
msgstr "ÐÑменено"
-msgctxt "selection:stock.move,state:0"
+msgctxt "selection:stock.move,state:"
msgid "Done"
msgstr "ÐÑполнено"
-msgctxt "selection:stock.move,state:0"
+msgctxt "selection:stock.move,state:"
msgid "Draft"
msgstr "ЧеÑновик"
#, fuzzy
-msgctxt "selection:stock.period,state:0"
+msgctxt "selection:stock.period,state:"
msgid "Closed"
msgstr "ÐакÑÑÑо"
#, fuzzy
-msgctxt "selection:stock.period,state:0"
+msgctxt "selection:stock.period,state:"
msgid "Draft"
msgstr "ЧеÑновик"
-msgctxt "selection:stock.shipment.in,state:0"
+msgctxt "selection:stock.shipment.in,state:"
msgid "Canceled"
msgstr "ÐÑменено"
-msgctxt "selection:stock.shipment.in,state:0"
+msgctxt "selection:stock.shipment.in,state:"
msgid "Done"
msgstr "ÐÑполнено"
-msgctxt "selection:stock.shipment.in,state:0"
+msgctxt "selection:stock.shipment.in,state:"
msgid "Draft"
msgstr "ЧеÑновик"
-msgctxt "selection:stock.shipment.in,state:0"
+msgctxt "selection:stock.shipment.in,state:"
msgid "Received"
msgstr "ÐоÑÑÑпило"
-msgctxt "selection:stock.shipment.in.return,state:0"
+msgctxt "selection:stock.shipment.in.return,state:"
msgid "Assigned"
msgstr "ÐеÑеданнÑй"
-msgctxt "selection:stock.shipment.in.return,state:0"
+msgctxt "selection:stock.shipment.in.return,state:"
msgid "Canceled"
msgstr "ÐÑменено"
-msgctxt "selection:stock.shipment.in.return,state:0"
+msgctxt "selection:stock.shipment.in.return,state:"
msgid "Done"
msgstr "ÐÑполнено"
-msgctxt "selection:stock.shipment.in.return,state:0"
+msgctxt "selection:stock.shipment.in.return,state:"
msgid "Draft"
msgstr "ЧеÑновик"
-msgctxt "selection:stock.shipment.in.return,state:0"
+msgctxt "selection:stock.shipment.in.return,state:"
msgid "Waiting"
msgstr "Ðжидание"
-msgctxt "selection:stock.shipment.internal,state:0"
+msgctxt "selection:stock.shipment.internal,state:"
msgid "Assigned"
msgstr "ÐеÑеданнÑй"
-msgctxt "selection:stock.shipment.internal,state:0"
+msgctxt "selection:stock.shipment.internal,state:"
msgid "Canceled"
msgstr "ÐÑменено"
-msgctxt "selection:stock.shipment.internal,state:0"
+msgctxt "selection:stock.shipment.internal,state:"
msgid "Done"
msgstr "ÐÑполнено"
-msgctxt "selection:stock.shipment.internal,state:0"
+msgctxt "selection:stock.shipment.internal,state:"
msgid "Draft"
msgstr "ЧеÑновик"
-msgctxt "selection:stock.shipment.internal,state:0"
+msgctxt "selection:stock.shipment.internal,state:"
msgid "Waiting"
msgstr "Ðжидание"
-msgctxt "selection:stock.shipment.out,state:0"
+msgctxt "selection:stock.shipment.out,state:"
msgid "Assigned"
msgstr "ÐеÑеданнÑй"
-msgctxt "selection:stock.shipment.out,state:0"
+msgctxt "selection:stock.shipment.out,state:"
msgid "Canceled"
msgstr "ÐÑменено"
-msgctxt "selection:stock.shipment.out,state:0"
+msgctxt "selection:stock.shipment.out,state:"
msgid "Done"
msgstr "ÐÑполнено"
-msgctxt "selection:stock.shipment.out,state:0"
+msgctxt "selection:stock.shipment.out,state:"
msgid "Draft"
msgstr "ЧеÑновик"
-msgctxt "selection:stock.shipment.out,state:0"
+msgctxt "selection:stock.shipment.out,state:"
msgid "Packed"
msgstr "УпакованнÑй"
-msgctxt "selection:stock.shipment.out,state:0"
+msgctxt "selection:stock.shipment.out,state:"
msgid "Waiting"
msgstr "Ðжидание"
-msgctxt "selection:stock.shipment.out.return,state:0"
+msgctxt "selection:stock.shipment.out.return,state:"
msgid "Canceled"
msgstr "ÐÑменено"
-msgctxt "selection:stock.shipment.out.return,state:0"
+msgctxt "selection:stock.shipment.out.return,state:"
msgid "Done"
msgstr "ÐÑполнено"
-msgctxt "selection:stock.shipment.out.return,state:0"
+msgctxt "selection:stock.shipment.out.return,state:"
msgid "Draft"
msgstr "ЧеÑновик"
-msgctxt "selection:stock.shipment.out.return,state:0"
+msgctxt "selection:stock.shipment.out.return,state:"
msgid "Received"
msgstr "ÐоÑÑÑпило"
-msgctxt "view:party.party:0"
+msgctxt "view:party.party:"
msgid "Stock"
msgstr "Ð¥ÑанилиÑе"
-msgctxt "view:product.product:0"
+msgctxt "view:product.by_location.start:"
+msgid "Product by Location"
+msgstr ""
+
+msgctxt "view:product.product:"
msgid "Products"
msgstr "ТÐЦ"
-msgctxt "view:stock.configuration:0"
+msgctxt "view:stock.configuration:"
msgid "Stock Configuration"
msgstr "ÐонÑигÑÑаÑÐ¸Ñ Ñклада"
-msgctxt "view:stock.inventory.line:0"
+msgctxt "view:stock.inventory.line:"
msgid "Inventory Line"
msgstr "СÑÑока инвенÑаÑизаÑии"
-msgctxt "view:stock.inventory.line:0"
+msgctxt "view:stock.inventory.line:"
msgid "Inventory Lines"
msgstr "СÑÑоки инвенÑаÑизаÑии"
-msgctxt "view:stock.inventory:0"
+msgctxt "view:stock.inventory:"
msgid "Add an inventory line for each missing products"
msgstr "ÐобавиÑÑ ÑÑÑÐ¾ÐºÑ Ð² ÑпиÑок Ð´Ð»Ñ ÐºÐ°Ð¶Ð´Ð¾Ð³Ð¾ оÑÑÑÑÑÑвÑÑÑего ÑоваÑа"
-msgctxt "view:stock.inventory:0"
+msgctxt "view:stock.inventory:"
msgid "Cancel"
msgstr "ÐÑмениÑÑ"
-msgctxt "view:stock.inventory:0"
+msgctxt "view:stock.inventory:"
msgid "Complete Inventory"
msgstr "ÐÐ¾Ð»Ð½Ð°Ñ Ð¸Ð½Ð²ÐµÐ½ÑаÑизаÑиÑ"
-msgctxt "view:stock.inventory:0"
+msgctxt "view:stock.inventory:"
msgid "Confirm"
msgstr "ÐодÑвеÑждаÑÑ"
-msgctxt "view:stock.inventory:0"
+msgctxt "view:stock.inventory:"
msgid "Inventories"
msgstr "ÐнвенÑаÑизаÑиÑ"
-msgctxt "view:stock.inventory:0"
+msgctxt "view:stock.inventory:"
msgid "Inventory"
msgstr "ÐнвенÑаÑизаÑиÑ"
-msgctxt "view:stock.location:0"
+msgctxt "view:stock.location:"
msgid "Location"
msgstr "ÐеÑÑо"
-msgctxt "view:stock.location:0"
+msgctxt "view:stock.location:"
+msgid "Location Quantity"
+msgstr ""
+
+msgctxt "view:stock.location:"
msgid "Locations"
msgstr "ÐеÑÑа Ñ
ÑанениÑ"
-msgctxt "view:stock.location:0"
+msgctxt "view:stock.location:"
msgid "Product Stock"
msgstr "Ð¥ÑанилиÑе ТÐЦ"
-msgctxt "view:stock.location_stock_date.init:0"
-msgid "Product Quantity."
-msgstr "ÐолиÑеÑÑво ТоваÑов."
-
-msgctxt "view:stock.move:0"
+msgctxt "view:stock.move:"
msgid "Move"
msgstr "ÐеÑемеÑение"
-msgctxt "view:stock.move:0"
+msgctxt "view:stock.move:"
msgid "Moves"
msgstr "ÐеÑемеÑениÑ"
-msgctxt "view:stock.period.cache:0"
+msgctxt "view:stock.period.cache:"
msgid "Period Cache"
msgstr ""
-msgctxt "view:stock.period.cache:0"
+msgctxt "view:stock.period.cache:"
msgid "Period Caches"
msgstr ""
#, fuzzy
-msgctxt "view:stock.period:0"
+msgctxt "view:stock.period:"
msgid "Close"
msgstr "ÐакÑÑÑÑ"
#, fuzzy
-msgctxt "view:stock.period:0"
+msgctxt "view:stock.period:"
msgid "Draft"
msgstr "ЧеÑновик"
-msgctxt "view:stock.period:0"
+msgctxt "view:stock.period:"
msgid "Period"
msgstr ""
-msgctxt "view:stock.period:0"
+msgctxt "view:stock.period:"
msgid "Periods"
msgstr ""
-msgctxt "view:stock.product_stock_date.init:0"
-msgid "Product Quantity."
-msgstr "ÐолиÑеÑÑво ТоваÑов."
-
-#, fuzzy
-msgctxt "view:stock.shipment.in.return.assign.assign_failed:0"
-msgid "Moves"
-msgstr "ÐеÑемеÑениÑ"
+msgctxt "view:stock.products_by_locations.start:"
+msgid "Products by Locations"
+msgstr ""
-msgctxt "view:stock.shipment.in.return.assign.assign_failed:0"
+msgctxt "view:stock.shipment.in.return.assign.failed:"
msgid "Unable to Assign"
msgstr ""
-msgctxt "view:stock.shipment.in.return.assign.assign_failed:0"
+msgctxt "view:stock.shipment.in.return.assign.failed:"
msgid "Unable to assign those products:"
msgstr ""
-msgctxt "view:stock.shipment.in.return:0"
+msgctxt "view:stock.shipment.in.return:"
msgid "Assign"
msgstr "ÐазнаÑение"
-msgctxt "view:stock.shipment.in.return:0"
+msgctxt "view:stock.shipment.in.return:"
msgid "Cancel"
msgstr "ÐÑмениÑÑ"
-msgctxt "view:stock.shipment.in.return:0"
+msgctxt "view:stock.shipment.in.return:"
msgid "Done"
msgstr "ÐÑполнено"
-msgctxt "view:stock.shipment.in.return:0"
+msgctxt "view:stock.shipment.in.return:"
msgid "Draft"
msgstr "ЧеÑновик"
-msgctxt "view:stock.shipment.in.return:0"
+msgctxt "view:stock.shipment.in.return:"
msgid "Reset to Draft"
msgstr "СбÑÐ¾Ñ Ð² ÑеÑновик"
-msgctxt "view:stock.shipment.in.return:0"
+msgctxt "view:stock.shipment.in.return:"
msgid "Supplier Return Shipment"
msgstr "ÐозвÑÐ°Ñ Ð¿Ð¾ÑÑавÑикÑ"
-msgctxt "view:stock.shipment.in.return:0"
+msgctxt "view:stock.shipment.in.return:"
msgid "Supplier Return Shipments"
msgstr "ÐозвÑаÑÑ Ð¿Ð¾ÑÑавÑикÑ"
-msgctxt "view:stock.shipment.in.return:0"
+msgctxt "view:stock.shipment.in.return:"
+msgid "Wait"
+msgstr ""
+
+msgctxt "view:stock.shipment.in.return:"
msgid "Waiting"
msgstr "Ðжидание"
-msgctxt "view:stock.shipment.in:0"
+msgctxt "view:stock.shipment.in:"
msgid "Cancel"
msgstr "ÐÑмениÑÑ"
-msgctxt "view:stock.shipment.in:0"
+msgctxt "view:stock.shipment.in:"
msgid "Done"
msgstr "ÐÑполнено"
-msgctxt "view:stock.shipment.in:0"
+msgctxt "view:stock.shipment.in:"
msgid "Incoming Moves"
msgstr "ÐÑ
одÑÑий гÑÑз"
-msgctxt "view:stock.shipment.in:0"
+msgctxt "view:stock.shipment.in:"
msgid "Inventory Moves"
msgstr "УÑÐµÑ Ð¿ÐµÑемеÑений"
-msgctxt "view:stock.shipment.in:0"
+msgctxt "view:stock.shipment.in:"
msgid "Moves"
msgstr "ÐеÑемеÑениÑ"
-msgctxt "view:stock.shipment.in:0"
+msgctxt "view:stock.shipment.in:"
+msgid "Receive"
+msgstr ""
+
+msgctxt "view:stock.shipment.in:"
msgid "Received"
msgstr "ÐоÑÑÑпило"
-msgctxt "view:stock.shipment.in:0"
+msgctxt "view:stock.shipment.in:"
msgid "Reset to Draft"
msgstr "СбÑÐ¾Ñ Ð² ÑеÑновик"
-msgctxt "view:stock.shipment.in:0"
+msgctxt "view:stock.shipment.in:"
msgid "Supplier Shipment"
msgstr "ÐÑиÑ
од Ð¾Ñ Ð¿Ð¾ÑÑавÑика"
-msgctxt "view:stock.shipment.in:0"
+msgctxt "view:stock.shipment.in:"
msgid "Supplier Shipments"
msgstr "ÐÑиÑ
од Ð¾Ñ Ð¿Ð¾ÑÑавÑиков"
-#, fuzzy
-msgctxt "view:stock.shipment.internal.assign.assign_failed:0"
-msgid "Moves"
-msgstr "ÐеÑемеÑениÑ"
-
-msgctxt "view:stock.shipment.internal.assign.assign_failed:0"
+msgctxt "view:stock.shipment.internal.assign.failed:"
msgid "Unable to Assign"
msgstr ""
-msgctxt "view:stock.shipment.internal.assign.assign_failed:0"
+msgctxt "view:stock.shipment.internal.assign.failed:"
msgid "Unable to assign those products:"
msgstr ""
-msgctxt "view:stock.shipment.internal:0"
+msgctxt "view:stock.shipment.internal:"
msgid "Assign"
msgstr "ÐазнаÑение"
-msgctxt "view:stock.shipment.internal:0"
+msgctxt "view:stock.shipment.internal:"
msgid "Cancel"
msgstr "ÐÑмениÑÑ"
-msgctxt "view:stock.shipment.internal:0"
+msgctxt "view:stock.shipment.internal:"
msgid "Done"
msgstr "ÐÑполнено"
-msgctxt "view:stock.shipment.internal:0"
+msgctxt "view:stock.shipment.internal:"
msgid "Draft"
msgstr "ЧеÑновик"
-msgctxt "view:stock.shipment.internal:0"
+msgctxt "view:stock.shipment.internal:"
msgid "Internal Shipment"
msgstr "ÐнÑÑÑеннее пеÑемеÑение"
-msgctxt "view:stock.shipment.internal:0"
+msgctxt "view:stock.shipment.internal:"
msgid "Internal Shipments"
msgstr "ÐнÑÑÑенние пеÑемеÑениÑ"
-msgctxt "view:stock.shipment.internal:0"
+msgctxt "view:stock.shipment.internal:"
msgid "Reset to Draft"
msgstr "СбÑÐ¾Ñ Ð² ÑеÑновик"
-msgctxt "view:stock.shipment.internal:0"
+msgctxt "view:stock.shipment.internal:"
msgid "Waiting"
msgstr "Ðжидание"
-#, fuzzy
-msgctxt "view:stock.shipment.out.assign.assign_failed:0"
-msgid "Inventory Moves"
-msgstr "УÑÐµÑ Ð¿ÐµÑемеÑений"
-
-msgctxt "view:stock.shipment.out.assign.assign_failed:0"
+msgctxt "view:stock.shipment.out.assign.failed:"
msgid "Unable to Assign"
msgstr ""
-msgctxt "view:stock.shipment.out.assign.assign_failed:0"
+msgctxt "view:stock.shipment.out.assign.failed:"
msgid "Unable to assign those products:"
msgstr ""
-msgctxt "view:stock.shipment.out.return:0"
+msgctxt "view:stock.shipment.out.return:"
msgid "Cancel"
msgstr "ÐÑмениÑÑ"
-msgctxt "view:stock.shipment.out.return:0"
+msgctxt "view:stock.shipment.out.return:"
msgid "Customer Return Shipment"
msgstr "ÐозвÑÐ°Ñ Ð¾Ñ Ð·Ð°ÐºÐ°Ð·Ñика"
-msgctxt "view:stock.shipment.out.return:0"
+msgctxt "view:stock.shipment.out.return:"
msgid "Customer Return Shipments"
msgstr "ÐозвÑаÑÑ Ð¾Ñ Ð·Ð°ÐºÐ°Ð·Ñиков"
-msgctxt "view:stock.shipment.out.return:0"
+msgctxt "view:stock.shipment.out.return:"
msgid "Done"
msgstr "ÐÑполнено"
-msgctxt "view:stock.shipment.out.return:0"
+#, fuzzy
+msgctxt "view:stock.shipment.out.return:"
+msgid "Draft"
+msgstr "ЧеÑновик"
+
+msgctxt "view:stock.shipment.out.return:"
msgid "Incoming Moves"
msgstr "ÐÑ
одÑÑий гÑÑз"
-msgctxt "view:stock.shipment.out.return:0"
+msgctxt "view:stock.shipment.out.return:"
msgid "Inventory Moves"
msgstr "УÑÐµÑ Ð¿ÐµÑемеÑений"
-msgctxt "view:stock.shipment.out.return:0"
+msgctxt "view:stock.shipment.out.return:"
msgid "Moves"
msgstr "ÐеÑемеÑениÑ"
-msgctxt "view:stock.shipment.out.return:0"
+msgctxt "view:stock.shipment.out.return:"
msgid "Received"
msgstr "ÐоÑÑÑпило"
-msgctxt "view:stock.shipment.out.return:0"
+msgctxt "view:stock.shipment.out.return:"
msgid "Reset to Draft"
msgstr "СбÑÐ¾Ñ Ð² ÑеÑновики"
-msgctxt "view:stock.shipment.out:0"
+msgctxt "view:stock.shipment.out:"
msgid "Assign"
msgstr "ÐазнаÑение"
-msgctxt "view:stock.shipment.out:0"
+msgctxt "view:stock.shipment.out:"
msgid "Cancel"
msgstr "ÐÑмениÑÑ"
-msgctxt "view:stock.shipment.out:0"
+msgctxt "view:stock.shipment.out:"
msgid "Customer Shipment"
msgstr "ÐÑгÑÑзка заказÑикÑ"
-msgctxt "view:stock.shipment.out:0"
+msgctxt "view:stock.shipment.out:"
msgid "Customer Shipments"
msgstr "ÐÑгÑÑзки заказÑикам"
-msgctxt "view:stock.shipment.out:0"
+msgctxt "view:stock.shipment.out:"
msgid "Done"
msgstr "ÐÑполнено"
-msgctxt "view:stock.shipment.out:0"
+msgctxt "view:stock.shipment.out:"
msgid "Draft"
msgstr "ЧеÑновик"
-msgctxt "view:stock.shipment.out:0"
+msgctxt "view:stock.shipment.out:"
msgid "Inventory Moves"
msgstr "УÑÐµÑ Ð¿ÐµÑемеÑений"
-msgctxt "view:stock.shipment.out:0"
+msgctxt "view:stock.shipment.out:"
msgid "Make shipment"
msgstr "СделаÑÑ Ð¾ÑгÑÑзкÑ"
-msgctxt "view:stock.shipment.out:0"
+msgctxt "view:stock.shipment.out:"
msgid "Outgoing Moves"
msgstr "ÐнеÑнее пеÑемеÑение"
-msgctxt "view:stock.shipment.out:0"
+msgctxt "view:stock.shipment.out:"
msgid "Reset to Draft"
msgstr "СбÑÐ¾Ñ Ð² ÑеÑновик"
-msgctxt "view:stock.shipment.out:0"
+msgctxt "view:stock.shipment.out:"
msgid "Waiting"
msgstr "Ðжидание"
-msgctxt "wizard_button:stock.location.open,init,end:0"
+#, fuzzy
+msgctxt "wizard_button:product.by_location,start,end:"
msgid "Cancel"
msgstr "ÐÑмениÑÑ"
-msgctxt "wizard_button:stock.location.open,init,open:0"
+#, fuzzy
+msgctxt "wizard_button:product.by_location,start,open:"
msgid "Open"
msgstr "ÐÑкÑÑÑÑ"
-msgctxt "wizard_button:stock.product.open,init,end:0"
+#, fuzzy
+msgctxt "wizard_button:stock.products_by_locations,start,end:"
msgid "Cancel"
msgstr "ÐÑмениÑÑ"
-msgctxt "wizard_button:stock.product.open,init,open:0"
+#, fuzzy
+msgctxt "wizard_button:stock.products_by_locations,start,open:"
msgid "Open"
msgstr "ÐÑкÑÑÑÑ"
-msgctxt "wizard_button:stock.shipment.in.return.assign,ask_force,end:0"
+#, fuzzy
+msgctxt "wizard_button:stock.shipment.in.return.assign,failed,end:"
msgid "Ok"
msgstr "Ðа"
-msgctxt "wizard_button:stock.shipment.in.return.assign,ask_force,force:0"
+msgctxt "wizard_button:stock.shipment.in.return.assign,failed,force:"
msgid "Force Assign"
-msgstr "УÑкоÑÐµÐ½Ð½Ð°Ñ Ð¾ÑгÑÑзка"
+msgstr ""
#, fuzzy
-msgctxt "wizard_button:stock.shipment.in.return.assign,assign_failed,end:0"
-msgid "Ok"
-msgstr "Ðк"
-
-msgctxt "wizard_button:stock.shipment.internal.assign,ask_force,end:0"
+msgctxt "wizard_button:stock.shipment.internal.assign,failed,end:"
msgid "Ok"
msgstr "Ðа"
-msgctxt "wizard_button:stock.shipment.internal.assign,ask_force,force:0"
+msgctxt "wizard_button:stock.shipment.internal.assign,failed,force:"
msgid "Force Assign"
-msgstr "УÑкоÑÐµÐ½Ð½Ð°Ñ Ð¿ÐµÑедаÑа"
+msgstr ""
#, fuzzy
-msgctxt "wizard_button:stock.shipment.internal.assign,assign_failed,end:0"
-msgid "Ok"
-msgstr "Ðк"
-
-msgctxt "wizard_button:stock.shipment.out.assign,ask_force,end:0"
+msgctxt "wizard_button:stock.shipment.out.assign,failed,end:"
msgid "Ok"
msgstr "Ðа"
-msgctxt "wizard_button:stock.shipment.out.assign,ask_force,force:0"
+msgctxt "wizard_button:stock.shipment.out.assign,failed,force:"
msgid "Force Assign"
-msgstr "УÑкоÑÐµÐ½Ð½Ð°Ñ Ð¾ÑгÑÑзка"
-
-#, fuzzy
-msgctxt "wizard_button:stock.shipment.out.assign,assign_failed,end:0"
-msgid "Ok"
-msgstr "Ðк"
+msgstr ""
diff --git a/location.py b/location.py
index 0f14437..cc185dd 100644
--- a/location.py
+++ b/location.py
@@ -1,8 +1,9 @@
#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
+from decimal import Decimal
from trytond.model import ModelView, ModelSQL, fields
-from trytond.wizard import Wizard
+from trytond.wizard import Wizard, StateView, Button, StateAction
from trytond.backend import TableHandler
from trytond.pyson import Not, Bool, Eval, Equal, PYSONEncoder, Date
from trytond.transaction import Transaction
@@ -21,8 +22,8 @@ class Location(ModelSQL, ModelView):
name = fields.Char("Name", size=None, required=True, states=STATES,
depends=DEPENDS, translate=True)
code = fields.Char("Code", size=None, states=STATES, depends=DEPENDS,
- select=1)
- active = fields.Boolean('Active', select=1)
+ select=True)
+ active = fields.Boolean('Active', select=True)
address = fields.Many2One("party.address", "Address",
states={
'invisible': Not(Equal(Eval('type'), 'warehouse')),
@@ -38,10 +39,10 @@ class Location(ModelSQL, ModelView):
('production', 'Production'),
('view', 'View'),
], 'Location type', states=STATES, depends=DEPENDS)
- parent = fields.Many2One("stock.location", "Parent", select=1,
+ parent = fields.Many2One("stock.location", "Parent", select=True,
left="left", right="right")
- left = fields.Integer('Left', required=True, select=1)
- right = fields.Integer('Right', required=True, select=1)
+ left = fields.Integer('Left', required=True, select=True)
+ right = fields.Integer('Right', required=True, select=True)
childs = fields.One2Many("stock.location", "parent", "Children")
input_location = fields.Many2One(
"stock.location", "Input", states={
@@ -50,10 +51,10 @@ class Location(ModelSQL, ModelView):
'required': Equal(Eval('type'), 'warehouse'),
},
domain=[
- ('type','=','storage'),
+ ('type', '=', 'storage'),
['OR',
('parent', 'child_of', [Eval('id')]),
- ('parent', '=', False),
+ ('parent', '=', None),
],
],
depends=['type', 'active', 'id'])
@@ -63,10 +64,11 @@ class Location(ModelSQL, ModelView):
'readonly': Not(Bool(Eval('active'))),
'required': Equal(Eval('type'), 'warehouse'),
},
- domain=[('type','=','storage'),
+ domain=[
+ ('type', '=', 'storage'),
['OR',
('parent', 'child_of', [Eval('id')]),
- ('parent', '=', False)]],
+ ('parent', '=', None)]],
depends=['type', 'active', 'id'])
storage_location = fields.Many2One(
"stock.location", "Storage", states={
@@ -74,14 +76,17 @@ class Location(ModelSQL, ModelView):
'readonly': Not(Bool(Eval('active'))),
'required': Equal(Eval('type'), 'warehouse'),
},
- domain=[('type','=','storage'),
+ domain=[
+ ('type', '=', 'storage'),
['OR',
('parent', 'child_of', [Eval('id')]),
- ('parent', '=', False)]],
+ ('parent', '=', None)]],
depends=['type', 'active', 'id'])
quantity = fields.Function(fields.Float('Quantity'), 'get_quantity')
forecast_quantity = fields.Function(fields.Float('Forecast Quantity'),
'get_quantity')
+ cost_value = fields.Function(fields.Numeric('Cost Value'),
+ 'get_cost_value')
def __init__(self):
super(Location, self).__init__()
@@ -94,7 +99,8 @@ class Location(ModelSQL, ModelView):
'recursive_locations': 'You can not create recursive locations!',
'invalid_type_for_moves': 'A location with existing moves ' \
'cannot be changed to a type that does not support moves.',
- 'child_of_warehouse': 'Location "%s" must be a child of warehouse "%s"!',
+ 'child_of_warehouse': 'Location "%s" must be a child of ' \
+ 'warehouse "%s"!',
})
def init(self, module_name):
@@ -171,23 +177,23 @@ class Location(ModelSQL, ModelView):
product_ids=[Transaction().context['product']],
with_childs=True, skip_zero=False).iteritems()
- return dict([(loc,qty) for (loc,prod), qty in pbl])
+ return dict([(loc, qty) for (loc, prod), qty in pbl])
- def view_header_get(self, value, view_type='form'):
+ def get_cost_value(self, ids, name):
product_obj = Pool().get('product.product')
- value = super(Location, self).view_header_get(value,
- view_type=view_type)
- if (Transaction().context.get('product')
- and isinstance(Transaction().context['product'], (int, long))):
- with Transaction().set_context(active_test=False):
- product_ids = product_obj.search([
- ('id', '=', Transaction().context['product']),
- ], limit=1)
- if product_ids:
- product = product_obj.browse(product_ids[0])
- return value + ': ' + product.rec_name + \
- ' (' + product.default_uom.rec_name + ')'
- return value
+ trans_context = Transaction().context
+ product_id = trans_context.get('product')
+ if not product_id:
+ return dict((id, None) for id in ids)
+ cost_values, context = {}, {}
+ if 'stock_date_end' in trans_context:
+ context['_datetime'] = trans_context['stock_date_end']
+ with Transaction().set_context(context):
+ product = product_obj.browse(product_id)
+ for location in self.browse(ids):
+ cost_values[location.id] = (Decimal(str(location.quantity))
+ * product.cost_price)
+ return cost_values
def _set_warehouse_parent(self, locations):
'''
@@ -267,10 +273,10 @@ class Location(ModelSQL, ModelView):
wh_default = default.copy()
wh_default['type'] = 'view'
- wh_default['input_location'] = False
- wh_default['output_location'] = False
- wh_default['storage_location'] = False
- wh_default['childs'] = False
+ wh_default['input_location'] = None
+ wh_default['output_location'] = None
+ wh_default['storage_location'] = None
+ wh_default['childs'] = None
new_id = super(Location, self).copy(location.id,
default=wh_default)
@@ -295,8 +301,10 @@ class Location(ModelSQL, ModelView):
if location.id in warehouse_locations.values():
for field, loc_id in warehouse_locations.iteritems():
if loc_id == location.id:
- self.write(Transaction().context['cp_warehouse_id'],
- {field: new_id})
+ self.write(
+ Transaction().context['cp_warehouse_id'], {
+ field: new_id,
+ })
res.append(new_id)
@@ -319,9 +327,10 @@ class Party(ModelSQL, ModelView):
Party()
-class ChooseStockDateInit(ModelView):
- _name = 'stock.location_stock_date.init'
- _description = "Compute stock quantities"
+class ProductsByLocationsStart(ModelView):
+ 'Products by Locations'
+ _name = 'stock.products_by_locations.start'
+ _description = __doc__
forecast_date = fields.Date(
'At Date', help='Allow to compute expected '\
'stock quantities for this date.\n'\
@@ -332,48 +341,26 @@ class ChooseStockDateInit(ModelView):
date_obj = Pool().get('ir.date')
return date_obj.today()
-ChooseStockDateInit()
+ProductsByLocationsStart()
-class OpenProduct(Wizard):
- 'Open Products'
- _name = 'stock.product.open'
- states = {
- 'init': {
- 'result': {
- 'type': 'form',
- 'object': 'stock.location_stock_date.init',
- 'state': [
- ('end', 'Cancel', 'tryton-cancel'),
- ('open', 'Open', 'tryton-ok', True),
- ],
- },
- },
- 'open': {
- 'result': {
- 'type': 'action',
- 'action': '_action_open_product',
- 'state': 'end',
- },
- },
- }
+class ProductsByLocations(Wizard):
+ 'Products by Locations'
+ _name = 'stock.products_by_locations'
- def _action_open_product(self, data):
- model_data_obj = Pool().get('ir.model.data')
- act_window_obj = Pool().get('ir.action.act_window')
- act_window_id = model_data_obj.get_id('stock',
- 'act_product_by_location')
- res = act_window_obj.read(act_window_id)
+ start = StateView('stock.products_by_locations.start',
+ 'stock.products_by_locations_start_view_form', [
+ Button('Cancel', 'end', 'tryton-cancel'),
+ Button('Open', 'open', 'tryton-ok', True),
+ ])
+ open = StateAction('stock.act_products_by_locations')
+ def do_open(self, session, action):
context = {}
- context['locations'] = data['ids']
- if data['form']['forecast_date']:
- date = data['form']['forecast_date']
- else:
- date = datetime.date.max
+ context['locations'] = Transaction().context.get('active_ids')
+ date = session.start.forecast_date or datetime.date.max
context['stock_date_end'] = Date(date.year, date.month, date.day)
- res['pyson_context'] = PYSONEncoder().encode(context)
-
- return res
+ action['pyson_context'] = PYSONEncoder().encode(context)
+ return action, {}
-OpenProduct()
+ProductsByLocations()
diff --git a/location.xml b/location.xml
index 98a29ee..e98dcde 100644
--- a/location.xml
+++ b/location.xml
@@ -104,7 +104,7 @@ this repository contains the full copyright notices and license terms. -->
<menuitem parent="menu_configuration" sequence="10"
action="act_location_form" id="menu_location_form"/>
- <record model="ir.action.act_window" id="act_product_by_location">
+ <record model="ir.action.act_window" id="act_products_by_locations">
<field name="name">Products by Locations</field>
<field name="res_model">product.product</field>
<field name="window_name" eval="False"/>
@@ -113,24 +113,24 @@ this repository contains the full copyright notices and license terms. -->
<record model="ir.action.act_window.view" id="act_product_form_view2">
<field name="sequence" eval="10"/>
<field name="view" ref="product_view_tree_qty"/>
- <field name="act_window" ref="act_product_by_location"/>
+ <field name="act_window" ref="act_products_by_locations"/>
</record>
<record model="ir.action.act_window.view" id="act_product_form_view">
<field name="sequence" eval="20"/>
<field name="view" ref="product.product_view_form"/>
- <field name="act_window" ref="act_product_by_location"/>
+ <field name="act_window" ref="act_products_by_locations"/>
</record>
- <record model="ir.action.wizard" id="wizard_product_open">
- <field name="name">Product Quantities</field>
- <field name="wiz_name">stock.product.open</field>
+ <record model="ir.action.wizard" id="wizard_products_by_locations">
+ <field name="name">Products by Locations</field>
+ <field name="wiz_name">stock.products_by_locations</field>
<field name="model">stock.location</field>
</record>
<record model="ir.action.keyword"
- id="act_product_by_location_keyword1">
+ id="act_products_by_locations_keyword1">
<field name="keyword">tree_open</field>
<field name="model">stock.location,-1</field>
- <field name="action" ref="wizard_product_open"/>
+ <field name="action" ref="wizard_products_by_locations"/>
</record>
<record model="ir.model.access" id="access_location">
@@ -170,12 +170,12 @@ this repository contains the full copyright notices and license terms. -->
</field>
</record>
- <record model="ir.ui.view" id="location_stock_date_init_view_form">
- <field name="model">stock.location_stock_date.init</field>
+ <record model="ir.ui.view" id="products_by_locations_start_view_form">
+ <field name="model">stock.products_by_locations.start</field>
<field name="type">form</field>
<field name="arch" type="xml">
<![CDATA[
- <form string="Product Quantity.">
+ <form string="Products by Locations">
<label name="forecast_date"/>
<field name="forecast_date"/>
</form>
@@ -225,14 +225,12 @@ this repository contains the full copyright notices and license terms. -->
</record>
<record model="ir.property" id="property_supplier_location">
- <field name="name">supplier_location</field>
<field name="field"
search="[('model.model', '=', 'party.party'),
('name', '=', 'supplier_location')]"/>
<field name="value" eval="'stock.location,' + str(ref('location_supplier'))"/>
</record>
<record model="ir.property" id="property_customer_location">
- <field name="name">customer_location</field>
<field name="field"
search="[('model.model', '=', 'party.party'),
('name', '=', 'customer_location')]"/>
diff --git a/move.py b/move.py
index 0352926..066af7b 100644
--- a/move.py
+++ b/move.py
@@ -2,7 +2,7 @@
#this repository contains the full copyright notices and license terms.
from decimal import Decimal
from functools import reduce
-from trytond.model import ModelView, ModelSQL, fields, OPERATORS
+from trytond.model import ModelView, ModelSQL, fields
from trytond.backend import TableHandler
from trytond.pyson import In, Eval, Not, Equal, If, Get, Bool
from trytond.transaction import Transaction
@@ -20,22 +20,22 @@ class Move(ModelSQL, ModelView):
_description = __doc__
_order_name = 'product'
product = fields.Many2One("product.product", "Product", required=True,
- select=1, states=STATES,
+ select=True, states=STATES,
on_change=['product', 'currency', 'uom', 'company',
'from_location', 'to_location'],
domain=[('type', '!=', 'service')],
depends=DEPENDS)
+ product_uom_category = fields.Function(
+ fields.Many2One('product.uom.category', 'Product Uom Category',
+ on_change_with=['product']),
+ 'get_product_uom_category')
uom = fields.Many2One("product.uom", "Uom", required=True, states=STATES,
domain=[
- ('category', '=',
- (Eval('product'), 'product.default_uom.category')),
+ ('category', '=', Eval('product_uom_category')),
],
- context={
- 'category': (Eval('product'), 'product.default_uom.category'),
- },
on_change=['product', 'currency', 'uom', 'company',
'from_location', 'to_location'],
- depends=['state', 'product'])
+ depends=['state', 'product_uom_category'])
unit_digits = fields.Function(fields.Integer('Unit Digits',
on_change_with=['uom']), 'get_unit_digits')
quantity = fields.Float("Quantity", required=True,
@@ -43,28 +43,28 @@ class Move(ModelSQL, ModelView):
depends=['state', 'unit_digits'])
internal_quantity = fields.Float('Internal Quantity', readonly=True,
required=True)
- from_location = fields.Many2One("stock.location", "From Location", select=1,
- required=True, states=STATES, depends=DEPENDS,
+ from_location = fields.Many2One("stock.location", "From Location",
+ select=True, required=True, states=STATES, depends=DEPENDS,
domain=[('type', 'not in', ('warehouse', 'view'))])
- to_location = fields.Many2One("stock.location", "To Location", select=1,
+ to_location = fields.Many2One("stock.location", "To Location", select=True,
required=True, states=STATES, depends=DEPENDS,
domain=[('type', 'not in', ('warehouse', 'view'))])
shipment_in = fields.Many2One('stock.shipment.in', 'Supplier Shipment',
domain=[('company', '=', Eval('company'))], depends=['company'],
- readonly=True, select=1, ondelete='CASCADE')
+ readonly=True, select=True, ondelete='CASCADE')
shipment_out = fields.Many2One('stock.shipment.out', 'Customer Shipment',
domain=[('company', '=', Eval('company'))], depends=['company'],
- readonly=True, select=1, ondelete='CASCADE')
+ readonly=True, select=True, ondelete='CASCADE')
shipment_out_return = fields.Many2One('stock.shipment.out.return',
- 'Customer Return Shipment', readonly=True, select=1,
+ 'Customer Return Shipment', readonly=True, select=True,
domain=[('company', '=', Eval('company'))], depends=['company'],
ondelete='CASCADE')
shipment_in_return = fields.Many2One('stock.shipment.in.return',
- 'Supplier Return Shipment', readonly=True, select=1,
+ 'Supplier Return Shipment', readonly=True, select=True,
domain=[('company', '=', Eval('company'))], depends=['company'],
ondelete='CASCADE')
shipment_internal = fields.Many2One('stock.shipment.internal',
- 'Internal Shipment', readonly=True, select=1, ondelete='CASCADE',
+ 'Internal Shipment', readonly=True, select=True, ondelete='CASCADE',
domain=[('company', '=', Eval('company'))], depends=['company'])
planned_date = fields.Date("Planned Date", states={
'readonly': (In(Eval('state'), ['cancel', 'assigned', 'done'])
@@ -73,14 +73,14 @@ class Move(ModelSQL, ModelView):
| Eval('shipment_internal'))
}, depends=['state', 'shipment_in', 'shipment_out',
'shipment_in_return', 'shipment_out_return', 'shipment_internal'],
- select=2)
- effective_date = fields.Date("Effective Date", readonly=True, select=2)
+ select=True)
+ effective_date = fields.Date("Effective Date", readonly=True, select=True)
state = fields.Selection([
('draft', 'Draft'),
('assigned', 'Assigned'),
('done', 'Done'),
('cancel', 'Canceled'),
- ], 'State', select=1, readonly=True)
+ ], 'State', select=True, readonly=True)
company = fields.Many2One('company.company', 'Company', required=True,
states={
'readonly': Not(Equal(Eval('state'), 'draft')),
@@ -134,7 +134,6 @@ class Move(ModelSQL, ModelView):
'Move can be on only one Shipment'),
]
self._constraints += [
- ('check_product_type', 'service_product'),
('check_period_closed', 'period_closed'),
]
self._order[0] = ('id', 'DESC')
@@ -142,8 +141,8 @@ class Move(ModelSQL, ModelView):
'set_state_draft': 'You can not set state to draft!',
'set_state_assigned': 'You can not set state to assigned!',
'set_state_done': 'You can not set state to done!',
- 'del_draft_cancel': 'You can only delete draft or cancelled moves!',
- 'service_product': 'You can not use service products for a move!',
+ 'del_draft_cancel': 'You can only delete draft ' \
+ 'or cancelled moves!',
'period_closed': 'You can not modify move in closed period!',
'modify_assigned_done_cancel': ('You can not modify a move '
'in the state: "Assigned", "Done" or "Cancel"'),
@@ -152,7 +151,7 @@ class Move(ModelSQL, ModelView):
def init(self, module_name):
cursor = Transaction().cursor
# Migration from 1.2: packing renamed into shipment
- table = TableHandler(cursor, self, module_name)
+ table = TableHandler(cursor, self, module_name)
table.drop_constraint('check_packing')
for suffix in ('in', 'out', 'in_return', 'out_return', 'internal'):
old_column = 'packing_%s' % suffix
@@ -185,86 +184,30 @@ class Move(ModelSQL, ModelView):
table.not_null_action('internal_quantity', action='add')
# Migration from 1.0 check_packing_in_out has been removed
- table = TableHandler(cursor, self, module_name)
+ table = TableHandler(cursor, self, module_name)
table.drop_constraint('check_packing_in_out')
# Add index on create_date
table.index_action('create_date', action='add')
def default_planned_date(self):
- return Transaction().context.get('planned_date') or False
-
- def default_to_location(self):
- location_obj = Pool().get('stock.location')
- party_obj = Pool().get('party.party')
- res = False
-
- warehouse = None
- if Transaction().context.get('warehouse'):
- warehouse = location_obj.browse(Transaction().context['warehouse'])
-
- if Transaction().context.get('type', '') == 'inventory_in':
- if warehouse:
- res = warehouse.storage_location.id
- elif Transaction().context.get('type', '') == 'inventory_out':
- if warehouse:
- res = warehouse.output_location.id
- elif Transaction().context.get('type', '') == 'incoming':
- if warehouse:
- res = warehouse.input_location.id
- elif Transaction().context.get('type', '') == 'outgoing':
- if Transaction().context.get('customer'):
- customer = party_obj.browse(Transaction().context['customer'])
- res = customer.customer_location.id
-
- if Transaction().context.get('to_location'):
- res = Transaction().context['to_location']
- return res
-
- def default_from_location(self):
- location_obj = Pool().get('stock.location')
- party_obj = Pool().get('party.party')
- res = False
-
- warehouse = None
- if Transaction().context.get('warehouse'):
- warehouse = location_obj.browse(Transaction().context['warehouse'])
-
- if Transaction().context.get('type', '') == 'inventory_in':
- if warehouse:
- res = warehouse.input_location.id
- elif Transaction().context.get('type', '') == 'inventory_out':
- if warehouse:
- res = warehouse.storage_location.id
- elif Transaction().context.get('type', '') == 'outgoing':
- if warehouse:
- res = warehouse.output_location.id
- elif Transaction().context.get('type', '') == 'incoming':
- if Transaction().context.get('supplier'):
- supplier = party_obj.browse(Transaction().context['supplier'])
- res = supplier.supplier_location.id
- elif Transaction().context.get('customer'):
- customer = party_obj.browse(Transaction().context['customer'])
- res = customer.customer_location.id
-
- if Transaction().context.get('from_location'):
- res = Transaction().context['from_location']
- return res
+ return Transaction().context.get('planned_date')
def default_state(self):
return 'draft'
def default_company(self):
- return Transaction().context.get('company') or False
+ return Transaction().context.get('company')
def default_currency(self):
company_obj = Pool().get('company.company')
- currency_obj = Pool().get('currency.currency')
company = Transaction().context.get('company')
if company:
company = company_obj.browse(company)
return company.currency.id
- return False
+
+ def default_unit_digits(self):
+ return 2
def on_change_with_unit_digits(self, vals):
uom_obj = Pool().get('product.uom')
@@ -295,11 +238,18 @@ class Move(ModelSQL, ModelView):
res['uom'] = product.default_uom.id
res['uom.rec_name'] = product.default_uom.rec_name
res['unit_digits'] = product.default_uom.digits
- to_location = None
+ from_location, to_location = None, None
+ if vals.get('from_location'):
+ from_location = location_obj.browse(vals['from_location'])
if vals.get('to_location'):
to_location = location_obj.browse(vals['to_location'])
- if to_location and to_location.type == 'storage':
+ unit_price = None
+ if from_location and from_location.type in ('supplier',
+ 'production'):
unit_price = product.cost_price
+ elif to_location and to_location.type == 'customer':
+ unit_price = product.list_price
+ if unit_price:
if vals.get('uom') and vals['uom'] != product.default_uom.id:
uom = uom_obj.browse(vals['uom'])
unit_price = uom_obj.compute_price(product.default_uom,
@@ -312,6 +262,19 @@ class Move(ModelSQL, ModelView):
res['unit_price'] = unit_price
return res
+ def on_change_with_product_uom_category(self, values):
+ pool = Pool()
+ product_obj = pool.get('product.product')
+ if values.get('product'):
+ product = product_obj.browse(values['product'])
+ return product.default_uom_category.id
+
+ def get_product_uom_category(self, ids, name):
+ categories = {}
+ for move in self.browse(ids):
+ categories[move.id] = move.product.default_uom_category.id
+ return categories
+
def on_change_uom(self, vals):
pool = Pool()
product_obj = pool.get('product.product')
@@ -342,24 +305,15 @@ class Move(ModelSQL, ModelView):
res['unit_price'] = unit_price
return res
- def default_unit_price_required(self):
- from_location = self.default_from_location()
- to_location = self.default_to_location()
- vals = {
- 'from_location': from_location,
- 'to_location': to_location,
- }
- return self.on_change_with_unit_price_required(vals)
-
def on_change_with_unit_price_required(self, vals):
location_obj = Pool().get('stock.location')
if vals.get('from_location'):
from_location = location_obj.browse(vals['from_location'])
- if from_location.type == 'supplier':
+ if from_location.type in ('supplier', 'production'):
return True
if vals.get('to_location'):
to_location = location_obj.browse(vals['to_location'])
- if to_location.type == 'customer':
+ if to_location.type in ('customer', 'production'):
return True
return False
@@ -367,18 +321,12 @@ class Move(ModelSQL, ModelView):
res = {}
for move in self.browse(ids):
res[move.id] = False
- if move.from_location.type == 'supplier':
+ if move.from_location.type in ('supplier', 'production'):
res[move.id] = True
if move.to_location.type == 'customer':
res[move.id] = True
return res
- def check_product_type(self, ids):
- for move in self.browse(ids):
- if move.product.type == 'service':
- return False
- return True
-
def check_period_closed(self, ids):
period_obj = Pool().get('stock.period')
period_ids = period_obj.search([
@@ -399,38 +347,13 @@ class Move(ModelSQL, ModelView):
res = {}
moves = self.browse(ids)
for m in moves:
- res[m.id] = "%s%s %s" % (m.quantity, m.uom.symbol, m.product.rec_name)
+ res[m.id] = ("%s%s %s"
+ % (m.quantity, m.uom.symbol, m.product.rec_name))
return res
def search_rec_name(self, name, clause):
return [('product',) + clause[1:]]
- def search(self, args, offset=0, limit=None, order=None, count=False,
- query_string=False):
- location_obj = Pool().get('stock.location')
-
- args = args[:]
- def process_args(args):
- i = 0
- while i < len(args):
- #add test for xmlrpc that doesn't handle tuple
- if (isinstance(args[i], tuple) or \
- (isinstance(args[i], list) and len(args[i]) > 2 and \
- args[i][1] in OPERATORS)) and \
- args[i][0] == 'to_location_warehouse':
- location_id = False
- if args[i][2]:
- location = location_obj.browse(args[i][2])
- if location.type == 'warehouse':
- location_id = location.input_location.id
- args[i] = ('to_location', args[i][1], location_id)
- elif isinstance(args[i], list):
- process_args(args[i])
- i += 1
- process_args(args)
- return super(Move, self).search(args, offset=offset, limit=limit,
- order=order, count=count, query_string=query_string)
-
def _update_product_cost_price(self, product_id, quantity, uom, unit_price,
currency, company, date):
"""
@@ -456,6 +379,8 @@ class Move(ModelSQL, ModelView):
if isinstance(uom, (int, long)):
uom = uom_obj.browse(uom)
+ if isinstance(currency, (int, long)):
+ currency = currency_obj.browse(currency)
if isinstance(company, (int, long)):
company = company_obj.browse(company)
@@ -489,7 +414,7 @@ class Move(ModelSQL, ModelView):
else:
digits = product_template_obj.cost_price.digits
new_cost_price = new_cost_price.quantize(
- Decimal(str(10.0**-digits[1])))
+ Decimal(str(10.0 ** -digits[1])))
with Transaction().set_user(0, set_context=True):
product_obj.write(product.id, {
@@ -502,7 +427,6 @@ class Move(ModelSQL, ModelView):
product.default_uom, round=True)
return internal_quantity
-
def create(self, vals):
pool = Pool()
location_obj = pool.get('stock.location')
@@ -517,18 +441,22 @@ class Move(ModelSQL, ModelView):
product = product_obj.browse(vals['product'])
if vals.get('state') == 'done':
vals['effective_date'] = effective_date
+ currency_id = vals.get('currency', self.default_currency())
+ company_id = vals.get('company', self.default_company())
from_location = location_obj.browse(vals['from_location'])
to_location = location_obj.browse(vals['to_location'])
- if from_location.type == 'supplier' \
- and product.cost_price_method == 'average':
+ if (from_location.type in ('supplier', 'production')
+ and to_location.type == 'storage'
+ and product.cost_price_method == 'average'):
self._update_product_cost_price(vals['product'],
vals['quantity'], vals['uom'], vals['unit_price'],
- vals['currency'], vals['company'], effective_date)
- if to_location.type == 'supplier' \
- and product.cost_price_method == 'average':
+ currency_id, company_id, effective_date)
+ if (to_location.type == 'supplier'
+ and from_location.type == 'storage'
+ and product.cost_price_method == 'average'):
self._update_product_cost_price(vals['product'],
-vals['quantity'], vals['uom'], vals['unit_price'],
- vals['currency'], vals['company'], effective_date)
+ currency_id, company_id, effective_date)
if not vals.get('cost_price'):
# Re-read product to get the updated cost_price
product = product_obj.browse(vals['product'])
@@ -555,16 +483,18 @@ class Move(ModelSQL, ModelView):
if 'state' in vals:
for move in moves:
if vals['state'] == 'cancel':
- vals['effective_date'] = False
- if move.from_location.type == 'supplier' \
- and move.state != 'cancel' \
- and move.product.cost_price_method == 'average':
+ vals['effective_date'] = None
+ if (move.from_location.type in ('supplier', 'production')
+ and move.to_location.type == 'storage'
+ and move.state != 'cancel'
+ and move.product.cost_price_method == 'average'):
self._update_product_cost_price(move.product.id,
-move.quantity, move.uom, move.unit_price,
move.currency, move.company, today)
- if move.to_location.type == 'supplier' \
- and move.state != 'cancel' \
- and move.product.cost_price_method == 'average':
+ if (move.to_location.type == 'supplier'
+ and move.from_location.type == 'storage'
+ and move.state != 'cancel'
+ and move.product.cost_price_method == 'average'):
self._update_product_cost_price(move.product.id,
move.quantity, move.uom, move.unit_price,
move.currency, move.company, today)
@@ -581,16 +511,18 @@ class Move(ModelSQL, ModelView):
self.raise_user_error('set_state_done')
vals['effective_date'] = effective_date
- if move.from_location.type == 'supplier' \
- and move.state != 'done' \
- and move.product.cost_price_method == 'average':
+ if (move.from_location.type in ('supplier', 'production')
+ and move.to_location.type == 'storage'
+ and move.state != 'done'
+ and move.product.cost_price_method == 'average'):
self._update_product_cost_price(move.product.id,
move.quantity, move.uom, move.unit_price,
move.currency, move.company, effective_date)
- if move.to_location.type == 'supplier' \
- and move.state != 'done' \
- and move.product.cost_price_method == 'average':
- self._update_product_cost_price( move.product.id,
+ if (move.to_location.type == 'supplier'
+ and move.from_location.type == 'storage'
+ and move.state != 'done'
+ and move.product.cost_price_method == 'average'):
+ self._update_product_cost_price(move.product.id,
-move.quantity, move.uom, move.unit_price,
move.currency, move.company, effective_date)
@@ -655,7 +587,7 @@ class Move(ModelSQL, ModelView):
to_pick.append((location, available_qty))
needed_qty -= available_qty
# Force assignation for consumables:
- if move.product.type == "consumable":
+ if move.product.consumable:
to_pick.append((move.from_location, needed_qty))
return to_pick
return to_pick
@@ -725,15 +657,17 @@ class Move(ModelSQL, ModelView):
self.write(move.id, values)
first = False
else:
- move_id = self.copy(move.id, default=values)
+ self.copy(move.id, default=values)
qty_default_uom = uom_obj.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
+ 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)
return success
Move()
diff --git a/move.xml b/move.xml
index b8f83c2..789b4cb 100644
--- a/move.xml
+++ b/move.xml
@@ -41,6 +41,7 @@ this repository contains the full copyright notices and license terms. -->
<record model="ir.ui.view" id="move_view_tree">
<field name="model">stock.move</field>
<field name="type">tree</field>
+ <field name="priority" eval="10"/>
<field name="arch" type="xml">
<![CDATA[
<tree string="Moves">
@@ -49,6 +50,7 @@ this repository contains the full copyright notices and license terms. -->
<field name="to_location"/>
<field name="quantity"/>
<field name="uom"/>
+ <field name="planned_date"/>
<field name="state"/>
<field name="unit_digits" tree_invisible="1"/>
<field name="create_date" tree_invisible="1"/>
@@ -56,6 +58,23 @@ this repository contains the full copyright notices and license terms. -->
]]>
</field>
</record>
+
+ <record model="ir.ui.view" id="move_view_tree_simple">
+ <field name="model">stock.move</field>
+ <field name="type">tree</field>
+ <field name="priority" eval="20"/>
+ <field name="arch" type="xml">
+ <![CDATA[
+ <tree string="Moves">
+ <field name="product"/>
+ <field name="quantity"/>
+ <field name="uom" expand="1"/>
+ <field name="unit_digits" tree_invisible="1"/>
+ </tree>
+ ]]>
+ </field>
+ </record>
+
<record model="ir.action.act_window" id="act_move_form">
<field name="name">Moves</field>
<field name="res_model">stock.move</field>
@@ -73,6 +92,11 @@ this repository contains the full copyright notices and license terms. -->
</record>
<menuitem parent="menu_stock" sequence="40"
action="act_move_form" id="menu_move_form"/>
+ <record model="ir.ui.menu-res.group"
+ id="menu_move_form_group_stock">
+ <field name="menu" ref="menu_move_form"/>
+ <field name="group" ref="group_stock_admin"/>
+ </record>
<record model="ir.action.act_window" id="act_move_form_supp">
diff --git a/period.py b/period.py
index a1b717a..3ca6831 100644
--- a/period.py
+++ b/period.py
@@ -24,22 +24,27 @@ class Period(ModelSQL, ModelView):
state = fields.Selection([
('draft', 'Draft'),
('closed', 'Closed'),
- ], 'State', select=1, readonly=True)
+ ], 'State', select=True, readonly=True)
def __init__(self):
super(Period, self).__init__()
- self._rpc.update({
- 'button_draft': True,
- 'button_close': True,
- })
self._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 '
'there is still assigned moves!'),
})
+ self._buttons.update({
+ 'draft': {
+ 'invisible': Eval('state') == 'draft',
+ },
+ 'close': {
+ 'invisible': Eval('state') == 'closed',
+ },
+ })
- def button_draft(self, ids):
+ @ModelView.button
+ def draft(self, ids):
cache_obj = Pool().get('stock.period.cache')
cache_ids = []
for i in xrange(0, len(ids), Transaction().cursor.IN_MAX):
@@ -50,9 +55,9 @@ class Period(ModelSQL, ModelView):
self.write(ids, {
'state': 'draft',
})
- return True
- def button_close(self, ids):
+ @ModelView.button
+ def close(self, ids):
pool = Pool()
product_obj = pool.get('product.product')
location_obj = pool.get('stock.location')
@@ -72,7 +77,7 @@ class Period(ModelSQL, ModelView):
if move_obj.search([
('state', '=', 'assigned'),
['OR', [
- ('effective_date', '=', False),
+ ('effective_date', '=', None),
('planned_date', '<=', recent_date),
],
('effective_date', '<=', recent_date),
@@ -98,7 +103,6 @@ class Period(ModelSQL, ModelView):
self.write(ids, {
'state': 'closed',
})
- return True
Period()
@@ -110,14 +114,14 @@ class Cache(ModelSQL, ModelView):
It is used to store cached computation of stock quantities.
'''
_name = 'stock.period.cache'
- _description = __doc__
+ _description = __doc__.splitlines()[0]
period = fields.Many2One('stock.period', 'Period', required=True,
- readonly=True, select=1, ondelete='CASCADE')
+ readonly=True, select=True, ondelete='CASCADE')
location = fields.Many2One('stock.location', 'Location', required=True,
- readonly=True, select=1, ondelete='CASCADE')
+ readonly=True, select=True, ondelete='CASCADE')
product = fields.Many2One('product.product', 'Product', required=True,
- readonly=True, select=1, ondelete='CASCADE')
+ readonly=True, select=True, ondelete='CASCADE')
internal_quantity = fields.Float('Internal Quantity', readonly=True)
Cache()
diff --git a/period.xml b/period.xml
index e46cebd..40e2706 100644
--- a/period.xml
+++ b/period.xml
@@ -16,11 +16,9 @@ this repository contains the full copyright notices and license terms. -->
<label name="state"/>
<field name="state"/>
<group col="2" colspan="2" id="buttons">
- <button name="button_draft" type="object" string="Draft"
- states="{'invisible': Equal(Eval('state'), 'draft'), 'readonly': Not(In(%(group_stock_admin)d, Eval('groups', [])))}"
+ <button name="draft" type="object" string="Draft"
icon="tryton-clear"/>
- <button name="button_close" type="object" string="Close"
- states="{'invisible': Equal(Eval('state'), 'closed'), 'readonly': Not(In(%(group_stock_admin)d, Eval('groups', [])))}"
+ <button name="close" type="object" string="Close"
icon="tryton-ok"/>
</group>
</form>
@@ -82,6 +80,26 @@ this repository contains the full copyright notices and license terms. -->
<field name="perm_delete" eval="True"/>
</record>
+ <record model="ir.model.button" id="period_draft_button">
+ <field name="name">draft</field>
+ <field name="model" search="[('model', '=', 'stock.period')]"/>
+ </record>
+ <record model="ir.model.button-res.group"
+ id="period_draft_button_group_stock_admin">
+ <field name="button" ref="period_draft_button"/>
+ <field name="group" ref="group_stock_admin"/>
+ </record>
+
+ <record model="ir.model.button" id="period_close_button">
+ <field name="name">close</field>
+ <field name="model" search="[('model', '=', 'stock.period')]"/>
+ </record>
+ <record model="ir.model.button-res.group"
+ id="period_close_button_group_stock_admin">
+ <field name="button" ref="period_close_button"/>
+ <field name="group" ref="group_stock_admin"/>
+ </record>
+
<record model="ir.ui.view" id="period_cache_view_form">
<field name="model">stock.period.cache</field>
<field name="type">form</field>
diff --git a/product.py b/product.py
index ca79200..f3d36d7 100644
--- a/product.py
+++ b/product.py
@@ -1,28 +1,32 @@
#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 copy
import datetime
+from decimal import Decimal
from trytond.model import ModelView, ModelSQL, fields
-from trytond.wizard import Wizard
-from trytond.pyson import PYSONEncoder
+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
+from trytond.tools import safe_eval, reduce_ids
from trytond.pool import Pool
class Template(ModelSQL, ModelView):
_name = "product.template"
- quantity = fields.Function(fields.Float('Quantity'), 'get_quantity')
+ quantity = fields.Function(fields.Float('Quantity'), 'sum_product')
forecast_quantity = fields.Function(fields.Float('Forecast Quantity'),
- 'get_quantity')
+ 'sum_product')
+ cost_value = fields.Function(fields.Numeric('Cost Value'),
+ 'sum_product')
- def get_quantity(self, ids, name):
+ def sum_product(self, ids, name):
res = {}
- if name not in ('quantity', 'forecast_quantity'):
+ if name not in ('quantity', 'forecast_quantity', 'cost_value'):
raise Exception('Bad argument')
for template in self.browse(ids):
- res[template.id] = 0.0
+ res[template.id] = 0. if name != 'cost_value' else Decimal(0)
for product in template.products:
res[template.id] += product[name]
return res
@@ -33,6 +37,14 @@ class Template(ModelSQL, ModelView):
'change_default_uom': 'You cannot change the default uom for '\
'a product which is associated to stock moves.',
})
+ self.cost_price = copy.copy(self.cost_price)
+ self.cost_price.states = copy.copy(self.cost_price.states)
+ self.cost_price.states['required'] = Or(
+ self.cost_price.states.get('required', True),
+ Eval('type').in_(['goods', 'assets']))
+ self.cost_price.depends = copy.copy(self.cost_price.depends)
+ self.cost_price.depends.append('type')
+ self._reset_columns()
def write(self, ids, vals):
move_obj = Pool().get('stock.move')
@@ -59,6 +71,7 @@ class Template(ModelSQL, ModelView):
Template()
+
class Product(ModelSQL, ModelView):
_name = "product.product"
@@ -66,6 +79,8 @@ class Product(ModelSQL, ModelView):
searcher='search_quantity')
forecast_quantity = fields.Function(fields.Float('Forecast Quantity'),
'get_quantity', searcher='search_quantity')
+ cost_value = fields.Function(fields.Numeric('Cost Value'),
+ 'get_cost_value')
def get_quantity(self, ids, name):
date_obj = Pool().get('ir.date')
@@ -103,7 +118,7 @@ class Product(ModelSQL, ModelView):
if operator not in ("=", ">=", "<=", ">", "<", "!="):
return False
if operator == "=":
- operator= "=="
+ operator = "=="
return (safe_eval(str(value) + operator + str(operand)))
def search_quantity(self, name, domain=None):
@@ -131,15 +146,27 @@ class Product(ModelSQL, ModelView):
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 self._search_quantity_eval_domain(line, domain)]
+ processed_lines.append({
+ 'location': location, # XXX useful ?
+ 'product': product,
+ name: quantity,
+ })
+
+ res = [line['product'] for line in processed_lines
+ if self._search_quantity_eval_domain(line, domain)]
return [('id', 'in', res)]
-
+ def get_cost_value(self, ids, name):
+ cost_values = {}
+ context = {}
+ trans_context = Transaction().context
+ if 'stock_date_end' in context:
+ context['_datetime'] = trans_context['stock_date_end']
+ with Transaction().set_context(context):
+ for product in self.browse(ids):
+ cost_values[product.id] = (Decimal(str(product.quantity))
+ * product.cost_price)
+ return cost_values
def products_by_location(self, location_ids, product_ids=None,
with_childs=False, skip_zero=True):
@@ -154,11 +181,11 @@ class Product(ModelSQL, ModelView):
missing).
stock_assign: if set compute also the assigned moves as done.
forecast: if set compute the forecast quantity.
- stock_destinations: A list of location ids. If set, restrict the
- computation to moves from and to those locations.
+ stock_destinations: A list of location ids. If set, restrict
+ the computation to moves from and to those locations.
stock_skip_warehouse: if set, quantities on a warehouse are no
- more quantities of all child locations but quantities of the
- storage zone.
+ more quantities of all child locations but quantities of
+ the storage zone.
:param location_ids: the ids of locations
:param product_ids: the ids of the products
@@ -169,8 +196,7 @@ class Product(ModelSQL, ModelView):
and quantity as value
"""
pool = Pool()
- uom_obj = pool.get("product.uom")
- product_obj = pool.get("product.product")
+ uom_obj = pool.get('product.uom')
rule_obj = pool.get('ir.rule')
location_obj = pool.get('stock.location')
date_obj = pool.get('ir.date')
@@ -383,9 +409,9 @@ class Product(ModelSQL, ModelView):
product_template_join = ""
product_template_join_period = ""
if product_ids:
- where_clause += "AND product in (" + \
- ",".join(('%s',) * len(product_ids)) + ")"
- where_vals += product_ids
+ red_clause, red_vals = reduce_ids('product', product_ids)
+ where_clause += "AND " + red_clause
+ where_vals += red_vals
else:
where_clause += "AND product_template.active = %s"
where_vals.append(True)
@@ -401,7 +427,6 @@ class Product(ModelSQL, ModelView):
"JOIN product_template "
"ON (product_product.template = product_template.id) ")
-
if context.get('stock_destinations'):
destinations = context.get('stock_destinations')
dest_clause_from = " AND from_location in ("
@@ -474,7 +499,8 @@ class Product(ModelSQL, ModelView):
leafs = set(all_location_ids)
parent = {}
for location in locations:
- if not location.parent: continue
+ if not location.parent:
+ continue
if location.parent.id in leafs:
leafs.remove(location.parent.id)
parent[location.id] = location.parent.id
@@ -487,7 +513,7 @@ class Product(ModelSQL, ModelView):
next_leafs.add(parent[l])
for product in res_product_ids:
res.setdefault((parent[l], product), 0)
- res[(parent[l], product)] += res.get((l,product), 0)
+ res[(parent[l], product)] += res.get((l, product), 0)
leafs = next_leafs
# clean result
@@ -495,6 +521,14 @@ class Product(ModelSQL, ModelView):
if location not in location_ids:
del res[(location, product)]
+ # Round quantities
+ default_uom = dict((p.id, p.default_uom) for p in
+ self.browse(list(res_product_ids)))
+ for key, quantity in res.iteritems():
+ location, product = key
+ uom = default_uom[product]
+ res[key] = uom_obj.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
@@ -502,7 +536,7 @@ class Product(ModelSQL, ModelView):
all_product_ids = product_ids
else:
all_product_ids = Pool().get("product.product").search([])
- keys = ((l,p) for l in location_ids for p in all_product_ids)
+ 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
@@ -529,9 +563,10 @@ class Product(ModelSQL, ModelView):
Product()
-class ChooseStockDateInit(ModelView):
- _name = 'stock.product_stock_date.init'
- _description = "Compute stock quantities"
+class ProductByLocationStart(ModelView):
+ 'Product by Location'
+ _name = 'product.by_location.start'
+ _description = __doc__
forecast_date = fields.Date(
'At Date', help='Allow to compute expected '\
'stock quantities for this date.\n'\
@@ -542,46 +577,46 @@ class ChooseStockDateInit(ModelView):
date_obj = Pool().get('ir.date')
return date_obj.today()
-ChooseStockDateInit()
-
-class OpenLocation(Wizard):
- 'Products by Locations'
- _name = 'stock.location.open'
- states = {
- 'init': {
- 'result': {
- 'type': 'form',
- 'object': 'stock.product_stock_date.init',
- 'state': [
- ('end', 'Cancel', 'tryton-cancel'),
- ('open', 'Open', 'tryton-ok', True),
- ],
- },
- },
- 'open': {
- 'result': {
- 'type': 'action',
- 'action': '_action_open_location',
- 'state': 'end',
- },
- },
- }
-
- def _action_open_location(self, data):
- model_data_obj = Pool().get('ir.model.data')
- act_window_obj = Pool().get('ir.action.act_window')
- act_window_id = model_data_obj.get_id('stock',
- 'act_location_quantity_tree')
- res = act_window_obj.read(act_window_id)
+ProductByLocationStart()
+
+
+class ProductByLocation(Wizard):
+ 'Product by Location'
+ _name = 'product.by_location'
+
+ start = StateView('product.by_location.start',
+ 'stock.product_by_location_start_view_form', [
+ Button('Cancel', 'end', 'tryton-cancel'),
+ Button('Open', 'open', 'tryton-ok', default=True),
+ ])
+ open = StateAction('stock.act_location_quantity_tree')
+
+ def do_open(self, session, action):
+ product_obj = Pool().get('product.product')
+ lang_obj = Pool().get('ir.lang')
context = {}
- context['product'] = data['id']
- if data['form']['forecast_date']:
- context['stock_date_end'] = data['form']['forecast_date']
+ product_id = Transaction().context['active_id']
+ context['product'] = product_id
+ if session.start.forecast_date:
+ context['stock_date_end'] = session.start.forecast_date
else:
context['stock_date_end'] = datetime.date.max
- res['pyson_context'] = PYSONEncoder().encode(context)
+ action['pyson_context'] = PYSONEncoder().encode(context)
+ product = product_obj.browse(product_id)
- return res
+ for code in [Transaction().language, 'en_US']:
+ lang_ids = lang_obj.search([
+ ('code', '=', code),
+ ])
+ if lang_ids:
+ break
+ lang = lang_obj.browse(lang_ids[0])
+ date = lang_obj.strftime(context['stock_date_end'],
+ lang.code, lang.date)
+
+ action['name'] += ' - %s (%s) @ %s' % (product.rec_name,
+ product.default_uom.rec_name, date)
+ return action, {}
-OpenLocation()
+ProductByLocation()
diff --git a/product.xml b/product.xml
index d42437a..d73374c 100644
--- a/product.xml
+++ b/product.xml
@@ -13,6 +13,7 @@ this repository contains the full copyright notices and license terms. -->
<field name="name"/>
<field name="code"/>
<field name="quantity"/>
+ <field name="cost_value"/>
<field name="forecast_quantity"/>
<field name="default_uom"/>
<field name="type"/>
@@ -29,10 +30,11 @@ this repository contains the full copyright notices and license terms. -->
<field name="priority" eval="20"/>
<field name="arch" type="xml">
<![CDATA[
- <tree string="Product Stock">
+ <tree string="Location Quantity">
<field name="name"/>
<field name="quantity"/>
<field name="forecast_quantity"/>
+ <field name="cost_value"/>
<field name="parent" tree_invisible="1"/>
<field name="childs" tree_invisible="1"/>
</tree>
@@ -41,39 +43,39 @@ this repository contains the full copyright notices and license terms. -->
</record>
<record model="ir.action.act_window" id="act_location_quantity_tree">
- <field name="name">Product Stock</field>
+ <field name="name">Location Quantity & Cost Value</field>
<field name="res_model">stock.location</field>
<field name="domain">[('parent', '=', False)]</field>
- <field name="window_name" eval="False"/>
+ <field name="window_name" eval="True"/>
</record>
<record model="ir.action.act_window.view" id="act_location_quantity_tree_view">
<field name="sequence" eval="10"/>
<field name="view" ref="location_quantity_view_tree"/>
<field name="act_window" ref="act_location_quantity_tree"/>
</record>
- <record model="ir.action.wizard" id="wizard_location_open">
+ <record model="ir.action.wizard" id="wizard_product_by_location">
<field name="name">Product by Location</field>
- <field name="wiz_name">stock.location.open</field>
+ <field name="wiz_name">product.by_location</field>
<field name="model">product.product</field>
</record>
<record model="ir.action.keyword"
id="act_location_quantity_keyword1">
<field name="keyword">form_relate</field>
<field name="model">product.product,-1</field>
- <field name="action" ref="wizard_location_open"/>
+ <field name="action" ref="wizard_product_by_location"/>
</record>
<record model="ir.action-res.group"
- id="wizard_location_open-group_stock">
- <field name="action" ref="wizard_location_open"/>
+ id="wizard_product_by_location-group_stock">
+ <field name="action" ref="wizard_product_by_location"/>
<field name="group" ref="group_stock"/>
</record>
- <record model="ir.ui.view" id="product_stock_date_init_view_form">
- <field name="model">stock.product_stock_date.init</field>
+ <record model="ir.ui.view" id="product_by_location_start_view_form">
+ <field name="model">product.by_location.start</field>
<field name="type">form</field>
<field name="arch" type="xml">
<![CDATA[
- <form string="Product Quantity.">
+ <form string="Product by Location">
<label name="forecast_date"/>
<field name="forecast_date"/>
</form>
diff --git a/setup.py b/setup.py
index bbbd07d..e616980 100644
--- a/setup.py
+++ b/setup.py
@@ -12,12 +12,14 @@ minor_version = int(minor_version)
requires = []
for dep in info.get('depends', []):
- if not re.match(r'(ir|res|workflow|webdav)(\W|$)', dep):
+ if not re.match(r'(ir|res|webdav)(\W|$)', dep):
requires.append('trytond_%s >= %s.%s, < %s.%s' %
(dep, major_version, minor_version, major_version,
minor_version + 1))
requires.append('trytond >= %s.%s, < %s.%s' %
(major_version, minor_version, major_version, minor_version + 1))
+tests_require = ['proteus >= %s.%s, < %s.%s' %
+ (major_version, minor_version, major_version, minor_version + 1)]
setup(name='trytond_stock',
version=info.get('version', '0.0.1'),
@@ -68,4 +70,5 @@ setup(name='trytond_stock',
""",
test_suite='tests',
test_loader='trytond.test_loader:Loader',
+ tests_require=tests_require,
)
diff --git a/shipment.py b/shipment.py
index 00150d4..9862050 100644
--- a/shipment.py
+++ b/shipment.py
@@ -2,20 +2,22 @@
#this repository contains the full copyright notices and license terms.
import operator
import itertools
-from trytond.model import ModelWorkflow, ModelView, ModelSQL, fields
+from trytond.model import Workflow, ModelView, ModelSQL, fields
from trytond.modules.company import CompanyReport
-from trytond.wizard import Wizard
+from trytond.wizard import Wizard, StateTransition, StateView, StateAction, \
+ Button
from trytond.backend import TableHandler
-from trytond.pyson import Eval, Not, Equal, If, Or, And, Bool, In, Get
+from trytond.pyson import Eval, Not, Equal, If, Or, And, Bool, In, Get, Id
from trytond.transaction import Transaction
from trytond.pool import Pool
+from trytond.tools import reduce_ids
STATES = {
'readonly': "state in ('cancel', 'done')",
}
-class ShipmentIn(ModelWorkflow, ModelSQL, ModelView):
+class ShipmentIn(Workflow, ModelSQL, ModelView):
"Supplier Shipment"
_name = 'stock.shipment.in'
_description = __doc__
@@ -34,7 +36,7 @@ class ShipmentIn(ModelWorkflow, ModelSQL, ModelView):
Get(Eval('context', {}), 'company', 0)),
],
depends=['state'])
- reference = fields.Char("Reference", size=None, select=1,
+ reference = fields.Char("Reference", size=None, select=True,
states={
'readonly': Not(Equal(Eval('state'), 'draft')),
}, depends=['state'])
@@ -44,6 +46,9 @@ class ShipmentIn(ModelWorkflow, ModelSQL, ModelView):
Bool(Eval('incoming_moves'))), Bool(Eval('supplier'))),
}, on_change=['supplier'], required=True,
depends=['state', 'incoming_moves', 'supplier'])
+ supplier_location = fields.Function(fields.Many2One('stock.location',
+ 'Supplier Location', on_change_with=['supplier']),
+ 'get_supplier_location')
contact_address = fields.Many2One('party.address', 'Contact Address',
states={
'readonly': Not(Equal(Eval('state'), 'draft')),
@@ -55,34 +60,50 @@ class ShipmentIn(ModelWorkflow, ModelSQL, ModelView):
'readonly': Or(In(Eval('state'), ['cancel', 'done']),
Bool(Eval('incoming_moves'))),
}, depends=['state', 'incoming_moves'])
+ warehouse_input = fields.Function(fields.Many2One('stock.location',
+ 'Warehouse Input', on_change_with=['warehouse']),
+ 'get_warehouse_input')
+ warehouse_storage = fields.Function(fields.Many2One('stock.location',
+ 'Warehouse Storage', on_change_with=['warehouse']),
+ 'get_warehouse_storage')
incoming_moves = fields.Function(fields.One2Many('stock.move', None,
- 'Incoming Moves', add_remove=[
- ('shipment_in', '=', False),
- ('from_location.type', '=', 'supplier'),
- ('state', '=', 'draft'),
- ('to_location_warehouse', '=', Eval('warehouse')),
- ],
- states={
- 'readonly': Or(In(Eval('state'), ['received', 'done', 'cancel']),
- Not(Bool(Eval('warehouse')))),
- }, context={
- 'warehouse': Eval('warehouse'),
- 'type': 'incoming',
- 'supplier': Eval('supplier'),
- }, depends=['state', 'warehouse']),
+ 'Incoming Moves',
+ add_remove=[
+ ('shipment_in', '=', None),
+ ('from_location', '=', Eval('supplier_location')),
+ ('state', '=', 'draft'),
+ ('to_location', '=', Eval('warehouse_input')),
+ ],
+ domain=[
+ ('from_location', '=', Eval('supplier_location')),
+ ('to_location', '=', Eval('warehouse_input')),
+ ('company', '=', Eval('company')),
+ ],
+ states={
+ 'readonly': (Eval('state').in_(['received', 'done', 'cancel'])
+ | ~Eval('warehouse') | ~Eval('supplier')),
+ },
+ 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', states={
- 'readonly': In(Eval('state'), ['draft', 'done', 'cancel']),
- }, context={
- 'warehouse': Eval('warehouse'),
- 'type': 'inventory_in',
- }, depends=['state', 'warehouse']),
+ 'Inventory Moves',
+ domain=[
+ ('from_location', '=', Eval('warehouse_input')),
+ ('to_location', 'child_of', [Eval('warehouse_storage', -1)],
+ 'parent'),
+ ('company', '=', Eval('company')),
+ ],
+ states={
+ 'readonly': In(Eval('state'), ['draft', 'done', 'cancel']),
+ },
+ depends=['state', 'warehouse', 'warehouse_input',
+ 'warehouse_storage', 'company']),
'get_inventory_moves', setter='set_inventory_moves')
moves = fields.One2Many('stock.move', 'shipment_in', 'Moves',
domain=[('company', '=', Eval('company'))], readonly=True,
depends=['company'])
- code = fields.Char("Code", size=None, select=1, readonly=True)
+ code = fields.Char("Code", size=None, select=True, readonly=True)
state = fields.Selection([
('draft', 'Draft'),
('done', 'Done'),
@@ -92,16 +113,36 @@ class ShipmentIn(ModelWorkflow, ModelSQL, ModelView):
def __init__(self):
super(ShipmentIn, self).__init__()
- self._rpc.update({
- 'button_draft': True,
- })
self._order[0] = ('id', 'DESC')
self._error_messages.update({
- 'incoming_move_input_dest': 'Incoming Moves must ' \
- 'have the warehouse input location as destination location!',
- 'inventory_move_input_source': 'Inventory Moves must ' \
+ 'incoming_move_input_dest': 'Incoming Moves must have ' \
+ 'the warehouse input location as destination location!',
+ 'inventory_move_input_source': 'Inventory Moves must ' \
'have the warehouse input location as source location!',
- })
+ 'delete_cancel': 'Supplier Shipment "%s" must be cancelled '\
+ 'before deletion!',
+ })
+ self._transitions |= set((
+ ('draft', 'received'),
+ ('received', 'done'),
+ ('draft', 'cancel'),
+ ('received', 'cancel'),
+ ('cancel', 'draft'),
+ ))
+ self._buttons.update({
+ 'cancel': {
+ 'invisible': Eval('state').in_(['cancel', 'done']),
+ },
+ 'draft': {
+ 'invisible': Eval('state') != 'cancel',
+ },
+ 'receive': {
+ 'invisible': Eval('state') != 'draft',
+ },
+ 'done': {
+ 'invisible': Eval('state') != 'received',
+ },
+ })
def init(self, module_name):
cursor = Transaction().cursor
@@ -121,16 +162,6 @@ class ShipmentIn(ModelWorkflow, ModelSQL, ModelView):
"OR name like '%%packing%%') AND module = %s",
(module_name,))
- cursor.execute("UPDATE wkf "\
- "SET model = 'stock.shipment.in' "\
- "where model = 'stock.packing.in'")
- cursor.execute("UPDATE wkf_instance "\
- "SET res_type = 'stock.shipment.in' "\
- "where res_type = 'stock.packing.in'")
- cursor.execute("UPDATE wkf_trigger "\
- "SET model = 'stock.shipment.in' "\
- "WHERE model = 'stock.packing.in'")
-
old_table = 'stock_packing_in'
if TableHandler.table_exist(cursor, old_table):
TableHandler.table_rename(cursor, old_table, self._table)
@@ -159,7 +190,12 @@ class ShipmentIn(ModelWorkflow, ModelSQL, ModelView):
for company_id, values in itertools.groupby(cursor.fetchall(),
operator.itemgetter(1)):
shipment_ids = [x[0] for x in values]
- self.write(shipment_ids, {'company': company_id})
+ 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 "' + self._table + '" '
+ 'SET company = %s WHERE ' + red_sql,
+ [company_id] + red_ids)
table.not_null_action('company', action='add')
# Add index on create_date
@@ -174,18 +210,72 @@ class ShipmentIn(ModelWorkflow, ModelSQL, ModelView):
location_ids = location_obj.search(self.warehouse.domain)
if len(location_ids) == 1:
return location_ids[0]
- return False
def default_company(self):
- return Transaction().context.get('company') or False
+ return Transaction().context.get('company')
def on_change_supplier(self, values):
if not values.get('supplier'):
- return {'contact_address': False}
+ return {'contact_address': None}
party_obj = Pool().get("party.party")
address_id = party_obj.address_get(values['supplier'])
return {'contact_address': address_id}
+ def on_change_with_supplier_location(self, values):
+ pool = Pool()
+ party_obj = pool.get('party.party')
+ if values.get('supplier'):
+ supplier = party_obj.browse(values['supplier'])
+ return supplier.supplier_location.id
+
+ def get_supplier_location(self, ids, name):
+ locations = {}
+ for shipment in self.browse(ids):
+ locations[shipment.id] = shipment.supplier.supplier_location.id
+ return locations
+
+ def default_warehouse_input(self):
+ warehouse = self.default_warehouse()
+ if warehouse:
+ value = self.on_change_with_warehouse_input({
+ 'warehouse': warehouse,
+ })
+ return value
+
+ def on_change_with_warehouse_input(self, values):
+ pool = Pool()
+ location_obj = pool.get('stock.location')
+ if values.get('warehouse'):
+ warehouse = location_obj.browse(values['warehouse'])
+ return warehouse.input_location.id
+
+ def get_warehouse_input(self, ids, name):
+ inputs = {}
+ for shipment in self.browse(ids):
+ inputs[shipment.id] = shipment.warehouse.input_location.id
+ return inputs
+
+ def default_warehouse_storage(self):
+ warehouse = self.default_warehouse()
+ if warehouse:
+ value = self.on_change_with_warehouse_storage({
+ 'warehouse': warehouse,
+ })
+ return value
+
+ def on_change_with_warehouse_storage(self, values):
+ pool = Pool()
+ location_obj = pool.get('stock.location')
+ if values.get('warehouse'):
+ warehouse = location_obj.browse(values['warehouse'])
+ return warehouse.storage_location.id
+
+ def get_warehouse_storage(self, ids, name):
+ storages = {}
+ for shipment in self.browse(ids):
+ storages[shipment.id] = shipment.warehouse.storage_location.id
+ return storages
+
def get_incoming_moves(self, ids, name):
res = {}
for shipment in self.browse(ids):
@@ -196,41 +286,8 @@ class ShipmentIn(ModelWorkflow, ModelSQL, ModelView):
return res
def set_incoming_moves(self, ids, name, value):
- move_obj = Pool().get('stock.move')
-
if not value:
return
-
- shipments = self.browse(ids)
- move_ids = []
- for act in value:
- if act[0] == 'create':
- if 'to_location' in act[1]:
- for shipment in shipments:
- if act[1]['to_location'] != \
- shipment.warehouse.input_location.id:
- self.raise_user_error('incoming_move_input_dest')
- elif act[0] == 'write':
- if 'to_location' in act[2]:
- for shipment in shipments:
- if act[2]['to_location'] != \
- shipment.warehouse.input_location.id:
- self.raise_user_error('incoming_move_input_dest')
- elif act[0] == 'add':
- if isinstance(act[1], (int, long)):
- move_ids.append(act[1])
- else:
- move_ids.extend(act[1])
- elif act[0] == 'set':
- move_ids.extend(act[1])
-
- moves = move_obj.browse(move_ids)
- for move in moves:
- for shipment in shipments:
- if move.to_location.id != \
- shipment.warehouse.input_location.id:
- self.raise_user_error('incoming_move_input_dest')
-
self.write(ids, {
'moves': value,
})
@@ -240,97 +297,18 @@ class ShipmentIn(ModelWorkflow, ModelSQL, ModelView):
for shipment in self.browse(ids):
res[shipment.id] = []
for move in shipment.moves:
- if move.from_location.id == shipment.warehouse.input_location.id:
+ if (move.from_location.id ==
+ shipment.warehouse.input_location.id):
res[shipment.id].append(move.id)
return res
def set_inventory_moves(self, ids, name, value):
- move_obj = Pool().get('stock.move')
-
if not value:
return
-
- shipments = self.browse(ids)
- move_ids = []
- for act in value:
- if act[0] == 'create':
- if 'from_location' in act[1]:
- for shipment in shipments:
- if act[1]['from_location'] != \
- shipment.warehouse.input_location.id:
- self.raise_user_error('inventory_move_input_source')
- elif act[0] == 'write':
- if 'from_location' in act[2]:
- for shipment in shipments:
- if act[2]['from_location'] != \
- shipment.warehouse.input_location.id:
- self.raise_user_error('inventory_move_input_source')
- elif act[0] == 'add':
- if isinstance(act[1], (int, long)):
- move_ids.append(act[1])
- else:
- move_ids.extend(act[1])
- elif act[0] == 'set':
- move_ids.extend(act[1])
-
- moves = move_obj.browse(move_ids)
- for move in moves:
- for shipment in shipments:
- if move.from_location.id != \
- shipment.warehouse.input_location.id:
- self.raise_user_error('inventory_move_input_source')
-
self.write(ids, {
'moves': value,
})
- def wkf_done(self, shipment):
- move_obj = Pool().get('stock.move')
- date_obj = Pool().get('ir.date')
-
- move_obj.write([m.id for m in shipment.inventory_moves
- if m.state not in ('done', 'cancel')], {
- 'state': 'done',
- })
- self.write(shipment.id,{
- 'state': 'done',
- 'effective_date': date_obj.today(),
- })
-
- def wkf_cancel(self, shipment):
- move_obj = Pool().get('stock.move')
- move_obj.write([m.id for m in shipment.incoming_moves
- if m.state != 'cancel'] +
- [m.id for m in shipment.inventory_moves
- if m.state != 'cancel'], {
- 'state': 'cancel',
- })
- self.write(shipment.id, {
- 'state': 'cancel',
- })
-
- def wkf_received(self, shipment):
- move_obj = Pool().get('stock.move')
- move_obj.write([m.id for m in shipment.incoming_moves
- if m.state not in ('done', 'cancel')], {
- 'state': 'done',
- })
- self.write(shipment.id, {
- 'state': 'received'
- })
- self.create_inventory_moves(shipment.id)
-
- def wkf_draft(self, shipment):
- move_obj = Pool().get('stock.move')
- move_obj.write([m.id for m in shipment.incoming_moves
- if m.state != 'draft'], {
- 'state': 'draft',
- })
- move_obj.delete([m.id for m in shipment.inventory_moves])
- self.write(shipment.id, {
- 'state': 'draft',
- })
-
def _get_move_planned_date(self, shipment):
'''
Return the planned date for incoming moves and inventory_moves
@@ -376,8 +354,8 @@ class ShipmentIn(ModelWorkflow, ModelSQL, ModelView):
if default is None:
default = {}
default = default.copy()
- default['inventory_moves']= False
- default['incoming_moves']= False
+ default['inventory_moves'] = None
+ default['incoming_moves'] = None
return super(ShipmentIn, self).copy(ids, default=default)
def _get_inventory_moves(self, incoming_move):
@@ -393,33 +371,87 @@ class ShipmentIn(ModelWorkflow, ModelSQL, ModelView):
res['state'] = 'draft'
# Product will be considered in stock only when the inventory
# move will be made:
- res['planned_date'] = False
+ res['planned_date'] = None
res['company'] = incoming_move.company.id
return res
- def create_inventory_moves(self, shipment_id):
- shipment = self.browse(shipment_id)
- for incoming_move in shipment.incoming_moves:
- vals = self._get_inventory_moves(incoming_move)
- if vals:
- self.write(shipment.id, {
- 'inventory_moves': [('create', vals)],
- })
+ def create_inventory_moves(self, shipments):
+ for shipment in shipments:
+ for incoming_move in shipment.incoming_moves:
+ vals = self._get_inventory_moves(incoming_move)
+ if vals:
+ self.write(shipment.id, {
+ 'inventory_moves': [('create', vals)],
+ })
+
+ def delete(self, ids):
+ if isinstance(ids, (int, long)):
+ ids = [ids]
+ # Cancel before delete
+ self.cancel(ids)
+ for shipment in self.browse(ids):
+ if shipment.state != 'cancel':
+ self.raise_user_error('delete_cancel', shipment.rec_name)
+ return super(ShipmentIn, self).delete(ids)
- def button_draft(self, ids):
- self.workflow_trigger_create(ids)
- return True
+ @ModelView.button
+ @Workflow.transition('cancel')
+ def cancel(self, ids):
+ move_obj = Pool().get('stock.move')
+ shipments = self.browse(ids)
+ move_obj.write([m.id for s in shipments
+ for m in s.incoming_moves + s.inventory_moves
+ if m.state not in ('cancel', 'done')], {
+ 'state': 'cancel',
+ })
+
+ @ModelView.button
+ @Workflow.transition('draft')
+ def draft(self, ids):
+ move_obj = Pool().get('stock.move')
+ shipments = self.browse(ids)
+ move_obj.write([m.id for s in shipments for m in s.incoming_moves
+ if m.state not in ('draft', 'done')], {
+ 'state': 'draft',
+ })
+ move_obj.delete([m.id for s in shipments for m in s.inventory_moves
+ if m.state in ('draft', 'cancel')])
+
+ @ModelView.button
+ @Workflow.transition('received')
+ def receive(self, ids):
+ move_obj = Pool().get('stock.move')
+ shipments = self.browse(ids)
+ move_obj.write([m.id for s in shipments for m in s.incoming_moves
+ if m.state not in ('done', 'cancel')], {
+ 'state': 'done',
+ })
+ self.create_inventory_moves(shipments)
+
+ @ModelView.button
+ @Workflow.transition('done')
+ def done(self, ids):
+ move_obj = Pool().get('stock.move')
+ date_obj = Pool().get('ir.date')
+ shipments = self.browse(ids)
+ move_obj.write([m.id for s in shipments for m in s.inventory_moves
+ if m.state not in ('done', 'cancel')], {
+ 'state': 'done',
+ })
+ self.write(ids, {
+ 'effective_date': date_obj.today(),
+ })
ShipmentIn()
-class ShipmentInReturn(ModelWorkflow, ModelSQL, ModelView):
+class ShipmentInReturn(Workflow, ModelSQL, ModelView):
"Supplier Return Shipment"
_name = 'stock.shipment.in.return'
_description = __doc__
_rec_name = 'code'
- effective_date =fields.Date('Effective Date', readonly=True)
+ effective_date = fields.Date('Effective Date', readonly=True)
planned_date = fields.Date('Planned Date',
states={
'readonly': Not(Equal(Eval('state'), 'draft')),
@@ -433,8 +465,8 @@ class ShipmentInReturn(ModelWorkflow, ModelSQL, ModelView):
Get(Eval('context', {}), 'company', 0)),
],
depends=['state'])
- code = fields.Char("Code", size=None, select=1, readonly=True)
- reference = fields.Char("Reference", size=None, select=1,
+ code = fields.Char("Code", size=None, select=True, readonly=True)
+ reference = fields.Char("Reference", size=None, select=True,
states={
'readonly': Not(Equal(Eval('state'), 'draft')),
}, depends=['state'])
@@ -456,12 +488,11 @@ class ShipmentInReturn(ModelWorkflow, ModelSQL, ModelView):
Not(Bool(Eval('from_location')))),
Bool(Eval('to_location'))),
},
- domain=[('company', '=', Eval('company'))],
- context={
- 'from_location': Eval('from_location'),
- 'to_location': Eval('to_location'),
- 'planned_date': Eval('planned_date'),
- },
+ domain=[
+ ('from_location', '=', Eval('from_location')),
+ ('to_location', '=', Eval('to_location')),
+ ('company', '=', Eval('company')),
+ ],
depends=['state', 'from_location', 'to_location', 'company'])
state = fields.Selection([
('draft', 'Draft'),
@@ -471,26 +502,48 @@ class ShipmentInReturn(ModelWorkflow, ModelSQL, ModelView):
('done', 'Done'),
], 'State', readonly=True)
- def default_state(self):
- return 'draft'
-
- def button_draft(self, ids):
- self.workflow_trigger_create(ids)
- return True
+ def __init__(self):
+ super(ShipmentInReturn, self).__init__()
+ self._order[0] = ('id', 'DESC')
+ self._error_messages.update({
+ 'delete_cancel': 'Supplier Return Shipment "%s" must be '\
+ 'cancelled before deletion!',
+ })
+ self._transitions |= set((
+ ('draft', 'waiting'),
+ ('waiting', 'assigned'),
+ ('waiting', 'draft'),
+ ('assigned', 'done'),
+ ('assigned', 'waiting'),
+ ('draft', 'cancel'),
+ ('waiting', 'cancel'),
+ ('assigned', 'cancel'),
+ ('cancel', 'draft'),
+ ))
+ self._buttons.update({
+ 'cancel': {
+ 'invisible': Eval('state').in_(['cancel', 'done']),
+ },
+ 'draft': {
+ 'invisible': ~Eval('state').in_(['waiting', 'cancel']),
+ 'icon': If(Eval('state') == 'cancel', 'tryton-clear',
+ 'tryton-go-previous'),
+ },
+ 'wait': {
+ 'invisible': ~Eval('state').in_(['assigned', 'draft']),
+ 'icon': If(Eval('state') == 'assigned',
+ 'tryton-go-previous', 'tryton-go-next'),
+ },
+ 'done': {
+ 'invisible': Eval('state') != 'assigned',
+ },
+ 'assign_try': {},
+ 'assign_force': {},
+ })
def init(self, module_name):
cursor = Transaction().cursor
# Migration from 1.2: packing renamed into shipment
- cursor.execute("UPDATE wkf "\
- "SET model = 'stock.shipment.in.return' "\
- "where model = 'stock.packing.in.return'")
- cursor.execute("UPDATE wkf_instance "\
- "SET res_type = 'stock.shipment.in.return' "\
- "where res_type = 'stock.packing.in.return'")
- cursor.execute("UPDATE wkf_trigger "\
- "SET model = 'stock.shipment.in.return' "\
- "WHERE model = 'stock.packing.in.return'")
-
old_table = 'stock_packing_in_return'
if TableHandler.table_exist(cursor, old_table):
TableHandler.table_rename(cursor, old_table, self._table)
@@ -520,19 +573,23 @@ class ShipmentInReturn(ModelWorkflow, ModelSQL, ModelView):
for company_id, values in itertools.groupby(cursor.fetchall(),
operator.itemgetter(1)):
shipment_ids = [x[0] for x in values]
- self.write(shipment_ids, {'company': company_id})
+ 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 "' + self._table + '" '
+ 'SET company = %s WHERE ' + red_sql,
+ [company_id] + red_ids)
table.not_null_action('company', action='add')
# Add index on create_date
table = TableHandler(cursor, self, module_name)
table.index_action('create_date', action='add')
- def __init__(self):
- super(ShipmentInReturn, self).__init__()
- self._rpc.update({
- 'button_draft': True,
- })
- self._order[0] = ('id', 'DESC')
+ def default_state(self):
+ return 'draft'
+
+ def default_company(self):
+ return Transaction().context.get('company')
def _get_move_planned_date(self, shipment):
'''
@@ -571,58 +628,74 @@ class ShipmentInReturn(ModelWorkflow, ModelSQL, ModelView):
self._set_move_planned_date(ids)
return result
- def default_company(self):
- return Transaction().context.get('company') or False
-
- def wkf_draft(self, shipment):
- move_obj = Pool().get('stock.move')
- self.write(shipment.id, {
- 'state': 'draft',
- })
- move_obj.write([m.id for m in shipment.moves if m.state != 'draft'], {
- 'state': 'draft',
- })
+ def delete(self, ids):
+ if isinstance(ids, (int, long)):
+ ids = [ids]
+ # Cancel before delete
+ self.cancel(ids)
+ for shipment in self.browse(ids):
+ if shipment.state != 'cancel':
+ self.raise_user_error('delete_cancel', shipment.rec_name)
+ return super(ShipmentInReturn, self).delete(ids)
- def wkf_waiting(self, shipment):
+ @ModelView.button
+ @Workflow.transition('draft')
+ def draft(self, ids):
move_obj = Pool().get('stock.move')
- move_obj.write([m.id for m in shipment.moves
- if m.state not in ('cancel', 'draft')], {
+ shipments = self.browse(ids)
+ move_obj.write([m.id for s in shipments for m in s.moves
+ if m.state not in ('draft', 'done')], {
'state': 'draft',
- 'planned_date': shipment.planned_date,
})
- self.write(shipment.id, {
- 'state': 'waiting',
- })
+ @ModelView.button
+ @Workflow.transition('waiting')
+ def wait(self, ids):
+ move_obj = Pool().get('stock.move')
+ shipments = self.browse(ids)
+ for shipment in shipments:
+ move_obj.write([m.id for m in shipment.moves
+ if m.state not in ('cancel', 'draft', 'done')], {
+ 'state': 'draft',
+ 'planned_date': shipment.planned_date,
+ })
- def wkf_assigned(self, shipment):
- self.write(shipment.id, {
- 'state': 'assigned',
- })
+ @Workflow.transition('assigned')
+ def assign(self, ids):
+ move_obj = Pool().get('stock.move')
+ shipments = self.browse(ids)
+ move_obj.write([m.id for s in shipments for m in s.moves
+ if m.state not in ('assigned', 'cancel', 'done')], {
+ 'state': 'assigned',
+ })
- def wkf_done(self, shipment):
+ @ModelView.button
+ @Workflow.transition('done')
+ def done(self, ids):
move_obj = Pool().get('stock.move')
date_obj = Pool().get('ir.date')
- move_obj.write([m.id for m in shipment.moves
- if m.state not in ('done', 'cancel')], {
+ shipments = self.browse(ids)
+ move_obj.write([m.id for s in shipments for m in s.moves
+ if m.state not in ('done', 'cancel')], {
'state': 'done',
})
- self.write(shipment.id, {
- 'state': 'done',
- 'effective_date': date_obj.today(),
- })
+ self.write(ids, {
+ 'effective_date': date_obj.today(),
+ })
- def wkf_cancel(self, shipment):
+ @ModelView.button
+ @Workflow.transition('cancel')
+ def cancel(self, ids):
move_obj = Pool().get('stock.move')
- move_obj.write([m.id for m in shipment.moves if m.state != 'cancel'], {
- 'state': 'cancel',
- })
- self.write(shipment.id, {
- 'state': 'cancel',
- })
+ shipments = self.browse(ids)
+ move_obj.write([m.id for s in shipments for m in s.moves
+ if m.state not in ('cancel', 'done')], {
+ 'state': 'cancel',
+ })
- def wkf_assign_try(self, shipment):
+ @ModelView.button
+ def assign_try(self, ids):
pool = Pool()
product_obj = pool.get('product.product')
uom_obj = pool.get('product.uom')
@@ -631,14 +704,16 @@ class ShipmentInReturn(ModelWorkflow, ModelSQL, ModelView):
Transaction().cursor.lock(move_obj._table)
- location_ids = [m.from_location.id for m in shipment.moves]
+ shipments = self.browse(ids)
+ moves = [m for s in shipments for m in s.moves]
+ location_ids = [m.from_location.id for m in moves]
with Transaction().set_context(
stock_date_end=date_obj.today(),
stock_assign=True):
pbl = product_obj.products_by_location(location_ids=location_ids,
- product_ids=[m.product.id for m in shipment.moves])
+ product_ids=[m.product.id for m in moves])
- for move in shipment.moves:
+ for move in moves:
if move.state != 'draft':
continue
if (move.from_location.id, move.product.id) in pbl:
@@ -647,28 +722,22 @@ class ShipmentInReturn(ModelWorkflow, ModelSQL, ModelView):
qty_default_uom, move.uom, round=False)
if qty < move.quantity:
return False
- pbl[(move.from_location.id, move.product.id)] = \
- pbl[(move.from_location.id, move.product.id)] - qty_default_uom
+ pbl[(move.from_location.id, move.product.id)] = (
+ pbl[(move.from_location.id, move.product.id)]
+ - qty_default_uom)
else:
return False
-
- move_obj.write([m.id for m in shipment.moves], {
- 'state': 'assigned',
- })
- return True
-
- def wkf_assign_force(self, shipment):
- move_obj = Pool().get('stock.move')
- move_obj.write([m.id for m in shipment.moves], {
- 'state': 'assigned',
- })
+ self.assign(ids)
return True
+ @ModelView.button
+ def assign_force(self, ids):
+ self.assign(ids)
ShipmentInReturn()
-class ShipmentOut(ModelWorkflow, ModelSQL, ModelView):
+class ShipmentOut(Workflow, ModelSQL, ModelView):
"Customer Shipment"
_name = 'stock.shipment.out'
_description = __doc__
@@ -694,13 +763,16 @@ class ShipmentOut(ModelWorkflow, ModelSQL, ModelView):
Bool(Eval('outgoing_moves'))),
}, on_change=['customer'],
depends=['state', 'outgoing_moves'])
+ customer_location = fields.Function(fields.Many2One('stock.location',
+ 'Customer Location', on_change_with=['customer']),
+ 'get_customer_location')
delivery_address = fields.Many2One('party.address',
'Delivery Address', required=True,
states={
'readonly': Not(Equal(Eval('state'), 'draft')),
}, domain=[('party', '=', Eval('customer'))],
depends=['state', 'customer'])
- reference = fields.Char("Reference", size=None, select=1,
+ reference = fields.Char("Reference", size=None, select=True,
states={
'readonly': Not(Equal(Eval('state'), 'draft')),
}, depends=['state'])
@@ -710,28 +782,45 @@ class ShipmentOut(ModelWorkflow, ModelSQL, ModelView):
Bool(Eval('outgoing_moves'))),
}, domain=[('type', '=', 'warehouse')],
depends=['state', 'outgoing_moves'])
+ warehouse_storage = fields.Function(fields.Many2One('stock.location',
+ 'Warehouse Storage', on_change_with=['warehouse']),
+ 'get_warehouse_storage')
+ warehouse_output = fields.Function(fields.Many2One('stock.location',
+ 'Warehouse Output', on_change_with=['warehouse']),
+ 'get_warehouse_output')
outgoing_moves = fields.Function(fields.One2Many('stock.move', None,
- 'Outgoing Moves', states={
- 'readonly': Or(Not(Equal(Eval('state'), 'draft')),
- Not(Bool(Eval('warehouse')))),
- }, context={
- 'warehouse': Eval('warehouse'),
- 'type': 'outgoing',
- 'customer': Eval('customer'),
- }, depends=['state', 'warehouse', 'customer']),
+ 'Outgoing Moves',
+ domain=[
+ ('from_location', '=', Eval('warehouse_output')),
+ ('to_location', '=', Eval('customer_location')),
+ ('company', '=', Eval('company')),
+ ],
+ states={
+ 'readonly': ((Eval('state').in_(['waiting', 'done', 'cancel']))
+ | ~Eval('warehouse') | ~Eval('customer')),
+ },
+ 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', states={
- 'readonly': In(Eval('state'), ['draft', 'packed', 'done']),
- }, context={
- 'warehouse': Eval('warehouse'),
- 'type': 'inventory_out',
- }, depends=['state', 'warehouse']),
+ 'Inventory Moves',
+ domain=[
+ ('from_location', 'child_of', [Eval('warehouse_storage', -1)],
+ 'parent'),
+ ('to_location', '=', Eval('warehouse_output')),
+ ('company', '=', Eval('company')),
+ ],
+ states={
+ 'readonly': Eval('state').in_(
+ ['draft', 'packed', 'done', 'cancel']),
+ },
+ depends=['state', 'warehouse', 'warehouse_storage',
+ 'warehouse_output', 'company']),
'get_inventory_moves', setter='set_inventory_moves')
moves = fields.One2Many('stock.move', 'shipment_out', 'Moves',
domain=[('company', '=', Eval('company'))], depends=['company'],
readonly=True)
- code = fields.Char("Code", size=None, select=1, readonly=True)
+ code = fields.Char("Code", size=None, select=True, readonly=True)
state = fields.Selection([
('draft', 'Draft'),
('done', 'Done'),
@@ -743,30 +832,56 @@ class ShipmentOut(ModelWorkflow, ModelSQL, ModelView):
def __init__(self):
super(ShipmentOut, self).__init__()
- self._rpc.update({
- 'button_draft': True,
- })
self._order[0] = ('id', 'DESC')
self._error_messages.update({
- 'outgoing_move_output_source': 'Outgoing Moves must ' \
- 'have the warehouse output location as source location!',
- 'inventory_move_output_dest': 'Inventory Moves must have the ' \
- 'warehouse output location as destination location!',
- })
+ 'delete_cancel': 'Customer Shipment "%s" must be cancelled '\
+ 'before deletion!',
+ })
+ self._transitions |= set((
+ ('draft', 'waiting'),
+ ('waiting', 'assigned'),
+ ('assigned', 'packed'),
+ ('packed', 'done'),
+ ('assigned', 'waiting'),
+ ('waiting', 'waiting'),
+ ('waiting', 'draft'),
+ ('draft', 'cancel'),
+ ('waiting', 'cancel'),
+ ('assigned', 'cancel'),
+ ('packed', 'cancel'),
+ ('cancel', 'draft'),
+ ))
+ self._buttons.update({
+ 'cancel': {
+ 'invisible': Eval('state').in_(['cancel', 'done']),
+ },
+ 'draft': {
+ 'invisible': ~Eval('state').in_(['waiting', 'cancel']),
+ 'icon': If(Eval('state') == 'cancel', 'tryton-clear',
+ 'tryton-go-previous'),
+ },
+ 'wait': {
+ 'invisible': ~Eval('state').in_(['assigned', 'waiting',
+ 'draft']),
+ 'icon': If(Eval('state') == 'assigned',
+ 'tryton-go-previous',
+ If(Eval('state') == 'waiting',
+ 'tryton-clear',
+ 'tryton-go-next')),
+ },
+ 'pack': {
+ 'invisible': Eval('state') != 'assigned',
+ },
+ 'done': {
+ 'invisible': Eval('state') != 'packed',
+ },
+ 'assign_try': {},
+ 'assign_force': {},
+ })
def init(self, module_name):
cursor = Transaction().cursor
# Migration from 1.2: packing renamed into shipment
- cursor.execute("UPDATE wkf "\
- "SET model = 'stock.shipment.out' "\
- "where model = 'stock.packing.out'")
- cursor.execute("UPDATE wkf_instance "\
- "SET res_type = 'stock.shipment.out' "\
- "where res_type = 'stock.packing.out'")
- cursor.execute("UPDATE wkf_trigger "\
- "SET model = 'stock.shipment.out' "\
- "WHERE model = 'stock.packing.out'")
-
old_table = 'stock_packing_out'
if TableHandler.table_exist(cursor, old_table):
TableHandler.table_rename(cursor, old_table, self._table)
@@ -797,7 +912,12 @@ class ShipmentOut(ModelWorkflow, ModelSQL, ModelView):
for company_id, values in itertools.groupby(cursor.fetchall(),
operator.itemgetter(1)):
shipment_ids = [x[0] for x in values]
- self.write(shipment_ids, {'company': company_id})
+ 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 "' + self._table + '" '
+ 'SET company = %s WHERE ' + red_sql,
+ [company_id] + red_ids)
table.not_null_action('company', action='add')
# Migration from 1.0 customer_location is no more used
@@ -815,18 +935,72 @@ class ShipmentOut(ModelWorkflow, ModelSQL, ModelView):
location_ids = location_obj.search(self.warehouse.domain)
if len(location_ids) == 1:
return location_ids[0]
- return False
def default_company(self):
- return Transaction().context.get('company') or False
+ return Transaction().context.get('company')
def on_change_customer(self, values):
if not values.get('customer'):
- return {'delivery_address': False}
+ return {'delivery_address': None}
party_obj = Pool().get("party.party")
address_id = party_obj.address_get(values['customer'], type='delivery')
return {'delivery_address': address_id}
+ def on_change_with_customer_location(self, values):
+ pool = Pool()
+ party_obj = pool.get('party.party')
+ if values.get('customer'):
+ customer = party_obj.browse(values['customer'])
+ return customer.customer_location.id
+
+ def get_customer_location(self, ids, name):
+ locations = {}
+ for shipment in self.browse(ids):
+ locations[shipment.id] = shipment.customer.customer_location.id
+ return locations
+
+ def default_warehouse_storage(self):
+ warehouse = self.default_warehouse()
+ if warehouse:
+ value = self.on_change_with_warehouse_storage({
+ 'warehouse': warehouse,
+ })
+ return value
+
+ def on_change_with_warehouse_storage(self, values):
+ pool = Pool()
+ location_obj = pool.get('stock.location')
+ if values.get('warehouse'):
+ warehouse = location_obj.browse(values['warehouse'])
+ return warehouse.storage_location.id
+
+ def get_warehouse_storage(self, ids, name):
+ storages = {}
+ for shipment in self.browse(ids):
+ storages[shipment.id] = shipment.warehouse.storage_location.id
+ return storages
+
+ def default_warehouse_output(self):
+ warehouse = self.default_warehouse()
+ if warehouse:
+ value = self.on_change_with_warehouse_output({
+ 'warehouse': warehouse,
+ })
+ return value
+
+ def on_change_with_warehouse_output(self, values):
+ pool = Pool()
+ location_obj = pool.get('stock.location')
+ if values.get('warehouse'):
+ warehouse = location_obj.browse(values['warehouse'])
+ return warehouse.output_location.id
+
+ def get_warehouse_output(self, ids, name):
+ outputs = {}
+ for shipment in self.browse(ids):
+ outputs[shipment.id] = shipment.warehouse.output_location.id
+ return outputs
+
def get_outgoing_moves(self, ids, name):
res = {}
for shipment in self.browse(ids):
@@ -838,42 +1012,8 @@ class ShipmentOut(ModelWorkflow, ModelSQL, ModelView):
return res
def set_outgoing_moves(self, ids, name, value):
- move_obj = Pool().get('stock.move')
-
if not value:
return
-
- shipments = self.browse(ids)
- move_ids = []
- for act in value:
- if act[0] == 'create':
- if 'from_location' in act[1]:
- for shipment in shipments:
- if act[1]['from_location'] != \
- shipment.warehouse.output_location.id:
- self.raise_user_error(
- 'outgoing_move_output_source')
- elif act[0] == 'write':
- if 'from_location' in act[2]:
- for shipment in shipments:
- if act[2]['from_location'] != \
- shipment.warehouse.output_location.id:
- self.raise_user_error(
- 'outgoing_move_output_source')
- elif act[0] == 'add':
- if isinstance(act[1], (int, long)):
- move_ids.append(act[1])
- else:
- move_ids.extend(act[1])
- elif act[0] == 'set':
- move_ids.extend(act[1])
-
- moves = move_obj.browse(move_ids)
- for move in moves:
- for shipment in shipments:
- if move.from_location.id != \
- shipment.warehouse.output_location.id:
- self.raise_user_error('outgoing_move_output_source')
self.write(ids, {
'moves': value,
})
@@ -889,196 +1029,170 @@ class ShipmentOut(ModelWorkflow, ModelSQL, ModelView):
return res
def set_inventory_moves(self, ids, name, value):
- move_obj = Pool().get('stock.move')
-
if not value:
return
-
- shipments = self.browse(ids)
- move_ids = []
- for act in value:
- if act[0] == 'create':
- if 'to_location' in act[1]:
- for shipment in shipments:
- if act[1]['to_location'] != \
- shipment.warehouse.output_location.id:
- self.raise_user_error(
- 'inventory_move_output_dest')
- elif act[0] == 'write':
- if 'to_location' in act[2]:
- for shipment in shipments:
- if act[2]['to_location'] != \
- shipment.warehouse.output_location.id:
- self.raise_user_error(
- 'inventory_move_output_dest')
- elif act[0] == 'add':
- if isinstance(act[1], (int, long)):
- move_ids.append(act[1])
- else:
- move_ids.extend(act[1])
- elif act[0] == 'set':
- move_ids.extend(act[1])
-
- moves = move_obj.browse(move_ids)
- for move in moves:
- for shipment in shipments:
- if move.to_location.id != \
- shipment.warehouse.output_location.id:
- self.raise_user_error('inventory_move_output_dest')
self.write(ids, {
'moves': value,
})
- def wkf_assigned(self, shipment):
- self.write(shipment.id, {
- 'state': 'assigned',
- })
-
- def wkf_draft(self, shipment):
+ @ModelView.button
+ @Workflow.transition('draft')
+ def draft(self, ids):
move_obj = Pool().get('stock.move')
- self.write(shipment.id, {
- 'state': 'draft',
- })
- move_obj.write([m.id for m in
- shipment.inventory_moves + shipment.outgoing_moves
- if m.state != 'draft'], {
+ shipments = self.browse(ids)
+ move_obj.write([m.id for s in shipments
+ for m in s.inventory_moves + s.outgoing_moves
+ if m.state not in ('draft', 'done')], {
'state': 'draft',
})
- def wkf_done(self, shipment):
+ @ModelView.button
+ @Workflow.transition('waiting')
+ def wait(self, ids):
+ """
+ Complete inventory moves to match the products and quantities
+ that are in the outgoing moves.
+ """
move_obj = Pool().get('stock.move')
- date_obj = Pool().get('ir.date')
- move_obj.write([m.id for m in shipment.outgoing_moves
- if m.state not in ('done', 'cancel')], {
- 'state': 'done',
+ shipments = self.browse(ids)
+ move_obj.write([m.id for s in shipments for m in s.inventory_moves
+ if m.state not in ('draft', 'done')], {
+ 'state': 'draft',
})
- self.write(shipment.id, {
- 'state': 'done',
- 'effective_date': date_obj.today(),
- })
+ move_obj.delete([m.id for s in shipments for m in s.inventory_moves
+ if m.state in ('draft', 'cancel')])
- def wkf_packed(self, shipment):
+ # Re-Browse because moves have been deleted
+ shipments = self.browse(ids)
+
+ for shipment in shipments:
+ for move in shipment.outgoing_moves:
+ if move.state in ('cancel', 'done'):
+ continue
+ move_obj.create({
+ 'from_location': \
+ move.shipment_out.warehouse.storage_location.id,
+ 'to_location': move.from_location.id,
+ 'product': move.product.id,
+ 'uom': move.uom.id,
+ 'quantity': move.quantity,
+ 'shipment_out': shipment.id,
+ 'planned_date': move.planned_date,
+ 'state': 'draft',
+ 'company': move.company.id,
+ 'currency': move.currency.id,
+ 'unit_price': move.unit_price,
+ })
+
+ @Workflow.transition('assigned')
+ def assign(self, ids):
+ pass
+
+ @ModelView.button
+ @Workflow.transition('packed')
+ def pack(self, ids):
move_obj = Pool().get('stock.move')
uom_obj = Pool().get('product.uom')
- move_obj.write([m.id for m in shipment.inventory_moves
- if m.state not in ('done', 'cancel')], {
+ shipments = self.browse(ids)
+ move_obj.write([m.id for s in shipments for m in s.inventory_moves
+ if m.state not in ('done', 'cancel')], {
'state': 'done',
})
- self.write(shipment.id, {
- 'state': 'packed',
- })
- # Sum all outgoing quantities
- outgoing_qty = {}
- for move in shipment.outgoing_moves:
- if move.state == 'cancel': continue
- quantity = uom_obj.compute_qty(move.uom, move.quantity,
- move.product.default_uom, round=False)
- outgoing_qty.setdefault(move.product.id, 0.0)
- outgoing_qty[move.product.id] += quantity
- for move in shipment.inventory_moves:
- if move.state == 'cancel': continue
- qty_default_uom = uom_obj.compute_qty(move.uom, move.quantity,
- move.product.default_uom, round=False)
- # Check if the outgoing move doesn't exist already
- if outgoing_qty.get(move.product.id):
- # If it exist, decrease the sum
- if qty_default_uom <= outgoing_qty[move.product.id]:
- outgoing_qty[move.product.id] -= qty_default_uom
+ for shipment in shipments:
+ # Sum all outgoing quantities
+ outgoing_qty = {}
+ for move in shipment.outgoing_moves:
+ if move.state == 'cancel':
continue
- # Else create the complement
- else:
- out_quantity = qty_default_uom - outgoing_qty[move.product.id]
- out_quantity = uom_obj.compute_qty(
- move.product.default_uom, out_quantity, move.uom)
- outgoing_qty[move.product.id] = 0.0
- else:
- out_quantity = move.quantity
-
- unit_price = uom_obj.compute_price(move.product.default_uom,
- move.product.list_price, move.uom)
- move_obj.create({
- 'from_location': move.to_location.id,
- 'to_location': shipment.customer.customer_location.id,
- 'product': move.product.id,
- 'uom': move.uom.id,
- 'quantity': out_quantity,
- 'shipment_out': shipment.id,
- 'state': 'draft',
- 'planned_date': shipment.planned_date,
- 'company': move.company.id,
- 'currency': move.company.currency.id,
- 'unit_price': unit_price,
- })
+ quantity = uom_obj.compute_qty(move.uom, move.quantity,
+ move.product.default_uom, round=False)
+ outgoing_qty.setdefault(move.product.id, 0.0)
+ outgoing_qty[move.product.id] += quantity
- #Re-read the shipment and remove exceeding quantities
- for move in shipment.outgoing_moves:
- if move.state == 'cancel': continue
- if outgoing_qty.get(move.product.id, 0.0) > 0.0:
- exc_qty = uom_obj.compute_qty(move.product.default_uom,
- outgoing_qty[move.product.id], move.uom)
- move_obj.write(move.id,{
- 'quantity': max(0.0, move.quantity-exc_qty),
- })
- removed_qty = uom_obj.compute_qty(move.uom,
+ for move in shipment.inventory_moves:
+ if move.state == 'cancel':
+ continue
+ qty_default_uom = uom_obj.compute_qty(move.uom, move.quantity,
+ move.product.default_uom, round=False)
+ # Check if the outgoing move doesn't exist already
+ if outgoing_qty.get(move.product.id):
+ # If it exist, decrease the sum
+ if qty_default_uom <= outgoing_qty[move.product.id]:
+ outgoing_qty[move.product.id] -= qty_default_uom
+ continue
+ # Else create the complement
+ else:
+ out_quantity = (qty_default_uom
+ - outgoing_qty[move.product.id])
+ out_quantity = uom_obj.compute_qty(
+ move.product.default_uom, out_quantity, move.uom)
+ outgoing_qty[move.product.id] = 0.0
+ else:
+ out_quantity = move.quantity
+
+ unit_price = uom_obj.compute_price(move.product.default_uom,
+ move.product.list_price, move.uom)
+ move_obj.create({
+ 'from_location': move.to_location.id,
+ 'to_location': shipment.customer.customer_location.id,
+ 'product': move.product.id,
+ 'uom': move.uom.id,
+ 'quantity': out_quantity,
+ 'shipment_out': shipment.id,
+ 'state': 'draft',
+ 'planned_date': shipment.planned_date,
+ 'company': move.company.id,
+ 'currency': move.company.currency.id,
+ 'unit_price': unit_price,
+ })
+
+ #Re-read the shipment and remove exceeding quantities
+ for move in shipment.outgoing_moves:
+ if move.state == 'cancel':
+ continue
+ if outgoing_qty.get(move.product.id, 0.0) > 0.0:
+ exc_qty = uom_obj.compute_qty(move.product.default_uom,
+ outgoing_qty[move.product.id], move.uom)
+ removed_qty = uom_obj.compute_qty(move.uom,
min(exc_qty, move.quantity), move.product.default_uom,
round=False)
- outgoing_qty[move.product.id] -= removed_qty
+ move_obj.write(move.id, {
+ 'quantity': max(0.0, move.quantity - exc_qty),
+ })
+ outgoing_qty[move.product.id] -= removed_qty
- move_obj.write([x.id for x in shipment.outgoing_moves
- if x.state != 'cancel'], {
+ move_obj.write([m.id for s in shipments for m in s.outgoing_moves
+ if m.state not in ('cancel', 'done')], {
'state': 'assigned',
})
- def wkf_cancel(self, shipment):
+ @ModelView.button
+ @Workflow.transition('done')
+ def done(self, ids):
move_obj = Pool().get('stock.move')
- move_obj.write([m.id for m in
- shipment.outgoing_moves + shipment.inventory_moves
- if m.state != 'cancel'], {
- 'state': 'cancel',
+ date_obj = Pool().get('ir.date')
+
+ shipments = self.browse(ids)
+ move_obj.write([m.id for s in shipments for m in s.outgoing_moves
+ if m.state not in ('done', 'cancel')], {
+ 'state': 'done',
+ })
+ self.write(ids, {
+ 'effective_date': date_obj.today(),
})
- self.write(shipment.id, {
- 'state': 'cancel',
- })
- def wkf_waiting(self, shipment):
- """
- Complete inventory moves to match the products and quantities
- that are in the outgoing moves.
- """
+ @ModelView.button
+ @Workflow.transition('cancel')
+ def cancel(self, ids):
move_obj = Pool().get('stock.move')
- uom_obj = Pool().get('product.uom')
- self.write(shipment.id, {
- 'state': 'waiting',
- })
-
- if shipment.inventory_moves:
- move_obj.write( [x.id for x in shipment.inventory_moves], {
- 'state': 'draft',
+ shipments = self.browse(ids)
+ move_obj.write([m.id for s in shipments
+ for m in s.outgoing_moves + s.inventory_moves
+ if m.state not in ('cancel', 'done')], {
+ 'state': 'cancel',
})
- move_obj.delete([x.id for x in shipment.inventory_moves])
-
- # Re-Browse because moves have been deleted
- shipment = self.browse(shipment.id)
-
- for move in shipment.outgoing_moves:
- if move.state in ('cancel', 'done'):
- continue
- move_obj.create({
- 'from_location': \
- move.shipment_out.warehouse.storage_location.id,
- 'to_location': move.from_location.id,
- 'product': move.product.id,
- 'uom': move.uom.id,
- 'quantity': move.quantity,
- 'shipment_out': shipment.id,
- 'planned_date': move.planned_date,
- 'state': 'draft',
- 'company': move.company.id,
- 'currency': move.currency.id,
- 'unit_price': move.unit_price,
- })
def _get_move_planned_date(self, shipment):
'''
@@ -1125,10 +1239,19 @@ class ShipmentOut(ModelWorkflow, ModelSQL, ModelView):
if default is None:
default = {}
default = default.copy()
- default['inventory_moves']= False
- default['outgoing_moves']= False
+ default['inventory_moves'] = None
+ default['outgoing_moves'] = None
return super(ShipmentOut, self).copy(ids, default=default)
+ def delete(self, ids):
+ if isinstance(ids, (int, long)):
+ ids = [ids]
+ # Cancel before delete
+ self.cancel(ids)
+ for shipment in self.browse(ids):
+ if shipment.state != 'cancel':
+ self.raise_user_error('delete_cancel', shipment.rec_name)
+ return super(ShipmentOut, self).delete(ids)
def _location_amount(self, target_uom, qty_uom, uom_index):
"""
@@ -1142,25 +1265,31 @@ class ShipmentOut(ModelWorkflow, ModelSQL, ModelView):
uom_index[target_uom])
return res
- def wkf_assign_try(self, shipment):
+ @ModelView.button
+ def assign_try(self, ids):
move_obj = Pool().get('stock.move')
- return move_obj.assign_try(shipment.inventory_moves)
+ shipments = self.browse(ids)
+ if move_obj.assign_try([m for s in shipments
+ for m in s.inventory_moves]):
+ self.assign(ids)
+ return True
+ else:
+ return False
- def wkf_assign_force(self, shipment):
+ @ModelView.button
+ def assign_force(self, ids):
move_obj = Pool().get('stock.move')
- move_obj.write([m.id for m in shipment.inventory_moves], {
- 'state': 'assigned',
- })
- return True
-
- def button_draft(self, ids):
- self.workflow_trigger_create(ids)
+ shipments = self.browse(ids)
+ move_obj.write([m.id for s in shipments for m in s.inventory_moves
+ if m.state not in ('cancel', 'done')], {
+ 'state': 'assigned',
+ })
+ self.assign(ids)
ShipmentOut()
-
-class ShipmentOutReturn(ModelWorkflow, ModelSQL, ModelView):
+class ShipmentOutReturn(Workflow, ModelSQL, ModelView):
"Customer Return Shipment"
_name = 'stock.shipment.out.return'
_description = __doc__
@@ -1186,13 +1315,16 @@ class ShipmentOutReturn(ModelWorkflow, ModelSQL, ModelView):
Bool(Eval('incoming_moves'))),
}, on_change=['customer'],
depends=['state', 'incoming_moves'])
+ customer_location = fields.Function(fields.Many2One('stock.location',
+ 'Customer Location', on_change_with=['customer']),
+ 'get_customer_location')
delivery_address = fields.Many2One('party.address',
'Delivery Address', required=True,
states={
'readonly': Not(Equal(Eval('state'), 'draft')),
}, domain=[('party', '=', Eval('customer'))],
depends=['state', 'customer'])
- reference = fields.Char("Reference", size=None, select=1,
+ reference = fields.Char("Reference", size=None, select=True,
states={
'readonly': Not(Equal(Eval('state'), 'draft')),
}, depends=['state'])
@@ -1202,27 +1334,44 @@ class ShipmentOutReturn(ModelWorkflow, ModelSQL, ModelView):
Bool(Eval('incoming_moves'))),
}, domain=[('type', '=', 'warehouse')],
depends=['state', 'incoming_moves'])
+ warehouse_storage = fields.Function(fields.Many2One('stock.location',
+ 'Warehouse Storage', on_change_with=['warehouse']),
+ 'get_warehouse_storage')
+ warehouse_input = fields.Function(fields.Many2One('stock.location',
+ 'Warehouse Input', on_change_with=['warehouse']),
+ 'get_warehouse_input')
incoming_moves = fields.Function(fields.One2Many('stock.move', None,
- 'Incoming Moves', states={
- 'readonly': Not(Equal(Eval('state'), 'draft')),
- }, context={
- 'warehouse': Eval('warehouse'),
- 'type': 'incoming',
- 'customer': Eval('customer'),
- }, depends=['state', 'warehouse', 'customer']),
+ 'Incoming Moves',
+ domain=[
+ ('from_location', '=', Eval('customer_location')),
+ ('to_location', '=', Eval('warehouse_input')),
+ ('company', '=', Eval('company')),
+ ],
+ states={
+ 'readonly': ((Eval('state') != 'draft')
+ | ~Eval('warehouse') | ~Eval('customer')),
+ },
+ 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', states={
- 'readonly': In(Eval('state'), ['draft', 'cancel', 'done']),
- }, context={
- 'warehouse': Eval('warehouse'),
- 'type': 'inventory_out',
- }, depends=['state', 'warehouse']),
+ 'Inventory Moves',
+ domain=[
+ ('from_location', '=', Eval('warehouse_input')),
+ ('to_location', 'child_of', [Eval('warehouse_storage', -1)],
+ 'parent'),
+ ('company', '=', Eval('company')),
+ ],
+ states={
+ 'readonly': Eval('state').in_(['draft', 'cancel', 'done']),
+ },
+ depends=['state', 'warehouse', 'warehouse_input',
+ 'warehouse_storage', 'company']),
'get_inventory_moves', setter='set_inventory_moves')
moves = fields.One2Many('stock.move', 'shipment_out_return', 'Moves',
domain=[('company', '=', Eval('company'))], depends=['company'],
readonly=True)
- code = fields.Char("Code", size=None, select=1, readonly=True)
+ code = fields.Char("Code", size=None, select=True, readonly=True)
state = fields.Selection([
('draft', 'Draft'),
('done', 'Done'),
@@ -1232,30 +1381,37 @@ class ShipmentOutReturn(ModelWorkflow, ModelSQL, ModelView):
def __init__(self):
super(ShipmentOutReturn, self).__init__()
- self._rpc.update({
- 'button_draft': True,
- })
self._order[0] = ('id', 'DESC')
self._error_messages.update({
- 'incoming_move_input_dest': 'Incoming Moves must ' \
- 'have the warehouse input location as destination location!',
- 'inventory_move_input_source': 'Inventory Moves must ' \
- 'have the warehouse input location as source location!',
- })
+ 'delete_cancel': 'Customer Return Shipment "%s" must be '\
+ 'cancelled before deletion!',
+ })
+ self._transitions |= set((
+ ('draft', 'received'),
+ ('received', 'done'),
+ ('received', 'draf'),
+ ('draft', 'cancel'),
+ ('received', 'cancel'),
+ ('cancel', 'draft'),
+ ))
+ self._buttons.update({
+ 'cancel': {
+ 'invisible': Eval('state').in_(['cancel', 'done']),
+ },
+ 'draft': {
+ 'invisible': Eval('state') != 'cancel',
+ },
+ 'receive': {
+ 'invisible': Eval('state') != 'draft',
+ },
+ 'done': {
+ 'invisible': Eval('state') != 'received',
+ },
+ })
def init(self, module_name):
cursor = Transaction().cursor
# Migration from 1.2: packing renamed into shipment
- cursor.execute("UPDATE wkf "\
- "SET model = 'stock.shipment.out.return' "\
- "where model = 'stock.packing.out.return'")
- cursor.execute("UPDATE wkf_instance "\
- "SET res_type = 'stock.shipment.out.return' "\
- "where res_type = 'stock.packing.out.return'")
- cursor.execute("UPDATE wkf_trigger "\
- "SET model = 'stock.shipment.out.return' "\
- "WHERE model = 'stock.packing.out.return'")
-
old_table = 'stock_packing_out_return'
if TableHandler.table_exist(cursor, old_table):
TableHandler.table_rename(cursor, old_table, self._table)
@@ -1286,7 +1442,12 @@ class ShipmentOutReturn(ModelWorkflow, ModelSQL, ModelView):
for company_id, values in itertools.groupby(cursor.fetchall(),
operator.itemgetter(1)):
shipment_ids = [x[0] for x in values]
- self.write(shipment_ids, {'company': company_id})
+ 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 "' + self._table + '" '
+ 'SET company = %s WHERE ' + red_sql,
+ [company_id] + red_ids)
table.not_null_action('company', action='add')
# Add index on create_date
@@ -1301,21 +1462,74 @@ class ShipmentOutReturn(ModelWorkflow, ModelSQL, ModelView):
location_ids = location_obj.search(self.warehouse.domain)
if len(location_ids) == 1:
return location_ids[0]
- return False
def default_company(self):
- return Transaction().context.get('company') or False
+ return Transaction().context.get('company')
def on_change_customer(self, values):
if not values.get('customer'):
- return {'delivery_address': False}
+ return {'delivery_address': None}
party_obj = Pool().get("party.party")
address_id = party_obj.address_get(values['customer'], type='delivery')
- party = party_obj.browse(values['customer'])
return {
'delivery_address': address_id,
}
+ def on_change_with_customer_location(self, values):
+ pool = Pool()
+ party_obj = pool.get('party.party')
+ if values.get('customer'):
+ customer = party_obj.browse(values['customer'])
+ return customer.customer_location.id
+
+ def get_customer_location(self, ids, name):
+ locations = {}
+ for shipment in self.browse(ids):
+ locations[shipment.id] = shipment.customer.customer_location.id
+ return locations
+
+ def default_warehouse_storage(self):
+ warehouse = self.default_warehouse()
+ if warehouse:
+ value = self.on_change_with_warehouse_storage({
+ 'warehouse': warehouse,
+ })
+ return value
+
+ def on_change_with_warehouse_storage(self, values):
+ pool = Pool()
+ location_obj = pool.get('stock.location')
+ if values.get('warehouse'):
+ warehouse = location_obj.browse(values['warehouse'])
+ return warehouse.storage_location.id
+
+ def get_warehouse_storage(self, ids, name):
+ storages = {}
+ for shipment in self.browse(ids):
+ storages[shipment.id] = shipment.warehouse.storage_location.id
+ return storages
+
+ def default_warehouse_input(self):
+ warehouse = self.default_warehouse()
+ if warehouse:
+ value = self.on_change_with_warehouse_input({
+ 'warehouse': warehouse,
+ })
+ return value
+
+ def on_change_with_warehouse_input(self, values):
+ pool = Pool()
+ location_obj = pool.get('stock.location')
+ if values.get('warehouse'):
+ warehouse = location_obj.browse(values['warehouse'])
+ return warehouse.input_location.id
+
+ def get_warehouse_input(self, ids, name):
+ inputs = {}
+ for shipment in self.browse(ids):
+ inputs[shipment.id] = shipment.warehouse.input_location.id
+ return inputs
+
def get_incoming_moves(self, ids, name):
res = {}
for shipment in self.browse(ids):
@@ -1327,41 +1541,8 @@ class ShipmentOutReturn(ModelWorkflow, ModelSQL, ModelView):
return res
def set_incoming_moves(self, ids, name, value):
- move_obj = Pool().get('stock.move')
-
if not value:
return
-
- shipments = self.browse(ids)
- move_ids = []
- for act in value:
- if act[0] == 'create':
- if 'to_location' in act[1]:
- for shipment in shipments:
- if act[1]['to_location'] != \
- shipment.warehouse.input_location.id:
- self.raise_user_error('incoming_move_input_dest')
- elif act[0] == 'write':
- if 'to_location' in act[2]:
- for shipment in shipments:
- if act[2]['to_location'] != \
- shipment.warehouse.input_location.id:
- self.raise_user_error('incoming_move_input_dest')
- elif act[0] == 'add':
- if isinstance(act[1], (int, long)):
- move_ids.append(act[1])
- else:
- move_ids.extend(act[1])
- elif act[0] == 'set':
- move_ids.extend(act[1])
-
- moves = move_obj.browse(move_ids)
- for move in moves:
- for shipment in shipments:
- if move.to_location.id != \
- shipment.warehouse.input_location.id:
- self.raise_user_error('incoming_move_input_dest')
-
self.write(ids, {
'moves': value,
})
@@ -1377,43 +1558,8 @@ class ShipmentOutReturn(ModelWorkflow, ModelSQL, ModelView):
return res
def set_inventory_moves(self, ids, name, value):
- move_obj = Pool().get('stock.move')
-
if not value:
return
-
- shipments = self.browse(ids)
- move_ids = []
- for act in value:
- if act[0] == 'create':
- if 'from_location' in act[1]:
- for shipment in shipments:
- if act[1]['from_location'] != \
- shipment.warehouse.input_location.id:
- self.raise_user_error(
- 'inventory_move_input_source')
- elif act[0] == 'write':
- if 'from_location' in act[2]:
- for shipment in shipments:
- if act[2]['from_location'] != \
- shipment.warehouse.input_location.id:
- self.raise_user_error(
- 'inventory_move_input_source')
- elif act[0] == 'add':
- if isinstance(act[1], (int, long)):
- move_ids.append(act[1])
- else:
- move_ids.extend(act[1])
- elif act[0] == 'set':
- move_ids.extend(act[1])
-
- moves = move_obj.browse(move_ids)
- for move in moves:
- for shipment in shipments:
- if move.from_location.id != \
- shipment.warehouse.input_location.id:
- self.raise_user_error('inventory_move_input_source')
-
self.write(ids, {
'moves': value,
})
@@ -1464,59 +1610,67 @@ class ShipmentOutReturn(ModelWorkflow, ModelSQL, ModelView):
if default is None:
default = {}
default = default.copy()
- default['inventory_moves']= False
- default['incoming_moves']= False
+ default['inventory_moves'] = None
+ default['incoming_moves'] = None
return super(ShipmentOutReturn, self).copy(ids, default=default)
+ def delete(self, ids):
+ if isinstance(ids, (int, long)):
+ ids = [ids]
+ # Cance before delete
+ self.cancel(ids)
+ for shipment in self.browse(ids):
+ if shipment.state != 'cancel':
+ self.raise_user_error('delete_cancel', shipment.rec_name)
+ return super(ShipmentOutReturn, self).delete(ids)
- def button_draft(self, ids):
- self.workflow_trigger_create(ids)
-
- def wkf_done(self, shipment):
+ @ModelView.button
+ @Workflow.transition('draft')
+ def draft(self, ids):
move_obj = Pool().get('stock.move')
- date_obj = Pool().get('ir.date')
-
- move_obj.write([m.id for m in shipment.inventory_moves
- if m.state not in ('done', 'cancel')], {
- 'state': 'done',
+ shipments = self.browse(ids)
+ move_obj.write([m.id for s in shipments for m in s.incoming_moves
+ if m.state not in ('draft', 'done')], {
+ 'state': 'draft',
})
- self.write(shipment.id,{
- 'state': 'done',
- 'effective_date': date_obj.today(),
- })
+ move_obj.delete([m.id for s in shipments for m in s.inventory_moves
+ if m.state in ('draft', 'cancel')])
- def wkf_cancel(self, shipment):
+ @ModelView.button
+ @Workflow.transition('received')
+ def receive(self, ids):
move_obj = Pool().get('stock.move')
- move_obj.write([m.id for m in
- shipment.incoming_moves + shipment.inventory_moves
- if m.state != 'cancel'], {
- 'state': 'cancel',
+ shipments = self.browse(ids)
+ move_obj.write([m.id for s in shipments for m in s.incoming_moves
+ if m.state not in ('done', 'cancel')], {
+ 'state': 'done',
})
- self.write(shipment.id, {
- 'state': 'cancel',
- })
+ self.create_inventory_moves(shipments)
- def wkf_received(self, shipment):
+ @ModelView.button
+ @Workflow.transition('done')
+ def done(self, ids):
move_obj = Pool().get('stock.move')
- move_obj.write([m.id for m in shipment.incoming_moves
- if m.state not in ('done', 'cancel')], {
+ date_obj = Pool().get('ir.date')
+ shipments = self.browse(ids)
+ move_obj.write([m.id for s in shipments for m in s.inventory_moves
+ if m.state not in ('done', 'cancel')], {
'state': 'done',
})
- self.write(shipment.id, {
- 'state': 'received'
- })
- self.create_inventory_moves(shipment.id)
+ self.write(ids, {
+ 'effective_date': date_obj.today(),
+ })
- def wkf_draft(self, shipment):
+ @ModelView.button
+ @Workflow.transition('cancel')
+ def cancel(self, ids):
move_obj = Pool().get('stock.move')
- move_obj.write([m.id for m in shipment.incoming_moves
- if m.state != 'draft'], {
- 'state': 'draft',
- })
- move_obj.delete([m.id for m in shipment.inventory_moves])
- self.write(shipment.id, {
- 'state': 'draft',
- })
+ shipments = self.browse(ids)
+ move_obj.write([m.id for s in shipments
+ for m in s.incoming_moves + s.inventory_moves
+ if m.state not in ('cancel', 'done')], {
+ 'state': 'cancel',
+ })
def _get_inventory_moves(self, incoming_move):
res = {}
@@ -1531,118 +1685,83 @@ class ShipmentOutReturn(ModelWorkflow, ModelSQL, ModelView):
res['state'] = 'draft'
# Product will be considered in stock only when the inventory
# move will be made:
- res['planned_date'] = False
+ res['planned_date'] = None
res['company'] = incoming_move.company.id
return res
- def create_inventory_moves(self, shipment_id):
- shipment = self.browse(shipment_id)
- for incoming_move in shipment.incoming_moves:
- vals = self._get_inventory_moves(incoming_move)
- if vals:
- self.write(shipment.id, {
- 'inventory_moves': [('create', vals)],
- })
+ def create_inventory_moves(self, shipments):
+ for shipment in shipments:
+ for incoming_move in shipment.incoming_moves:
+ vals = self._get_inventory_moves(incoming_move)
+ if vals:
+ self.write(shipment.id, {
+ 'inventory_moves': [('create', vals)],
+ })
ShipmentOutReturn()
class AssignShipmentOutAssignFailed(ModelView):
- 'Assign Shipment Out Assign Failed'
- _name = 'stock.shipment.out.assign.assign_failed'
+ 'Assign Shipment Out'
+ _name = 'stock.shipment.out.assign.failed'
_description = __doc__
inventory_moves = fields.Many2Many('stock.move', None, None,
'Inventory Moves', readonly=True)
+ def default_inventory_moves(self):
+ shipment_out_obj = Pool().get('stock.shipment.out')
+ shipment_id = Transaction().context.get('active_id')
+ if not shipment_id:
+ return []
+ shipment = shipment_out_obj.browse(shipment_id)
+ return [x.id for x in shipment.inventory_moves if x.state == 'draft']
+
AssignShipmentOutAssignFailed()
class AssignShipmentOut(Wizard):
'Assign Shipment Out'
_name = 'stock.shipment.out.assign'
- states = {
- 'init': {
- 'result': {
- 'type': 'choice',
- 'next_state': '_choice',
- },
- },
- 'assign_failed': {
- 'actions': ['_moves'],
- 'result': {
- 'type': 'form',
- 'object': 'stock.shipment.out.assign.assign_failed',
- 'state': [
- ('end', 'Ok', 'tryton-ok', True),
- ],
- },
- },
- 'ask_force': {
- 'actions': ['_moves'],
- 'result': {
- 'type': 'form',
- 'object': 'stock.shipment.out.assign.assign_failed',
- 'state': [
- ('force', 'Force Assign', 'tryton-go-next'),
- ('end', 'Ok', 'tryton-ok', True),
- ],
- },
- },
- 'force': {
- 'result': {
- 'type': 'action',
- 'action': '_force',
- 'state': 'end',
- },
- },
- }
- def _choice(self, data):
+ start = StateTransition()
+ failed = StateView('stock.shipment.out.assign.failed',
+ 'stock.shipment_out_assign_failed_view_form', [
+ Button('Force Assign', 'force', 'tryton-go-next',
+ states={
+ 'invisible': ~Id('stock',
+ 'group_stock_force_assignment').in_(
+ Eval('context', {}).get('groups', [])),
+ }),
+ Button('Ok', 'end', 'tryton-ok', True),
+ ])
+ force = StateTransition()
+
+ def transition_start(self, session):
pool = Pool()
- shipment_out_obj = pool.get('stock.shipment.out')
- user_group_obj = pool.get('res.user-res.group')
- model_data_obj = pool.get('ir.model.data')
- transition_obj = pool.get('workflow.transition')
+ shipment_obj = pool.get('stock.shipment.out')
- shipment_out_obj.workflow_trigger_validate(data['id'], 'assign')
- shipment = shipment_out_obj.browse(data['id'])
- if not [x.id for x in shipment.inventory_moves if x.state == 'draft']:
+ if shipment_obj.assign_try([Transaction().context['active_id']]):
return 'end'
else:
- trans_id = model_data_obj.get_id('stock',
- 'shipmentout_trans_waiting_assigned_force')
- trans = transition_obj.read(trans_id)
- user_in_group = user_group_obj.search([
- ('user', '=', Transaction().user),
- ('group', '=', trans['group']),
- ], limit=1)
- if user_in_group:
- return 'ask_force'
- return 'assign_failed'
-
- def _moves(self, data):
- shipment_out_obj = Pool().get('stock.shipment.out')
- shipment = shipment_out_obj.browse(data['id'])
- return {'inventory_moves': [x.id for x in shipment.inventory_moves
- if x.state == 'draft']}
+ return 'failed'
- def _force(self, data):
- shipment_out_obj = Pool().get('stock.shipment.out')
+ def transition_force(self, session):
+ shipment_obj = Pool().get('stock.shipment.out')
- shipment_out_obj.workflow_trigger_validate(data['id'], 'force_assign')
- return {}
+ shipment_obj.assign_force([Transaction().context['active_id']])
+ return 'end'
AssignShipmentOut()
-class ShipmentInternal(ModelWorkflow, ModelSQL, ModelView):
+class ShipmentInternal(Workflow, ModelSQL, ModelView):
"Internal Shipment"
_name = 'stock.shipment.internal'
_description = __doc__
_rec_name = 'code'
- effective_date =fields.Date('Effective Date', readonly=True)
+ effective_date = fields.Date('Effective Date', readonly=True)
planned_date = fields.Date('Planned Date',
states={
'readonly': Not(Equal(Eval('state'), 'draft')),
@@ -1656,8 +1775,8 @@ class ShipmentInternal(ModelWorkflow, ModelSQL, ModelView):
Get(Eval('context', {}), 'company', 0)),
],
depends=['state'])
- code = fields.Char("Code", size=None, select=1, readonly=True)
- reference = fields.Char("Reference", size=None, select=1,
+ code = fields.Char("Code", size=None, select=True, readonly=True)
+ reference = fields.Char("Reference", size=None, select=True,
states={
'readonly': Not(Equal(Eval('state'), 'draft')),
}, depends=['state'])
@@ -1680,16 +1799,14 @@ class ShipmentInternal(ModelWorkflow, ModelSQL, ModelView):
], depends=['state', 'moves'])
moves = fields.One2Many('stock.move', 'shipment_internal', 'Moves',
states={
- 'readonly': And(Or(Not(Equal(Eval('state'), 'draft')),
- Not(Bool(Eval('from_location')))),
- Bool(Eval('to_location'))),
- },
- domain=[('company', '=', Eval('company'))],
- context={
- 'from_location': Eval('from_location'),
- 'to_location': Eval('to_location'),
- 'planned_date': Eval('planned_date'),
+ 'readonly': ((Eval('state') != 'draft')
+ | ~Eval('from_location') | ~Eval('to_location')),
},
+ domain=[
+ ('from_location', '=', Eval('from_location')),
+ ('to_location', '=', Eval('to_location')),
+ ('company', '=', Eval('company')),
+ ],
depends=['state', 'from_location', 'to_location', 'planned_date',
'company'])
state = fields.Selection([
@@ -1700,19 +1817,53 @@ class ShipmentInternal(ModelWorkflow, ModelSQL, ModelView):
('done', 'Done'),
], 'State', readonly=True)
+ def __init__(self):
+ super(ShipmentInternal, self).__init__()
+ self._order[0] = ('id', 'DESC')
+ self._error_messages.update({
+ 'delete_cancel': 'Internal Shipment "%s" must be cancelled '\
+ 'before deletion!',
+ })
+ self._transitions |= set((
+ ('draft', 'waiting'),
+ ('waiting', 'waiting'),
+ ('waiting', 'assigned'),
+ ('assigned', 'done'),
+ ('waiting', 'draft'),
+ ('assigned', 'waiting'),
+ ('draft', 'cancel'),
+ ('waiting', 'cancel'),
+ ('assigned', 'cancel'),
+ ))
+ self._buttons.update({
+ 'cancel': {
+ 'invisible': Eval('state').in_(['cancel', 'done']),
+ },
+ 'draft': {
+ 'invisible': ~Eval('state').in_(['cancel', 'waiting']),
+ 'icon': If(Eval('state') == 'cancel',
+ 'tryton-clear',
+ 'tryton-go-previous'),
+ },
+ 'wait': {
+ 'invisible': ~Eval('state').in_(['assigned', 'waiting',
+ 'draft']),
+ 'icon': If(Eval('state') == 'assigned',
+ 'tryton-go-previous',
+ If(Eval('state') == 'waiting',
+ 'tryton-clear',
+ 'tryton-go-next')),
+ },
+ 'done': {
+ 'invisible': Eval('state') != 'assigned',
+ },
+ 'assign_try': {},
+ 'assign_force': {},
+ })
+
def init(self, module_name):
cursor = Transaction().cursor
# Migration from 1.2: packing renamed into shipment
- cursor.execute("UPDATE wkf "\
- "SET model = 'stock.shipment.internal' "\
- "where model = 'stock.packing.internal'")
- cursor.execute("UPDATE wkf_instance "\
- "SET res_type = 'stock.shipment.internal' "\
- "where res_type = 'stock.packing.internal'")
- cursor.execute("UPDATE wkf_trigger "\
- "SET model = 'stock.shipment.internal' "\
- "WHERE model = 'stock.packing.internal'")
-
old_table = 'stock_packing_internal'
if TableHandler.table_exist(cursor, old_table):
TableHandler.table_rename(cursor, old_table, self._table)
@@ -1742,7 +1893,12 @@ class ShipmentInternal(ModelWorkflow, ModelSQL, ModelView):
for company_id, values in itertools.groupby(cursor.fetchall(),
operator.itemgetter(1)):
shipment_ids = [x[0] for x in values]
- self.write(shipment_ids, {'company': company_id})
+ 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 "' + self._table + '" '
+ 'SET company = %s WHERE ' + red_sql,
+ [company_id] + red_ids)
table.not_null_action('company', action='add')
# Add index on create_date
@@ -1753,18 +1909,7 @@ class ShipmentInternal(ModelWorkflow, ModelSQL, ModelView):
return 'draft'
def default_company(self):
- return Transaction().context.get('company') or False
-
- def button_draft(self, ids):
- self.workflow_trigger_create(ids)
- return True
-
- def __init__(self):
- super(ShipmentInternal, self).__init__()
- self._rpc.update({
- 'button_draft': True,
- })
- self._order[0] = ('id', 'DESC')
+ return Transaction().context.get('company')
def create(self, values):
sequence_obj = Pool().get('ir.sequence')
@@ -1776,63 +1921,92 @@ class ShipmentInternal(ModelWorkflow, ModelSQL, ModelView):
config.shipment_internal_sequence.id)
return super(ShipmentInternal, self).create(values)
- def wkf_draft(self, shipment):
+ def delete(self, ids):
+ if isinstance(ids, (int, long)):
+ ids = [ids]
+ # Cancel before delete
+ self.cancel(ids)
+ for shipment in self.browse(ids):
+ if shipment.state != 'cancel':
+ self.raise_user_error('delete_cancel', shipment.rec_name)
+ return super(ShipmentInternal, self).delete(ids)
+
+ @ModelView.button
+ @Workflow.transition('draft')
+ def draft(self, ids):
move_obj = Pool().get('stock.move')
- self.write(shipment.id, {
- 'state': 'draft',
- })
- move_obj.write([m.id for m in shipment.moves], {
- 'state': 'draft',
- })
+ shipments = self.browse(ids)
+ move_obj.write([m.id for s in shipments for m in s.moves
+ if m.state not in ('draft', 'done')], {
+ 'state': 'draft',
+ })
- def wkf_waiting(self, shipment):
+ @ModelView.button
+ @Workflow.transition('waiting')
+ def wait(self, ids):
move_obj = Pool().get('stock.move')
- move_obj.write([m.id for m in shipment.moves], {
- 'from_location': shipment.from_location.id,
- 'to_location': shipment.to_location.id,
- 'state': 'draft',
- 'planned_date': shipment.planned_date,
- })
- self.write(shipment.id, {
- 'state': 'waiting',
- })
+ shipments = self.browse(ids)
+ # First reset state to draft to allow update from and to location
+ move_obj.write([m.id for s in shipments for m in s.moves
+ if m.state not in ('draft', 'done')], {
+ 'state': 'draft',
+ })
+ for shipment in shipments:
+ move_obj.write([m.id for m in shipment.moves
+ if m.state != 'done'], {
+ 'from_location': shipment.from_location.id,
+ 'to_location': shipment.to_location.id,
+ 'planned_date': shipment.planned_date,
+ })
- def wkf_assigned(self, shipment):
- self.write(shipment.id, {
- 'state': 'assigned',
- })
+ @Workflow.transition('assigned')
+ def assign(self, ids):
+ pass
- def wkf_done(self, shipment):
+ @ModelView.button
+ @Workflow.transition('done')
+ def done(self, ids):
move_obj = Pool().get('stock.move')
date_obj = Pool().get('ir.date')
+ shipments = self.browse(ids)
+ move_obj.write([m.id for s in shipments for m in s.moves
+ if m.state not in ('done', 'cancel')], {
+ 'state': 'done',
+ })
+ self.write(ids, {
+ 'effective_date': date_obj.today(),
+ })
- move_obj.write([m.id for m in shipment.moves], {
- 'state': 'done',
- })
- self.write(shipment.id, {
- 'state': 'done',
- 'effective_date': date_obj.today(),
- })
-
- def wkf_cancel(self, shipment):
+ @ModelView.button
+ @Workflow.transition('cancel')
+ def cancel(self, ids):
move_obj = Pool().get('stock.move')
- move_obj.write([m.id for m in shipment.moves], {
- 'state': 'cancel',
- })
- self.write(shipment.id, {
- 'state': 'cancel',
- })
+ shipments = self.browse(ids)
+ move_obj.write([m.id for s in shipments for m in s.moves
+ if m.state not in ('cancel', 'done')], {
+ 'state': 'cancel',
+ })
- def wkf_assign_try(self, shipment):
+ @ModelView.button
+ def assign_try(self, ids):
move_obj = Pool().get('stock.move')
- return move_obj.assign_try(shipment.moves)
+ shipments = self.browse(ids)
+ if move_obj.assign_try([m for s in shipments
+ for m in s.moves]):
+ self.assign(ids)
+ return True
+ else:
+ return False
- def wkf_assign_force(self, shipment):
+ @ModelView.button
+ def assign_force(self, ids):
move_obj = Pool().get('stock.move')
- move_obj.write([m.id for m in shipment.moves], {
- 'state': 'assigned',
- })
- return True
+ shipments = self.browse(ids)
+ move_obj.write([m.id for s in shipments for m in s.moves
+ if m.state not in ('assigned', 'done')], {
+ 'state': 'assigned',
+ })
+ self.assign(ids)
ShipmentInternal()
@@ -1845,179 +2019,109 @@ Address()
class AssignShipmentInternalAssignFailed(ModelView):
- 'Assign Shipment Internal Assign Failed'
- _name = 'stock.shipment.internal.assign.assign_failed'
+ 'Assign Shipment Internal'
+ _name = 'stock.shipment.internal.assign.failed'
_description = __doc__
moves = fields.Many2Many('stock.move', None, None, 'Moves',
readonly=True)
+ def default_moves(self):
+ shipment_internal_obj = Pool().get('stock.shipment.internal')
+ shipment_id = Transaction().context.get('active_id')
+ if not shipment_id:
+ return []
+ shipment = shipment_internal_obj.browse(shipment_id)
+ return [x.id for x in shipment.moves if x.state == 'draft']
+
AssignShipmentInternalAssignFailed()
class AssignShipmentInternal(Wizard):
'Assign Shipment Internal'
_name = 'stock.shipment.internal.assign'
- states = {
- 'init': {
- 'result': {
- 'type': 'choice',
- 'next_state': '_choice',
- },
- },
- 'assign_failed': {
- 'actions': ['_moves'],
- 'result': {
- 'type': 'form',
- 'object': 'stock.shipment.internal.assign.assign_failed',
- 'state': [
- ('end', 'Ok', 'tryton-ok', True),
- ],
- },
- },
- 'ask_force': {
- 'actions': ['_moves'],
- 'result': {
- 'type': 'form',
- 'object': 'stock.shipment.internal.assign.assign_failed',
- 'state': [
- ('force', 'Force Assign', 'tryton-go-next'),
- ('end', 'Ok', 'tryton-ok', True),
- ],
- },
- },
- 'force': {
- 'result': {
- 'type': 'action',
- 'action': '_force',
- 'state': 'end',
- },
- },
- }
- def _choice(self, data):
+ start = StateTransition()
+ failed = StateView('stock.shipment.internal.assign.failed',
+ 'stock.shipment_internal_assign_failed_view_form', [
+ Button('Force Assign', 'force', 'tryton-go-next',
+ states={
+ 'invisible': ~Id('stock',
+ 'group_stock_force_assignment').in_(
+ Eval('context', {}).get('groups', [])),
+ }),
+ Button('Ok', 'end', 'tryton-ok', True),
+ ])
+ force = StateTransition()
+
+ def transition_start(self, session):
pool = Pool()
- shipment_internal_obj = pool.get('stock.shipment.internal')
- user_group_obj = pool.get('res.user-res.group')
- model_data_obj = pool.get('ir.model.data')
- transition_obj = pool.get('workflow.transition')
-
- shipment_internal_obj.workflow_trigger_validate(data['id'], 'assign')
- shipment = shipment_internal_obj.browse(data['id'])
- if not [x.id for x in shipment.moves if x.state == 'draft']:
+ shipment_obj = pool.get('stock.shipment.internal')
+
+ if shipment_obj.assign_try([Transaction().context['active_id']]):
return 'end'
else:
- trans_id = model_data_obj.get_id('stock',
- 'shipmentinternal_trans_waiting_assigned_force')
- trans = transition_obj.read(trans_id)
- user_in_group = user_group_obj.search([
- ('user', '=', Transaction().user),
- ('group', '=', trans['group']),
- ], limit=1)
- if user_in_group:
- return 'ask_force'
- return 'assign_failed'
-
- def _moves(self, data):
- shipment_internal_obj = Pool().get('stock.shipment.internal')
- shipment = shipment_internal_obj.browse(data['id'])
- return {'moves': [x.id for x in shipment.moves if x.state == 'draft']}
+ return 'failed'
- def _force(self, data):
- shipment_internal_obj = Pool().get('stock.shipment.internal')
+ def transition_force(self, session):
+ shipment_obj = Pool().get('stock.shipment.internal')
- shipment_internal_obj.workflow_trigger_validate(data['id'],
- 'force_assign')
- return {}
+ shipment_obj.assign_force([Transaction().context['active_id']])
+ return 'end'
AssignShipmentInternal()
class AssignShipmentInReturnAssignFailed(ModelView):
- 'Assign Supplier Return Shipment Assign Failed'
- _name = 'stock.shipment.in.return.assign.assign_failed'
+ 'Assign Supplier Return Shipment'
+ _name = 'stock.shipment.in.return.assign.failed'
_description = __doc__
moves = fields.Many2Many('stock.move', None, None, 'Moves',
readonly=True)
+ def default_moves(self):
+ shipment_internal_obj = Pool().get('stock.shipment.in.return')
+ shipment_id = Transaction().context.get('active_id')
+ if not shipment_id:
+ return []
+ shipment = shipment_internal_obj.browse(shipment_id)
+ return [x.id for x in shipment.moves if x.state == 'draft']
+
AssignShipmentInReturnAssignFailed()
class AssignShipmentInReturn(Wizard):
'Assign Supplier Return Shipment'
_name = 'stock.shipment.in.return.assign'
- states = {
- 'init': {
- 'result': {
- 'type': 'choice',
- 'next_state': '_choice',
- },
- },
- 'assign_failed': {
- 'actions': ['_moves'],
- 'result': {
- 'type': 'form',
- 'object': 'stock.shipment.in.return.assign.assign_failed',
- 'state': [
- ('end', 'Ok', 'tryton-ok', True),
- ],
- },
- },
- 'ask_force': {
- 'actions': ['_moves'],
- 'result': {
- 'type': 'form',
- 'object': 'stock.shipment.in.return.assign.assign_failed',
- 'state': [
- ('force', 'Force Assign', 'tryton-go-next'),
- ('end', 'Ok', 'tryton-ok', True),
- ],
- },
- },
- 'force': {
- 'result': {
- 'type': 'action',
- 'action': '_force',
- 'state': 'end',
- },
- },
- }
- def _choice(self, data):
+ start = StateTransition()
+ failed = StateView('stock.shipment.in.return.assign.failed',
+ 'stock.shipment_in_return_assign_failed_view_form', [
+ Button('Force Assign', 'force', 'tryton-go-next',
+ states={
+ 'invisible': ~Id('stock',
+ 'group_stock_force_assignment').in_(
+ Eval('context', {}).get('groups', [])),
+ }),
+ Button('Ok', 'end', 'tryton-ok', True),
+ ])
+ force = StateTransition()
+
+ def transition_start(self, session):
pool = Pool()
- shipment_internal_obj = pool.get('stock.shipment.in.return')
- user_group_obj = pool.get('res.user-res.group')
- model_data_obj = pool.get('ir.model.data')
- transition_obj = pool.get('workflow.transition')
-
- shipment_internal_obj.workflow_trigger_validate(data['id'], 'assign')
- shipment = shipment_internal_obj.browse(data['id'])
- if not [x.id for x in shipment.moves if x.state == 'draft']:
+ shipment_obj = pool.get('stock.shipment.in.return')
+
+ if shipment_obj.assign_try([Transaction().context['active_id']]):
return 'end'
else:
- trans_id = model_data_obj.get_id('stock',
- 'shipment_in_return_trans_waiting_assigned_force')
- trans = transition_obj.read(trans_id)
- user_in_group = user_group_obj.search([
- ('user', '=', Transaction().user),
- ('group', '=', trans['group']),
- ], limit=1)
- if user_in_group:
- return 'ask_force'
- return 'assign_failed'
-
- def _moves(self, data):
- shipment_internal_obj = Pool().get('stock.shipment.in.return')
- shipment = shipment_internal_obj.browse(data['id'])
- return {'moves': [x.id for x in shipment.moves if x.state == 'draft']}
+ return 'failed'
- def _force(self, data):
- shipment_internal_obj = Pool().get('stock.shipment.in.return')
+ def transition_force(self, session):
+ shipment_obj = Pool().get('stock.shipment.in.return')
- shipment_internal_obj.workflow_trigger_validate(data['id'],
- 'force_assign')
- return {}
+ shipment_obj.assign_force([Transaction().context['active_id']])
+ return 'end'
AssignShipmentInReturn()
@@ -2025,15 +2129,9 @@ AssignShipmentInReturn()
class CreateShipmentOutReturn(Wizard):
'Create Customer Return Shipment'
_name = 'stock.shipment.out.return.create'
- states = {
- 'init': {
- 'result': {
- 'type': 'action',
- 'action': '_create',
- 'state': 'end',
- },
- },
- }
+
+ start = StateAction('stock.act_shipment_out_return_form')
+
def __init__(self):
super(CreateShipmentOutReturn, self).__init__()
self._error_messages.update({
@@ -2041,15 +2139,13 @@ class CreateShipmentOutReturn(Wizard):
'shipment_done_msg': 'The shipment with code %s is not yet sent.',
})
-
- def _create(self, data):
+ def do_start(self, session, action):
pool = Pool()
- model_data_obj = pool.get('ir.model.data')
- act_window_obj = pool.get('ir.action.act_window')
shipment_out_obj = pool.get('stock.shipment.out')
shipment_out_return_obj = pool.get('stock.shipment.out.return')
- shipment_outs = shipment_out_obj.browse(data['ids'])
+ shipment_ids = Transaction().context['active_ids']
+ shipment_outs = shipment_out_obj.browse(shipment_ids)
shipment_out_return_ids = []
for shipment_out in shipment_outs:
@@ -2065,7 +2161,8 @@ class CreateShipmentOutReturn(Wizard):
'quantity': move.quantity,
'uom': move.uom.id,
'from_location': move.to_location.id,
- 'to_location': shipment_out.warehouse.input_location.id,
+ 'to_location': \
+ shipment_out.warehouse.input_location.id,
'company': move.company.id,
}))
shipment_out_return_ids.append(
@@ -2077,14 +2174,13 @@ class CreateShipmentOutReturn(Wizard):
})
)
- act_window_id = model_data_obj.get_id('stock',
- 'act_shipment_out_return_form')
- res = act_window_obj.read(act_window_id)
- res['res_id'] = shipment_out_return_ids
+ data = {'res_id': shipment_out_return_ids}
if len(shipment_out_return_ids) == 1:
- res['views'].reverse()
+ action['views'].reverse()
+ return action, data
- return res
+ def transition_start(self, session):
+ return 'end'
CreateShipmentOutReturn()
@@ -2110,17 +2206,14 @@ class PickingList(CompanyReport):
_name = 'stock.shipment.out.picking_list'
def parse(self, report, objects, datas, localcontext):
- move_obj = Pool().get('stock.move')
- shipment_out_obj = Pool().get('stock.shipment.out')
-
compare_context = self.get_compare_context(report, objects, datas)
sorted_moves = {}
for shipment in objects:
sorted_moves[shipment.id] = sorted(
shipment.inventory_moves,
- lambda x,y: cmp(self.get_compare_key(x, compare_context),
- self.get_compare_key(y, compare_context))
+ lambda x, y: cmp(self.get_compare_key(x, compare_context),
+ self.get_compare_key(y, compare_context))
)
localcontext['moves'] = sorted_moves
@@ -2140,9 +2233,10 @@ class PickingList(CompanyReport):
from_location_ids = location_obj.search(list(from_location_ids))
to_location_ids = location_obj.search(list(to_location_ids))
- return {'from_location_ids' : from_location_ids,
- 'to_location_ids' : to_location_ids}
-
+ return {
+ 'from_location_ids': from_location_ids,
+ 'to_location_ids': to_location_ids,
+ }
def get_compare_key(self, move, compare_context):
from_location_ids = compare_context['from_location_ids']
@@ -2157,17 +2251,14 @@ class SupplierRestockingList(CompanyReport):
_name = 'stock.shipment.in.restocking_list'
def parse(self, report, objects, datas, localcontext):
- move_obj = Pool().get('stock.move')
- shipment_in_obj = Pool().get('stock.shipment.in')
-
compare_context = self.get_compare_context(report, objects, datas)
sorted_moves = {}
for shipment in objects:
sorted_moves[shipment.id] = sorted(
shipment.inventory_moves,
- lambda x,y: cmp(self.get_compare_key(x, compare_context),
- self.get_compare_key(y, compare_context))
+ lambda x, y: cmp(self.get_compare_key(x, compare_context),
+ self.get_compare_key(y, compare_context))
)
localcontext['moves'] = sorted_moves
@@ -2187,9 +2278,10 @@ class SupplierRestockingList(CompanyReport):
from_location_ids = location_obj.search(list(from_location_ids))
to_location_ids = location_obj.search(list(to_location_ids))
- return {'from_location_ids' : from_location_ids,
- 'to_location_ids' : to_location_ids}
-
+ return {
+ 'from_location_ids': from_location_ids,
+ 'to_location_ids': to_location_ids,
+ }
def get_compare_key(self, move, compare_context):
from_location_ids = compare_context['from_location_ids']
@@ -2204,17 +2296,14 @@ class CustomerReturnRestockingList(CompanyReport):
_name = 'stock.shipment.out.return.restocking_list'
def parse(self, report, objects, datas, localcontext):
- move_obj = Pool().get('stock.move')
- shipment_in_obj = Pool().get('stock.shipment.out.return')
-
compare_context = self.get_compare_context(report, objects, datas)
sorted_moves = {}
for shipment in objects:
sorted_moves[shipment.id] = sorted(
shipment.inventory_moves,
- lambda x,y: cmp(self.get_compare_key(x, compare_context),
- self.get_compare_key(y, compare_context))
+ lambda x, y: cmp(self.get_compare_key(x, compare_context),
+ self.get_compare_key(y, compare_context))
)
localcontext['moves'] = sorted_moves
@@ -2234,9 +2323,10 @@ class CustomerReturnRestockingList(CompanyReport):
from_location_ids = location_obj.search(list(from_location_ids))
to_location_ids = location_obj.search(list(to_location_ids))
- return {'from_location_ids' : from_location_ids,
- 'to_location_ids' : to_location_ids}
-
+ return {
+ 'from_location_ids': from_location_ids,
+ 'to_location_ids': to_location_ids,
+ }
def get_compare_key(self, move, compare_context):
from_location_ids = compare_context['from_location_ids']
@@ -2251,17 +2341,14 @@ class InteralShipmentReport(CompanyReport):
_name = 'stock.shipment.internal.report'
def parse(self, report, objects, datas, localcontext=None):
- move_obj = Pool().get('stock.move')
- shipment_in_obj = Pool().get('stock.shipment.internal')
-
compare_context = self.get_compare_context(report, objects, datas)
sorted_moves = {}
for shipment in objects:
sorted_moves[shipment.id] = sorted(
shipment.moves,
- lambda x,y: cmp(self.get_compare_key(x, compare_context),
- self.get_compare_key(y, compare_context))
+ lambda x, y: cmp(self.get_compare_key(x, compare_context),
+ self.get_compare_key(y, compare_context))
)
localcontext['moves'] = sorted_moves
@@ -2281,9 +2368,10 @@ class InteralShipmentReport(CompanyReport):
from_location_ids = location_obj.search(list(from_location_ids))
to_location_ids = location_obj.search(list(to_location_ids))
- return {'from_location_ids' : from_location_ids,
- 'to_location_ids' : to_location_ids}
-
+ return {
+ 'from_location_ids': from_location_ids,
+ 'to_location_ids': to_location_ids,
+ }
def get_compare_key(self, move, compare_context):
from_location_ids = compare_context['from_location_ids']
diff --git a/shipment.xml b/shipment.xml
index 3a89c07..6f6c110 100644
--- a/shipment.xml
+++ b/shipment.xml
@@ -29,18 +29,7 @@ this repository contains the full copyright notices and license terms. -->
<field name="warehouse"/>
<notebook colspan="6">
<page string="Incoming Moves" id="incoming_moves">
- <field name="incoming_moves" colspan="4">
- <tree string="Moves">
- <field name="product"/>
- <field name="from_location"/>
- <field name="to_location"/>
- <field name="quantity"/>
- <field name="uom"/>
- <field name="planned_date"/>
- <field name="state"/>
- <field name="unit_digits" tree_invisible="1"/>
- </tree>
- </field>
+ <field name="incoming_moves" colspan="4"/>
</page>
<page string="Inventory Moves" id="inventory_moves">
<field name="inventory_moves" colspan="4"/>
@@ -51,18 +40,13 @@ this repository contains the full copyright notices and license terms. -->
<field name="state"/>
<group col="5" colspan="2" id="buttons">
<button string="Cancel" name="cancel"
- states="{'invisible': In(Eval('state'), ['cancel', 'done']), 'readonly': Not(In(%(group_stock)d, Eval('groups', [])))}"
- icon="tryton-cancel"/>
- <button string="Received" name="received"
- states="{'invisible': Not(Equal(Eval('state'), 'draft')), 'readonly': Not(In(%(group_stock)d, Eval('groups', [])))}"
- icon="tryton-go-next"/>
- <button string="Done" name="done"
- states="{'invisible': Not(Equal(Eval('state'), 'received')), 'readonly': Not(In(%(group_stock)d, Eval('groups', [])))}"
+ type="object" icon="tryton-cancel"/>
+ <button string="Receive" name="receive"
+ type="object" icon="tryton-go-next"/>
+ <button string="Done" name="done" type="object"
icon="tryton-ok"/>
- <button string="Reset to Draft" name="button_draft"
- type="object"
- states="{'invisible': Not(Equal(Eval('state'), 'cancel')), 'readonly': Not(In(%(group_stock)d, Eval('groups', [])))}"
- icon="tryton-clear"/>
+ <button string="Reset to Draft" name="draft"
+ type="object" icon="tryton-clear"/>
</group>
</group>
</form>
@@ -176,25 +160,18 @@ this repository contains the full copyright notices and license terms. -->
<field name="moves" colspan="4"/>
<label name="state"/>
<field name="state"/>
- <group col="6" colspan="2" id="buttons">
+ <group col="5" colspan="2" id="buttons">
<button string="Cancel" name="cancel"
- states="{'invisible': In(Eval('state'), ['cancel', 'done']), 'readonly': Not(In(%(group_stock)d, Eval('groups', [])))}"
- icon="tryton-cancel"/>
- <button string="Draft" name="draft"
- states="{'invisible': Not(Equal(Eval('state'), 'waiting')), 'readonly': Not(In(%(group_stock)d, Eval('groups', [])))}"
+ type="object" icon="tryton-cancel"/>
+ <button string="Draft" name="draft" type="object"
icon="tryton-go-previous"/>
- <button string="Waiting" name="waiting"
- states="{'invisible': Not(In(Eval('state'), ['assigned', 'draft'])), 'readonly': Not(In(%(group_stock)d, Eval('groups', []))), 'icon': If(Equal(Eval('state'), 'assigned'), 'tryton-go-previous', If(Equal(Eval('state'), 'draft'), 'tryton-go-next', ''))}"/>
+ <button string="Wait" name="wait"
+ type="object"/>
<button string="Assign" name="%(wizard_shipment_in_return_assign)d"
type="action"
states="{'invisible': Not(Equal(Eval('state'), 'waiting')), 'readonly': Not(In(%(group_stock)d, Eval('groups', [])))}"
icon="tryton-go-next"/>
- <button string="Reset to Draft" name="button_draft"
- type="object"
- states="{'invisible': Not(Equal(Eval('state'), 'cancel')), 'readonly': Not(In(%(group_stock)d, Eval('groups', [])))}"
- icon="tryton-clear"/>
- <button string="Done" name="done"
- states="{'invisible': Not(Equal(Eval('state'), 'assigned')), 'readonly': Not(In(%(group_stock)d, Eval('groups', [])))}"
+ <button string="Done" name="done" type="object"
icon="tryton-ok"/>
</group>
</form>
@@ -240,8 +217,8 @@ this repository contains the full copyright notices and license terms. -->
action="act_shipment_in_return_form"
id="menu_shipment_in_return_form"/>
- <record model="ir.ui.view" id="shipment_in_return_assign_assign_failed_view_form">
- <field name="model">stock.shipment.in.return.assign.assign_failed</field>
+ <record model="ir.ui.view" id="shipment_in_return_assign_failed_view_form">
+ <field name="model">stock.shipment.in.return.assign.failed</field>
<field name="type">form</field>
<field name="arch" type="xml">
<![CDATA[
@@ -249,14 +226,8 @@ this repository contains the full copyright notices and license terms. -->
<image name="tryton-dialog-warning" xexpand="0" xfill="0"/>
<separator string="Unable to assign those products:"
id="unable"/>
- <field name="moves" colspan="2">
- <tree string="Moves" fill="1">
- <field name="product"/>
- <field name="quantity"/>
- <field name="uom"/>
- <field name="unit_digits" tree_invisible="1"/>
- </tree>
- </field>
+ <field name="moves" colspan="2"
+ view_ids="stock.move_view_tree_simple"/>
</form>
]]>
</field>
@@ -302,29 +273,21 @@ this repository contains the full copyright notices and license terms. -->
<group col="4" colspan="4" id="state_buttons">
<label name="state"/>
<field name="state"/>
- <group col="7" colspan="2" id="buttons">
+ <group col="6" colspan="2" id="buttons">
<button string="Cancel" name="cancel"
- states="{'invisible': In(Eval('state'), ['cancel', 'done']), 'readonly': Not(In(%(group_stock)d, Eval('groups', [])))}"
- icon="tryton-cancel"/>
+ type="object" icon="tryton-cancel"/>
<button string="Draft" name="draft"
- states="{'invisible': Not(Equal(Eval('state'), 'waiting')), 'readonly': Not(In(%(group_stock)d, Eval('groups', [])))}"
- icon="tryton-go-previous"/>
- <button string="Waiting" name="waiting"
- states="{'invisible': Not(In(Eval('state'), ['assigned', 'waiting', 'draft'])), 'readonly': Not(In(%(group_stock)d, Eval('groups', []))), 'icon': If(Equal(Eval('state'), 'assigned'), 'tryton-go-previous', If(Equal(Eval('state'), 'waiting'), 'tryton-clear', If(Equal(Eval('state'), 'draft'), 'tryton-go-next', '')))}"/>
+ type="object"/>
+ <button string="Waiting" name="wait"
+ type="object"/>
<button string="Assign" name="%(wizard_shipment_out_assign)d"
type="action"
states="{'invisible': Not(Equal(Eval('state'), 'waiting')), 'readonly': Not(In(%(group_stock)d, Eval('groups', [])))}"
icon="tryton-go-next"/>
- <button string="Make shipment" name="packed"
- states="{'invisible': Not(Equal(Eval('state'), 'assigned')), 'readonly': Not(In(%(group_stock)d, Eval('groups', [])))}"
- icon="tryton-go-next"/>
- <button string="Done" name="done"
- states="{'invisible': Not(Equal(Eval('state'), 'packed')), 'readonly': Not(In(%(group_stock)d , Eval('groups', [])))}"
- icon="tryton-ok"/>
- <button string="Reset to Draft" name="button_draft"
- type="object"
- states="{'invisible': Not(Equal(Eval('state'), 'cancel')), 'readonly': Not(In(%(group_stock)d, Eval('groups', [])))}"
- icon="tryton-clear"/>
+ <button string="Make shipment" name="pack"
+ type="object" icon="tryton-go-next"/>
+ <button string="Done" name="done" type="object"
+ icon="tryton-ok"/>
</group>
</group>
</form>
@@ -444,8 +407,8 @@ this repository contains the full copyright notices and license terms. -->
<menuitem parent="menu_shipment_out_form" sequence="30"
action="act_shipment_out_form_ready" id="menu_shipment_out_ready"/>
- <record model="ir.ui.view" id="shipment_out_assign_assign_failed_view_form">
- <field name="model">stock.shipment.out.assign.assign_failed</field>
+ <record model="ir.ui.view" id="shipment_out_assign_failed_view_form">
+ <field name="model">stock.shipment.out.assign.failed</field>
<field name="type">form</field>
<field name="arch" type="xml">
<![CDATA[
@@ -453,14 +416,8 @@ this repository contains the full copyright notices and license terms. -->
<image name="tryton-dialog-warning" xexpand="0" xfill="0"/>
<separator string="Unable to assign those products:"
id="unable"/>
- <field name="inventory_moves" colspan="2">
- <tree string="Inventory Moves" fill="1">
- <field name="product"/>
- <field name="quantity"/>
- <field name="uom"/>
- <field name="unit_digits" tree_invisible="1"/>
- </tree>
- </field>
+ <field name="inventory_moves" colspan="2"
+ view_ids="stock.move_view_tree_simple"/>
</form>
]]>
</field>
@@ -496,25 +453,17 @@ this repository contains the full copyright notices and license terms. -->
<field name="moves" colspan="4"/>
<label name="state"/>
<field name="state"/>
- <group col="6" colspan="2" id="buttons">
- <button string="Cancel" name="cancel"
- states="{'invisible': In(Eval('state'), ['cancel', 'done']), 'readonly': Not(In(%(group_stock)d, Eval('groups', [])))}"
+ <group col="5" colspan="2" id="buttons">
+ <button string="Cancel" name="cancel" type="object"
icon="tryton-cancel"/>
- <button string="Draft" name="draft"
- states="{'invisible': Not(Equal(Eval('state'), 'waiting')), 'readonly': Not(In(%(group_stock)d, Eval('groups', [])))}"
- icon="tryton-go-previous"/>
- <button string="Waiting" name="waiting"
- states="{'invisible': Not(In(Eval('state'), ['assigned', 'waiting', 'draft'])), 'readonly': Not(In(%(group_stock)d, Eval('groups', []))), 'icon': If(Equal(Eval('state'), 'assigned'), 'tryton-go-previous', If(Equal(Eval('state'), 'waiting'), 'tryton-clear', If(Equal(Eval('state'), 'draft'), 'tryton-go-next', '')))}"/>
+ <button string="Draft" name="draft" type="object"/>
+ <button string="Waiting" name="wait"
+ type="object"/>
<button string="Assign" name="%(wizard_shipment_internal_assign)d"
type="action"
states="{'invisible': Not(Equal(Eval('state'), 'waiting')), 'readonly': Not(In(%(group_stock)d, Eval('groups', [])))}"
icon="tryton-go-next"/>
- <button string="Reset to Draft" name="button_draft"
- type="object"
- states="{'invisible': Not(Equal(Eval('state'), 'cancel')), 'readonly': Not(In(%(group_stock)d, Eval('groups', [])))}"
- icon="tryton-clear"/>
- <button string="Done" name="done"
- states="{'invisible': Not(Equal(Eval('state'), 'assigned')), 'readonly': Not(In(%(group_stock)d , Eval('groups', [])))}"
+ <button string="Done" name="done" type="object"
icon="tryton-ok"/>
</group>
</form>
@@ -623,8 +572,8 @@ this repository contains the full copyright notices and license terms. -->
action="act_shipment_internal_assigned_form"
id="menu_shipment_internal_assigned_form"/>
- <record model="ir.ui.view" id="shipment_internal_assign_assign_failed_view_form">
- <field name="model">stock.shipment.internal.assign.assign_failed</field>
+ <record model="ir.ui.view" id="shipment_internal_assign_failed_view_form">
+ <field name="model">stock.shipment.internal.assign.failed</field>
<field name="type">form</field>
<field name="arch" type="xml">
<![CDATA[
@@ -632,14 +581,8 @@ this repository contains the full copyright notices and license terms. -->
<image name="tryton-dialog-warning" xexpand="0" xfill="0"/>
<separator string="Unable to assign those products:"
id="unable"/>
- <field name="moves" colspan="2">
- <tree string="Moves" fill="1">
- <field name="product"/>
- <field name="quantity"/>
- <field name="uom"/>
- <field name="unit_digits" tree_invisible="1"/>
- </tree>
- </field>
+ <field name="moves" colspan="2"
+ view_ids="stock.move_view_tree_simple"/>
</form>
]]>
</field>
@@ -670,18 +613,7 @@ this repository contains the full copyright notices and license terms. -->
<field name="warehouse"/>
<notebook colspan="6">
<page string="Incoming Moves" id="incoming_moves">
- <field name="incoming_moves" colspan="4">
- <tree string="Moves">
- <field name="product"/>
- <field name="from_location"/>
- <field name="to_location"/>
- <field name="quantity"/>
- <field name="uom"/>
- <field name="planned_date"/>
- <field name="state"/>
- <field name="unit_digits" tree_invisible="1"/>
- </tree>
- </field>
+ <field name="incoming_moves" colspan="4"/>
</page>
<page string="Inventory Moves" id="inventory_moves">
<field name="inventory_moves" colspan="4"/>
@@ -692,18 +624,14 @@ this repository contains the full copyright notices and license terms. -->
<field name="state"/>
<group col="5" colspan="2" id="buttons">
<button string="Cancel" name="cancel"
- states="{'invisible': In(Eval('state'), ['cancel', 'done']), 'readonly': Not(In(%(group_stock)d, Eval('groups', [])))}"
- icon="tryton-cancel"/>
- <button string="Received" name="received"
- states="{'invisible': Not(Equal(Eval('state'), 'draft')), 'readonly': Not(In(%(group_stock)d, Eval('groups', [])))}"
- icon="tryton-go-next"/>
+ type="object" icon="tryton-cancel"/>
+ <button string="Draft" name="draft"
+ type="object" icon="tryton-clear"/>
+ <button string="Received" name="receive"
+ type="object" icon="tryton-go-next"/>
<button string="Done" name="done"
- states="{'invisible': Not(Equal(Eval('state'), 'received')), 'readonly': Not(In(%(group_stock)d, Eval('groups', [])))}"
- icon="tryton-ok"/>
- <button string="Reset to Draft" name="button_draft"
type="object"
- states="{'invisible': Not(Equal(Eval('state'), 'cancel')), 'readonly': Not(In(%(group_stock)d, Eval('groups', [])))}"
- icon="tryton-clear"/>
+ icon="tryton-ok"/>
</group>
</group>
</form>
@@ -750,199 +678,6 @@ this repository contains the full copyright notices and license terms. -->
action="act_shipment_out_return_form"
id="menu_shipment_out_return_form"/>
- <!-- Workflow shipment in -->
- <record model="workflow" id="wkf_shipmentin">
- <field name="name">Supplier Shipment</field>
- <field name="model">stock.shipment.in</field>
- <field name="on_create">True</field>
- </record>
- <record model="workflow.activity" id="shipmentin_act_draft">
- <field name="workflow" ref="wkf_shipmentin"/>
- <field name="flow_start">True</field>
- <field name="method">wkf_draft</field>
- <field name="name">Draft</field>
- </record>
- <record model="workflow.activity" id="shipmentin_act_cancel">
- <field name="workflow" ref="wkf_shipmentin"/>
- <field name="flow_stop">True</field>
- <field name="name">Canceled</field>
- <field name="method">wkf_cancel</field>
- </record>
- <record model="workflow.activity" id="shipmentin_act_done">
- <field name="workflow" ref="wkf_shipmentin"/>
- <field name="flow_stop">True</field>
- <field name="name">Done</field>
- <field name="method">wkf_done</field>
- </record>
- <record model="workflow.activity" id="shipmentin_act_received">
- <field name="name">Received</field>
- <field name="workflow" ref="wkf_shipmentin"/>
- <field name="method">wkf_received</field>
- </record>
-
- <record model="workflow.transition"
- id="shipmentin_trans_draft_received">
- <field name="act_from" ref="shipmentin_act_draft"/>
- <field name="act_to" ref="shipmentin_act_received"/>
- <field name="group" ref="group_stock"/>
- <field name="signal">received</field>
- </record>
- <record model="workflow.transition"
- id="shipmentin_trans_received_draft">
- <field name="act_from" ref="shipmentin_act_received"/>
- <field name="act_to" ref="shipmentin_act_draft"/>
- <field name="group" ref="group_stock"/>
- <field name="signal">draft</field>
- </record>
- <record model="workflow.transition" id="shipmentin_trans_received_done">
- <field name="act_from" ref="shipmentin_act_received"/>
- <field name="act_to" ref="shipmentin_act_done"/>
- <field name="group" ref="group_stock"/>
- <field name="signal">done</field>
- </record>
- <record model="workflow.transition" id="shipmentin_trans_draft_cancel">
- <field name="act_from" ref="shipmentin_act_draft"/>
- <field name="act_to" ref="shipmentin_act_cancel"/>
- <field name="group" ref="group_stock"/>
- <field name="signal">cancel</field>
- </record>
- <record model="workflow.transition"
- id="shipmentin_trans_received_cancel">
- <field name="act_from" ref="shipmentin_act_received"/>
- <field name="act_to" ref="shipmentin_act_cancel"/>
- <field name="group" ref="group_stock"/>
- <field name="signal">cancel</field>
- </record>
-
-
- <!-- Workflow shipment out -->
- <record model="workflow" id="wkf_shipmentout">
- <field name="name">Customer Shipment</field>
- <field name="model">stock.shipment.out</field>
- <field name="on_create">True</field>
- </record>
- <record model="workflow.activity" id="shipmentout_act_draft">
- <field name="workflow" ref="wkf_shipmentout"/>
- <field name="flow_start">True</field>
- <field name="name">Draft</field>
- <field name="method">wkf_draft</field>
- </record>
- <record model="workflow.activity" id="shipmentout_act_cancel">
- <field name="workflow" ref="wkf_shipmentout"/>
- <field name="flow_stop">True</field>
- <field name="name">Canceled</field>
- <field name="method">wkf_cancel</field>
- </record>
- <record model="workflow.activity" id="shipmentout_act_done">
- <field name="workflow" ref="wkf_shipmentout"/>
- <field name="flow_stop">True</field>
- <field name="name">Done</field>
- <field name="method">wkf_done</field>
- </record>
- <record model="workflow.activity" id="shipmentout_act_waiting">
- <field name="name">Waiting</field>
- <field name="workflow" ref="wkf_shipmentout"/>
- <field name="method">wkf_waiting</field>
- </record>
- <record model="workflow.activity" id="shipmentout_act_assigned">
- <field name="name">Assigned</field>
- <field name="workflow" ref="wkf_shipmentout"/>
- <field name="method">wkf_assigned</field>
- </record>
- <record model="workflow.activity" id="shipmentout_act_packed">
- <field name="name">Packed</field>
- <field name="workflow" ref="wkf_shipmentout"/>
- <field name="method">wkf_packed</field>
- </record>
-
- <record model="workflow.transition"
- id="shipmentout_trans_waiting_assigned">
- <field name="act_from" ref="shipmentout_act_waiting"/>
- <field name="act_to" ref="shipmentout_act_assigned"/>
- <field name="group" ref="group_stock"/>
- <field name="signal">assign</field>
- <field name="condition">wkf_assign_try</field>
- </record>
- <record model="workflow.transition"
- id="shipmentout_trans_assigned_waiting">
- <field name="act_from" ref="shipmentout_act_assigned"/>
- <field name="act_to" ref="shipmentout_act_waiting"/>
- <field name="group" ref="group_stock"/>
- <field name="signal">waiting</field>
- </record>
- <record model="workflow.transition"
- id="shipmentout_trans_waiting_waiting">
- <field name="act_from" ref="shipmentout_act_waiting"/>
- <field name="act_to" ref="shipmentout_act_waiting"/>
- <field name="group" ref="group_stock"/>
- <field name="signal">waiting</field>
- </record>
- <record model="workflow.transition"
- id="shipmentout_trans_waiting_assigned_force">
- <field name="act_from" ref="shipmentout_act_waiting"/>
- <field name="act_to" ref="shipmentout_act_assigned"/>
- <field name="group" ref="group_stock_force_assignment"/>
- <field name="signal">force_assign</field>
- <field name="condition">wkf_assign_force</field>
- </record>
- <record model="workflow.transition"
- id="shipmentout_trans_draft_waiting">
- <field name="act_from" ref="shipmentout_act_draft"/>
- <field name="act_to" ref="shipmentout_act_waiting"/>
- <field name="group" ref="group_stock"/>
- <field name="signal">waiting</field>
- </record>
- <record model="workflow.transition"
- id="shipmentout_trans_waiting_draft">
- <field name="act_from" ref="shipmentout_act_waiting"/>
- <field name="act_to" ref="shipmentout_act_draft"/>
- <field name="group" ref="group_stock"/>
- <field name="signal">draft</field>
- </record>
- <record model="workflow.transition"
- id="shipmentout_trans_waiting_cancel">
- <field name="act_from" ref="shipmentout_act_waiting"/>
- <field name="act_to" ref="shipmentout_act_cancel"/>
- <field name="group" ref="group_stock"/>
- <field name="signal">cancel</field>
- </record>
- <record model="workflow.transition"
- id="shipmentout_trans_draft_cancel">
- <field name="act_from" ref="shipmentout_act_draft"/>
- <field name="act_to" ref="shipmentout_act_cancel"/>
- <field name="group" ref="group_stock"/>
- <field name="signal">cancel</field>
- </record>
- <record model="workflow.transition"
- id="shipmentout_trans_assigned_packed">
- <field name="act_from" ref="shipmentout_act_assigned"/>
- <field name="act_to" ref="shipmentout_act_packed"/>
- <field name="group" ref="group_stock"/>
- <field name="signal">packed</field>
- </record>
- <record model="workflow.transition"
- id="shipmentout_trans_packed_done">
- <field name="act_from" ref="shipmentout_act_packed"/>
- <field name="act_to" ref="shipmentout_act_done"/>
- <field name="group" ref="group_stock"/>
- <field name="signal">done</field>
- </record>
- <record model="workflow.transition"
- id="shipmentout_trans_assigned_cancel">
- <field name="act_from" ref="shipmentout_act_assigned"/>
- <field name="act_to" ref="shipmentout_act_cancel"/>
- <field name="group" ref="group_stock"/>
- <field name="signal">cancel</field>
- </record>
- <record model="workflow.transition"
- id="shipmentout_trans_packed_cancel">
- <field name="act_from" ref="shipmentout_act_packed"/>
- <field name="act_to" ref="shipmentout_act_cancel"/>
- <field name="group" ref="group_stock"/>
- <field name="signal">cancel</field>
- </record>
-
-
<record model="ir.action.report" id="report_shipment_out_delivery_note">
<field name="name">Delivery Note</field>
<field name="model">stock.shipment.out</field>
@@ -1013,275 +748,6 @@ this repository contains the full copyright notices and license terms. -->
<field name="action" ref="report_shipment_internal"/>
</record>
- <!-- Workflow internal shipment -->
- <record model="workflow" id="wkf_shipmentinternal">
- <field name="name">Internal Shipment</field>
- <field name="model">stock.shipment.internal</field>
- <field name="on_create">True</field>
- </record>
- <record model="workflow.activity" id="shipmentinternal_act_draft">
- <field name="workflow" ref="wkf_shipmentinternal"/>
- <field name="flow_start">True</field>
- <field name="method">wkf_draft</field>
- <field name="name">Draft</field>
- </record>
- <record model="workflow.activity" id="shipmentinternal_act_cancel">
- <field name="workflow" ref="wkf_shipmentinternal"/>
- <field name="flow_stop">True</field>
- <field name="name">Canceled</field>
- <field name="method">wkf_cancel</field>
- </record>
- <record model="workflow.activity" id="shipmentinternal_act_done">
- <field name="workflow" ref="wkf_shipmentinternal"/>
- <field name="flow_stop">True</field>
- <field name="name">Done</field>
- <field name="method">wkf_done</field>
- </record>
- <record model="workflow.activity" id="shipmentinternal_act_waiting">
- <field name="name">Waiting</field>
- <field name="workflow" ref="wkf_shipmentinternal"/>
- <field name="method">wkf_waiting</field>
- </record>
- <record model="workflow.activity" id="shipmentinternal_act_assigned">
- <field name="name">Assigned</field>
- <field name="workflow" ref="wkf_shipmentinternal"/>
- <field name="method">wkf_assigned</field>
- </record>
-
- <record model="workflow.transition"
- id="shipmentinternal_trans_draft_waiting">
- <field name="act_from" ref="shipmentinternal_act_draft"/>
- <field name="act_to" ref="shipmentinternal_act_waiting"/>
- <field name="group" ref="group_stock"/>
- <field name="signal">waiting</field>
- </record>
- <record model="workflow.transition"
- id="shipmentinternal_trans_waiting_draft">
- <field name="act_from" ref="shipmentinternal_act_waiting"/>
- <field name="act_to" ref="shipmentinternal_act_draft"/>
- <field name="group" ref="group_stock"/>
- <field name="signal">draft</field>
- </record>
- <record model="workflow.transition"
- id="shipmentinternal_trans_waiting_waiting">
- <field name="act_from" ref="shipmentinternal_act_waiting"/>
- <field name="act_to" ref="shipmentinternal_act_waiting"/>
- <field name="group" ref="group_stock"/>
- <field name="signal">waiting</field>
- </record>
- <record model="workflow.transition"
- id="shipmentinternal_trans_waiting_assigned">
- <field name="act_from" ref="shipmentinternal_act_waiting"/>
- <field name="act_to" ref="shipmentinternal_act_assigned"/>
- <field name="group" ref="group_stock"/>
- <field name="signal">assign</field>
- <field name="condition">wkf_assign_try</field>
- </record>
- <record model="workflow.transition"
- id="shipmentinternal_trans_assigned_waiting">
- <field name="act_from" ref="shipmentinternal_act_assigned"/>
- <field name="act_to" ref="shipmentinternal_act_waiting"/>
- <field name="group" ref="group_stock"/>
- <field name="signal">waiting</field>
- </record>
- <record model="workflow.transition"
- id="shipmentinternal_trans_waiting_assigned_force">
- <field name="act_from" ref="shipmentinternal_act_waiting"/>
- <field name="act_to" ref="shipmentinternal_act_assigned"/>
- <field name="group" ref="group_stock_force_assignment"/>
- <field name="signal">force_assign</field>
- <field name="condition">wkf_assign_force</field>
- </record>
- <record model="workflow.transition" id="shipmentinternal_trans_assigned_done">
- <field name="act_from" ref="shipmentinternal_act_assigned"/>
- <field name="act_to" ref="shipmentinternal_act_done"/>
- <field name="group" ref="group_stock"/>
- <field name="signal">done</field>
- </record>
- <record model="workflow.transition" id="shipmentinternal_trans_draft_cancel">
- <field name="act_from" ref="shipmentinternal_act_draft"/>
- <field name="act_to" ref="shipmentinternal_act_cancel"/>
- <field name="group" ref="group_stock"/>
- <field name="signal">cancel</field>
- </record>
- <record model="workflow.transition"
- id="shipmentinternal_trans_waiting_cancel">
- <field name="act_from" ref="shipmentinternal_act_waiting"/>
- <field name="act_to" ref="shipmentinternal_act_cancel"/>
- <field name="group" ref="group_stock"/>
- <field name="signal">cancel</field>
- </record>
- <record model="workflow.transition"
- id="shipmentinternal_trans_assigned_cancel">
- <field name="act_from" ref="shipmentinternal_act_assigned"/>
- <field name="act_to" ref="shipmentinternal_act_cancel"/>
- <field name="group" ref="group_stock"/>
- <field name="signal">cancel</field>
- </record>
-
- <!-- Workflow shipment out return -->
- <record model="workflow" id="wkf_shipment_out_return">
- <field name="name">Customer Return Shipment</field>
- <field name="model">stock.shipment.out.return</field>
- <field name="on_create">True</field>
- </record>
- <record model="workflow.activity" id="shipment_out_return_act_draft">
- <field name="workflow" ref="wkf_shipment_out_return"/>
- <field name="flow_start">True</field>
- <field name="method">wkf_draft</field>
- <field name="name">Draft</field>
- </record>
- <record model="workflow.activity" id="shipment_out_return_act_cancel">
- <field name="workflow" ref="wkf_shipment_out_return"/>
- <field name="flow_stop">True</field>
- <field name="name">Canceled</field>
- <field name="method">wkf_cancel</field>
- </record>
- <record model="workflow.activity" id="shipment_out_return_act_done">
- <field name="workflow" ref="wkf_shipment_out_return"/>
- <field name="flow_stop">True</field>
- <field name="name">Done</field>
- <field name="method">wkf_done</field>
- </record>
- <record model="workflow.activity" id="shipment_out_return_act_received">
- <field name="name">Received</field>
- <field name="workflow" ref="wkf_shipment_out_return"/>
- <field name="method">wkf_received</field>
- </record>
-
- <record model="workflow.transition"
- id="shipment_out_return_trans_draft_received">
- <field name="act_from" ref="shipment_out_return_act_draft"/>
- <field name="act_to" ref="shipment_out_return_act_received"/>
- <field name="group" ref="group_stock"/>
- <field name="signal">received</field>
- </record>
- <record model="workflow.transition"
- id="shipment_out_return_trans_received_draft">
- <field name="act_from" ref="shipment_out_return_act_received"/>
- <field name="act_to" ref="shipment_out_return_act_draft"/>
- <field name="group" ref="group_stock"/>
- <field name="signal">draft</field>
- </record>
- <record model="workflow.transition" id="shipment_out_return_trans_received_done">
- <field name="act_from" ref="shipment_out_return_act_received"/>
- <field name="act_to" ref="shipment_out_return_act_done"/>
- <field name="group" ref="group_stock"/>
- <field name="signal">done</field>
- </record>
- <record model="workflow.transition" id="shipment_out_return_trans_draft_cancel">
- <field name="act_from" ref="shipment_out_return_act_draft"/>
- <field name="act_to" ref="shipment_out_return_act_cancel"/>
- <field name="group" ref="group_stock"/>
- <field name="signal">cancel</field>
- </record>
- <record model="workflow.transition"
- id="shipment_out_return_trans_received_cancel">
- <field name="act_from" ref="shipment_out_return_act_received"/>
- <field name="act_to" ref="shipment_out_return_act_cancel"/>
- <field name="group" ref="group_stock"/>
- <field name="signal">cancel</field>
- </record>
-
- <!-- Workflow purchase return shipment -->
- <record model="workflow" id="wkf_shipment_in_return">
- <field name="name">Supplier Return Shipment</field>
- <field name="model">stock.shipment.in.return</field>
- <field name="on_create">True</field>
- </record>
- <record model="workflow.activity" id="shipment_in_return_act_draft">
- <field name="workflow" ref="wkf_shipment_in_return"/>
- <field name="flow_start">True</field>
- <field name="method">wkf_draft</field>
- <field name="name">Draft</field>
- </record>
- <record model="workflow.activity" id="shipment_in_return_act_cancel">
- <field name="workflow" ref="wkf_shipment_in_return"/>
- <field name="flow_stop">True</field>
- <field name="name">Canceled</field>
- <field name="method">wkf_cancel</field>
- </record>
- <record model="workflow.activity" id="shipment_in_return_act_done">
- <field name="workflow" ref="wkf_shipment_in_return"/>
- <field name="flow_stop">True</field>
- <field name="name">Done</field>
- <field name="method">wkf_done</field>
- </record>
- <record model="workflow.activity" id="shipment_in_return_act_waiting">
- <field name="name">Waiting</field>
- <field name="workflow" ref="wkf_shipment_in_return"/>
- <field name="method">wkf_waiting</field>
- </record>
- <record model="workflow.activity" id="shipment_in_return_act_assigned">
- <field name="name">Assigned</field>
- <field name="workflow" ref="wkf_shipment_in_return"/>
- <field name="method">wkf_assigned</field>
- </record>
-
- <record model="workflow.transition"
- id="shipment_in_return_trans_draft_waiting">
- <field name="act_from" ref="shipment_in_return_act_draft"/>
- <field name="act_to" ref="shipment_in_return_act_waiting"/>
- <field name="group" ref="group_stock"/>
- <field name="signal">waiting</field>
- </record>
- <record model="workflow.transition"
- id="shipment_in_return_trans_waiting_draft">
- <field name="act_from" ref="shipment_in_return_act_waiting"/>
- <field name="act_to" ref="shipment_in_return_act_draft"/>
- <field name="group" ref="group_stock"/>
- <field name="signal">draft</field>
- </record>
- <record model="workflow.transition"
- id="shipment_in_return_trans_waiting_assigned">
- <field name="act_from" ref="shipment_in_return_act_waiting"/>
- <field name="act_to" ref="shipment_in_return_act_assigned"/>
- <field name="group" ref="group_stock"/>
- <field name="signal">assign</field>
- <field name="condition">wkf_assign_try</field>
- </record>
- <record model="workflow.transition"
- id="shipment_in_return_trans_assigned_waiting">
- <field name="act_from" ref="shipment_in_return_act_assigned"/>
- <field name="act_to" ref="shipment_in_return_act_waiting"/>
- <field name="group" ref="group_stock"/>
- <field name="signal">waiting</field>
- </record>
- <record model="workflow.transition"
- id="shipment_in_return_trans_waiting_assigned_force">
- <field name="act_from" ref="shipment_in_return_act_waiting"/>
- <field name="act_to" ref="shipment_in_return_act_assigned"/>
- <field name="group" ref="group_stock_force_assignment"/>
- <field name="signal">force_assign</field>
- <field name="condition">wkf_assign_force</field>
- </record>
- <record model="workflow.transition" id="shipment_in_return_trans_assigned_done">
- <field name="act_from" ref="shipment_in_return_act_assigned"/>
- <field name="act_to" ref="shipment_in_return_act_done"/>
- <field name="group" ref="group_stock"/>
- <field name="signal">done</field>
- </record>
- <record model="workflow.transition" id="shipment_in_return_trans_draft_cancel">
- <field name="act_from" ref="shipment_in_return_act_draft"/>
- <field name="act_to" ref="shipment_in_return_act_cancel"/>
- <field name="group" ref="group_stock"/>
- <field name="signal">cancel</field>
- </record>
- <record model="workflow.transition"
- id="shipment_in_return_trans_waiting_cancel">
- <field name="act_from" ref="shipment_in_return_act_waiting"/>
- <field name="act_to" ref="shipment_in_return_act_cancel"/>
- <field name="group" ref="group_stock"/>
- <field name="signal">cancel</field>
- </record>
- <record model="workflow.transition"
- id="shipment_in_return_trans_assigned_cancel">
- <field name="act_from" ref="shipment_in_return_act_assigned"/>
- <field name="act_to" ref="shipment_in_return_act_cancel"/>
- <field name="group" ref="group_stock"/>
- <field name="signal">cancel</field>
- </record>
-
<!-- Sequence shipment out -->
<record model="ir.sequence.type" id="sequence_type_shipment_out">
<field name="name">Customer Shipment</field>
@@ -1443,6 +909,50 @@ this repository contains the full copyright notices and license terms. -->
<field name="perm_delete" eval="True"/>
</record>
+ <record model="ir.model.button" id="shipment_in_cancel_button">
+ <field name="name">cancel</field>
+ <field name="model"
+ search="[('model', '=', 'stock.shipment.in')]"/>
+ </record>
+ <record model="ir.model.button-res.group"
+ id="shipment_in_cancel_button_group_stock">
+ <field name="button" ref="shipment_in_cancel_button"/>
+ <field name="group" ref="group_stock"/>
+ </record>
+
+ <record model="ir.model.button" id="shipment_in_draft_button">
+ <field name="name">draft</field>
+ <field name="model"
+ search="[('model', '=', 'stock.shipment.in')]"/>
+ </record>
+ <record model="ir.model.button-res.group"
+ id="shipment_in_draft_button_group_stock">
+ <field name="button" ref="shipment_in_draft_button"/>
+ <field name="group" ref="group_stock"/>
+ </record>
+
+ <record model="ir.model.button" id="shipment_in_receive_button">
+ <field name="name">receive</field>
+ <field name="model"
+ search="[('model', '=', 'stock.shipment.in')]"/>
+ </record>
+ <record model="ir.model.button-res.group"
+ id="shipment_in_receive_button_group_stock">
+ <field name="button" ref="shipment_in_receive_button"/>
+ <field name="group" ref="group_stock"/>
+ </record>
+
+ <record model="ir.model.button" id="shipment_in_done_button">
+ <field name="name">done</field>
+ <field name="model"
+ search="[('model', '=', 'stock.shipment.in')]"/>
+ </record>
+ <record model="ir.model.button-res.group"
+ id="shipment_in_done_button_group_stock">
+ <field name="button" ref="shipment_in_done_button"/>
+ <field name="group" ref="group_stock"/>
+ </record>
+
<record model="ir.model.access" id="access_shipment_out">
<field name="model" search="[('model', '=', 'stock.shipment.out')]"/>
<field name="perm_read" eval="False"/>
@@ -1467,6 +977,83 @@ this repository contains the full copyright notices and license terms. -->
<field name="perm_delete" eval="True"/>
</record>
+ <record model="ir.model.button" id="shipment_out_cancel_button">
+ <field name="name">cancel</field>
+ <field name="model"
+ search="[('model', '=', 'stock.shipment.out')]"/>
+ </record>
+ <record model="ir.model.button-res.group"
+ id="shipment_out_cancel_button_group_stock">
+ <field name="button" ref="shipment_out_cancel_button"/>
+ <field name="group" ref="group_stock"/>
+ </record>
+
+ <record model="ir.model.button" id="shipment_out_draft_button">
+ <field name="name">draft</field>
+ <field name="model"
+ search="[('model', '=', 'stock.shipment.out')]"/>
+ </record>
+ <record model="ir.model.button-res.group"
+ id="shipment_out_draft_button_group_stock">
+ <field name="button" ref="shipment_out_draft_button"/>
+ <field name="group" ref="group_stock"/>
+ </record>
+
+ <record model="ir.model.button" id="shipment_out_wait_button">
+ <field name="name">wait</field>
+ <field name="model"
+ search="[('model', '=', 'stock.shipment.out')]"/>
+ </record>
+ <record model="ir.model.button-res.group"
+ id="shipment_out_wait_button_group_stock">
+ <field name="button" ref="shipment_out_wait_button"/>
+ <field name="group" ref="group_stock"/>
+ </record>
+
+ <record model="ir.model.button" id="shipment_out_pack_button">
+ <field name="name">pack</field>
+ <field name="model"
+ search="[('model', '=', 'stock.shipment.out')]"/>
+ </record>
+ <record model="ir.model.button-res.group"
+ id="shipment_out_pack_button_group_stock">
+ <field name="button" ref="shipment_out_pack_button"/>
+ <field name="group" ref="group_stock"/>
+ </record>
+
+ <record model="ir.model.button" id="shipment_out_done_button">
+ <field name="name">done</field>
+ <field name="model"
+ search="[('model', '=', 'stock.shipment.out')]"/>
+ </record>
+ <record model="ir.model.button-res.group"
+ id="shipment_out_done_button_group_stock">
+ <field name="button" ref="shipment_out_done_button"/>
+ <field name="group" ref="group_stock"/>
+ </record>
+
+ <record model="ir.model.button" id="shipment_out_assign_try_button">
+ <field name="name">assign_try</field>
+ <field name="model"
+ search="[('model', '=', 'stock.shipment.out')]"/>
+ </record>
+ <record model="ir.model.button-res.group"
+ id="shipment_out_assign_try_button_group_stock">
+ <field name="button" ref="shipment_out_assign_try_button"/>
+ <field name="group" ref="group_stock"/>
+ </record>
+
+ <record model="ir.model.button" id="shipment_out_assign_force_button">
+ <field name="name">assign_force</field>
+ <field name="model"
+ search="[('model', '=', 'stock.shipment.out')]"/>
+ </record>
+ <record model="ir.model.button-res.group"
+ id="shipment_out_assign_force_button_group_stock_force_assignment">
+ <field name="button" ref="shipment_out_assign_force_button"/>
+ <field name="group" ref="group_stock_force_assignment"/>
+ </record>
+
<record model="ir.model.access" id="access_shipment_internal">
<field name="model" search="[('model', '=', 'stock.shipment.internal')]"/>
<field name="perm_read" eval="False"/>
@@ -1491,6 +1078,72 @@ this repository contains the full copyright notices and license terms. -->
<field name="perm_delete" eval="True"/>
</record>
+ <record model="ir.model.button" id="shipment_internal_cancel_button">
+ <field name="name">cancel</field>
+ <field name="model"
+ search="[('model', '=', 'stock.shipment.internal')]"/>
+ </record>
+ <record model="ir.model.button-res.group"
+ id="shipment_internal_cancel_button_group_stock">
+ <field name="button" ref="shipment_internal_cancel_button"/>
+ <field name="group" ref="group_stock"/>
+ </record>
+
+ <record model="ir.model.button" id="shipment_internal_draft_button">
+ <field name="name">draft</field>
+ <field name="model"
+ search="[('model', '=', 'stock.shipment.internal')]"/>
+ </record>
+ <record model="ir.model.button-res.group"
+ id="shipment_internal_draft_button_group_stock">
+ <field name="button" ref="shipment_internal_draft_button"/>
+ <field name="group" ref="group_stock"/>
+ </record>
+
+ <record model="ir.model.button" id="shipment_internal_wait_button">
+ <field name="name">wait</field>
+ <field name="model"
+ search="[('model', '=', 'stock.shipment.internal')]"/>
+ </record>
+ <record model="ir.model.button-res.group"
+ id="shipment_internal_wait_button_group_stock">
+ <field name="button" ref="shipment_internal_wait_button"/>
+ <field name="group" ref="group_stock"/>
+ </record>
+
+ <record model="ir.model.button" id="shipment_internal_done_button">
+ <field name="name">done</field>
+ <field name="model"
+ search="[('model', '=', 'stock.shipment.internal')]"/>
+ </record>
+ <record model="ir.model.button-res.group"
+ id="shipment_internal_done_button_group_stock">
+ <field name="button" ref="shipment_internal_done_button"/>
+ <field name="group" ref="group_stock"/>
+ </record>
+
+ <record model="ir.model.button" id="shipment_internal_assign_try_button">
+ <field name="name">assign_try</field>
+ <field name="model"
+ search="[('model', '=', 'stock.shipment.internal')]"/>
+ </record>
+ <record model="ir.model.button-res.group"
+ id="shipment_internal_assign_try_button_group_stock">
+ <field name="button" ref="shipment_internal_assign_try_button"/>
+ <field name="group" ref="group_stock"/>
+ </record>
+
+ <record model="ir.model.button" id="shipment_internal_assign_force_button">
+ <field name="name">assign_force</field>
+ <field name="model"
+ search="[('model', '=', 'stock.shipment.internal')]"/>
+ </record>
+ <record model="ir.model.button-res.group"
+ id="shipment_internal_assign_force_button_group_stock_force_assignment">
+ <field name="button" ref="shipment_internal_assign_force_button"/>
+ <field name="group" ref="group_stock_force_assignment"/>
+ </record>
+
<record model="ir.model.access" id="access_shipment_out_return">
<field name="model" search="[('model', '=', 'stock.shipment.out.return')]"/>
<field name="perm_read" eval="False"/>
@@ -1515,6 +1168,50 @@ this repository contains the full copyright notices and license terms. -->
<field name="perm_delete" eval="True"/>
</record>
+ <record model="ir.model.button" id="shipment_out_return_cancel_button">
+ <field name="name">cancel</field>
+ <field name="model"
+ search="[('model', '=', 'stock.shipment.out.return')]"/>
+ </record>
+ <record model="ir.model.button-res.group"
+ id="shipment_out_return_cancel_button_group_stock">
+ <field name="button" ref="shipment_out_return_cancel_button"/>
+ <field name="group" ref="group_stock"/>
+ </record>
+
+ <record model="ir.model.button" id="shipment_out_return_draft_button">
+ <field name="name">draft</field>
+ <field name="model"
+ search="[('model', '=', 'stock.shipment.out.return')]"/>
+ </record>
+ <record model="ir.model.button-res.group"
+ id="shipment_out_return_draft_button_group_stock">
+ <field name="button" ref="shipment_out_return_draft_button"/>
+ <field name="group" ref="group_stock"/>
+ </record>
+
+ <record model="ir.model.button" id="shipment_out_return_receive_button">
+ <field name="name">receive</field>
+ <field name="model"
+ search="[('model', '=', 'stock.shipment.out.return')]"/>
+ </record>
+ <record model="ir.model.button-res.group"
+ id="shipment_out_return_receive_button_group_stock">
+ <field name="button" ref="shipment_out_return_receive_button"/>
+ <field name="group" ref="group_stock"/>
+ </record>
+
+ <record model="ir.model.button" id="shipment_out_return_done_button">
+ <field name="name">done</field>
+ <field name="model"
+ search="[('model', '=', 'stock.shipment.out.return')]"/>
+ </record>
+ <record model="ir.model.button-res.group"
+ id="shipment_out_return_done_button_group_stock">
+ <field name="button" ref="shipment_out_return_done_button"/>
+ <field name="group" ref="group_stock"/>
+ </record>
+
<record model="ir.model.access" id="access_shipment_in_return">
<field name="model" search="[('model', '=', 'stock.shipment.in.return')]"/>
<field name="perm_read" eval="False"/>
@@ -1539,6 +1236,72 @@ this repository contains the full copyright notices and license terms. -->
<field name="perm_delete" eval="True"/>
</record>
+ <record model="ir.model.button" id="shipment_in_return_cancel_button">
+ <field name="name">cancel</field>
+ <field name="model"
+ search="[('model', '=', 'stock.shipment.in.return')]"/>
+ </record>
+ <record model="ir.model.button-res.group"
+ id="shipment_in_return_cancel_button_group_stock">
+ <field name="button" ref="shipment_in_return_cancel_button"/>
+ <field name="group" ref="group_stock"/>
+ </record>
+
+ <record model="ir.model.button" id="shipment_in_return_draft_button">
+ <field name="name">draft</field>
+ <field name="model"
+ search="[('model', '=', 'stock.shipment.in.return')]"/>
+ </record>
+ <record model="ir.model.button-res.group"
+ id="shipment_in_return_draft_button_group_stock">
+ <field name="button" ref="shipment_in_return_draft_button"/>
+ <field name="group" ref="group_stock"/>
+ </record>
+
+ <record model="ir.model.button" id="shipment_in_return_wait_button">
+ <field name="name">wait</field>
+ <field name="model"
+ search="[('model', '=', 'stock.shipment.in.return')]"/>
+ </record>
+ <record model="ir.model.button-res.group"
+ id="shipment_in_return_wait_button_group_stock">
+ <field name="button" ref="shipment_in_return_wait_button"/>
+ <field name="group" ref="group_stock"/>
+ </record>
+
+ <record model="ir.model.button" id="shipment_in_return_done_button">
+ <field name="name">done</field>
+ <field name="model"
+ search="[('model', '=', 'stock.shipment.in.return')]"/>
+ </record>
+ <record model="ir.model.button-res.group"
+ id="shipment_in_return_done_button_group_stock">
+ <field name="button" ref="shipment_in_return_done_button"/>
+ <field name="group" ref="group_stock"/>
+ </record>
+
+ <record model="ir.model.button" id="shipment_in_return_assign_try_button">
+ <field name="name">assign_try</field>
+ <field name="model"
+ search="[('model', '=', 'stock.shipment.in.return')]"/>
+ </record>
+ <record model="ir.model.button-res.group"
+ id="shipment_in_return_assign_try_button_group_stock">
+ <field name="button" ref="shipment_in_return_assign_try_button"/>
+ <field name="group" ref="group_stock"/>
+ </record>
+
+ <record model="ir.model.button" id="shipment_in_return_assign_force_button">
+ <field name="name">assign_force</field>
+ <field name="model"
+ search="[('model', '=', 'stock.shipment.in.return')]"/>
+ </record>
+ <record model="ir.model.button-res.group"
+ id="shipment_in_return_assign_force_button_group_stock_force_assignment">
+ <field name="button" ref="shipment_in_return_assign_force_button"/>
+ <field name="group" ref="group_stock_force_assignment"/>
+ </record>
+
<!-- Rule definition -->
<record model="ir.rule.group" id="rule_group_shipment_in">
<field name="model" search="[('model', '=', 'stock.shipment.in')]"/>
diff --git a/tests/__init__.py b/tests/__init__.py
index 25607ae..dfff549 100644
--- a/tests/__init__.py
+++ b/tests/__init__.py
@@ -1,4 +1,4 @@
#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 test_stock import suite
+from .test_stock import suite
diff --git a/tests/test_stock.py b/tests/test_stock.py
index 1caa6f1..db6e945 100644
--- a/tests/test_stock.py
+++ b/tests/test_stock.py
@@ -2,13 +2,15 @@
#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 sys, os
+import sys
+import os
DIR = os.path.abspath(os.path.normpath(os.path.join(__file__,
'..', '..', '..', '..', '..', 'trytond')))
if os.path.isdir(DIR):
sys.path.insert(0, os.path.dirname(DIR))
import unittest
+import doctest
import datetime
from decimal import Decimal
from dateutil.relativedelta import relativedelta
@@ -16,6 +18,7 @@ from functools import partial
import trytond.tests.test_tryton
from trytond.tests.test_tryton import POOL, DB_NAME, USER, CONTEXT, test_view,\
test_depends
+from trytond.backend.sqlite.database import Database as SQLiteDatabase
from trytond.transaction import Transaction
@@ -60,7 +63,9 @@ class StockTestCase(unittest.TestCase):
g_id, = self.uom.search([('name', '=', 'Gram')])
product_id = self.product.create({
'name': 'Test Move.internal_quantity',
- 'type': 'stockable',
+ 'type': 'goods',
+ 'list_price': Decimal(0),
+ 'cost_price': Decimal(0),
'category': category_id,
'cost_price_method': 'fixed',
'default_uom': kg_id,
@@ -78,7 +83,7 @@ class StockTestCase(unittest.TestCase):
tests = [
(kg_id, 10, 10),
(g_id, 100, 0.1),
- (g_id, 1, 0), # rounded
+ (g_id, 1, 0), # rounded
]
for uom_id, quantity, internal_quantity in tests:
move_id = self.move.create({
@@ -113,13 +118,16 @@ class StockTestCase(unittest.TestCase):
category_id = self.category.create({
'name': 'Test products_by_location',
})
- unit_id, = self.uom.search([('name', '=', 'Unit')])
+ kg_id, = self.uom.search([('name', '=', 'Kilogram')])
+ g_id, = self.uom.search([('name', '=', 'Gram')])
product_id = self.product.create({
'name': 'Test products_by_location',
- 'type': 'stockable',
+ 'type': 'goods',
+ 'list_price': Decimal(0),
+ 'cost_price': Decimal(0),
'category': category_id,
'cost_price_method': 'fixed',
- 'default_uom': unit_id,
+ 'default_uom': kg_id,
})
supplier_id, = self.location.search([('code', '=', 'SUP')])
customer_id, = self.location.search([('code', '=', 'CUS')])
@@ -136,7 +144,7 @@ class StockTestCase(unittest.TestCase):
self.move.create({
'product': product_id,
- 'uom': unit_id,
+ 'uom': kg_id,
'quantity': 5,
'from_location': supplier_id,
'to_location': storage_id,
@@ -149,7 +157,7 @@ class StockTestCase(unittest.TestCase):
})
self.move.create({
'product': product_id,
- 'uom': unit_id,
+ 'uom': kg_id,
'quantity': 1,
'from_location': supplier_id,
'to_location': storage_id,
@@ -161,7 +169,7 @@ class StockTestCase(unittest.TestCase):
})
self.move.create({
'product': product_id,
- 'uom': unit_id,
+ 'uom': kg_id,
'quantity': 1,
'from_location': storage_id,
'to_location': customer_id,
@@ -174,7 +182,7 @@ class StockTestCase(unittest.TestCase):
})
self.move.create({
'product': product_id,
- 'uom': unit_id,
+ 'uom': kg_id,
'quantity': 1,
'from_location': storage_id,
'to_location': customer_id,
@@ -186,7 +194,7 @@ class StockTestCase(unittest.TestCase):
})
self.move.create({
'product': product_id,
- 'uom': unit_id,
+ 'uom': kg_id,
'quantity': 2,
'from_location': storage_id,
'to_location': customer_id,
@@ -198,7 +206,7 @@ class StockTestCase(unittest.TestCase):
})
self.move.create({
'product': product_id,
- 'uom': unit_id,
+ 'uom': kg_id,
'quantity': 5,
'from_location': supplier_id,
'to_location': storage_id,
@@ -290,12 +298,29 @@ class StockTestCase(unittest.TestCase):
today + relativedelta(days=-3),
today + relativedelta(days=-2),
]
+
+ self.move.create({
+ 'product': product_id,
+ 'uom': g_id,
+ 'quantity': 1,
+ 'from_location': supplier_id,
+ 'to_location': storage_id,
+ 'planned_date': today + relativedelta(days=-5),
+ 'effective_date': today + relativedelta(days=-5),
+ 'state': 'done',
+ 'company': company_id,
+ 'unit_price': Decimal('1'),
+ 'currency': currency_id,
+ })
+ # Nothing should change when adding a small quantity
+ test_products_by_location()
+
for period_date in periods:
period_id = self.period.create({
'date': period_date,
'company': company_id,
})
- self.period.button_close([period_id])
+ self.period.close([period_id])
test_products_by_location()
def test0030period(self):
@@ -309,10 +334,12 @@ class StockTestCase(unittest.TestCase):
unit_id, = self.uom.search([('name', '=', 'Unit')])
product_id = self.product.create({
'name': 'Test period',
- 'type': 'stockable',
+ 'type': 'goods',
'category': category_id,
'cost_price_method': 'fixed',
'default_uom': unit_id,
+ 'list_price': Decimal(0),
+ 'cost_price': Decimal(0),
})
supplier_id, = self.location.search([('code', '=', 'SUP')])
customer_id, = self.location.search([('code', '=', 'CUS')])
@@ -384,7 +411,7 @@ class StockTestCase(unittest.TestCase):
'date': today + relativedelta(days=days),
'company': company_id,
})
- self.period.button_close([period_id])
+ self.period.close([period_id])
period = self.period.read(period_id, ['state', 'caches'])
self.assertEqual(period['state'], 'closed')
@@ -432,13 +459,26 @@ class StockTestCase(unittest.TestCase):
'date': today,
'company': company_id,
})
- self.assertRaises(Exception, self.period.button_close, [period_id])
+ self.assertRaises(Exception, self.period.close, [period_id])
period_id = self.period.create({
'date': today + relativedelta(days=1),
'company': company_id,
})
- self.assertRaises(Exception, self.period.button_close, [period_id])
+ self.assertRaises(Exception, self.period.close, [period_id])
+
+
+def doctest_dropdb(test):
+ '''
+ Remove sqlite memory database
+ '''
+ database = SQLiteDatabase().connect()
+ cursor = database.cursor(autocommit=True)
+ try:
+ database.drop(cursor, ':memory:')
+ cursor.commit()
+ finally:
+ cursor.close()
def suite():
@@ -448,6 +488,10 @@ def suite():
if test not in suite:
suite.addTest(test)
suite.addTests(unittest.TestLoader().loadTestsFromTestCase(StockTestCase))
+ suite.addTests(doctest.DocFileSuite('scenario_stock_shipment_out.rst',
+ setUp=doctest_dropdb, tearDown=doctest_dropdb, encoding='utf-8',
+ optionflags=doctest.REPORT_ONLY_FIRST_FAILURE))
+
return suite
if __name__ == '__main__':
diff --git a/trytond_stock.egg-info/PKG-INFO b/trytond_stock.egg-info/PKG-INFO
index 03a5b48..861f8c9 100644
--- a/trytond_stock.egg-info/PKG-INFO
+++ b/trytond_stock.egg-info/PKG-INFO
@@ -1,6 +1,6 @@
-Metadata-Version: 1.1
+Metadata-Version: 1.0
Name: trytond-stock
-Version: 2.2.1
+Version: 2.4.0
Summary: Stock Management and Inventory Control with:
- Location definition
- Stock move
@@ -17,7 +17,7 @@ Home-page: http://www.tryton.org/
Author: B2CK
Author-email: info at b2ck.com
License: GPL-3
-Download-URL: http://downloads.tryton.org/2.2/
+Download-URL: http://downloads.tryton.org/2.4/
Description: UNKNOWN
Platform: UNKNOWN
Classifier: Development Status :: 5 - Production/Stable
diff --git a/trytond_stock.egg-info/SOURCES.txt b/trytond_stock.egg-info/SOURCES.txt
index ff51ee8..0957302 100644
--- a/trytond_stock.egg-info/SOURCES.txt
+++ b/trytond_stock.egg-info/SOURCES.txt
@@ -34,8 +34,10 @@ supplier_restocking_list.odt
doc/index.rst
icons/tryton-inventory.svg
locale/bg_BG.po
+locale/ca_ES.po
locale/cs_CZ.po
locale/de_DE.po
+locale/es_AR.po
locale/es_CO.po
locale/es_ES.po
locale/fr_FR.po
diff --git a/trytond_stock.egg-info/requires.txt b/trytond_stock.egg-info/requires.txt
index 5a5937b..17f9b89 100644
--- a/trytond_stock.egg-info/requires.txt
+++ b/trytond_stock.egg-info/requires.txt
@@ -1,5 +1,5 @@
-trytond_party >= 2.2, < 2.3
-trytond_product >= 2.2, < 2.3
-trytond_company >= 2.2, < 2.3
-trytond_currency >= 2.2, < 2.3
-trytond >= 2.2, < 2.3
\ No newline at end of file
+trytond_party >= 2.4, < 2.5
+trytond_product >= 2.4, < 2.5
+trytond_company >= 2.4, < 2.5
+trytond_currency >= 2.4, < 2.5
+trytond >= 2.4, < 2.5
\ No newline at end of file
commit 7a7b8e4e5fbb41f06db42cfb81b563d001c1f4f6
Author: Mathias Behrle <mathiasb at m9s.biz>
Date: Mon Dec 26 13:35:53 2011 +0100
Adding upstream version 2.2.1.
diff --git a/CHANGELOG b/CHANGELOG
index de861b4..e8e2ee7 100644
--- a/CHANGELOG
+++ b/CHANGELOG
@@ -1,3 +1,6 @@
+Version 2.2.1 - 2011-12-26
+* Bug fixes (see mercurial logs for details)
+
Version 2.2.0 - 2011-10-25
* Bug fixes (see mercurial logs for details)
* Ensure coherence between planned date of shipments and moves
diff --git a/PKG-INFO b/PKG-INFO
index 4b9c746..3fdd532 100644
--- a/PKG-INFO
+++ b/PKG-INFO
@@ -1,6 +1,6 @@
-Metadata-Version: 1.0
+Metadata-Version: 1.1
Name: trytond_stock
-Version: 2.2.0
+Version: 2.2.1
Summary: Stock Management and Inventory Control with:
- Location definition
- Stock move
diff --git a/__tryton__.py b/__tryton__.py
index 639895d..432f5c7 100644
--- a/__tryton__.py
+++ b/__tryton__.py
@@ -8,7 +8,7 @@
'name_es_ES': 'Gestión de existencias',
'name_fr_FR': 'Gestion des stocks',
'name_ru_RU': 'УпÑавление Ñкладами',
- 'version': '2.2.0',
+ 'version': '2.2.1',
'author': 'B2CK',
'email': 'info at b2ck.com',
'website': 'http://www.tryton.org/',
diff --git a/shipment.py b/shipment.py
index 8f322e4..00150d4 100644
--- a/shipment.py
+++ b/shipment.py
@@ -1438,7 +1438,8 @@ class ShipmentOutReturn(ModelWorkflow, ModelSQL, ModelView):
if x.state not in ('assigned', 'done', 'cancel')], {
'planned_date': incoming_date,
})
- move_obj.write([x.id for x in shipment.inventory_moves], {
+ move_obj.write([x.id for x in shipment.inventory_moves
+ if x.state not in ('assigned', 'done', 'cancel')], {
'planned_date': inventory_date,
})
diff --git a/tests/test_stock.py b/tests/test_stock.py
index dbef2fe..1caa6f1 100644
--- a/tests/test_stock.py
+++ b/tests/test_stock.py
@@ -52,7 +52,7 @@ class StockTestCase(unittest.TestCase):
'''
Test Move.internal_quantity.
'''
- with Transaction().start(DB_NAME, USER, CONTEXT) as transaction:
+ with Transaction().start(DB_NAME, USER, context=CONTEXT):
category_id = self.category.create({
'name': 'Test Move.internal_quantity',
})
@@ -108,7 +108,8 @@ class StockTestCase(unittest.TestCase):
'''
Test products_by_location.
'''
- with Transaction().start(DB_NAME, USER, CONTEXT) as transaction:
+ with Transaction().start(DB_NAME, USER,
+ context=CONTEXT) as transaction:
category_id = self.category.create({
'name': 'Test products_by_location',
})
@@ -301,7 +302,7 @@ class StockTestCase(unittest.TestCase):
'''
Test period.
'''
- with Transaction().start(DB_NAME, USER, CONTEXT) as transaction:
+ with Transaction().start(DB_NAME, USER, context=CONTEXT):
category_id = self.category.create({
'name': 'Test period',
})
diff --git a/trytond_stock.egg-info/PKG-INFO b/trytond_stock.egg-info/PKG-INFO
index 439036a..03a5b48 100644
--- a/trytond_stock.egg-info/PKG-INFO
+++ b/trytond_stock.egg-info/PKG-INFO
@@ -1,6 +1,6 @@
-Metadata-Version: 1.0
+Metadata-Version: 1.1
Name: trytond-stock
-Version: 2.2.0
+Version: 2.2.1
Summary: Stock Management and Inventory Control with:
- Location definition
- Stock move
commit 295632e995e14d5fe3d3c40762b5f4cf383f997c
Author: Mathias Behrle <mathiasb at m9s.biz>
Date: Mon Oct 31 16:21:25 2011 +0100
Adding upstream version 2.2.0.
diff --git a/CHANGELOG b/CHANGELOG
index 7e7de66..de861b4 100644
--- a/CHANGELOG
+++ b/CHANGELOG
@@ -1,5 +1,6 @@
-Version 2.0.1 - 2011-05-29
+Version 2.2.0 - 2011-10-25
* Bug fixes (see mercurial logs for details)
+* Ensure coherence between planned date of shipments and moves
Version 2.0.0 - 2011-04-27
* Bug fixes (see mercurial logs for details)
diff --git a/MANIFEST.in b/MANIFEST.in
index 47da692..44a0685 100644
--- a/MANIFEST.in
+++ b/MANIFEST.in
@@ -6,6 +6,6 @@ include CHANGELOG
include LICENSE
include *.xml
include *.odt
-include *.csv
+include locale/*.po
include doc/*
include icons/*
diff --git a/PKG-INFO b/PKG-INFO
index 1c823cb..4b9c746 100644
--- a/PKG-INFO
+++ b/PKG-INFO
@@ -1,6 +1,6 @@
Metadata-Version: 1.0
Name: trytond_stock
-Version: 2.0.1
+Version: 2.2.0
Summary: Stock Management and Inventory Control with:
- Location definition
- Stock move
@@ -17,24 +17,26 @@ Home-page: http://www.tryton.org/
Author: B2CK
Author-email: info at b2ck.com
License: GPL-3
-Download-URL: http://downloads.tryton.org/2.0/
+Download-URL: http://downloads.tryton.org/2.2/
Description: UNKNOWN
Platform: UNKNOWN
Classifier: Development Status :: 5 - Production/Stable
Classifier: Environment :: Plugins
+Classifier: Framework :: Tryton
Classifier: Intended Audience :: Developers
Classifier: Intended Audience :: Financial and Insurance Industry
Classifier: Intended Audience :: Legal Industry
Classifier: Intended Audience :: Manufacturing
Classifier: License :: OSI Approved :: GNU General Public License (GPL)
Classifier: Natural Language :: Bulgarian
+Classifier: Natural Language :: Czech
+Classifier: Natural Language :: Dutch
Classifier: Natural Language :: English
Classifier: Natural Language :: French
Classifier: Natural Language :: German
Classifier: Natural Language :: Russian
Classifier: Natural Language :: Spanish
Classifier: Operating System :: OS Independent
-Classifier: Programming Language :: Python :: 2.5
Classifier: Programming Language :: Python :: 2.6
Classifier: Programming Language :: Python :: 2.7
Classifier: Topic :: Office/Business
diff --git a/__tryton__.py b/__tryton__.py
index 0cc50c0..639895d 100644
--- a/__tryton__.py
+++ b/__tryton__.py
@@ -8,7 +8,7 @@
'name_es_ES': 'Gestión de existencias',
'name_fr_FR': 'Gestion des stocks',
'name_ru_RU': 'УпÑавление Ñкладами',
- 'version': '2.0.1',
+ 'version': '2.2.0',
'author': 'B2CK',
'email': 'info at b2ck.com',
'website': 'http://www.tryton.org/',
@@ -114,11 +114,13 @@ Et les rapports:
'period.xml',
],
'translation': [
- 'bg_BG.csv',
- 'de_DE.csv',
- 'es_CO.csv',
- 'es_ES.csv',
- 'fr_FR.csv',
- 'ru_RU.csv',
+ 'locale/cs_CZ.po',
+ 'locale/bg_BG.po',
+ 'locale/de_DE.po',
+ 'locale/es_CO.po',
+ 'locale/es_ES.po',
+ 'locale/fr_FR.po',
+ 'locale/nl_NL.po',
+ 'locale/ru_RU.po',
],
}
diff --git a/bg_BG.csv b/bg_BG.csv
deleted file mode 100644
index 582e36e..0000000
--- a/bg_BG.csv
+++ /dev/null
@@ -1,508 +0,0 @@
-type,name,res_id,src,value,fuzzy
-error,product.template,0,You cannot change the default uom for a product which is associated to stock moves.,Ðе може да пÑоменÑÑе меÑ. ед. на пÑодÑÐºÑ ÐºÐ¾Ð¹Ñо е ÑвÑÑзан Ñ Ð´Ð²Ð¸Ð¶ÐµÐ½Ð¸Ñ Ð½Ð° налиÑноÑÑ.,0
-error,stock.inventory.line,0,Line quantity must be positive!,ÐолиÑеÑÑвоÑо на Ñеда ÑÑÑбва да е положиÑелно ÑиÑло!,0
-error,stock.inventory.line,0,Product must be unique by inventory!,ÐÑодÑкÑа ÑÑÑбва да е Ñникален по инвенÑаÑизаÑиÑ!,0
-error,stock.location,0,A location with existing moves cannot be changed to a type that does not support moves.,ÐеÑÑонаÑ
ождение ÑÑÑ ÑÑÑеÑÑвÑваÑи Ð´Ð²Ð¸Ð¶ÐµÐ½Ð¸Ñ Ð½Ðµ може да бÑде пÑоменено Ñ Ñакова коеÑо не поддÑÑжа движениÑ,0
-error,stock.location,0,"Location ""%s"" must be a child of warehouse ""%s""!","ÐеÑÑонаÑ
ождение ""%s"" ÑÑÑбва да е подÑинен на Ñклад ""%s"" !",0
-error,stock.location,0,You can not create recursive locations!,Ðе може да ÑÑздаваÑе взаимновложени меÑÑонаÑ
ождениÑ!,0
-error,stock.move,0,Internal move quantity must be positive,ÐолиÑеÑÑваÑа на движение ÑÑÑбва да Ñа положиÑелно ÑиÑло,0
-error,stock.move,0,Move can be on only one Shipment,ÐвижениеÑо ÑÑÑбва да Ñамо вÑÑÑ
Ñ ÐµÐ´Ð½Ð¾ изпÑаÑане,0
-error,stock.move,0,Move quantity must be positive,ÐолиÑеÑÑвоÑо на движение ÑÑÑбва да е положиÑелно ÑиÑло,0
-error,stock.move,0,Source and destination location must be different,ÐзÑоÑника и ÑелÑа на меÑÑонаÑ
ождениеÑо ÑÑÑбва да Ñа ÑазлиÑни,0
-error,stock.move,0,"You can not modify a move in the state: ""Assigned"", ""Done"" or ""Cancel""","Ðе може да пÑоменÑÑе движение в ÑÑÑÑоÑние: ""ÐазнаÑен"", ""ÐÑиклÑÑен"" или ""ÐÑказ""",0
-error,stock.move,0,You can not modify move in closed period!,Ðе може да пÑоменÑÑе заÑвоÑен пеÑиод!,0
-error,stock.move,0,You can not set state to assigned!,Ðе може да пÑомениÑе ÑÑÑÑоÑниеÑо в назнаÑен!,0
-error,stock.move,0,You can not set state to done!,Ðе може да пÑеÑ
вÑÑлиÑе в ÑÑÑÑоÑние ÐоÑов!,0
-error,stock.move,0,You can not set state to draft!,Ðе може да пÑаÑиÑе ÑÑаÑÑÑа в пÑоекÑ!,0
-error,stock.move,0,You can not use service products for a move!,Рдвижение не може да използваÑе пÑодÑкÑи коиÑо Ñа ÑÑлÑги! ,0
-error,stock.move,0,You can only delete draft or cancelled moves!,Ðе може да изÑÑиваÑе Ð´Ð²Ð¸Ð¶ÐµÐ½Ð¸Ñ Ð² ÑÑаÑÑÑ Ð¿ÑÐ¾ÐµÐºÑ Ð¸Ð»Ð¸ оÑказан!,0
-error,stock.period,0,You can not close a period in the future or today!,Ðе може да заÑваÑÑÑе пеÑиод Ð¾Ñ Ð´Ð½ÐµÑ Ð¸Ð»Ð¸ в бедеÑеÑо!,0
-error,stock.period,0,You can not close a period when there is still assigned moves!,Ðе може да заÑваÑÑÑе пеÑиод когаÑо ÑÑдÑÑжа назнаÑени движениÑ!,0
-error,stock.shipment.in,0,Incoming Moves must have the warehouse input location as destination location!,ÐÑ
одÑÑиÑе Ð´Ð²Ð¸Ð¶ÐµÐ½Ð¸Ñ ÑÑÑбва да Ð¸Ð¼Ð°Ñ Ð¼ÐµÑÑонаÑ
ождение-вÑ
од на Ñклад каÑо меÑÑонаÑ
ождение-Ñел!,0
-error,stock.shipment.in,0,Inventory Moves must have the warehouse input location as source location!,Ðвижение на инвенÑаÑизаÑÐ¸Ñ ÑÑÑбва да Ð¸Ð¼Ð°Ñ Ð¼ÐµÑÑонаÑ
ождение-вÑ
од на Ñклад каÑо меÑÑонаÑ
ождение-изÑоÑник!,0
-error,stock.shipment.out,0,Inventory Moves must have the warehouse output location as destination location!,Ðвижение на инвенÑаÑизаÑÐ¸Ñ ÑÑÑбва да Ð¸Ð¼Ð°Ñ Ð¼ÐµÑÑонаÑ
ождение-изÑ
од на Ñклад каÑо меÑÑонаÑ
ождение-Ñел!,0
-error,stock.shipment.out,0,Outgoing Moves must have the warehouse output location as source location!,ÐзÑ
одÑÑиÑе Ð´Ð²Ð¸Ð¶ÐµÐ½Ð¸Ñ ÑÑÑбва да Ð¸Ð¼Ð°Ñ Ð¼ÐµÑÑонаÑ
ождение-изÑ
од на Ñклад каÑо меÑÑонаÑ
ождение-изÑоÑник!,0
-error,stock.shipment.out.return,0,Incoming Moves must have the warehouse input location as destination location!,ÐÑ
одÑÑиÑе Ð´Ð²Ð¸Ð¶ÐµÐ½Ð¸Ñ ÑÑÑбва да Ð¸Ð¼Ð°Ñ ÐºÐ°Ñо меÑÑонаÑ
ождение-Ñел деÑÑонаÑиÑ-вÑ
од на Ñклад!,0
-error,stock.shipment.out.return,0,Inventory Moves must have the warehouse input location as source location!,Ðвижение на инвенÑаÑизаÑÐ¸Ñ ÑÑÑбва да Ð¸Ð¼Ð°Ñ Ð¼ÐµÑÑонаÑ
ождение-вÑ
од на Ñклад каÑо меÑÑонаÑ
ождение-изÑоÑник!,0
-error,stock.shipment.out.return.create,0,The shipment with code %s is not yet sent.,ÐÑаÑкаÑа Ñ ÐºÐ¾Ð´ %s оÑе не е изпÑаÑена,0
-error,stock.shipment.out.return.create,0,You can not create return shipment,Ðе може да ÑÑздадеÑе вÑÑÑане на пÑаÑка,0
-field,"party.address,delivery",0,Delivery,ÐоÑÑавка,0
-field,"party.party,customer_location",0,Customer Location,ÐеÑÑонаÑ
ождение на клиенÑ,0
-field,"party.party,supplier_location",0,Supplier Location,ÐеÑÑонаÑ
ождение на доÑÑавÑик,0
-field,"product.product,forecast_quantity",0,Forecast Quantity,ÐланиÑано колиÑеÑÑво,0
-field,"product.product,quantity",0,Quantity,ÐолиÑеÑÑво,0
-field,"product.template,forecast_quantity",0,Forecast Quantity,ÐланиÑано колиÑеÑÑво,0
-field,"product.template,quantity",0,Quantity,ÐолиÑеÑÑво,0
-field,"stock.configuration,rec_name",0,Name,Ðме,0
-field,"stock.configuration,shipment_in_return_sequence",0,Supplier Return Shipment Sequence,ÐоÑледоваÑелноÑÑ Ð·Ð° пÑаÑка вÑÑнаÑа на доÑÑавик,0
-field,"stock.configuration,shipment_in_sequence",0,Supplier Shipment Sequence,ÐоÑледоваÑелноÑÑ Ð·Ð° пÑаÑка на доÑÑавÑик,0
-field,"stock.configuration,shipment_internal_sequence",0,Internal Shipment Sequence,ÐоÑледоваÑелноÑÑ Ð½Ð° вÑÑÑеÑна пÑаÑка,0
-field,"stock.configuration,shipment_out_return_sequence",0,Customer Return Shipment Sequence,ÐоÑледоваÑелноÑÑ Ð·Ð° пÑаÑка вÑÑнаÑа Ð¾Ñ ÐºÐ»Ð¸ÐµÐ½Ñ,0
-field,"stock.configuration,shipment_out_sequence",0,Customer Shipment Sequence,ÐоÑледоваÑелноÑÑ Ð½Ð° пÑаÑка за клиенÑ,0
-field,"stock.inventory,company",0,Company,ФиÑма,0
-field,"stock.inventory,date",0,Date,ÐаÑа,0
-field,"stock.inventory,lines",0,Lines,Редове,0
-field,"stock.inventory,location",0,Location,ÐеÑÑоположение,0
-field,"stock.inventory,lost_found",0,Lost and Found,ÐагÑбени и намеÑени,0
-field,"stock.inventory,rec_name",0,Name,Ðме,0
-field,"stock.inventory,state",0,State,СÑÑÑоÑние,0
-field,"stock.inventory.line,expected_quantity",0,Expected Quantity,ÐÑаквано колиÑеÑÑво,0
-field,"stock.inventory.line,inventory",0,Inventory,ÐнвенÑаÑизаÑиÑ,0
-field,"stock.inventory.line,move",0,Move,Ðвижение,0
-field,"stock.inventory.line,product",0,Product,ÐÑодÑкÑ,0
-field,"stock.inventory.line,quantity",0,Quantity,ÐолиÑеÑÑво,0
-field,"stock.inventory.line,rec_name",0,Name,Ðме,0
-field,"stock.inventory.line,unit_digits",0,Unit Digits,ÐеÑеÑиÑни единиÑи,0
-field,"stock.inventory.line,uom",0,UOM,ÐеÑ. ед.,0
-field,"stock.location,active",0,Active,ÐкÑивен,0
-field,"stock.location,address",0,Address,ÐдÑеÑ,0
-field,"stock.location,childs",0,Children,ÐеÑа,0
-field,"stock.location,code",0,Code,Ðод,0
-field,"stock.location,forecast_quantity",0,Forecast Quantity,ÐланиÑани колиÑеÑÑва,0
-field,"stock.location,input_location",0,Input,ÐÑ
од,0
-field,"stock.location,left",0,Left,ÐÑв,0
-field,"stock.location,name",0,Name,Ðме,0
-field,"stock.location,output_location",0,Output,ÐзÑ
од,0
-field,"stock.location,parent",0,Parent,РодиÑел,0
-field,"stock.location,quantity",0,Quantity,ÐолиÑеÑÑво,0
-field,"stock.location,rec_name",0,Name,Ðме,0
-field,"stock.location,right",0,Right,ÐеÑен,0
-field,"stock.location,storage_location",0,Storage,Склад,0
-field,"stock.location,type",0,Location type,Ðид меÑÑонаÑ
ождение,0
-field,"stock.location_stock_date.init,forecast_date",0,At Date,Ðа даÑа,0
-field,"stock.move,company",0,Company,ФиÑма,0
-field,"stock.move,cost_price",0,Cost Price,ФабÑиÑна Ñена,0
-field,"stock.move,currency",0,Currency,ÐалÑÑа,0
-field,"stock.move,effective_date",0,Effective Date,ÐÑекÑивна даÑа,0
-field,"stock.move,from_location",0,From Location,ÐÑ Ð¼ÐµÑÑонаÑ
ождение,0
-field,"stock.move,internal_quantity",0,Internal Quantity,ÐÑÑÑеÑно колиÑеÑÑво,0
-field,"stock.move,planned_date",0,Planned Date,ÐланиÑана даÑа,0
-field,"stock.move,product",0,Product,ÐÑодÑкÑ,0
-field,"stock.move,quantity",0,Quantity,ÐолиÑеÑÑво,0
-field,"stock.move,rec_name",0,Name,Ðме,0
-field,"stock.move,shipment_in",0,Supplier Shipment,ÐÑаÑка на доÑÑавÑик,0
-field,"stock.move,shipment_in_return",0,Supplier Return Shipment,ÐÑаÑка вÑÑнаÑа Ð¾Ñ Ð´Ð¾ÑÑавÑик',0
-field,"stock.move,shipment_internal",0,Internal Shipment,ÐÑÑÑеÑно изпÑаÑане,0
-field,"stock.move,shipment_out",0,Customer Shipment,ÐÑаÑка за клиенÑ,0
-field,"stock.move,shipment_out_return",0,Customer Return Shipment,ÐÑаÑка вÑÑнаÑа Ð¾Ñ ÐºÐ»Ð¸ÐµÐ½Ñ,0
-field,"stock.move,state",0,State,СÑÑÑоÑние,0
-field,"stock.move,to_location",0,To Location,ÐÑм меÑÑонаÑ
ождение,0
-field,"stock.move,unit_digits",0,Unit Digits,ÐеÑеÑиÑни единиÑи,0
-field,"stock.move,unit_price",0,Unit Price,ÐдиниÑна Ñена,0
-field,"stock.move,unit_price_required",0,Unit Price Required,ÐдиниÑнаÑа Ñена е задÑлжиÑелна,0
-field,"stock.move,uom",0,Uom,ÐеÑ. ед.,0
-field,"stock.period,caches",0,Caches,ÐаÑи в налиÑноÑÑ,0
-field,"stock.period,company",0,Company,ФиÑма,0
-field,"stock.period,date",0,Date,ÐаÑа,0
-field,"stock.period,rec_name",0,Name,Ðме на пÑикаÑен Ñайл,0
-field,"stock.period,state",0,State,ЩаÑ,0
-field,"stock.period.cache,internal_quantity",0,Internal Quantity,ÐÑÑÑеÑно колиÑеÑÑво,0
-field,"stock.period.cache,location",0,Location,ÐеÑÑоположение,0
-field,"stock.period.cache,period",0,Period,ÐеÑиод,0
-field,"stock.period.cache,product",0,Product,ÐÑодÑкÑ,0
-field,"stock.period.cache,rec_name",0,Name,Ðме на пÑикаÑен Ñайл,0
-field,"stock.product_stock_date.init,forecast_date",0,At Date,Ðа даÑа,0
-field,"stock.shipment.in,code",0,Code,Ðод,0
-field,"stock.shipment.in,contact_address",0,Contact Address,ÐдÑÐµÑ Ð·Ð° конÑакÑ,0
-field,"stock.shipment.in,effective_date",0,Effective Date,ÐÑекÑивна даÑа,0
-field,"stock.shipment.in,incoming_moves",0,Incoming Moves,ÐÑ
одÑÑи движениÑ,0
-field,"stock.shipment.in,inventory_moves",0,Inventory Moves,ÐÐ²Ð¸Ð¶ÐµÐ½Ð¸Ñ Ð½Ð° инвенÑаÑизаÑиÑ,0
-field,"stock.shipment.in,moves",0,Moves,ÐвижениÑ,0
-field,"stock.shipment.in,planned_date",0,Planned Date,ÐланиÑана даÑа,0
-field,"stock.shipment.in,rec_name",0,Name,Ðме,0
-field,"stock.shipment.in,reference",0,Reference,ÐÑпÑаÑка,0
-field,"stock.shipment.in,state",0,State,СÑÑÑоÑние,0
-field,"stock.shipment.in,supplier",0,Supplier,ÐоÑÑавÑик,0
-field,"stock.shipment.in,warehouse",0,Warehouse,Склад,0
-field,"stock.shipment.in.return,code",0,Code,Ðод,0
-field,"stock.shipment.in.return,effective_date",0,Effective Date,ÐÑекÑивна даÑа,0
-field,"stock.shipment.in.return,from_location",0,From Location,ÐÑ Ð¼ÐµÑÑонаÑ
ождение,0
-field,"stock.shipment.in.return,moves",0,Moves,ÐвижениÑ,0
-field,"stock.shipment.in.return,planned_date",0,Planned Date,ÐланиÑана даÑа,0
-field,"stock.shipment.in.return,rec_name",0,Name,Ðме,0
-field,"stock.shipment.in.return,reference",0,Reference,ÐÑпÑаÑка,0
-field,"stock.shipment.in.return,state",0,State,СÑÑÑоÑние,0
-field,"stock.shipment.in.return,to_location",0,To Location,ÐÑм меÑÑонаÑ
ождение,0
-field,"stock.shipment.in.return.assign.assign_failed,moves",0,Moves,ÐвижениÑ,0
-field,"stock.shipment.internal,code",0,Code,Ðод,0
-field,"stock.shipment.internal,effective_date",0,Effective Date,ÐÑекÑивна даÑа,0
-field,"stock.shipment.internal,from_location",0,From Location,ÐÑ Ð¼ÐµÑÑонаÑ
ождение,0
-field,"stock.shipment.internal,moves",0,Moves,ÐвижениÑ,0
-field,"stock.shipment.internal,planned_date",0,Planned Date,ÐланиÑана даÑа,0
-field,"stock.shipment.internal,rec_name",0,Name,Ðме,0
-field,"stock.shipment.internal,reference",0,Reference,ÐÑпÑаÑка,0
-field,"stock.shipment.internal,state",0,State,СÑÑÑоÑние,0
-field,"stock.shipment.internal,to_location",0,To Location,ÐÑм меÑÑонаÑ
ождение,0
-field,"stock.shipment.internal.assign.assign_failed,moves",0,Moves,ÐвижениÑ,0
-field,"stock.shipment.out,code",0,Code,Ðод,0
-field,"stock.shipment.out,customer",0,Customer,ÐлиенÑ,0
-field,"stock.shipment.out,delivery_address",0,Delivery Address,ÐдÑÐµÑ Ð·Ð° доÑÑвка,0
-field,"stock.shipment.out,effective_date",0,Effective Date,ÐÑекÑивна даÑа,0
-field,"stock.shipment.out,inventory_moves",0,Inventory Moves,ÐÐ²Ð¸Ð¶ÐµÐ½Ð¸Ñ Ð½Ð° инвенÑаÑизаÑиÑ,0
-field,"stock.shipment.out,moves",0,Moves,ÐвижениÑ,0
-field,"stock.shipment.out,outgoing_moves",0,Outgoing Moves,ÐзÑ
одÑÑи движениÑ,0
-field,"stock.shipment.out,planned_date",0,Planned Date,ÐланиÑана даÑа,0
-field,"stock.shipment.out,rec_name",0,Name,Ðме,0
-field,"stock.shipment.out,reference",0,Reference,ÐÑпÑаÑка,0
-field,"stock.shipment.out,state",0,State,СÑÑÑоÑние,0
-field,"stock.shipment.out,warehouse",0,Warehouse,Склад,0
-field,"stock.shipment.out.assign.assign_failed,inventory_moves",0,Inventory Moves,ÐÐ²Ð¸Ð¶ÐµÐ½Ð¸Ñ Ð½Ð° инвенÑаÑизаÑиÑ,0
-field,"stock.shipment.out.return,code",0,Code,Ðод,0
-field,"stock.shipment.out.return,customer",0,Customer,ÐлиенÑ,0
-field,"stock.shipment.out.return,delivery_address",0,Delivery Address,ÐдÑÐµÑ Ð·Ð° доÑÑвка,0
-field,"stock.shipment.out.return,effective_date",0,Effective Date,ÐÑекÑивна даÑа,0
-field,"stock.shipment.out.return,incoming_moves",0,Incoming Moves,ÐÑ
одÑÑи движениÑ,0
-field,"stock.shipment.out.return,inventory_moves",0,Inventory Moves,ÐÐ²Ð¸Ð¶ÐµÐ½Ð¸Ñ Ð½Ð° инвенÑаÑизаÑиÑ,0
-field,"stock.shipment.out.return,moves",0,Moves,ÐвижениÑ,0
-field,"stock.shipment.out.return,planned_date",0,Planned Date,ÐланиÑана даÑа,0
-field,"stock.shipment.out.return,rec_name",0,Name,Ðме,0
-field,"stock.shipment.out.return,reference",0,Reference,ÐÑпÑаÑка,0
-field,"stock.shipment.out.return,state",0,State,СÑÑÑоÑние,0
-field,"stock.shipment.out.return,warehouse",0,Warehouse,Склад,0
-help,"party.party,customer_location",0,The default destination location when sending products to the party.,ЦелÑа-меÑÑонаÑ
ождение по подÑазбиÑане когаÑо Ñе изпÑаÑÐ°Ñ Ð¿ÑодÑкÑи на паÑÑнÑоÑа.,0
-help,"party.party,supplier_location",0,The default source location when receiving products from the party.,ÐзÑоÑник-меÑÑонаÑ
Ð¾Ð¶Ð´ÐµÐ½Ð¸Ñ Ð¿Ð¾ подÑазбиÑане когаÑо Ñе полÑÑÐ°Ð²Ð°Ñ Ð¿ÑодÑкÑи Ð¾Ñ Ð¿Ð°ÑÑнÑоÑа.,0
-help,"stock.location_stock_date.init,forecast_date",0,"Allow to compute expected stock quantities for this date.
-* An empty value is an infinite date in the future.
-* A date in the past will provide historical values.","ÐозволÑва да Ñе изÑиÑли оÑакваниÑе налиÑноÑÑи Ð¾Ñ Ð¿ÑодÑÐºÑ Ð·Ð° Ñази даÑа:
-* ÐÑазна даÑа е неизвеÑÑна даÑа в бÑдеÑеÑо.
-* ÐаÑа Ð¾Ñ Ð¼Ð¸Ð½Ð°Ð» пеÑиод показва иÑÑоÑиÑеÑки данни.",0
-help,"stock.product_stock_date.init,forecast_date",0,"Allow to compute expected stock quantities for this date.
-* An empty value is an infinite date in the future.
-* A date in the past will provide historical values.","ÐозволÑва да Ñе изÑиÑли оÑакваниÑе налиÑноÑÑи Ð¾Ñ Ð¿ÑодÑÐºÑ Ð·Ð° Ñази даÑа:
-* ÐÑазна даÑа е неизвеÑÑна даÑа в бÑдеÑеÑо.
-* ÐаÑа Ð¾Ñ Ð¼Ð¸Ð½Ð°Ð» пеÑиод показва иÑÑоÑиÑеÑки данни.",0
-model,"ir.action,name",act_inventory_form,Inventories,ÐнвенÑаÑизаÑии,0
-model,"ir.action,name",act_inventory_form2,Inventories,ÐнвенÑаÑизаÑии,0
-model,"ir.action,name",act_inventory_form_draft,Draft Inventories,ÐÑÐ¾ÐµÐºÑ Ð½Ð° инвенÑаÑизаÑиÑ,0
-model,"ir.action,name",act_location_form,Locations,ÐеÑÑонаÑ
ождениÑ,0
-model,"ir.action,name",act_location_quantity_tree,Product Stock,ÐалиÑноÑÑ Ð½Ð° пÑодÑкÑ,0
-model,"ir.action,name",act_location_tree,Locations,ÐеÑÑонаÑ
ождениÑ,0
-model,"ir.action,name",act_move_form,Moves,ÐвижениÑ,0
-model,"ir.action,name",act_move_form_cust,Moves to Customers,ÐÐ²Ð¸Ð¶ÐµÐ½Ð¸Ñ ÐºÑм клиенÑи,0
-model,"ir.action,name",act_move_form_supp,Moves from Suppliers,ÐÐ²Ð¸Ð¶ÐµÐ½Ð¸Ñ Ð¾Ñ Ð´Ð¾ÑÑавÑик,0
-model,"ir.action,name",act_move_form_supp_proceed,Moves from Suppliers Waiting Arrival,ÐÐ²Ð¸Ð¶ÐµÐ½Ð¸Ñ Ð¾Ñ Ð´Ð¾ÑÑавÑик оÑакваÑи пÑиÑÑигане,0
-model,"ir.action,name",act_product_by_location,Products by Locations,ÐÑодÑкÑи по меÑÑонаÑ
ождение,0
-model,"ir.action,name",act_shipment_in_form,Supplier Shipments,ÐÑаÑки на доÑÑавÑик,0
-model,"ir.action,name",act_shipment_in_form2,New Supplier Shipment,Ðова пÑаÑка на доÑÑавÑик,0
-model,"ir.action,name",act_shipment_in_form_received,Received Supplier shipments,ÐÑаÑки полÑÑени Ð¾Ñ Ð´Ð¾ÑÑавÑик,0
-model,"ir.action,name",act_shipment_in_return_form,Supplier Return Shipments,ÐÑаÑка вÑÑнаÑа на доÑÑавÑик,0
-model,"ir.action,name",act_shipment_in_return_new_form,New Supplier Return Shipment,Ðова пÑаÑка вÑÑнаÑа на доÑÑавÑик,0
-model,"ir.action,name",act_shipment_internal_assigned_form,Assigned Internal Shipments,ÐазнаÑаване на вÑÑÑеÑна пÑаÑка,0
-model,"ir.action,name",act_shipment_internal_draft_form,Draft Internal Shipments,ÐÑÐ¾ÐµÐºÑ Ð½Ð° вÑÑÑеÑна пÑаÑка,0
-model,"ir.action,name",act_shipment_internal_form,Internal Shipments,ÐÑÑÑеÑни изпÑаÑаниÑ,0
-model,"ir.action,name",act_shipment_internal_new_form,New Internal Shipment,Ðова вÑÑÑеÑна пÑаÑка,0
-model,"ir.action,name",act_shipment_internal_waiting_form,Internal Shipments Waiting Assignation,ÐÑÑÑеÑни пÑаÑки оÑакваÑи назнаÑаване,0
-model,"ir.action,name",act_shipment_out_form,Customer Shipments,ÐÑаÑки за клиенÑи,0
-model,"ir.action,name",act_shipment_out_form2,Customer Shipments,ÐÑаÑки за клиенÑи,0
-model,"ir.action,name",act_shipment_out_form3,Supplier Shipments,ÐÑаÑки на доÑÑавÑик,0
-model,"ir.action,name",act_shipment_out_form_assigned,Assigned Customer Shipments,ÐазнаÑени пÑаÑки за клиенÑи,0
-model,"ir.action,name",act_shipment_out_form_ready,Customer Shipments Ready for Shipping,ÐÑаÑки за клиенÑи гоÑови за изпÑаÑане,0
-model,"ir.action,name",act_shipment_out_form_waiting,Customer Shipments Waiting Assignation,ÐÑаÑки за клиенÑи ÑакаÑи назнаÑаване,0
-model,"ir.action,name",act_shipment_out_return_form,Customer Return Shipments,ÐÑаÑки вÑÑнаÑи Ð¾Ñ ÐºÐ»Ð¸ÐµÐ½Ñ,0
-model,"ir.action,name",act_shipment_out_return_form2,New Customer Return Shipment,Ðова пÑаÑка вÑÑнаÑа Ð¾Ñ ÐºÐ»Ð¸ÐµÐ½Ñ,0
-model,"ir.action,name",act_stock_configuration_form,Stock Configuration,ÐонÑигÑÑиÑане на налиÑноÑÑ,0
-model,"ir.action,name",create_shipment_out_return,Create Return Shipment,СÑздаване на вÑÑнаÑа пÑаÑка,0
-model,"ir.action,name",report_shipment_in_restocking_list,Restocking List,СпиÑÑк за ÑвелиÑаване налиÑноÑÑ Ð½Ð° пÑодÑкÑ,0
-model,"ir.action,name",report_shipment_internal,Internal Shipment,ÐÑÑÑеÑно изпÑаÑане,0
-model,"ir.action,name",report_shipment_out_delivery_note,Delivery Note,Ðележка кÑм доÑÑавка,0
-model,"ir.action,name",report_shipment_out_picking_list,Picking List,СпиÑÑк за опаковане,0
-model,"ir.action,name",report_shipment_out_return_restocking_list,Restocking List,СпиÑÑк за ÑвелиÑаване налиÑноÑÑ Ð½Ð° пÑодÑкÑ,0
-model,"ir.action,name",wizard_complete_inventory,Complete Inventory,ÐÑлна инвенÑаÑизаÑиÑ,0
-model,"ir.action,name",wizard_location_open,Product by Location,ÐÑодÑкÑа по меÑÑонаÑ
ождение,0
-model,"ir.action,name",wizard_product_open,Product Quantities,ÐолиÑеÑÑва на пÑодÑкÑ,0
-model,"ir.action,name",wizard_shipment_in_return_assign,Assign Purchase Return Shipment,ÐазнаÑаване за вÑÑÑане на пÑаÑка Ð¾Ñ Ð¿Ð¾ÐºÑпка,0
-model,"ir.action,name",wizard_shipment_internal_assign,Assign Shipment Internal,ÐазнаÑаване на вÑÑÑеÑна пÑаÑка,0
-model,"ir.action,name",wizard_shipment_out_assign,Assign Shipment Out,ÐазнаÑаване на пÑаÑка за навÑн,0
-model,"ir.sequence,name",sequence_shipment_in,Supplier Shipment,ÐзпÑаÑане на доÑÑавÑик,0
-model,"ir.sequence,name",sequence_shipment_in_return,Supplier Return Shipment,ÐÑаÑка вÑÑнаÑа Ð¾Ñ Ð´Ð¾ÑÑавÑик',0
-model,"ir.sequence,name",sequence_shipment_internal,Internal Shipment,ÐÑÑÑеÑна пÑаÑка,0
-model,"ir.sequence,name",sequence_shipment_out,Customer Shipment,ÐÑаÑка за клиенÑ,0
-model,"ir.sequence,name",sequence_shipment_out_return,Customer Return Shipment,ÐÑаÑка вÑÑнаÑа Ð¾Ñ ÐºÐ»Ð¸ÐµÐ½Ñ,0
-model,"ir.sequence.type,name",sequence_type_shipment_in,Supplier Shipment,ÐÑаÑка на доÑÑавÑик,0
-model,"ir.sequence.type,name",sequence_type_shipment_in_return,Supplier Return Shipment,ÐÑаÑка вÑÑнаÑа Ð¾Ñ Ð´Ð¾ÑÑавÑик',0
-model,"ir.sequence.type,name",sequence_type_shipment_internal,Internal Shipment,ÐÑÑÑеÑна пÑаÑка,0
-model,"ir.sequence.type,name",sequence_type_shipment_out,Customer Shipment,ÐÑаÑка за клиенÑ,0
-model,"ir.sequence.type,name",sequence_type_shipment_out_return,Customer Return Shipment,ÐÑаÑка вÑÑнаÑа Ð¾Ñ ÐºÐ»Ð¸ÐµÐ½Ñ,0
-model,"ir.ui.menu,name",menu_configuration,Configuration,ÐонÑигÑÑаÑиÑ,0
-model,"ir.ui.menu,name",menu_inventory_form,Inventories,ÐнвенÑаÑизаÑии,0
-model,"ir.ui.menu,name",menu_inventory_form_draft,Draft Inventories,ÐÑÐ¾ÐµÐºÑ Ð½Ð° инвенÑаÑизаÑиÑ,0
-model,"ir.ui.menu,name",menu_inventory_form_new,New Inventory,Ðова нвенÑаÑизаÑиÑ,0
-model,"ir.ui.menu,name",menu_location_form,Locations,ÐеÑÑонаÑ
ождениÑ,0
-model,"ir.ui.menu,name",menu_location_tree,Locations,ÐеÑÑонаÑ
ождениÑ,0
-model,"ir.ui.menu,name",menu_move_form,Moves,ÐвижениÑ,0
-model,"ir.ui.menu,name",menu_move_form_cust,Moves to Customers,ÐÐ²Ð¸Ð¶ÐµÐ½Ð¸Ñ ÐºÑм клиенÑи,0
-model,"ir.ui.menu,name",menu_move_form_supp,Moves from Suppliers,ÐÐ²Ð¸Ð¶ÐµÐ½Ð¸Ñ Ð¾Ñ Ð´Ð¾ÑÑавÑик,0
-model,"ir.ui.menu,name",menu_move_form_supp_proceed,Moves from Suppliers Waiting Arrival,ÐÐ²Ð¸Ð¶ÐµÐ½Ð¸Ñ Ð¾Ñ Ð´Ð¾ÑÑавÑик оÑакваÑи пÑиÑÑигане,0
-model,"ir.ui.menu,name",menu_reporting,Reporting,СпÑавки,0
-model,"ir.ui.menu,name",menu_shipment_in_form,Supplier Shipments,ÐÑаÑки на доÑÑавÑик,0
-model,"ir.ui.menu,name",menu_shipment_in_form2,New Supplier Shipment,Ðова пÑаÑка на доÑÑавÑик,0
-model,"ir.ui.menu,name",menu_shipment_in_received,Received Supplier shipments,ÐÑаÑки полÑÑени Ð¾Ñ Ð´Ð¾ÑÑавÑик,0
-model,"ir.ui.menu,name",menu_shipment_in_return_form,Supplier Return Shipments,ÐÑаÑка вÑÑнаÑа на доÑÑавÑик,0
-model,"ir.ui.menu,name",menu_shipment_in_return_new_form,New Supplier Return Shipment,Ðова пÑаÑка вÑÑнаÑа на доÑÑавÑик,0
-model,"ir.ui.menu,name",menu_shipment_internal_assigned_form,Assigned Internal Shipments,ÐазнаÑени вÑÑÑеÑни пÑаÑки,0
-model,"ir.ui.menu,name",menu_shipment_internal_draft_form,Draft Internal Shipments,ÐÑÐ¾ÐµÐºÑ Ð½Ð° вÑÑÑеÑна пÑаÑка,0
-model,"ir.ui.menu,name",menu_shipment_internal_form,Internal Shipments,ÐÑÑÑеÑни изпÑаÑаниÑ,0
-model,"ir.ui.menu,name",menu_shipment_internal_new_form,New Internal Shipment,Ðова вÑÑÑеÑна пÑаÑка,0
-model,"ir.ui.menu,name",menu_shipment_internal_waiting_form,Internal Shipments Waiting Assignation,ÐÑÑÑеÑни пÑаÑки оÑакваÑи назнаÑаване,0
-model,"ir.ui.menu,name",menu_shipment_out_assigned,Assigned Customer Shipments,ÐазнаÑени пÑаÑки за клиенÑи,0
-model,"ir.ui.menu,name",menu_shipment_out_form,Customer Shipments,ÐÑаÑки за клиенÑи,0
-model,"ir.ui.menu,name",menu_shipment_out_ready,Customer Shipments Ready for Shipping,ÐÑаÑки за клиенÑи гоÑови за изпÑаÑане,0
-model,"ir.ui.menu,name",menu_shipment_out_return_form,Customer Return Shipments,ÐÑаÑки вÑÑнаÑи Ð¾Ñ ÐºÐ»Ð¸ÐµÐ½Ñ,0
-model,"ir.ui.menu,name",menu_shipment_out_return_form2,New Customer Return Shipment,Ðова пÑаÑка вÑÑнаÑа Ð¾Ñ ÐºÐ»Ð¸ÐµÐ½Ñ,0
-model,"ir.ui.menu,name",menu_shipment_out_waiting,Customer Shipments Waiting Assignation,ÐÑаÑки за клиенÑи ÑакаÑи назнаÑаване,0
-model,"ir.ui.menu,name",menu_stock,Inventory Management,УпÑавление на инвенÑаÑизаÑиÑ,0
-model,"ir.ui.menu,name",menu_stock_configuration,Stock Configuration,ÐонÑигÑÑиÑане на налиÑноÑÑ,0
-model,"res.group,name",group_stock,Stock,ÐалиÑноÑÑ,0
-model,"res.group,name",group_stock_admin,Stock Administration,УпÑавление на налиÑноÑÑ,0
-model,"res.group,name",group_stock_force_assignment,Stock Force Assignment,ÐаÑоÑно назнаÑване на налиÑноÑÑ,0
-model,"stock.configuration,name",0,Stock Configuration,ÐонÑигÑÑиÑане на налиÑноÑÑ,0
-model,"stock.inventory,name",0,Stock Inventory,ÐнвенÑаÑизаÑÐ¸Ñ Ð½Ð° налиÑноÑÑ,0
-model,"stock.inventory.line,name",0,Stock Inventory Line,Ред Ð¾Ñ Ð½Ð°Ð»Ð¸ÑноÑÑ Ð½Ð° пÑодÑкÑ,0
-model,"stock.location,name",0,Stock Location,ÐеÑÑонаÑ
ождение на налиÑноÑÑ,0
-model,"stock.location,name",location_customer,Customer,ÐлиенÑ,0
-model,"stock.location,name",location_input,Input Zone,Ðона вÑ
од,0
-model,"stock.location,name",location_lost_found,Lost and Found,ÐагÑбени и намеÑени,0
-model,"stock.location,name",location_output,Output Zone,Ðона изÑ
од,0
-model,"stock.location,name",location_storage,Storage Zone,Ðона за ÑÑÑ
Ñанение,0
-model,"stock.location,name",location_supplier,Supplier,ÐоÑÑавÑик,0
-model,"stock.location,name",location_warehouse,Warehouse,Склад,0
-model,"stock.location_stock_date.init,name",0,Compute stock quantities,ÐзÑиÑлÑване на колиÑеÑÑва на налиÑноÑÑ,0
-model,"stock.move,name",0,Stock Move,Ðвижение на налиÑноÑÑ,0
-model,"stock.period,name",0,Stock Period,ÐеÑиод на налиÑноÑÑ,0
-model,"stock.period.cache,name",0,"
- Stock Period Cache
-
- It is used to store cached computation of stock quantities.
- ","
- ÐеÑиод на налиÑноÑÑ Ð² паÑи в бÑой
-
- Ðзползва Ñе за Ð·Ð°Ð¿Ð¸Ñ Ð½Ð° изÑиÑлениÑе паÑи в бÑой на налиÑниÑе колиÑеÑÑва.",0
-model,"stock.product_stock_date.init,name",0,Compute stock quantities,ÐзÑиÑлÑване на колиÑеÑÑва на налиÑноÑÑ,0
-model,"stock.shipment.in,name",0,Supplier Shipment,ÐÑаÑка на доÑÑавÑик,0
-model,"stock.shipment.in.return,name",0,Supplier Return Shipment,ÐÑаÑка вÑÑнаÑа Ð¾Ñ Ð´Ð¾ÑÑавÑик',0
-model,"stock.shipment.in.return.assign.assign_failed,name",0,Assign Supplier Return Shipment Assign Failed,ÐеÑÑпеÑно назнаÑаване на доÑÑавÑик за вÑÑнаÑа пÑаÑка,0
-model,"stock.shipment.internal,name",0,Internal Shipment,ÐÑÑÑеÑно изпÑаÑане,0
-model,"stock.shipment.internal.assign.assign_failed,name",0,Assign Shipment Internal Assign Failed,ÐеÑÑпеÑно назнаÑаване на вÑÑÑеÑно пÑаÑка,0
-model,"stock.shipment.out,name",0,Customer Shipment,ÐÑаÑка за клиенÑ,0
-model,"stock.shipment.out.assign.assign_failed,name",0,Assign Shipment Out Assign Failed,ÐеÑÑпеÑно назнаÑаване на пÑаÑка за навÑн,0
-model,"stock.shipment.out.return,name",0,Customer Return Shipment,ÐÑаÑка вÑÑнаÑа Ð¾Ñ ÐºÐ»Ð¸ÐµÐ½Ñ,0
-model,"workflow,name",wkf_inventory,Inventory,ÐнвенÑаÑизаÑиÑ,0
-model,"workflow,name",wkf_shipment_in_return,Supplier Return Shipment,ÐÑаÑка вÑÑнаÑа Ð¾Ñ Ð´Ð¾ÑÑавÑик',0
-model,"workflow,name",wkf_shipment_out_return,Customer Return Shipment,ÐÑаÑка вÑÑнаÑа Ð¾Ñ ÐºÐ»Ð¸ÐµÐ½Ñ,0
-model,"workflow,name",wkf_shipmentin,Supplier Shipment,ÐÑаÑка на доÑÑавÑик,0
-model,"workflow,name",wkf_shipmentinternal,Internal Shipment,ÐÑÑÑеÑно изпÑаÑане,0
-model,"workflow,name",wkf_shipmentout,Customer Shipment,ÐÑаÑка за клиенÑ,0
-model,"workflow.activity,name",inventory_act_cancel,Canceled,ÐÑказан,0
-model,"workflow.activity,name",inventory_act_done,Done,ÐÑиклÑÑен,0
-model,"workflow.activity,name",inventory_act_draft,Draft,ÐÑоекÑ,0
-model,"workflow.activity,name",shipment_in_return_act_assigned,Assigned,ÐазнаÑен,0
-model,"workflow.activity,name",shipment_in_return_act_cancel,Canceled,ÐÑказан,0
-model,"workflow.activity,name",shipment_in_return_act_done,Done,ÐÑиклÑÑен,0
-model,"workflow.activity,name",shipment_in_return_act_draft,Draft,ÐÑоекÑ,0
-model,"workflow.activity,name",shipment_in_return_act_waiting,Waiting,ÐзÑакваÑ,0
-model,"workflow.activity,name",shipment_out_return_act_cancel,Canceled,ÐÑказан,0
-model,"workflow.activity,name",shipment_out_return_act_done,Done,ÐÑиклÑÑен,0
-model,"workflow.activity,name",shipment_out_return_act_draft,Draft,ÐÑоекÑ,0
-model,"workflow.activity,name",shipment_out_return_act_received,Received,ÐолÑÑен,0
-model,"workflow.activity,name",shipmentin_act_cancel,Canceled,ÐÑказан,0
-model,"workflow.activity,name",shipmentin_act_done,Done,ÐÑиклÑÑен,0
-model,"workflow.activity,name",shipmentin_act_draft,Draft,ÐÑоекÑ,0
-model,"workflow.activity,name",shipmentin_act_received,Received,ÐолÑÑен,0
-model,"workflow.activity,name",shipmentinternal_act_assigned,Assigned,ÐазнаÑен,0
-model,"workflow.activity,name",shipmentinternal_act_cancel,Canceled,ÐÑказан,0
-model,"workflow.activity,name",shipmentinternal_act_done,Done,ÐÑиклÑÑен,0
-model,"workflow.activity,name",shipmentinternal_act_draft,Draft,ÐÑоекÑ,0
-model,"workflow.activity,name",shipmentinternal_act_waiting,Waiting,ÐзÑакваÑ,0
-model,"workflow.activity,name",shipmentout_act_assigned,Assigned,ÐазнаÑен,0
-model,"workflow.activity,name",shipmentout_act_cancel,Canceled,ÐÑказан,0
-model,"workflow.activity,name",shipmentout_act_done,Done,ÐÑиклÑÑен,0
-model,"workflow.activity,name",shipmentout_act_draft,Draft,ÐÑоекÑ,0
-model,"workflow.activity,name",shipmentout_act_packed,Packed,Ðпакован,0
-model,"workflow.activity,name",shipmentout_act_waiting,Waiting,ÐзÑакваÑ,0
-odt,stock.shipment.in.restocking_list,0,/,/,0
-odt,stock.shipment.in.restocking_list,0,Code:,Ðод:,0
-odt,stock.shipment.in.restocking_list,0,E-Mail:,E-Mail:,0
-odt,stock.shipment.in.restocking_list,0,From Location,ÐÑ Ð¼ÐµÑÑонаÑ
ождение,0
-odt,stock.shipment.in.restocking_list,0,Phone:,ТелеÑон:,0
-odt,stock.shipment.in.restocking_list,0,Planned Date:,ÐланиÑана даÑа:,0
-odt,stock.shipment.in.restocking_list,0,Product,ÐÑодÑкÑ,0
-odt,stock.shipment.in.restocking_list,0,Quantity,ÐолиÑеÑÑво,0
-odt,stock.shipment.in.restocking_list,0,Reference:,ÐÑпÑаÑка:,0
-odt,stock.shipment.in.restocking_list,0,Restocking List,СпиÑÑк за ÑвелиÑаване налиÑноÑÑ Ð½Ð° пÑодÑкÑ,0
-odt,stock.shipment.in.restocking_list,0,Supplier:,ÐоÑÑавÑик:,0
-odt,stock.shipment.in.restocking_list,0,To Location,ÐÑм меÑÑонаÑ
ождение,0
-odt,stock.shipment.in.restocking_list,0,Warehouse:,Склад:,0
-odt,stock.shipment.internal.report,0,/,/,0
-odt,stock.shipment.internal.report,0,Code:,Ðод:,0
-odt,stock.shipment.internal.report,0,E-Mail:,E-Mail:,0
-odt,stock.shipment.internal.report,0,From Location,ÐÑ Ð¼ÐµÑÑонаÑ
ождение,0
-odt,stock.shipment.internal.report,0,From Location:,ÐÑ Ð¼ÐµÑÑонаÑ
ождение:,0
-odt,stock.shipment.internal.report,0,Internal Shipment,ÐÑÑÑеÑно пÑаÑка,0
-odt,stock.shipment.internal.report,0,Phone:,ТелеÑон:,0
-odt,stock.shipment.internal.report,0,Planned Date:,ÐланиÑана даÑа:,0
-odt,stock.shipment.internal.report,0,Product,ÐÑодÑкÑ,0
-odt,stock.shipment.internal.report,0,Quantity,ÐолиÑеÑÑво,0
-odt,stock.shipment.internal.report,0,Reference:,ÐÑпÑаÑка:,0
-odt,stock.shipment.internal.report,0,To Location,ÐÑм меÑÑонаÑ
ождение,0
-odt,stock.shipment.internal.report,0,To Location:,ÐÑм меÑÑонаÑ
ождение:,0
-odt,stock.shipment.out.delivery_note,0,/,/,0
-odt,stock.shipment.out.delivery_note,0,Customer Code:,Ðод на клиенÑ:,0
-odt,stock.shipment.out.delivery_note,0,Date:,ÐаÑа:,0
-odt,stock.shipment.out.delivery_note,0,Delivery Note,Ðележка кÑм доÑÑавка,0
-odt,stock.shipment.out.delivery_note,0,E-Mail:,E-Mail:,0
-odt,stock.shipment.out.delivery_note,0,Phone:,ТелеÑон:,0
-odt,stock.shipment.out.delivery_note,0,Product,ÐÑодÑкÑ,0
-odt,stock.shipment.out.delivery_note,0,Quantity,ÐолиÑеÑÑво,0
-odt,stock.shipment.out.delivery_note,0,Reference:,ÐÑпÑаÑка:,0
-odt,stock.shipment.out.delivery_note,0,Shipment Number:,ÐÐ¾Ð¼ÐµÑ Ð½Ð° пÑаÑка:,0
-odt,stock.shipment.out.picking_list,0,/,/,0
-odt,stock.shipment.out.picking_list,0,Code:,Ðод:,0
-odt,stock.shipment.out.picking_list,0,Customer:,ÐлиенÑ:,0
-odt,stock.shipment.out.picking_list,0,E-Mail:,E-Mail:,0
-odt,stock.shipment.out.picking_list,0,From Location,ÐÑ Ð¼ÐµÑÑонаÑ
ождение,0
-odt,stock.shipment.out.picking_list,0,Phone:,ТелеÑон:,0
-odt,stock.shipment.out.picking_list,0,Picking List,СпиÑÑк за опаковане,0
-odt,stock.shipment.out.picking_list,0,Planned Date:,ÐланиÑана даÑа:,0
-odt,stock.shipment.out.picking_list,0,Product,ÐÑодÑкÑ,0
-odt,stock.shipment.out.picking_list,0,Quantity,ÐолиÑеÑÑво,0
-odt,stock.shipment.out.picking_list,0,Reference:,ÐÑпÑаÑка:,0
-odt,stock.shipment.out.picking_list,0,To Location,ÐÑм меÑÑонаÑ
ождение,0
-odt,stock.shipment.out.picking_list,0,Warehouse:,Склад:,0
-odt,stock.shipment.out.return.restocking_list,0,/,/,0
-odt,stock.shipment.out.return.restocking_list,0,Code:,Ðод:,0
-odt,stock.shipment.out.return.restocking_list,0,E-Mail:,E-Mail:,0
-odt,stock.shipment.out.return.restocking_list,0,From Location,ÐÑ Ð¼ÐµÑÑонаÑ
ождение,0
-odt,stock.shipment.out.return.restocking_list,0,Phone:,ТелеÑон:,0
-odt,stock.shipment.out.return.restocking_list,0,Planned Date:,ÐланиÑана даÑа:,0
-odt,stock.shipment.out.return.restocking_list,0,Product,ÐÑодÑкÑ,0
-odt,stock.shipment.out.return.restocking_list,0,Quantity,ÐолиÑеÑÑво,0
-odt,stock.shipment.out.return.restocking_list,0,Reference:,ÐÑпÑаÑка:,0
-odt,stock.shipment.out.return.restocking_list,0,Restocking List,СпиÑÑк за ÑвелиÑаване налиÑноÑÑ Ð½Ð° пÑодÑкÑ,0
-odt,stock.shipment.out.return.restocking_list,0,Supplier:,ÐоÑÑавÑик:,0
-odt,stock.shipment.out.return.restocking_list,0,To Location,ÐÑм меÑÑонаÑ
ождение,0
-odt,stock.shipment.out.return.restocking_list,0,Warehouse:,Склад:,0
-selection,"stock.inventory,state",0,Canceled,ÐÑказан,0
-selection,"stock.inventory,state",0,Done,ÐÑиклÑÑен,0
-selection,"stock.inventory,state",0,Draft,ÐÑоекÑ,0
-selection,"stock.location,type",0,Customer,ÐлиенÑ,0
-selection,"stock.location,type",0,Lost and Found,ÐагÑбени и намеÑени,0
-selection,"stock.location,type",0,Production,ÐÑоизводÑÑво,0
-selection,"stock.location,type",0,Storage,Склад,0
-selection,"stock.location,type",0,Supplier,ÐоÑÑавÑик,0
-selection,"stock.location,type",0,View,Ðзглед,0
-selection,"stock.location,type",0,Warehouse,Склад,0
-selection,"stock.move,state",0,Assigned,ÐазнаÑен,0
-selection,"stock.move,state",0,Canceled,ÐÑказан,0
-selection,"stock.move,state",0,Done,ÐÑиклÑÑен,0
-selection,"stock.move,state",0,Draft,ÐÑоекÑ,0
-selection,"stock.period,state",0,Closed,ÐÑиклÑÑен,0
-selection,"stock.period,state",0,Draft,ÐÑоекÑ,0
-selection,"stock.shipment.in,state",0,Canceled,ÐÑказан,0
-selection,"stock.shipment.in,state",0,Done,ÐÑиклÑÑен,0
-selection,"stock.shipment.in,state",0,Draft,ÐÑоекÑ,0
-selection,"stock.shipment.in,state",0,Received,ÐолÑÑен,0
-selection,"stock.shipment.in.return,state",0,Assigned,ÐазнаÑен,0
-selection,"stock.shipment.in.return,state",0,Canceled,ÐÑказан,0
-selection,"stock.shipment.in.return,state",0,Done,ÐÑиклÑÑен,0
-selection,"stock.shipment.in.return,state",0,Draft,ÐÑоекÑ,0
-selection,"stock.shipment.in.return,state",0,Waiting,ÐзÑакваÑ,0
-selection,"stock.shipment.internal,state",0,Assigned,ÐазнаÑен,0
-selection,"stock.shipment.internal,state",0,Canceled,ÐÑказан,0
-selection,"stock.shipment.internal,state",0,Done,ÐÑиклÑÑен,0
-selection,"stock.shipment.internal,state",0,Draft,ÐÑоекÑ,0
-selection,"stock.shipment.internal,state",0,Waiting,ÐзÑакваÑ,0
-selection,"stock.shipment.out,state",0,Assigned,ÐазнаÑен,0
-selection,"stock.shipment.out,state",0,Canceled,ÐÑказан,0
-selection,"stock.shipment.out,state",0,Done,ÐÑиклÑÑен,0
-selection,"stock.shipment.out,state",0,Draft,ÐÑоекÑ,0
-selection,"stock.shipment.out,state",0,Packed,Ðпакован,0
-selection,"stock.shipment.out,state",0,Waiting,ÐзÑакваÑ,0
-selection,"stock.shipment.out.return,state",0,Canceled,ÐÑказан,0
-selection,"stock.shipment.out.return,state",0,Done,ÐÑиклÑÑен,0
-selection,"stock.shipment.out.return,state",0,Draft,ÐÑоекÑ,0
-selection,"stock.shipment.out.return,state",0,Received,ÐолÑÑен,0
-view,party.party,0,Stock,ÐалиÑноÑÑ,0
-view,product.product,0,Products,ÐÑодÑкÑи,0
-view,stock.configuration,0,Stock Configuration,ÐонÑигÑÑиÑане на налиÑноÑÑ,0
-view,stock.inventory,0,Add an inventory line for each missing products,ÐобавÑне на Ñед Ð¾Ñ Ð¸Ð½Ð²ÐµÐ½ÑаÑизаÑÐ¸Ñ Ð·Ð° вÑеки липÑÐ²Ð°Ñ Ð¿ÑодÑкÑ,0
-view,stock.inventory,0,Cancel,ÐÑказ,0
-view,stock.inventory,0,Complete Inventory,ÐÑлна инвенÑаÑизаÑиÑ,0
-view,stock.inventory,0,Confirm,ÐоÑвÑÑждаване,0
-view,stock.inventory,0,Inventories,ÐнвенÑаÑизаÑии,0
-view,stock.inventory,0,Inventory,ÐнвенÑаÑизаÑиÑ,0
-view,stock.inventory.line,0,Inventory Line,Ред Ð¾Ñ Ð¸Ð½Ð²ÐµÐ½ÑаÑизаÑиÑ,0
-view,stock.inventory.line,0,Inventory Lines,Редове Ð¾Ñ Ð¸Ð½Ð²ÐµÐ½ÑаÑизаÑиÑ,0
-view,stock.location,0,Location,ÐеÑÑоположение,0
-view,stock.location,0,Locations,ÐеÑÑонаÑ
ождениÑ,0
-view,stock.location,0,Product Stock,ÐалиÑноÑÑ Ð½Ð° пÑодÑкÑ,0
-view,stock.location_stock_date.init,0,Product Quantity.,ÐолиÑеÑÑво пÑодÑкÑ,0
-view,stock.move,0,Move,Ðвижение,0
-view,stock.move,0,Moves,ÐвижениÑ,0
-view,stock.product_stock_date.init,0,Product Quantity.,ÐолиÑеÑÑво пÑодÑкÑ,0
-view,stock.shipment.in,0,Cancel,ÐÑказ,0
-view,stock.shipment.in,0,Done,ÐÑиклÑÑен,0
-view,stock.shipment.in,0,Incoming Moves,ÐÑ
одÑÑи движениÑ,0
-view,stock.shipment.in,0,Inventory Moves,ÐÐ²Ð¸Ð¶ÐµÐ½Ð¸Ñ Ð½Ð° инвенÑаÑизаÑиÑ,0
-view,stock.shipment.in,0,Moves,ÐвижениÑ,0
-view,stock.shipment.in,0,Received,ÐолÑÑен,0
-view,stock.shipment.in,0,Reset to Draft,ÐзпÑаÑане в пÑоекÑ,0
-view,stock.shipment.in,0,Supplier Shipment,ÐÑаÑка на доÑÑавÑик,0
-view,stock.shipment.in,0,Supplier Shipments,ÐÑаÑки на доÑÑавÑик,0
-view,stock.shipment.in.return,0,Assign,ÐазнаÑаване,0
-view,stock.shipment.in.return,0,Cancel,ÐÑказ,0
-view,stock.shipment.in.return,0,Done,ÐÑиклÑÑен,0
-view,stock.shipment.in.return,0,Draft,ÐÑоекÑ,0
-view,stock.shipment.in.return,0,Reset to Draft,ÐзпÑаÑане в пÑоекÑ,0
-view,stock.shipment.in.return,0,Supplier Return Shipment,ÐÑаÑка вÑÑнаÑа на доÑÑавÑик,0
-view,stock.shipment.in.return,0,Supplier Return Shipments,ÐÑаÑка вÑÑнаÑа на доÑÑавÑик,0
-view,stock.shipment.in.return,0,Waiting,ÐзÑакваÑ,0
-view,stock.shipment.in.return.assign.assign_failed,0,Moves,ÐвижениÑ,0
-view,stock.shipment.in.return.assign.assign_failed,0,Unable to Assign,ÐевÑзможен доÑÑÑп,0
-view,stock.shipment.in.return.assign.assign_failed,0,Unable to assign those products:,Ðе Ð¼Ð¾Ð³Ð°Ñ Ð´Ð° бÑÐ´Ð°Ñ Ð½Ð°Ð·Ð½Ð°Ñени ÑледниÑе пÑодÑкÑи:,0
-view,stock.shipment.internal,0,Assign,ÐазнаÑаване,0
-view,stock.shipment.internal,0,Cancel,ÐÑказ,0
-view,stock.shipment.internal,0,Done,ÐÑиклÑÑен,0
-view,stock.shipment.internal,0,Draft,ÐÑоекÑ,0
-view,stock.shipment.internal,0,Internal Shipment,ÐÑÑÑеÑна пÑаÑка,0
-view,stock.shipment.internal,0,Internal Shipments,ÐÑÑÑеÑни пÑаÑки,0
-view,stock.shipment.internal,0,Reset to Draft,ÐзпÑаÑане в пÑоекÑ,0
-view,stock.shipment.internal,0,Waiting,ÐзÑакваÑ,0
-view,stock.shipment.internal.assign.assign_failed,0,Moves,ÐвижениÑ,0
-view,stock.shipment.internal.assign.assign_failed,0,Unable to Assign,ÐевÑзможен доÑÑÑп,0
-view,stock.shipment.internal.assign.assign_failed,0,Unable to assign those products:,Ðе Ð¼Ð¾Ð³Ð°Ñ Ð´Ð° бÑÐ´Ð°Ñ Ð½Ð°Ð·Ð½Ð°Ñени ÑледниÑе пÑодÑкÑи:,0
-view,stock.shipment.out,0,Assign,ÐазнаÑаване,0
-view,stock.shipment.out,0,Cancel,ÐÑказ,0
-view,stock.shipment.out,0,Customer Shipment,ÐÑаÑка за клиенÑ,0
-view,stock.shipment.out,0,Customer Shipments,ÐÑаÑки за клиенÑи,0
-view,stock.shipment.out,0,Done,ÐÑиклÑÑен,0
-view,stock.shipment.out,0,Draft,ÐÑоекÑ,0
-view,stock.shipment.out,0,Inventory Moves,ÐÐ²Ð¸Ð¶ÐµÐ½Ð¸Ñ Ð½Ð° инвенÑаÑизаÑиÑ,0
-view,stock.shipment.out,0,Make shipment,СÑздаване на изпÑаÑане,0
-view,stock.shipment.out,0,Outgoing Moves,ÐзÑ
одÑÑи движениÑ,0
-view,stock.shipment.out,0,Reset to Draft,ÐзпÑаÑане в пÑоекÑ,0
-view,stock.shipment.out,0,Waiting,ÐзÑакваÑ,0
-view,stock.shipment.out.assign.assign_failed,0,Inventory Moves,ÐÐ²Ð¸Ð¶ÐµÐ½Ð¸Ñ Ð½Ð° инвенÑаÑизаÑиÑ,0
-view,stock.shipment.out.assign.assign_failed,0,Unable to Assign,ÐевÑзможен доÑÑÑп,0
-view,stock.shipment.out.assign.assign_failed,0,Unable to assign those products:,Ðе Ð¼Ð¾Ð³Ð°Ñ Ð´Ð° бÑÐ´Ð°Ñ Ð½Ð°Ð·Ð½Ð°Ñени ÑледниÑе пÑодÑкÑи:,0
-view,stock.shipment.out.return,0,Cancel,ÐÑказ,0
-view,stock.shipment.out.return,0,Customer Return Shipment,ÐÑаÑка вÑÑнаÑа Ð¾Ñ ÐºÐ»Ð¸ÐµÐ½Ñ,0
-view,stock.shipment.out.return,0,Customer Return Shipments,ÐÑаÑки вÑÑнаÑи Ð¾Ñ ÐºÐ»Ð¸ÐµÐ½Ñ,0
-view,stock.shipment.out.return,0,Done,ÐÑиклÑÑен,0
-view,stock.shipment.out.return,0,Incoming Moves,ÐÑ
одÑÑи движениÑ,0
-view,stock.shipment.out.return,0,Inventory Moves,ÐÐ²Ð¸Ð¶ÐµÐ½Ð¸Ñ Ð½Ð° инвенÑаÑизаÑиÑ,0
-view,stock.shipment.out.return,0,Moves,ÐвижениÑ,0
-view,stock.shipment.out.return,0,Received,ÐолÑÑен,0
-view,stock.shipment.out.return,0,Reset to Draft,ÐзпÑаÑане в пÑоекÑ,0
-wizard_button,"stock.location.open,init,end",0,Cancel,ÐÑказ,0
-wizard_button,"stock.location.open,init,open",0,Open,ÐÑваÑÑне,0
-wizard_button,"stock.product.open,init,end",0,Cancel,ÐÑказ,0
-wizard_button,"stock.product.open,init,open",0,Open,ÐÑваÑÑне,0
-wizard_button,"stock.shipment.in.return.assign,ask_force,end",0,Ok,ÐобÑе,0
-wizard_button,"stock.shipment.in.return.assign,ask_force,force",0,Force Assign,СÑздай изÑиÑно назнаÑение,0
-wizard_button,"stock.shipment.in.return.assign,assign_failed,end",0,Ok,ÐобÑе,0
-wizard_button,"stock.shipment.internal.assign,ask_force,end",0,Ok,ÐобÑе,0
-wizard_button,"stock.shipment.internal.assign,ask_force,force",0,Force Assign,СÑздай изÑиÑно назнаÑение,0
-wizard_button,"stock.shipment.internal.assign,assign_failed,end",0,Ok,ÐобÑе,0
-wizard_button,"stock.shipment.out.assign,ask_force,end",0,Ok,ÐобÑе,0
-wizard_button,"stock.shipment.out.assign,ask_force,force",0,Force Assign,СÑздай изÑиÑно назнаÑение,0
-wizard_button,"stock.shipment.out.assign,assign_failed,end",0,Ok,ÐобÑе,0
diff --git a/configuration.py b/configuration.py
index e8f4c18..b63fadb 100644
--- a/configuration.py
+++ b/configuration.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 trytond.model import ModelView, ModelSQL, ModelSingleton, fields
-from trytond.pyson import Eval
+from trytond.pyson import Eval, Get
class Configuration(ModelSingleton, ModelSQL, ModelView):
@@ -10,29 +10,34 @@ class Configuration(ModelSingleton, ModelSQL, ModelView):
_description = __doc__
shipment_in_sequence = fields.Property(fields.Many2One('ir.sequence',
- 'Supplier Shipment Sequence', domain=[
- ('company', 'in', [Eval('company'), False]),
- ('code', '=', 'stock.shipment.in'),
- ], required=True))
+ 'Supplier Shipment Sequence', domain=[
+ ('company', 'in',
+ [Get(Eval('context', {}), 'company'), False]),
+ ('code', '=', 'stock.shipment.in'),
+ ], required=True))
shipment_in_return_sequence = fields.Property(fields.Many2One(
- 'ir.sequence', 'Supplier Return Shipment Sequence', domain=[
- ('company', 'in', [Eval('company'), False]),
- ('code', '=', 'stock.shipment.in.return'),
- ], required=True))
+ 'ir.sequence', 'Supplier Return Shipment Sequence', domain=[
+ ('company', 'in',
+ [Get(Eval('context', {}), 'company'), False]),
+ ('code', '=', 'stock.shipment.in.return'),
+ ], required=True))
shipment_out_sequence = fields.Property(fields.Many2One( 'ir.sequence',
- 'Customer Shipment Sequence', domain=[
- ('company', 'in', [Eval('company'), False]),
- ('code', '=', 'stock.shipment.out'),
- ], required=True))
+ 'Customer Shipment Sequence', domain=[
+ ('company', 'in',
+ [Get(Eval('context', {}), 'company'), False]),
+ ('code', '=', 'stock.shipment.out'),
+ ], required=True))
shipment_out_return_sequence = fields.Property(fields.Many2One(
- 'ir.sequence', 'Customer Return Shipment Sequence', domain=[
- ('company', 'in', [Eval('company'), False]),
- ('code', '=', 'stock.shipment.out.return'),
- ], required=True))
+ 'ir.sequence', 'Customer Return Shipment Sequence', domain=[
+ ('company', 'in',
+ [Get(Eval('context', {}), 'company'), False]),
+ ('code', '=', 'stock.shipment.out.return'),
+ ], required=True))
shipment_internal_sequence = fields.Property(fields.Many2One(
- 'ir.sequence', 'Internal Shipment Sequence', domain=[
- ('company', 'in', [Eval('company'), False]),
- ('code', '=', 'stock.shipment.internal'),
- ], required=True))
+ 'ir.sequence', 'Internal Shipment Sequence', domain=[
+ ('company', 'in',
+ [Get(Eval('context', {}), 'company'), False]),
+ ('code', '=', 'stock.shipment.internal'),
+ ], required=True))
Configuration()
diff --git a/configuration.xml b/configuration.xml
index f08895e..bfe9fda 100644
--- a/configuration.xml
+++ b/configuration.xml
@@ -72,5 +72,22 @@ this repository contains the full copyright notices and license terms. -->
<field name="value" eval="'ir.sequence,' + str(ref('sequence_shipment_internal'))"/>
</record>
+ <record model="ir.model.access" id="access_configuration">
+ <field name="model" search="[('model', '=', 'stock.configuration')]"/>
+ <field name="perm_read" eval="True"/>
+ <field name="perm_write" eval="False"/>
+ <field name="perm_create" eval="False"/>
+ <field name="perm_delete" eval="False"/>
+ </record>
+
+ <record model="ir.model.access" id="access_configuration_admin">
+ <field name="model" search="[('model', '=', 'stock.configuration')]"/>
+ <field name="group" ref="group_stock_admin"/>
+ <field name="perm_read" eval="True"/>
+ <field name="perm_write" eval="True"/>
+ <field name="perm_create" eval="True"/>
+ <field name="perm_delete" eval="True"/>
+ </record>
+
</data>
</tryton>
diff --git a/de_DE.csv b/de_DE.csv
deleted file mode 100644
index 4cf8f23..0000000
--- a/de_DE.csv
+++ /dev/null
@@ -1,538 +0,0 @@
-type,name,res_id,src,value,fuzzy
-error,product.template,0,You cannot change the default uom for a product which is associated to stock moves.,"Die StandardmaÃeinheit kann nicht für einen Artikel geändert werden, der Lagerbewegungen zugeordnet ist.",0
-error,stock.inventory.line,0,Line quantity must be positive!,Anzahl der Position muss positiv sein!,0
-error,stock.inventory.line,0,Product must be unique by inventory!,Ein Artikel kann in einem Lagerbestand nicht mehrfach vergeben werden!,0
-error,stock.location,0,A location with existing moves cannot be changed to a type that does not support moves.,"Ein Lagerort mit zugordneten Bewegungen kann nicht zu einem Typ geändert werden, der keine Bewegungen unterstützt.",0
-error,stock.location,0,"Location ""%s"" must be a child of warehouse ""%s""!","Lagerort ""%s"" muss untergeordnet zu Warenlager ""%s"" sein!",0
-error,stock.location,0,You can not create recursive locations!,Lagerorte können nicht rekursiv angelegt werden!,0
-error,stock.move,0,Internal move quantity must be positive,Interne Anzahl von Bewegungen muss positiv sein!,0
-error,stock.move,0,Move can be on only one Shipment,Eine Bewegung kann nur auf einem Lieferposten erfolgen!,0
-error,stock.move,0,Move quantity must be positive,Zu bewegende Anzahl muss positiv sein,0
-error,stock.move,0,Source and destination location must be different,Herkunfts- und Bestimmungsort müssen unterschiedlich sein,0
-error,stock.move,0,"You can not modify a move in the state: ""Assigned"", ""Done"" or ""Cancel""","Eine Bewegung in Status ""Zugewiesen"", ""Erledigt"" oder ""Annulliert"" kann nicht geändert werden!",0
-error,stock.move,0,You can not modify move in closed period!,Eine Bewegung in einer geschlossenen Periode kann nicht geändert werden!,0
-error,stock.move,0,You can not set state to assigned!,Status kann nicht auf Zugewiesen gesetzt werden!,0
-error,stock.move,0,You can not set state to done!,Status kann nicht auf Erledigt gesetzt werden!,0
-error,stock.move,0,You can not set state to draft!,"Status ""Entwurf"" kann nicht gesetzt werden!",0
-error,stock.move,0,You can not use service products for a move!,Dienstleistungen können nicht in Warenbewegungen verwendet werden!,0
-error,stock.move,0,You can only delete draft or cancelled moves!,"Nur Bewegungen mit Status ""Entwurf"" oder ""Annulliert"" können gelöscht werden!",0
-error,stock.period,0,You can not close a period in the future or today!,Eine Periode kann nicht am heutigen Tag (oder später) geschlossen werden!,0
-error,stock.period,0,You can not close a period when there is still assigned moves!,"Eine Periode, die noch zugewiesene Bewegungen enthält, kann nicht geschlossen werden!",0
-error,stock.shipment.in,0,Incoming Moves must have the warehouse input location as destination location!,Eingehende Bewegungen müssen den Eingangsbereich des Warenlagers als Zielort haben!,0
-error,stock.shipment.in,0,Inventory Moves must have the warehouse input location as source location!,Bestandsänderungen müssen den Eingangsbereich des Warenlagers als Herkunftsort haben!,0
-error,stock.shipment.out,0,Inventory Moves must have the warehouse output location as destination location!,Bestandsänderungen müssen den Ausgangsbereich des Warenlagers als Zielort haben!,0
-error,stock.shipment.out,0,Outgoing Moves must have the warehouse output location as source location!,Ausgehende Bewegungen müssen den Ausgangsbereich des Warenlagers als Herkunftsort haben!,0
-error,stock.shipment.out.return,0,Incoming Moves must have the warehouse input location as destination location!,Eingehende Bewegungen müssen den Eingangsbereich des Warenlagers als Zielort haben!,0
-error,stock.shipment.out.return,0,Inventory Moves must have the warehouse input location as source location!,Bestandsänderungen müssen den Eingangsbereich des Warenlagers als Herkunftsort haben!,0
-error,stock.shipment.out.return.create,0,The shipment with code %s is not yet sent.,Der Lieferposten mit Code %s ist noch nicht erledigt.,0
-error,stock.shipment.out.return.create,0,You can not create return shipment,Warenrücknahme nicht möglich!,0
-field,"party.address,delivery",0,Delivery,Lieferadresse,0
-field,"party.party,customer_location",0,Customer Location,Lagerort Kunde,0
-field,"party.party,supplier_location",0,Supplier Location,Lagerort Lieferant,0
-field,"product.product,forecast_quantity",0,Forecast Quantity,Voraussichtliche Anzahl,0
-field,"product.product,quantity",0,Quantity,Anzahl,0
-field,"product.template,forecast_quantity",0,Forecast Quantity,Voraussichtliche Anzahl,0
-field,"product.template,quantity",0,Quantity,Anzahl,0
-field,"stock.configuration,rec_name",0,Name,Name,0
-field,"stock.configuration,shipment_in_return_sequence",0,Supplier Return Shipment Sequence,Nummernkreis Warenrückgabe,0
-field,"stock.configuration,shipment_in_sequence",0,Supplier Shipment Sequence,Nummernkreis Lieferposten von Lieferant,0
-field,"stock.configuration,shipment_internal_sequence",0,Internal Shipment Sequence,Nummernkreis Interne Lieferposten,0
-field,"stock.configuration,shipment_out_return_sequence",0,Customer Return Shipment Sequence,Nummernkreis Warenrücknahme,0
-field,"stock.configuration,shipment_out_sequence",0,Customer Shipment Sequence,Nummernkreis Lieferposten an Kunde,0
-field,"stock.inventory,company",0,Company,Unternehmen,0
-field,"stock.inventory,date",0,Date,Datum,0
-field,"stock.inventory,lines",0,Lines,Positionen,0
-field,"stock.inventory,location",0,Location,Ort,0
-field,"stock.inventory,lost_found",0,Lost and Found,Inventurdifferenz,0
-field,"stock.inventory,rec_name",0,Name,Name,0
-field,"stock.inventory,state",0,State,Status,0
-field,"stock.inventory.line,expected_quantity",0,Expected Quantity,Erwartete Anzahl,0
-field,"stock.inventory.line,inventory",0,Inventory,Lagerbestand,0
-field,"stock.inventory.line,move",0,Move,Bewegung,0
-field,"stock.inventory.line,product",0,Product,Artikel,0
-field,"stock.inventory.line,quantity",0,Quantity,Anzahl,0
-field,"stock.inventory.line,rec_name",0,Name,Name,0
-field,"stock.inventory.line,unit_digits",0,Unit Digits,Anzahl Stellen,0
-field,"stock.inventory.line,uom",0,UOM,MaÃeinheit,0
-field,"stock.location,active",0,Active,Aktiv,0
-field,"stock.location,address",0,Address,Adresse,0
-field,"stock.location,childs",0,Children,Untergeordnet (Lagerorte),0
-field,"stock.location,code",0,Code,Code,0
-field,"stock.location,forecast_quantity",0,Forecast Quantity,Voraussichtliche Anzahl,0
-field,"stock.location,input_location",0,Input,Eingang,0
-field,"stock.location,left",0,Left,Links,0
-field,"stock.location,name",0,Name,Name,0
-field,"stock.location,output_location",0,Output,Ausgang,0
-field,"stock.location,parent",0,Parent,Ãbergeordnet (Lagerort),0
-field,"stock.location,quantity",0,Quantity,Anzahl,0
-field,"stock.location,rec_name",0,Name,Name,0
-field,"stock.location,right",0,Right,Rechts,0
-field,"stock.location,storage_location",0,Storage,Lager,0
-field,"stock.location,type",0,Location type,Lagertyp,0
-field,"stock.location_stock_date.init,forecast_date",0,At Date,Zum,0
-field,"stock.move,company",0,Company,Unternehmen,0
-field,"stock.move,cost_price",0,Cost Price,Einkaufspreis,0
-field,"stock.move,currency",0,Currency,Währung,0
-field,"stock.move,effective_date",0,Effective Date,Effektives Datum,0
-field,"stock.move,from_location",0,From Location,Von Lagerort,0
-field,"stock.move,internal_quantity",0,Internal Quantity,Anzahl Intern,0
-field,"stock.move,planned_date",0,Planned Date,Geplantes Datum,0
-field,"stock.move,product",0,Product,Artikel,0
-field,"stock.move,quantity",0,Quantity,Anzahl,0
-field,"stock.move,rec_name",0,Name,Name,0
-field,"stock.move,shipment_in",0,Supplier Shipment,Lieferposten von Lieferant,0
-field,"stock.move,shipment_in_return",0,Supplier Return Shipment,Warenrückgabe,0
-field,"stock.move,shipment_internal",0,Internal Shipment,Interner Lieferposten,0
-field,"stock.move,shipment_out",0,Customer Shipment,Lieferposten an Kunde,0
-field,"stock.move,shipment_out_return",0,Customer Return Shipment,Warenrücknahme,0
-field,"stock.move,state",0,State,Status,0
-field,"stock.move,to_location",0,To Location,Zu Lagerort,0
-field,"stock.move,unit_digits",0,Unit Digits,Anzahl Stellen,0
-field,"stock.move,unit_price",0,Unit Price,Einzelpreis,0
-field,"stock.move,unit_price_required",0,Unit Price Required,Einzelpreis erforderlich,0
-field,"stock.move,uom",0,Uom,Einheit,0
-field,"stock.period,caches",0,Caches,Cache-Speicher,0
-field,"stock.period,company",0,Company,Unternehmen,0
-field,"stock.period,date",0,Date,Datum,0
-field,"stock.period,rec_name",0,Name,Name,0
-field,"stock.period,state",0,State,Status,0
-field,"stock.period.cache,internal_quantity",0,Internal Quantity,Anzahl Intern,0
-field,"stock.period.cache,location",0,Location,Lagerort,0
-field,"stock.period.cache,period",0,Period,Periode,0
-field,"stock.period.cache,product",0,Product,Artikel,0
-field,"stock.period.cache,rec_name",0,Name,Name,0
-field,"stock.product_stock_date.init,forecast_date",0,At Date,Zum,0
-field,"stock.shipment.in,code",0,Code,Code,0
-field,"stock.shipment.in,contact_address",0,Contact Address,Kontaktadresse,0
-field,"stock.shipment.in,effective_date",0,Effective Date,Effektives Datum,0
-field,"stock.shipment.in,incoming_moves",0,Incoming Moves,Eingehende Bewegungen,0
-field,"stock.shipment.in,inventory_moves",0,Inventory Moves,Bestandsänderungen,0
-field,"stock.shipment.in,moves",0,Moves,Bewegungen,0
-field,"stock.shipment.in,planned_date",0,Planned Date,Geplantes Datum,0
-field,"stock.shipment.in,rec_name",0,Name,Name,0
-field,"stock.shipment.in,reference",0,Reference,Beleg-Nr.,0
-field,"stock.shipment.in,state",0,State,Status,0
-field,"stock.shipment.in,supplier",0,Supplier,Lieferant,0
-field,"stock.shipment.in,warehouse",0,Warehouse,Warenlager,0
-field,"stock.shipment.in.return,code",0,Code,Code,0
-field,"stock.shipment.in.return,effective_date",0,Effective Date,Effektives Datum,0
-field,"stock.shipment.in.return,from_location",0,From Location,Von Lagerort,0
-field,"stock.shipment.in.return,moves",0,Moves,Bewegungen,0
-field,"stock.shipment.in.return,planned_date",0,Planned Date,Geplantes Datum,0
-field,"stock.shipment.in.return,rec_name",0,Name,Name,0
-field,"stock.shipment.in.return,reference",0,Reference,Beleg-Nr.,0
-field,"stock.shipment.in.return,state",0,State,Status,0
-field,"stock.shipment.in.return,to_location",0,To Location,Zu Lagerort,0
-field,"stock.shipment.in.return.assign.assign_failed,moves",0,Moves,Lagerbewegungen,0
-field,"stock.shipment.internal,code",0,Code,Code,0
-field,"stock.shipment.internal,effective_date",0,Effective Date,Effektives Datum,0
-field,"stock.shipment.internal,from_location",0,From Location,Von Lagerort,0
-field,"stock.shipment.internal,moves",0,Moves,Bewegungen,0
-field,"stock.shipment.internal,planned_date",0,Planned Date,Geplantes Datum,0
-field,"stock.shipment.internal,rec_name",0,Name,Name,0
-field,"stock.shipment.internal,reference",0,Reference,Beleg-Nr.,0
-field,"stock.shipment.internal,state",0,State,Status,0
-field,"stock.shipment.internal,to_location",0,To Location,Zu Lagerort,0
-field,"stock.shipment.internal.assign.assign_failed,moves",0,Moves,Bewegungen,0
-field,"stock.shipment.out,code",0,Code,Code,0
-field,"stock.shipment.out,customer",0,Customer,Kunde,0
-field,"stock.shipment.out,delivery_address",0,Delivery Address,Lieferadresse,0
-field,"stock.shipment.out,effective_date",0,Effective Date,Effektives Datum,0
-field,"stock.shipment.out,inventory_moves",0,Inventory Moves,Bestandsänderungen,0
-field,"stock.shipment.out,moves",0,Moves,Bewegungen,0
-field,"stock.shipment.out,outgoing_moves",0,Outgoing Moves,Ausgehende Bewegungen,0
-field,"stock.shipment.out,planned_date",0,Planned Date,Geplantes Datum,0
-field,"stock.shipment.out,rec_name",0,Name,Name,0
-field,"stock.shipment.out,reference",0,Reference,Beleg-Nr.,0
-field,"stock.shipment.out,state",0,State,Status,0
-field,"stock.shipment.out,warehouse",0,Warehouse,Warenlager,0
-field,"stock.shipment.out.assign.assign_failed,inventory_moves",0,Inventory Moves,Bestandsänderungen,0
-field,"stock.shipment.out.return,code",0,Code,Code,0
-field,"stock.shipment.out.return,customer",0,Customer,Kunde,0
-field,"stock.shipment.out.return,delivery_address",0,Delivery Address,Lieferadresse,0
-field,"stock.shipment.out.return,effective_date",0,Effective Date,Effektives Datum,0
-field,"stock.shipment.out.return,incoming_moves",0,Incoming Moves,Eingehende Bewegungen,0
-field,"stock.shipment.out.return,inventory_moves",0,Inventory Moves,Bestandsänderungen,0
-field,"stock.shipment.out.return,moves",0,Moves,Bewegungen,0
-field,"stock.shipment.out.return,planned_date",0,Planned Date,Geplantes Datum,0
-field,"stock.shipment.out.return,rec_name",0,Name,Name,0
-field,"stock.shipment.out.return,reference",0,Reference,Beleg-Nr.,0
-field,"stock.shipment.out.return,state",0,State,Status,0
-field,"stock.shipment.out.return,warehouse",0,Warehouse,Warenlager,0
-help,"party.party,customer_location",0,The default destination location when sending products to the party.,Standardbestimmungsort für Sendungen zum Geschäftspartner,0
-help,"party.party,supplier_location",0,The default source location when receiving products from the party.,Standardbestimmungsort für Sendungen vom Geschäftspartner,0
-help,"stock.location_stock_date.init,forecast_date",0,"Allow to compute expected stock quantities for this date.
-* An empty value is an infinite date in the future.
-* A date in the past will provide historical values.","Berechnet den erwarteten Lagerbestand für dieses Datum
-* ein leerer Wert ist ein unbegrenztes Datum in der Zukunft
-* ein Datum in der Vergangenheit berechnet historische Werte
-",0
-help,"stock.product_stock_date.init,forecast_date",0,"Allow to compute expected stock quantities for this date.
-* An empty value is an infinite date in the future.
-* A date in the past will provide historical values.","Berechnet den erwarteten Lagerbestand für dieses Datum
-* ein leerer Wert ist ein unbegrenztes Datum in der Zukunft
-* ein Datum in der Vergangenheit berechnet historische Werte
-",0
-model,"ir.action,name",act_inventory_form,Inventories,Bestandskorrekturen,0
-model,"ir.action,name",act_inventory_form2,Inventories,Bestandskorrekturen,0
-model,"ir.action,name",act_inventory_form_draft,Draft Inventories,Entwürfe Bestandskorrekturen,0
-model,"ir.action,name",act_location_form,Locations,Lagerorte,0
-model,"ir.action,name",act_location_quantity_tree,Product Stock,Lagerbestand,0
-model,"ir.action,name",act_location_tree,Locations,Lagerorte,0
-model,"ir.action,name",act_move_form,Moves,Lagerbewegungen,0
-model,"ir.action,name",act_move_form_cust,Moves to Customers,Bewegungen zu Kunden,0
-model,"ir.action,name",act_move_form_supp,Moves from Suppliers,Bewegungen von Lieferanten,0
-model,"ir.action,name",act_move_form_supp_proceed,Moves from Suppliers Waiting Arrival,Erwartete Bewegungen von Lieferanten,0
-model,"ir.action,name",act_period_list,Periods,Lagerperioden,0
-model,"ir.action,name",act_product_by_location,Products by Locations,Artikel nach Lagerort,0
-model,"ir.action,name",act_shipment_in_form,Supplier Shipments,Lieferposten von Lieferanten,0
-model,"ir.action,name",act_shipment_in_form2,New Supplier Shipment,Neuer Lieferposten von Lieferant,0
-model,"ir.action,name",act_shipment_in_form_received,Received Supplier shipments,Erhaltene Lieferposten von Lieferanten,0
-model,"ir.action,name",act_shipment_in_return_form,Supplier Return Shipments,Warenrückgaben (an Lieferanten),0
-model,"ir.action,name",act_shipment_in_return_new_form,New Supplier Return Shipment,Neue Warenrückgabe (an Lieferant),0
-model,"ir.action,name",act_shipment_internal_assigned_form,Assigned Internal Shipments,Zugewiesene Interne Lieferposten,0
-model,"ir.action,name",act_shipment_internal_draft_form,Draft Internal Shipments,Entwürfe Interne Lieferposten,0
-model,"ir.action,name",act_shipment_internal_form,Internal Shipments,Interne Lieferposten,0
-model,"ir.action,name",act_shipment_internal_new_form,New Internal Shipment,Neuer Interner Lieferposten,0
-model,"ir.action,name",act_shipment_internal_waiting_form,Internal Shipments Waiting Assignation,Wartende Interne Lieferposten,0
-model,"ir.action,name",act_shipment_out_form,Customer Shipments,Lieferposten an Kunden,0
-model,"ir.action,name",act_shipment_out_form2,Customer Shipments,Lieferposten als Kunde,0
-model,"ir.action,name",act_shipment_out_form3,Supplier Shipments,Lieferposten als Lieferant,0
-model,"ir.action,name",act_shipment_out_form_assigned,Assigned Customer Shipments,Zugewiesene Lieferposten an Kunden,0
-model,"ir.action,name",act_shipment_out_form_ready,Customer Shipments Ready for Shipping,Versandbereite Lieferposten an Kunden,0
-model,"ir.action,name",act_shipment_out_form_waiting,Customer Shipments Waiting Assignation,Wartende Lieferposten an Kunden,0
-model,"ir.action,name",act_shipment_out_return_form,Customer Return Shipments,Warenrücknahmen (von Kunden),0
-model,"ir.action,name",act_shipment_out_return_form2,New Customer Return Shipment,Neue Warenrücknahme (von Kunde),0
-model,"ir.action,name",act_stock_configuration_form,Stock Configuration,Einstellungen Lager,0
-model,"ir.action,name",create_shipment_out_return,Create Return Shipment,Warenrücknahme erstellen,0
-model,"ir.action,name",report_shipment_in_restocking_list,Restocking List,Einlagerungsliste,0
-model,"ir.action,name",report_shipment_internal,Internal Shipment,Interner Lieferposten,0
-model,"ir.action,name",report_shipment_out_delivery_note,Delivery Note,Lieferschein,0
-model,"ir.action,name",report_shipment_out_picking_list,Picking List,Pick Liste,0
-model,"ir.action,name",report_shipment_out_return_restocking_list,Restocking List,Einlagerungsliste,0
-model,"ir.action,name",wizard_complete_inventory,Complete Inventory,Lagerbestandspositionen komplettieren,0
-model,"ir.action,name",wizard_location_open,Product by Location,Artikel nach Lagerort,0
-model,"ir.action,name",wizard_product_open,Product Quantities,Artikelbestand,0
-model,"ir.action,name",wizard_shipment_in_return_assign,Assign Purchase Return Shipment,Zuweisung Lieferposten Warenrückgabe,0
-model,"ir.action,name",wizard_shipment_internal_assign,Assign Shipment Internal,Zuweisung Lieferposten Intern,0
-model,"ir.action,name",wizard_shipment_out_assign,Assign Shipment Out,Zuweisung Lieferposten Ausgehend,0
-model,"ir.sequence,name",sequence_shipment_in,Supplier Shipment,Lieferposten Lieferant,0
-model,"ir.sequence,name",sequence_shipment_in_return,Supplier Return Shipment,Warenrückgabe Lieferant,0
-model,"ir.sequence,name",sequence_shipment_internal,Internal Shipment,Interner Lieferposten,0
-model,"ir.sequence,name",sequence_shipment_out,Customer Shipment,Lieferposten Kunde,0
-model,"ir.sequence,name",sequence_shipment_out_return,Customer Return Shipment,Warenrücknahme Kunde,0
-model,"ir.sequence.type,name",sequence_type_shipment_in,Supplier Shipment,Lieferposten Lieferant,0
-model,"ir.sequence.type,name",sequence_type_shipment_in_return,Supplier Return Shipment,Warenrückgabe Lieferant,0
-model,"ir.sequence.type,name",sequence_type_shipment_internal,Internal Shipment,Interner Lieferposten,0
-model,"ir.sequence.type,name",sequence_type_shipment_out,Customer Shipment,Lieferposten Kunde,0
-model,"ir.sequence.type,name",sequence_type_shipment_out_return,Customer Return Shipment,Warenrücknahme Kunde,0
-model,"ir.ui.menu,name",menu_configuration,Configuration,Einstellungen,0
-model,"ir.ui.menu,name",menu_inventory_form,Inventories,Bestandskorrektur,0
-model,"ir.ui.menu,name",menu_inventory_form_draft,Draft Inventories,Entwürfe Bestandskorrekturen,0
-model,"ir.ui.menu,name",menu_inventory_form_new,New Inventory,Neue Bestandskorrektur,0
-model,"ir.ui.menu,name",menu_location_form,Locations,Lagerorte,0
-model,"ir.ui.menu,name",menu_location_tree,Locations,Lagerorte,0
-model,"ir.ui.menu,name",menu_move_form,Moves,Bewegungen,0
-model,"ir.ui.menu,name",menu_move_form_cust,Moves to Customers,Bewegungen zu Kunden,0
-model,"ir.ui.menu,name",menu_move_form_supp,Moves from Suppliers,Bewegungen von Lieferanten,0
-model,"ir.ui.menu,name",menu_move_form_supp_proceed,Moves from Suppliers Waiting Arrival,Erwartete Bewegungen von Lieferanten,0
-model,"ir.ui.menu,name",menu_period_list,Periods,Lagerperioden,0
-model,"ir.ui.menu,name",menu_reporting,Reporting,Auswertungen,0
-model,"ir.ui.menu,name",menu_shipment_in_form,Supplier Shipments,Lieferposten von Lieferanten,0
-model,"ir.ui.menu,name",menu_shipment_in_form2,New Supplier Shipment,Neuer Lieferposten von Lieferant,0
-model,"ir.ui.menu,name",menu_shipment_in_received,Received Supplier shipments,Erhaltene Lieferposten von Lieferanten,0
-model,"ir.ui.menu,name",menu_shipment_in_return_form,Supplier Return Shipments,Warenrückgaben (an Lieferanten),0
-model,"ir.ui.menu,name",menu_shipment_in_return_new_form,New Supplier Return Shipment,Neue Warenrückgabe (an Lieferant),0
-model,"ir.ui.menu,name",menu_shipment_internal_assigned_form,Assigned Internal Shipments,Zugewiesene Interne Lieferposten,0
-model,"ir.ui.menu,name",menu_shipment_internal_draft_form,Draft Internal Shipments,Entwürfe Interne Lieferposten,0
-model,"ir.ui.menu,name",menu_shipment_internal_form,Internal Shipments,Interne Lieferposten,0
-model,"ir.ui.menu,name",menu_shipment_internal_new_form,New Internal Shipment,Neuer Interner Lieferposten,0
-model,"ir.ui.menu,name",menu_shipment_internal_waiting_form,Internal Shipments Waiting Assignation,Wartende Interne Lieferposten,0
-model,"ir.ui.menu,name",menu_shipment_out_assigned,Assigned Customer Shipments,Zugewiesene Lieferposten an Kunden,0
-model,"ir.ui.menu,name",menu_shipment_out_form,Customer Shipments,Lieferposten an Kunden,0
-model,"ir.ui.menu,name",menu_shipment_out_ready,Customer Shipments Ready for Shipping,Versandbereite Lieferposten an Kunden,0
-model,"ir.ui.menu,name",menu_shipment_out_return_form,Customer Return Shipments,Warenrücknahmen (von Kunden),0
-model,"ir.ui.menu,name",menu_shipment_out_return_form2,New Customer Return Shipment,Neue Warenrücknahme (von Kunde),0
-model,"ir.ui.menu,name",menu_shipment_out_waiting,Customer Shipments Waiting Assignation,Wartende Lieferposten an Kunden,0
-model,"ir.ui.menu,name",menu_stock,Inventory Management,Lager,0
-model,"ir.ui.menu,name",menu_stock_configuration,Stock Configuration,Einstellungen Lager,0
-model,"res.group,name",group_stock,Stock,Lager,0
-model,"res.group,name",group_stock_admin,Stock Administration,Lager Administration,0
-model,"res.group,name",group_stock_force_assignment,Stock Force Assignment,Lager Zuweisungserzwingung,0
-model,"stock.configuration,name",0,Stock Configuration,Einstellungen Lager,0
-model,"stock.inventory,name",0,Stock Inventory,Lager Lagerbestand,0
-model,"stock.inventory.line,name",0,Stock Inventory Line,Lager Lagerbestand Position,0
-model,"stock.location,name",0,Stock Location,Lager Lagerort,0
-model,"stock.location,name",location_customer,Customer,Kunde,0
-model,"stock.location,name",location_input,Input Zone,Wareneingang,0
-model,"stock.location,name",location_lost_found,Lost and Found,Inventurdifferenz,0
-model,"stock.location,name",location_output,Output Zone,Warenausgang,0
-model,"stock.location,name",location_storage,Storage Zone,Lagerzone,0
-model,"stock.location,name",location_supplier,Supplier,Lieferant,0
-model,"stock.location,name",location_warehouse,Warehouse,Warenlager,0
-model,"stock.location_stock_date.init,name",0,Compute stock quantities,Berechnung Lagerbestände,0
-model,"stock.move,name",0,Stock Move,Lager Bewegung,0
-model,"stock.period,name",0,Stock Period,Lager Periode,0
-model,"stock.period.cache,name",0,"
- Stock Period Cache
-
- It is used to store cached computation of stock quantities.
- ","
- Perioden Cache-Speicher
-
- Dient der Pufferspeicherung von berechneten Lagerbeständen.",0
-model,"stock.product_stock_date.init,name",0,Compute stock quantities,Berechnung Lagerbestände,0
-model,"stock.shipment.in,name",0,Supplier Shipment,Lieferant Lieferposten,0
-model,"stock.shipment.in.return,name",0,Supplier Return Shipment,Warenrückgabe Lieferant,0
-model,"stock.shipment.in.return.assign.assign_failed,name",0,Assign Supplier Return Shipment Assign Failed,Zuweisung Lieferposten Warenrückgabe Erzwungen,0
-model,"stock.shipment.internal,name",0,Internal Shipment,Interner Lieferposten,0
-model,"stock.shipment.internal.assign.assign_failed,name",0,Assign Shipment Internal Assign Failed,Zuweisung Lieferposten Intern Erzwungen,0
-model,"stock.shipment.out,name",0,Customer Shipment,Lieferposten Kunde,0
-model,"stock.shipment.out.assign.assign_failed,name",0,Assign Shipment Out Assign Failed,Zuweisung Lieferposten Ausgehend Erzwungen,0
-model,"stock.shipment.out.return,name",0,Customer Return Shipment,Warenrücknahme Kunde,0
-model,"workflow,name",wkf_inventory,Inventory,Lagerbestand,0
-model,"workflow,name",wkf_shipment_in_return,Supplier Return Shipment,Warenrückgabe Lieferant,0
-model,"workflow,name",wkf_shipment_out_return,Customer Return Shipment,Warenrücknahme Kunde,0
-model,"workflow,name",wkf_shipmentin,Supplier Shipment,Lieferposten Lieferant,0
-model,"workflow,name",wkf_shipmentinternal,Internal Shipment,Interner Lieferposten,0
-model,"workflow,name",wkf_shipmentout,Customer Shipment,Lieferposten Kunde,0
-model,"workflow.activity,name",inventory_act_cancel,Canceled,Annulliert,0
-model,"workflow.activity,name",inventory_act_done,Done,Erledigt,0
-model,"workflow.activity,name",inventory_act_draft,Draft,Entwurf,0
-model,"workflow.activity,name",shipment_in_return_act_assigned,Assigned,Zugewiesen,0
-model,"workflow.activity,name",shipment_in_return_act_cancel,Canceled,Annulliert,0
-model,"workflow.activity,name",shipment_in_return_act_done,Done,Erledigt,0
-model,"workflow.activity,name",shipment_in_return_act_draft,Draft,Entwurf,0
-model,"workflow.activity,name",shipment_in_return_act_waiting,Waiting,Wartend,0
-model,"workflow.activity,name",shipment_out_return_act_cancel,Canceled,Annulliert,0
-model,"workflow.activity,name",shipment_out_return_act_done,Done,Erledigt,0
-model,"workflow.activity,name",shipment_out_return_act_draft,Draft,Entwurf,0
-model,"workflow.activity,name",shipment_out_return_act_received,Received,Erhalten,0
-model,"workflow.activity,name",shipmentin_act_cancel,Canceled,Annulliert,0
-model,"workflow.activity,name",shipmentin_act_done,Done,Erledigt,0
-model,"workflow.activity,name",shipmentin_act_draft,Draft,Entwurf,0
-model,"workflow.activity,name",shipmentin_act_received,Received,Erhalten,0
-model,"workflow.activity,name",shipmentinternal_act_assigned,Assigned,Zugewiesen,0
-model,"workflow.activity,name",shipmentinternal_act_cancel,Canceled,Annulliert,0
-model,"workflow.activity,name",shipmentinternal_act_done,Done,Erledigt,0
-model,"workflow.activity,name",shipmentinternal_act_draft,Draft,Entwurf,0
-model,"workflow.activity,name",shipmentinternal_act_waiting,Waiting,Wartend,0
-model,"workflow.activity,name",shipmentout_act_assigned,Assigned,Zugewiesen,0
-model,"workflow.activity,name",shipmentout_act_cancel,Canceled,Annulliert,0
-model,"workflow.activity,name",shipmentout_act_done,Done,Erledigt,0
-model,"workflow.activity,name",shipmentout_act_draft,Draft,Entwurf,0
-model,"workflow.activity,name",shipmentout_act_packed,Packed,Gepackt,0
-model,"workflow.activity,name",shipmentout_act_waiting,Waiting,Wartend,0
-odt,stock.shipment.in.restocking_list,0,/,/,0
-odt,stock.shipment.in.restocking_list,0,Code:,Code:,0
-odt,stock.shipment.in.restocking_list,0,E-Mail:,E-Mail:,0
-odt,stock.shipment.in.restocking_list,0,From Location,Von Lagerort,0
-odt,stock.shipment.in.restocking_list,0,Phone:,Telefon:,0
-odt,stock.shipment.in.restocking_list,0,Planned Date:,Geplantes Datum:,0
-odt,stock.shipment.in.restocking_list,0,Product,Artikel,0
-odt,stock.shipment.in.restocking_list,0,Quantity,Anzahl,0
-odt,stock.shipment.in.restocking_list,0,Reference:,Beleg-Nr.:,0
-odt,stock.shipment.in.restocking_list,0,Restocking List,Einlagerungsliste,0
-odt,stock.shipment.in.restocking_list,0,Supplier:,Lieferant:,0
-odt,stock.shipment.in.restocking_list,0,To Location,Zu Lagerort,0
-odt,stock.shipment.in.restocking_list,0,VAT Number:,USt-ID-Nr.:,0
-odt,stock.shipment.in.restocking_list,0,Warehouse:,Warenlager:,0
-odt,stock.shipment.internal.report,0,/,/,0
-odt,stock.shipment.internal.report,0,Code:,Code:,0
-odt,stock.shipment.internal.report,0,E-Mail:,E-Mail:,0
-odt,stock.shipment.internal.report,0,From Location,Von Lagerort,0
-odt,stock.shipment.internal.report,0,From Location:,Von Lagerort:,0
-odt,stock.shipment.internal.report,0,Internal Shipment,Interner Lieferposten,0
-odt,stock.shipment.internal.report,0,Phone:,Telefon:,0
-odt,stock.shipment.internal.report,0,Planned Date:,Geplantes Datum:,0
-odt,stock.shipment.internal.report,0,Product,Artikel,0
-odt,stock.shipment.internal.report,0,Quantity,Anzahl,0
-odt,stock.shipment.internal.report,0,Reference:,Beleg-Nr.:,0
-odt,stock.shipment.internal.report,0,To Location,Zu Lagerort,0
-odt,stock.shipment.internal.report,0,To Location:,Zu Lagerort:,0
-odt,stock.shipment.internal.report,0,VAT Number:,USt-ID-Nr.:,0
-odt,stock.shipment.out.delivery_note,0,/,/,0
-odt,stock.shipment.out.delivery_note,0,Customer Code:,Kundennr:,0
-odt,stock.shipment.out.delivery_note,0,Date:,Datum:,0
-odt,stock.shipment.out.delivery_note,0,Delivery Note,Lieferschein,0
-odt,stock.shipment.out.delivery_note,0,E-Mail:,E-Mail:,0
-odt,stock.shipment.out.delivery_note,0,Phone:,Telefon:,0
-odt,stock.shipment.out.delivery_note,0,Product,Artikel,0
-odt,stock.shipment.out.delivery_note,0,Quantity,Anzahl,0
-odt,stock.shipment.out.delivery_note,0,Reference:,Beleg-Nr.:,0
-odt,stock.shipment.out.delivery_note,0,Shipment Number:,Lieferposten Nr.:,0
-odt,stock.shipment.out.delivery_note,0,VAT Number:,USt-ID-Nr.:,0
-odt,stock.shipment.out.picking_list,0,/,/,0
-odt,stock.shipment.out.picking_list,0,Code:,Code:,0
-odt,stock.shipment.out.picking_list,0,Customer:,Kunde:,0
-odt,stock.shipment.out.picking_list,0,E-Mail:,E-Mail:,0
-odt,stock.shipment.out.picking_list,0,From Location,Von Lagerort,0
-odt,stock.shipment.out.picking_list,0,Phone:,Telefon:,0
-odt,stock.shipment.out.picking_list,0,Picking List,Pick Liste,0
-odt,stock.shipment.out.picking_list,0,Planned Date:,Geplantes Datum:,0
-odt,stock.shipment.out.picking_list,0,Product,Artikel,0
-odt,stock.shipment.out.picking_list,0,Quantity,Anzahl,0
-odt,stock.shipment.out.picking_list,0,Reference:,Beleg-Nr.:,0
-odt,stock.shipment.out.picking_list,0,To Location,Zu Lagerort,0
-odt,stock.shipment.out.picking_list,0,VAT Number:,USt-ID-Nr.:,0
-odt,stock.shipment.out.picking_list,0,Warehouse:,Warenlager:,0
-odt,stock.shipment.out.return.restocking_list,0,/,/,0
-odt,stock.shipment.out.return.restocking_list,0,Code:,Code:,0
-odt,stock.shipment.out.return.restocking_list,0,E-Mail:,E-Mail:,0
-odt,stock.shipment.out.return.restocking_list,0,From Location,Von Lagerort,0
-odt,stock.shipment.out.return.restocking_list,0,Phone:,Telefon:,0
-odt,stock.shipment.out.return.restocking_list,0,Planned Date:,Geplantes Datum:,0
-odt,stock.shipment.out.return.restocking_list,0,Product,Artikel,0
-odt,stock.shipment.out.return.restocking_list,0,Quantity,Anzahl,0
-odt,stock.shipment.out.return.restocking_list,0,Reference:,Beleg-Nr.:,0
-odt,stock.shipment.out.return.restocking_list,0,Restocking List,Einlagerungsliste,0
-odt,stock.shipment.out.return.restocking_list,0,Supplier:,Lieferant:,0
-odt,stock.shipment.out.return.restocking_list,0,To Location,Zu Lagerort,0
-odt,stock.shipment.out.return.restocking_list,0,VAT Number:,USt-ID-Nr.:,0
-odt,stock.shipment.out.return.restocking_list,0,Warehouse:,Warenlager:,0
-selection,"stock.inventory,state",0,Canceled,Annulliert,0
-selection,"stock.inventory,state",0,Done,Erledigt,0
-selection,"stock.inventory,state",0,Draft,Entwurf,0
-selection,"stock.location,type",0,Customer,Kunde,0
-selection,"stock.location,type",0,Lost and Found,Differenzen allgemein,0
-selection,"stock.location,type",0,Production,Produktion,0
-selection,"stock.location,type",0,Storage,Lager,0
-selection,"stock.location,type",0,Supplier,Lieferant,0
-selection,"stock.location,type",0,View,Sicht,0
-selection,"stock.location,type",0,Warehouse,Warenlager,0
-selection,"stock.move,state",0,Assigned,Zugewiesen,0
-selection,"stock.move,state",0,Canceled,Annulliert,0
-selection,"stock.move,state",0,Done,Erledigt,0
-selection,"stock.move,state",0,Draft,Entwurf,0
-selection,"stock.period,state",0,Closed,Geschlossen,0
-selection,"stock.period,state",0,Draft,Entwurf,0
-selection,"stock.shipment.in,state",0,Canceled,Annulliert,0
-selection,"stock.shipment.in,state",0,Done,Erledigt,0
-selection,"stock.shipment.in,state",0,Draft,Entwurf,0
-selection,"stock.shipment.in,state",0,Received,Erhalten,0
-selection,"stock.shipment.in.return,state",0,Assigned,Zugewiesen,0
-selection,"stock.shipment.in.return,state",0,Canceled,Annulliert,0
-selection,"stock.shipment.in.return,state",0,Done,Erledigt,0
-selection,"stock.shipment.in.return,state",0,Draft,Entwurf,0
-selection,"stock.shipment.in.return,state",0,Waiting,Wartend,0
-selection,"stock.shipment.internal,state",0,Assigned,Zugewiesen,0
-selection,"stock.shipment.internal,state",0,Canceled,Annulliert,0
-selection,"stock.shipment.internal,state",0,Done,Erledigt,0
-selection,"stock.shipment.internal,state",0,Draft,Entwurf,0
-selection,"stock.shipment.internal,state",0,Waiting,Wartend,0
-selection,"stock.shipment.out,state",0,Assigned,Zugewiesen,0
-selection,"stock.shipment.out,state",0,Canceled,Annulliert,0
-selection,"stock.shipment.out,state",0,Done,Erledigt,0
-selection,"stock.shipment.out,state",0,Draft,Entwurf,0
-selection,"stock.shipment.out,state",0,Packed,Gepackt,0
-selection,"stock.shipment.out,state",0,Waiting,Wartend,0
-selection,"stock.shipment.out.return,state",0,Canceled,Annulliert,0
-selection,"stock.shipment.out.return,state",0,Done,Erledigt,0
-selection,"stock.shipment.out.return,state",0,Draft,Entwurf,0
-selection,"stock.shipment.out.return,state",0,Received,Erhalten,0
-view,party.party,0,Stock,Lager,0
-view,party.party,0,_Stock,_Lager,0
-view,product.product,0,Products,Artikel,0
-view,stock.configuration,0,Stock Configuration,Einstellungen Lager,0
-view,stock.inventory,0,Add an inventory line for each missing products,Positionen für Bestandskorrektur um fehlende Artikel ergänzen,0
-view,stock.inventory,0,All generated moves will be cancelled!,Sämtliche erzeugten Bewegungen werden rückgängig gemacht!,0
-view,stock.inventory,0,Cancel,Annullieren,0
-view,stock.inventory,0,Complete Inventory,Lagerbestandspositionen komplettieren,0
-view,stock.inventory,0,Confirm,Bestätigen,0
-view,stock.inventory,0,Inventories,Bestandskorrekturen,0
-view,stock.inventory,0,Inventory,Lagerbestand,0
-view,stock.inventory,0,Re-Open,Wiedereröffnen,0
-view,stock.inventory.line,0,Inventory Line,Position Bestand,0
-view,stock.inventory.line,0,Inventory Lines,Positionen Bestand,0
-view,stock.location,0,Location,Lagerort,0
-view,stock.location,0,Locations,Lagerorte,0
-view,stock.location,0,Product Stock,Lagerbestand,0
-view,stock.location_stock_date.init,0,Product Quantity.,Artikel Mengen,0
-view,stock.move,0,Cancel,Annullieren,0
-view,stock.move,0,Move,Bewegung,0
-view,stock.move,0,Moves,Bewegungen,0
-view,stock.move,0,Set Done,Auf Erledigt setzen,0
-view,stock.move,0,Set Draft,Auf Entwurf setzen,0
-view,stock.period,0,Close,SchlieÃen,0
-view,stock.period,0,Draft,Entwurf,0
-view,stock.period,0,Period,Periode,0
-view,stock.period,0,Periods,Lagerperioden,0
-view,stock.period.cache,0,Period Cache,Perioden Cache-Speicher,0
-view,stock.period.cache,0,Period Caches,Perioden Cache-Speicher,0
-view,stock.product_stock_date.init,0,Product Quantity.,Artikel Mengen,0
-view,stock.shipment.in,0,Cancel,Annullieren,0
-view,stock.shipment.in,0,Done,Erledigt,0
-view,stock.shipment.in,0,Draft,Entwurf,0
-view,stock.shipment.in,0,Incoming Moves,Eingehende Bewegungen,0
-view,stock.shipment.in,0,Inventory Moves,Bestandsänderungen,0
-view,stock.shipment.in,0,Moves,Bewegungen,0
-view,stock.shipment.in,0,Received,Erhalten,0
-view,stock.shipment.in,0,Reset to Draft,Auf Entwurf zurücksetzen,0
-view,stock.shipment.in,0,Supplier Shipment,Lieferposten von Lieferant,0
-view,stock.shipment.in,0,Supplier Shipments,Lieferposten von Lieferanten,0
-view,stock.shipment.in.return,0,Assign,Zuweisen,0
-view,stock.shipment.in.return,0,Cancel,Annullieren,0
-view,stock.shipment.in.return,0,Done,Erledigt,0
-view,stock.shipment.in.return,0,Draft,Entwurf,0
-view,stock.shipment.in.return,0,Reset to Draft,Auf Entwurf zurücksetzen,0
-view,stock.shipment.in.return,0,Supplier Return Shipment,Warenrückgabe Lieferant,0
-view,stock.shipment.in.return,0,Supplier Return Shipments,Warenrückgaben (an Lieferanten),0
-view,stock.shipment.in.return,0,Waiting,Wartend,0
-view,stock.shipment.in.return.assign.assign_failed,0,Moves,Bewegungen,0
-view,stock.shipment.in.return.assign.assign_failed,0,Unable to Assign,Fehlmenge Zuweisung,0
-view,stock.shipment.in.return.assign.assign_failed,0,Unable to assign those products:,Folgende Artikel können nicht zugewiesen werden:,0
-view,stock.shipment.internal,0,Assign,Zuweisen,0
-view,stock.shipment.internal,0,Cancel,Annullieren,0
-view,stock.shipment.internal,0,Done,Erledigt,0
-view,stock.shipment.internal,0,Draft,Entwurf,0
-view,stock.shipment.internal,0,Force Assign,Zuweisung erzwingen,0
-view,stock.shipment.internal,0,Internal Shipment,Interner Lieferposten,0
-view,stock.shipment.internal,0,Internal Shipments,Interne Lieferposten,0
-view,stock.shipment.internal,0,Reset to Draft,Auf Entwurf zurücksetzen,0
-view,stock.shipment.internal,0,Set Done,Auf Erledigt setzen,0
-view,stock.shipment.internal,0,Set Waiting,Auf Wartend setzen,0
-view,stock.shipment.internal,0,Waiting,Wartend,0
-view,stock.shipment.internal.assign.assign_failed,0,Moves,Bewegungen,0
-view,stock.shipment.internal.assign.assign_failed,0,Unable to Assign,Fehlmenge Zuweisung,0
-view,stock.shipment.internal.assign.assign_failed,0,Unable to assign those products:,Folgende Artikel können nicht zugewiesen werden:,0
-view,stock.shipment.out,0,Are you sure to force assignation?,Zuweisung wirklich erzwingen?,0
-view,stock.shipment.out,0,Assign,Zuweisen,0
-view,stock.shipment.out,0,Cancel,Annullieren,0
-view,stock.shipment.out,0,Customer Shipment,Lieferposten Kunde,0
-view,stock.shipment.out,0,Customer Shipments,Lieferposten an Kunden,0
-view,stock.shipment.out,0,Done,Erledigt,0
-view,stock.shipment.out,0,Draft,Entwurf,0
-view,stock.shipment.out,0,Force Assign,Zuweisung erzwingen,0
-view,stock.shipment.out,0,Inventory Moves,Bestandsänderungen,0
-view,stock.shipment.out,0,Make shipment,Packen,0
-view,stock.shipment.out,0,Outgoing Moves,Ausgehende Bewegungen,0
-view,stock.shipment.out,0,Reset to Draft,Auf Entwurf zurücksetzen,0
-view,stock.shipment.out,0,Set Done,Auf Erledigt setzen,0
-view,stock.shipment.out,0,Set Waiting,Auf Wartend setzen,0
-view,stock.shipment.out,0,Unpack,Entpackt,0
-view,stock.shipment.out,0,Waiting,Wartend,0
-view,stock.shipment.out.assign.assign_failed,0,Inventory Moves,Bestandsänderungen,0
-view,stock.shipment.out.assign.assign_failed,0,Unable to Assign,Fehlmenge Zuweisung,0
-view,stock.shipment.out.assign.assign_failed,0,Unable to assign those products:,Folgende Artikel können nicht zugewiesen werden:,0
-view,stock.shipment.out.return,0,Cancel,Annullieren,0
-view,stock.shipment.out.return,0,Customer Return Shipment,Warenrücknahme Kunde,0
-view,stock.shipment.out.return,0,Customer Return Shipments,Warenrücknahmen (von Kunden),0
-view,stock.shipment.out.return,0,Done,Erledigt,0
-view,stock.shipment.out.return,0,Incoming Moves,Eingehende Bewegungen,0
-view,stock.shipment.out.return,0,Inventory Moves,Bestandsänderungen,0
-view,stock.shipment.out.return,0,Moves,Bewegungen,0
-view,stock.shipment.out.return,0,Received,Erhalten,0
-view,stock.shipment.out.return,0,Reset to Draft,Auf Entwurf zurücksetzen,0
-wizard_button,"stock.location.open,init,end",0,Cancel,Abbrechen,0
-wizard_button,"stock.location.open,init,open",0,Open,Ãffnen,0
-wizard_button,"stock.product.open,init,end",0,Cancel,Abbrechen,0
-wizard_button,"stock.product.open,init,open",0,Open,Ãffnen,0
-wizard_button,"stock.shipment.in.return.assign,ask_force,end",0,Ok,OK,0
-wizard_button,"stock.shipment.in.return.assign,ask_force,force",0,Force Assign,Zuweisung erzwingen,0
-wizard_button,"stock.shipment.in.return.assign,assign_failed,end",0,Ok,OK,0
-wizard_button,"stock.shipment.internal.assign,ask_force,end",0,Ok,OK,0
-wizard_button,"stock.shipment.internal.assign,ask_force,force",0,Force Assign,Zuweisung erzwingen,0
-wizard_button,"stock.shipment.internal.assign,assign_failed,end",0,Ok,OK,0
-wizard_button,"stock.shipment.out.assign,ask_force,end",0,Ok,OK,0
-wizard_button,"stock.shipment.out.assign,ask_force,force",0,Force Assign,Zuweisung erzwingen,0
-wizard_button,"stock.shipment.out.assign,assign_failed,end",0,Ok,OK,0
diff --git a/es_CO.csv b/es_CO.csv
deleted file mode 100644
index 77d22cd..0000000
--- a/es_CO.csv
+++ /dev/null
@@ -1,493 +0,0 @@
-type,name,res_id,src,value,fuzzy
-error,product.template,0,You cannot change the default uom for a product which is associated to stock moves.,No puede cambiar la UdM predeterminada para un producto asociado a movimientos de inventario.,0
-error,stock.inventory.line,0,Line quantity must be positive!,La lÃnea de cantidad debe ser positiva!,0
-error,stock.inventory.line,0,Product must be unique by inventory!,El producto debe ser único por inventario!,0
-error,stock.location,0,A location with existing moves cannot be changed to a type that does not support moves.,Un lugar con movimientos existentes no puede ser cambiado a un tipo que no soporte movimientos.,0
-error,stock.location,0,"Location ""%s"" must be a child of warehouse ""%s""!","¡Localización de ""%s"" debe ser un hijo de la bodega ""%s""!",0
-error,stock.location,0,You can not create recursive locations!,No puede crear lugares recursivamente!,0
-error,stock.move,0,Move can be on only one Shipment,Solamente se puede hacer movimiento sobre un EnvÃo.,0
-error,stock.move,0,Move quantity must be positive,El valor del movimiento debe ser positivo,0
-error,stock.move,0,Source and destination location must be different,Los lugares fuente y destino deben diferir,0
-error,stock.move,0,You can not set state to assigned!,No puede establecer el estado como asignado!,0
-error,stock.move,0,You can not set state to done!,No puede establecer el estado como hecho!,0
-error,stock.move,0,You can not set state to draft!,No puede establecer el estado como borrador!,0
-error,stock.move,0,You can not use service products for a move!,No puede usar productos de servicio para un movimiento!,0
-error,stock.move,0,You can only delete draft or cancelled moves!,Solamente puede eliminar movimientos en borrador o cancelados!,0
-error,stock.shipment.in,0,Incoming Moves must have the warehouse input location as destination location!,Movimientos de ingreso debe tener un lugar de entrada de bodega como lugar destino!,0
-error,stock.shipment.in,0,Inventory Moves must have the warehouse input location as source location!,Movimientos de inventario deben tener lugar de entrada a bodega como lugar fuente!,0
-error,stock.shipment.out.return,0,Incoming Moves must have the warehouse input location as destination location!,Ingreso deben tener lugar de entrada en bodega como lugar destino!,0
-error,stock.shipment.out.return,0,Inventory Moves must have the warehouse input location as source location!,Movimientos de inventario deben tener lugar de entrada en bodega como lugar fuente!,0
-error,stock.shipment.out.return.create,0,The shipment with code %s is not yet sent.,El empaque con código %s no ha sido enviado aún.,0
-error,stock.shipment.out.return.create,0,You can not create return shipment,No puede crear empaques de retorno,0
-field,"party.address,delivery",0,Delivery,EnvÃo,0
-field,"party.party,customer_location",0,Customer Location,Lugar del Cliente,0
-field,"party.party,supplier_location",0,Supplier Location,Lugar del Proveedor,0
-field,"product.product,forecast_quantity",0,Forecast Quantity,Cantidad Proyectada,0
-field,"product.product,quantity",0,Quantity,Cantidad,0
-field,"product.template,forecast_quantity",0,Forecast Quantity,Cantidad Proyectada,0
-field,"product.template,quantity",0,Quantity,Cantidad,0
-field,"stock.configuration,rec_name",0,Name,Nombre de Contacto,1
-field,"stock.configuration,shipment_in_return_sequence",0,Supplier Return Shipment Sequence,Secuencia de retorno de envÃo al proveedor,0
-field,"stock.configuration,shipment_in_sequence",0,Supplier Shipment Sequence,Secuencia de envÃo al proveedor,0
-field,"stock.configuration,shipment_internal_sequence",0,Internal Shipment Sequence,Secuencia de envÃo interno,0
-field,"stock.configuration,shipment_out_return_sequence",0,Customer Return Shipment Sequence,Secuencia de retorno de envÃo al cliente ,0
-field,"stock.configuration,shipment_out_sequence",0,Customer Shipment Sequence,Secuencia de envÃo al cliente,0
-field,"stock.inventory,company",0,Company,CompañÃa,0
-field,"stock.inventory,date",0,Date,Fecha,0
-field,"stock.inventory.line,expected_quantity",0,Expected Quantity,Cantidad Esperada,0
-field,"stock.inventory.line,inventory",0,Inventory,Inventario,0
-field,"stock.inventory.line,move",0,Move,Movimiento,0
-field,"stock.inventory.line,product",0,Product,Producto,0
-field,"stock.inventory.line,quantity",0,Quantity,Cantidad,0
-field,"stock.inventory.line,rec_name",0,Name,Nombre,0
-field,"stock.inventory,lines",0,Lines,LÃneas de Inventario,0
-field,"stock.inventory.line,unit_digits",0,Unit Digits,DÃgitos Unitarios,0
-field,"stock.inventory.line,uom",0,UOM,UDM,0
-field,"stock.inventory,location",0,Location,Lugar,0
-field,"stock.inventory,lost_found",0,Lost and Found,Perdido y Encontrado,0
-field,"stock.inventory,rec_name",0,Name,Nombre,0
-field,"stock.inventory,state",0,State,Estado,0
-field,"stock.location,active",0,Active,Activo,0
-field,"stock.location,address",0,Address,Direcciones,0
-field,"stock.location,childs",0,Children,Hij at s,0
-field,"stock.location,code",0,Code,Código,0
-field,"stock.location,forecast_quantity",0,Forecast Quantity,Cantidad Proyectada,0
-field,"stock.location,input_location",0,Input,Entrada,0
-field,"stock.location,left",0,Left,Izquierda,0
-field,"stock.location,name",0,Name,Nombre,0
-field,"stock.location,output_location",0,Output,Salida,0
-field,"stock.location,parent",0,Parent,Padre,0
-field,"stock.location,quantity",0,Quantity,Cantidad,0
-field,"stock.location,rec_name",0,Name,Nombre,0
-field,"stock.location,right",0,Right,Derecha,0
-field,"stock.location_stock_date.init,forecast_date",0,At Date,En la fecha,0
-field,"stock.location,storage_location",0,Storage,Almacén,0
-field,"stock.location,type",0,Location type,Tipo de Lugar,0
-field,"stock.move,company",0,Company,CompañÃa,0
-field,"stock.move,cost_price",0,Cost Price,Método de Precio,0
-field,"stock.move,currency",0,Currency,Moneda,0
-field,"stock.move,effective_date",0,Effective Date,Fecha Efectiva,0
-field,"stock.move,from_location",0,From Location,Lugar Inicial,0
-field,"stock.move,planned_date",0,Planned Date,Fecha Planeada,0
-field,"stock.move,product",0,Product,Producto,0
-field,"stock.move,quantity",0,Quantity,Cantidad,0
-field,"stock.move,rec_name",0,Name,Nombre,0
-field,"stock.move,shipment_in",0,Supplier Shipment,EnvÃo del Proveedor,0
-field,"stock.move,shipment_in_return",0,Supplier Return Shipment,Devolución de Proveedor,0
-field,"stock.move,shipment_internal",0,Internal Shipment,EnvÃo Interno,0
-field,"stock.move,shipment_out",0,Customer Shipment,EnvÃo de Cliente,0
-field,"stock.move,shipment_out_return",0,Customer Return Shipment,Devolución a Cliente,0
-field,"stock.move,state",0,State,Estado,0
-field,"stock.move,to_location",0,To Location,Al Lugar:,0
-field,"stock.move,unit_digits",0,Unit Digits,DÃgitos de Unidad,0
-field,"stock.move,unit_price",0,Unit Price,Precio Unitario,0
-field,"stock.move,unit_price_required",0,Unit Price Required,Requiere Precio Unitario,0
-field,"stock.move,uom",0,Uom,Udm,0
-field,"stock.product_stock_date.init,forecast_date",0,At Date,En la fecha,0
-field,"stock.shipment.in,code",0,Code,Código,0
-field,"stock.shipment.in,contact_address",0,Contact Address,Dirección de Contacto,0
-field,"stock.shipment.in,effective_date",0,Effective Date,Fecha Efectiva,0
-field,"stock.shipment.in,incoming_moves",0,Incoming Moves,Movimientos de Entrada,0
-field,"stock.shipment.in,inventory_moves",0,Inventory Moves,Movimientos de Inventario,0
-field,"stock.shipment.in,moves",0,Moves,Movimientos,0
-field,"stock.shipment.in,planned_date",0,Planned Date,Fecha Planeada,0
-field,"stock.shipment.in,rec_name",0,Name,Nombre,0
-field,"stock.shipment.in,reference",0,Reference,Referencia,0
-field,"stock.shipment.in.return.assign.assign_failed,moves",0,Moves,Movimientos,0
-field,"stock.shipment.in.return,code",0,Code,Código,0
-field,"stock.shipment.in.return,effective_date",0,Effective Date,Fecha Efectiva,0
-field,"stock.shipment.in.return,from_location",0,From Location,Lugar Inicial,0
-field,"stock.shipment.in.return,moves",0,Moves,Movimientos,0
-field,"stock.shipment.in.return,planned_date",0,Planned Date,Fecha Planeada,0
-field,"stock.shipment.in.return,rec_name",0,Name,Nombre,0
-field,"stock.shipment.in.return,reference",0,Reference,Referencia,0
-field,"stock.shipment.in.return,state",0,State,Estado,0
-field,"stock.shipment.in.return,to_location",0,To Location,Al Lugar:,0
-field,"stock.shipment.in,state",0,State,Estado,0
-field,"stock.shipment.in,supplier",0,Supplier,Proveedor,0
-field,"stock.shipment.internal.assign.assign_failed,moves",0,Moves,Movimientos,0
-field,"stock.shipment.internal,code",0,Code,Código,0
-field,"stock.shipment.internal,effective_date",0,Effective Date,Fecha Efectiva,0
-field,"stock.shipment.internal,from_location",0,From Location,Lugar Inicial,0
-field,"stock.shipment.internal,moves",0,Moves,Movimientos,0
-field,"stock.shipment.internal,planned_date",0,Planned Date,Fecha Planeada,0
-field,"stock.shipment.internal,rec_name",0,Name,Nombre,0
-field,"stock.shipment.internal,reference",0,Reference,Referencia,0
-field,"stock.shipment.internal,state",0,State,Estado,0
-field,"stock.shipment.internal,to_location",0,To Location,Al Lugar:,0
-field,"stock.shipment.in,warehouse",0,Warehouse,Depósito,0
-field,"stock.shipment.out.assign.assign_failed,inventory_moves",0,Inventory Moves,Movimientos de Inventario,0
-field,"stock.shipment.out,code",0,Code,Código,0
-field,"stock.shipment.out,customer",0,Customer,Cliente,0
-field,"stock.shipment.out,delivery_address",0,Delivery Address,Dirección de EnvÃo,0
-field,"stock.shipment.out,effective_date",0,Effective Date,Fecha Efectiva,0
-field,"stock.shipment.out,inventory_moves",0,Inventory Moves,Movimientos de Inventario,0
-field,"stock.shipment.out,moves",0,Moves,Movimientos,0
-field,"stock.shipment.out,outgoing_moves",0,Outgoing Moves,Movimientos de Salida,0
-field,"stock.shipment.out,planned_date",0,Planned Date,Fecha Planeada,0
-field,"stock.shipment.out,rec_name",0,Name,Nombre,0
-field,"stock.shipment.out,reference",0,Reference,Referencia,0
-field,"stock.shipment.out.return,code",0,Code,Código,0
-field,"stock.shipment.out.return,customer",0,Customer,Cliente,0
-field,"stock.shipment.out.return,delivery_address",0,Delivery Address,Dirección de EnvÃo,0
-field,"stock.shipment.out.return,effective_date",0,Effective Date,Fecha Efectiva,0
-field,"stock.shipment.out.return,incoming_moves",0,Incoming Moves,Movimientos de Entrada,0
-field,"stock.shipment.out.return,inventory_moves",0,Inventory Moves,Movimientos de Inventario,0
-field,"stock.shipment.out.return,moves",0,Moves,Movimientos,0
-field,"stock.shipment.out.return,planned_date",0,Planned Date,Fecha Planeada,0
-field,"stock.shipment.out.return,rec_name",0,Name,Nombre,0
-field,"stock.shipment.out.return,reference",0,Reference,Referencia,0
-field,"stock.shipment.out.return,state",0,State,Estado,0
-field,"stock.shipment.out.return,warehouse",0,Warehouse,Depósito,0
-field,"stock.shipment.out,state",0,State,Estado,0
-field,"stock.shipment.out,warehouse",0,Warehouse,Depósito,0
-help,"party.party,customer_location",0,The default destination location when sending products to the party.,El lugar predeterminado destino cuando se envian productos al tercero.,0
-help,"party.party,supplier_location",0,The default source location when receiving products from the party.,El lugar origen predeterminado cuando se reciben productos del tercero.,0
-help,"stock.location_stock_date.init,forecast_date",0,"Allow to compute expected stock quantities for this date.
-* An empty value is an infinite date in the future.
-* A date in the past will provide historical values.","Permitir calcular el inventario esperado para esta fecha.
-* Un valor vacÃoes una fecha infinita en el futuro.
-* Una fecha en el pasado indicará usar datos históricos.",0
-help,"stock.product_stock_date.init,forecast_date",0,"Allow to compute expected stock quantities for this date.
-* An empty value is an infinite date in the future.
-* A date in the past will provide historical values.","Permitir calcular el inventario esperado para esta fecha.
-* Un valor vacÃoes una fecha infinita en el futuro.
-* Una fecha en el pasado indicará usar datos históricos.",0
-model,"ir.action,name",act_shipment_out_form_assigned,Assigned Customer Shipments,EnvÃos a Clientes asignados,0
-model,"ir.action,name",act_shipment_internal_assigned_form,Assigned Internal Shipments,EnvÃos internos asignados,0
-model,"ir.action,name",wizard_shipment_in_return_assign,Assign Purchase Return Shipment,Asigne Devolución de Compra,0
-model,"ir.action,name",wizard_shipment_internal_assign,Assign Shipment Internal,Asigne EnvÃo Interno,0
-model,"ir.action,name",wizard_shipment_out_assign,Assign Shipment Out,Asignación de EnvÃo,0
-model,"ir.action,name",wizard_complete_inventory,Complete Inventory,Inventario Completo,0
-model,"ir.action,name",create_shipment_out_return,Create Return Shipment,Crear Devolución,0
-model,"ir.action,name",act_shipment_out_return_form,Customer Return Shipments,Devolución al Cliente,0
-model,"ir.action,name",act_shipment_out_form,Customer Shipments,EnvÃos a Cliente,0
-model,"ir.action,name",act_shipment_out_form2,Customer Shipments,EnvÃos a Cliente,0
-model,"ir.action,name",act_shipment_out_form_ready,Customer Shipments Ready for Shipping,EnvÃos de Cliente listos para Enviar,0
-model,"ir.action,name",act_shipment_out_form_waiting,Customer Shipments Waiting Assignation,EnvÃos de Cliente esperando Asignación,0
-model,"ir.action,name",report_shipment_out_delivery_note,Delivery Note,Nota de EnvÃo,0
-model,"ir.action,name",act_shipment_internal_draft_form,Draft Internal Shipments,EnvÃos Internos en Borrador,0
-model,"ir.action,name",act_inventory_form_draft,Draft Inventories,Inventarios de Prueba,0
-model,"ir.action,name",act_location_form,Edit Locations,Editar Lugares,0
-model,"ir.action,name",report_shipment_internal,Internal Shipment,EnvÃo Interno,0
-model,"ir.action,name",act_shipment_internal_form,Internal Shipments,EnvÃos Internos,0
-model,"ir.action,name",act_shipment_internal_waiting_form,Internal Shipments Waiting Assignation,EnvÃos Internos esperando Asignación,0
-model,"ir.action,name",act_inventory_form,Inventories,Inventarios,0
-model,"ir.action,name",act_inventory_form2,Inventories,Inventarios,1
-model,"ir.action,name",act_location_tree,Locations,Lugares,0
-model,"ir.action,name",act_move_form,Moves,Movimientos,0
-model,"ir.action,name",act_move_form_supp,Moves from Suppliers,Movimientos de Proveedores,0
-model,"ir.action,name",act_move_form_supp_proceed,Moves from Suppliers Waiting Arrival,Movimientos de Proveedores en espera de Arrivo,0
-model,"ir.action,name",act_move_form_cust,Moves to Customers,Movimientos hacia Clientes,0
-model,"ir.action,name",act_shipment_out_return_form2,New Customer Return Shipment,Nueva Devolución al Cliente,0
-model,"ir.action,name",act_shipment_internal_new_form,New Internal Shipment,Nuevo EnvÃo Interno,0
-model,"ir.action,name",act_shipment_in_return_new_form,New Supplier Return Shipment,Nuevo Devolución al Proveedor,0
-model,"ir.action,name",act_shipment_in_form2,New Supplier Shipment,Nuevo EnvÃo de Proveedor,0
-model,"ir.action,name",report_shipment_out_picking_list,Picking List,Lista de Recogida,0
-model,"ir.action,name",wizard_location_open,Product by Location,Producto por Lugar,0
-model,"ir.action,name",wizard_product_open,Product Quantities,Cantidades de Producto,0
-model,"ir.action,name",act_product_by_location,Products by Locations,Productos por Lugares,0
-model,"ir.action,name",act_location_quantity_tree,Product Stock,Inventario de Producto,0
-model,"ir.action,name",act_shipment_in_form_received,Received Supplier shipments,Empaques de Proveedores recibidos,0
-model,"ir.action,name",report_shipment_in_restocking_list,Restocking List,Lista de Renovación de Inventario,0
-model,"ir.action,name",report_shipment_out_return_restocking_list,Restocking List,Lista de Renovación de Inventario,0
-model,"ir.action,name",act_stock_configuration_form,Stock Configuration,Configuración del inventario,0
-model,"ir.action,name",act_shipment_in_return_form,Supplier Return Shipments,Devolución al Proveedor,0
-model,"ir.action,name",act_shipment_in_form,Supplier Shipments,EnvÃos del Proveedor,0
-model,"ir.action,name",act_shipment_out_form3,Supplier Shipments,EnvÃos del Proveedor,0
-model,"ir.sequence,name",sequence_shipment_out_return,Customer Return Shipment,Devolución al Cliente,0
-model,"ir.sequence,name",sequence_shipment_out,Customer Shipment,EnvÃo a Cliente,0
-model,"ir.sequence,name",sequence_shipment_internal,Internal Shipment,EnvÃo Interno,0
-model,"ir.sequence,name",sequence_shipment_in_return,Supplier Return Shipment,Devolución al Proveedor,0
-model,"ir.sequence,name",sequence_shipment_in,Supplier Shipment,EnvÃo del Proveedor,0
-model,"ir.sequence.type,name",sequence_type_shipment_out_return,Customer Return Shipment,Devolución al Cliente,0
-model,"ir.sequence.type,name",sequence_type_shipment_out,Customer Shipment,EnvÃo a Cliente,0
-model,"ir.sequence.type,name",sequence_type_shipment_internal,Internal Shipment,EnvÃo Interno,0
-model,"ir.sequence.type,name",sequence_type_shipment_in_return,Supplier Return Shipment,Devolución al Proveedor,0
-model,"ir.sequence.type,name",sequence_type_shipment_in,Supplier Shipment,EnvÃo del Proveedor,0
-model,"ir.ui.menu,name",menu_shipment_out_assigned,Assigned Customer Shipments,EnvÃos asignados a Clientes,0
-model,"ir.ui.menu,name",menu_shipment_internal_assigned_form,Assigned Internal Shipments,EnvÃos asignados internamente,0
-model,"ir.ui.menu,name",menu_configuration,Configuration,Configuración,0
-model,"ir.ui.menu,name",menu_shipment_out_return_form,Customer Return Shipments,Devolución al Cliente,0
-model,"ir.ui.menu,name",menu_shipment_out_form,Customer Shipments,EnvÃos al Cliente,0
-model,"ir.ui.menu,name",menu_shipment_out_ready,Customer Shipments Ready for Shipping,EnvÃos de Cliente listos para EnvÃo,0
-model,"ir.ui.menu,name",menu_shipment_out_waiting,Customer Shipments Waiting Assignation,EnvÃos de Cliente listos esperando Asignación,0
-model,"ir.ui.menu,name",menu_shipment_internal_draft_form,Draft Internal Shipments,EnvÃos Internos en Borrador,0
-model,"ir.ui.menu,name",menu_inventory_form_draft,Draft Inventories,Inventarios de prueba,0
-model,"ir.ui.menu,name",menu_location_form,Edit Locations,Editar Lugares,0
-model,"ir.ui.menu,name",menu_shipment_internal_form,Internal Shipments,EnvÃo Internos,0
-model,"ir.ui.menu,name",menu_shipment_internal_waiting_form,Internal Shipments Waiting Assignation,EnvÃo Internos esperando Asignación,0
-model,"ir.ui.menu,name",menu_inventory_form,Inventories,Inventarios,0
-model,"ir.ui.menu,name",menu_stock,Inventory Management,Gestión de Inventarios,0
-model,"ir.ui.menu,name",menu_location_tree,Locations,Lugares,0
-model,"ir.ui.menu,name",menu_move_form,Moves,Movimientos,0
-model,"ir.ui.menu,name",menu_move_form_supp,Moves from Suppliers,Movimientos de Proveedores,0
-model,"ir.ui.menu,name",menu_move_form_supp_proceed,Moves from Suppliers Waiting Arrival,Movimientos de Proveedores en espera de Arrivo,0
-model,"ir.ui.menu,name",menu_move_form_cust,Moves to Customers,Movimientos hacia Clientes,0
-model,"ir.ui.menu,name",menu_shipment_out_return_form2,New Customer Return Shipment,Nueva Devolución al Cliente,0
-model,"ir.ui.menu,name",menu_shipment_internal_new_form,New Internal Shipment,Nuevo EnvÃo Interno,0
-model,"ir.ui.menu,name",menu_inventory_form_new,New Inventory,Nuevo Inventario,0
-model,"ir.ui.menu,name",menu_shipment_in_return_new_form,New Supplier Return Shipment,Nueva Devolución al Proveedor,0
-model,"ir.ui.menu,name",menu_shipment_in_form2,New Supplier Shipment,Nuevo EnvÃo de Proveedor,0
-model,"ir.ui.menu,name",menu_shipment_in_received,Received Supplier shipments,Empaques de Proveedores recibidos,0
-model,"ir.ui.menu,name",menu_reporting,Reporting,Reportes,0
-model,"ir.ui.menu,name",menu_stock_configuration,Stock Configuration,Configuración de Inventario,0
-model,"ir.ui.menu,name",menu_shipment_in_return_form,Supplier Return Shipments,Devolución al Proveedor,0
-model,"ir.ui.menu,name",menu_shipment_in_form,Supplier Shipments,EnvÃo del Proveedor,0
-model,"res.group,name",group_stock,Stock,Stock,0
-model,"res.group,name",group_stock_admin,Stock Administration,Administración de existencia,0
-model,"res.group,name",group_stock_force_assignment,Stock Force Assignment,,0
-model,"stock.configuration,name",0,stock.configuration,,0
-model,"stock.inventory.line,name",0,Stock Inventory Line,LÃnea de existencia en Inventario ,0
-model,"stock.inventory,name",0,Stock Inventory,Inventario de Existencia,0
-model,"stock.location,name",location_customer,Customer,Cliente,0
-model,"stock.location,name",location_input,Input Zone,Zona de Entrada,0
-model,"stock.location,name",location_lost_found,Lost and Found,Perdido y Encontrado,0
-model,"stock.location,name",location_output,Output Zone,Zona de Salida,0
-model,"stock.location,name",0,Stock Location,Lugar de Existencia,0
-model,"stock.location,name",location_storage,Storage Zone,Zona de Almacén,0
-model,"stock.location,name",location_supplier,Supplier,Proveedor,0
-model,"stock.location,name",location_warehouse,Warehouse,Depósito,0
-model,"stock.location_stock_date.init,name",0,Compute stock quantities,Calcule cantidad existencia,0
-model,"stock.move,name",0,Stock Move,Movimiento de Existencias,0
-model,"stock.product_stock_date.init,name",0,Compute stock quantities,Calcule cantidad de existencia,0
-model,"stock.shipment.in,name",0,Supplier Shipment,EnvÃo del Proveedor,0
-model,"stock.shipment.in.return.assign.assign_failed,name",0,Assign Supplier Return Shipment Assign Failed,Fuerce Pregunta de Asigne Devolución a Proveedor,1
-model,"stock.shipment.in.return,name",0,Supplier Return Shipment,Devolución a Proveedor,0
-model,"stock.shipment.internal.assign.assign_failed,name",0,Assign Shipment Internal Assign Failed,Fuerce Pregunta de Asigne EnvÃo Interno,1
-model,"stock.shipment.internal,name",0,Internal Shipment,EnvÃo Interno,0
-model,"stock.shipment.out.assign.assign_failed,name",0,Assign Shipment Out Assign Failed,Fuerce Pregunta de Asigne EnvÃo,1
-model,"stock.shipment.out,name",0,Customer Shipment,EnvÃo de Cliente,0
-model,"stock.shipment.out.return,name",0,Customer Return Shipment,Devolución a Cliente,0
-model,"workflow.activity,name",shipmentout_act_assigned,Assigned,Asignado,0
-model,"workflow.activity,name",shipmentinternal_act_assigned,Assigned,Asignado,0
-model,"workflow.activity,name",shipment_in_return_act_assigned,Assigned,Asignado,0
-model,"workflow.activity,name",shipmentin_act_cancel,Canceled,Cancelado,0
-model,"workflow.activity,name",shipmentout_act_cancel,Canceled,Cancelado,0
-model,"workflow.activity,name",shipmentinternal_act_cancel,Canceled,Cancelado,0
-model,"workflow.activity,name",shipment_out_return_act_cancel,Canceled,Cancelado,0
-model,"workflow.activity,name",shipment_in_return_act_cancel,Canceled,Cancelado,0
-model,"workflow.activity,name",inventory_act_cancel,Canceled,Cancelado,0
-model,"workflow.activity,name",shipmentin_act_done,Done,Hecho,0
-model,"workflow.activity,name",shipmentout_act_done,Done,Hecho,0
-model,"workflow.activity,name",shipmentinternal_act_done,Done,Hecho,0
-model,"workflow.activity,name",shipment_out_return_act_done,Done,Hecho,0
-model,"workflow.activity,name",shipment_in_return_act_done,Done,Hecho,0
-model,"workflow.activity,name",inventory_act_done,Done,Hecho,0
-model,"workflow.activity,name",shipmentin_act_draft,Draft,Borrador,0
-model,"workflow.activity,name",shipmentout_act_draft,Draft,Borrador,0
-model,"workflow.activity,name",shipmentinternal_act_draft,Draft,Borrador,0
-model,"workflow.activity,name",shipment_out_return_act_draft,Draft,Borrador,0
-model,"workflow.activity,name",shipment_in_return_act_draft,Draft,Borrador,0
-model,"workflow.activity,name",inventory_act_draft,Draft,Borrador,0
-model,"workflow.activity,name",shipmentout_act_packed,Packed,Empacado,0
-model,"workflow.activity,name",shipmentin_act_received,Received,Recibido,0
-model,"workflow.activity,name",shipment_out_return_act_received,Received,Recibido,0
-model,"workflow.activity,name",shipmentout_act_waiting,Waiting,En Espera,0
-model,"workflow.activity,name",shipmentinternal_act_waiting,Waiting,En Espera,0
-model,"workflow.activity,name",shipment_in_return_act_waiting,Waiting,En Espera,0
-model,"workflow,name",wkf_shipment_out_return,Customer Return Shipment,Devolución a Cliente,0
-model,"workflow,name",wkf_shipmentout,Customer Shipment,EnvÃo de Cliente,0
-model,"workflow,name",wkf_shipmentinternal,Internal Shipment,EnvÃo Interno,0
-model,"workflow,name",wkf_inventory,Inventory,Inventario,0
-model,"workflow,name",wkf_shipment_in_return,Supplier Return Shipment,Devolución a Proveedor,0
-model,"workflow,name",wkf_shipmentin,Supplier Shipment,EnvÃo del Proveedor,0
-odt,stock.shipment.in.restocking_list,0,/,/,0
-odt,stock.shipment.in.restocking_list,0,Code:,Código:,0
-odt,stock.shipment.in.restocking_list,0,E-Mail:,Correo electrónico:,0
-odt,stock.shipment.in.restocking_list,0,From Location,Lugar Inicial,0
-odt,stock.shipment.in.restocking_list,0,Phone:,Teléfono:,0
-odt,stock.shipment.in.restocking_list,0,Planned Date:,Fecha Planeada:,0
-odt,stock.shipment.in.restocking_list,0,Product,Producto,0
-odt,stock.shipment.in.restocking_list,0,Quantity,Cantidad,0
-odt,stock.shipment.in.restocking_list,0,Reference:,Referencia:,0
-odt,stock.shipment.in.restocking_list,0,Restocking List,Lista de Renovación de Inventario,0
-odt,stock.shipment.in.restocking_list,0,Supplier:,Proveedor:,0
-odt,stock.shipment.in.restocking_list,0,To Location,Al Lugar:,0
-odt,stock.shipment.in.restocking_list,0,Warehouse:,Bodega:,0
-odt,stock.shipment.internal.report,0,/,/,0
-odt,stock.shipment.internal.report,0,Code:,Código:,0
-odt,stock.shipment.internal.report,0,E-Mail:,Correo electrónico:,0
-odt,stock.shipment.internal.report,0,From Location,Lugar Inicial,0
-odt,stock.shipment.internal.report,0,From Location:,Origen:,0
-odt,stock.shipment.internal.report,0,Internal Shipment,EnvÃo Interno,0
-odt,stock.shipment.internal.report,0,Phone:,Teléfono:,0
-odt,stock.shipment.internal.report,0,Planned Date:,Fecha Planeada:,0
-odt,stock.shipment.internal.report,0,Product,Producto,0
-odt,stock.shipment.internal.report,0,Quantity,Cantidad,0
-odt,stock.shipment.internal.report,0,Reference:,Referencia:,0
-odt,stock.shipment.internal.report,0,To Location,Al Lugar:,0
-odt,stock.shipment.internal.report,0,To Location:,Destino:,0
-odt,stock.shipment.out.delivery_note,0,/,/,0
-odt,stock.shipment.out.delivery_note,0,Customer Code:,Código de Cliente:,0
-odt,stock.shipment.out.delivery_note,0,Date:,Fecha:,0
-odt,stock.shipment.out.delivery_note,0,Delivery Note,Nota de EnvÃo,0
-odt,stock.shipment.out.delivery_note,0,E-Mail:,Correo electrónico:,0
-odt,stock.shipment.out.delivery_note,0,Phone:,Teléfono:,0
-odt,stock.shipment.out.delivery_note,0,Product,Producto,0
-odt,stock.shipment.out.delivery_note,0,Quantity,Cantidad,0
-odt,stock.shipment.out.delivery_note,0,Reference:,Referencia:,0
-odt,stock.shipment.out.delivery_note,0,Shipment Number:,Número de EnvÃo,0
-odt,stock.shipment.out.picking_list,0,/,/,0
-odt,stock.shipment.out.picking_list,0,Code:,Código:,0
-odt,stock.shipment.out.picking_list,0,Customer:,Cliente:,0
-odt,stock.shipment.out.picking_list,0,E-Mail:,Correo electrónico:,0
-odt,stock.shipment.out.picking_list,0,From Location,Lugar Inicial,0
-odt,stock.shipment.out.picking_list,0,Phone:,Teléfono:,0
-odt,stock.shipment.out.picking_list,0,Picking List,Lista de Elección,0
-odt,stock.shipment.out.picking_list,0,Planned Date:,Fecha Planeada:,0
-odt,stock.shipment.out.picking_list,0,Product,Producto,0
-odt,stock.shipment.out.picking_list,0,Quantity,Cantidad,0
-odt,stock.shipment.out.picking_list,0,Reference:,Referencia:,0
-odt,stock.shipment.out.picking_list,0,To Location,Al Lugar:,0
-odt,stock.shipment.out.picking_list,0,Warehouse:,Bodega:,0
-odt,stock.shipment.out.return.restocking_list,0,/,/,0
-odt,stock.shipment.out.return.restocking_list,0,Code:,Código:,0
-odt,stock.shipment.out.return.restocking_list,0,E-Mail:,Correo electrónico:,0
-odt,stock.shipment.out.return.restocking_list,0,From Location,Lugar Inicial,0
-odt,stock.shipment.out.return.restocking_list,0,Phone:,Teléfono:,0
-odt,stock.shipment.out.return.restocking_list,0,Planned Date:,Fecha Planeada:,0
-odt,stock.shipment.out.return.restocking_list,0,Product,Producto,0
-odt,stock.shipment.out.return.restocking_list,0,Quantity,Cantidad,0
-odt,stock.shipment.out.return.restocking_list,0,Reference:,Referencia:,0
-odt,stock.shipment.out.return.restocking_list,0,Restocking List,Lista de reposición de existencias,0
-odt,stock.shipment.out.return.restocking_list,0,Supplier:,Proveedor:,0
-odt,stock.shipment.out.return.restocking_list,0,To Location,Al Lugar:,0
-odt,stock.shipment.out.return.restocking_list,0,Warehouse:,Bodega:,0
-selection,"stock.inventory,state",0,Canceled,Cancelado,0
-selection,"stock.inventory,state",0,Done,Hecho,0
-selection,"stock.inventory,state",0,Draft,Borrador,0
-selection,"stock.location,type",0,Customer,Cliente,0
-selection,"stock.location,type",0,Lost and Found,Perdido y Encontrado,0
-selection,"stock.location,type",0,Production,Producción,0
-selection,"stock.location,type",0,Storage,Almacén,0
-selection,"stock.location,type",0,Supplier,Proveedor,0
-selection,"stock.location,type",0,View,Vista,0
-selection,"stock.location,type",0,Warehouse,Depósito,0
-selection,"stock.move,state",0,Assigned,Asignado,0
-selection,"stock.move,state",0,Canceled,Cancelado,0
-selection,"stock.move,state",0,Done,Hecho,0
-selection,"stock.move,state",0,Draft,Borrador,0
-selection,"stock.shipment.in.return,state",0,Assigned,Asignado,0
-selection,"stock.shipment.in.return,state",0,Canceled,Cancelado,0
-selection,"stock.shipment.in.return,state",0,Done,Hecho,0
-selection,"stock.shipment.in.return,state",0,Draft,Borrador,0
-selection,"stock.shipment.in.return,state",0,Waiting,En Espera,0
-selection,"stock.shipment.in,state",0,Canceled,Cancelado,0
-selection,"stock.shipment.in,state",0,Done,Hecho,0
-selection,"stock.shipment.in,state",0,Draft,Borrador,0
-selection,"stock.shipment.in,state",0,Received,Recibido,0
-selection,"stock.shipment.internal,state",0,Assigned,Asignado,0
-selection,"stock.shipment.internal,state",0,Canceled,Cancelado,0
-selection,"stock.shipment.internal,state",0,Done,Hecho,0
-selection,"stock.shipment.internal,state",0,Draft,Borrador,0
-selection,"stock.shipment.internal,state",0,Waiting,En Espera,0
-selection,"stock.shipment.out.return,state",0,Canceled,Cancelado,0
-selection,"stock.shipment.out.return,state",0,Done,Hecho,0
-selection,"stock.shipment.out.return,state",0,Draft,Borrador,0
-selection,"stock.shipment.out.return,state",0,Received,Recibido,0
-selection,"stock.shipment.out,state",0,Assigned,Asignado,0
-selection,"stock.shipment.out,state",0,Canceled,Cancelado,0
-selection,"stock.shipment.out,state",0,Done,Hecho,0
-selection,"stock.shipment.out,state",0,Draft,Borrador,0
-selection,"stock.shipment.out,state",0,Packed,Empacado,0
-selection,"stock.shipment.out,state",0,Waiting,En Espera,0
-view,party.party,0,Stock,Stock,0
-view,party.party,0,_Stock,_Existencias,0
-view,product.product,0,Products,Productos,0
-view,stock.configuration,0,Stock Configuration,Configuración del Inventario,0
-view,stock.inventory,0,Add an inventory line for each missing products,Adicione una lÃnea de inventario para cada producto faltante,0
-view,stock.inventory,0,All generated moves will be cancelled!,Se cancelarán todos los movimientos generados!,0
-view,stock.inventory,0,Cancel,Cancelar,0
-view,stock.inventory,0,Complete Inventory,Inventario Completo,0
-view,stock.inventory,0,Confirm,Confirmar,0
-view,stock.inventory,0,Inventories,Inventarios,0
-view,stock.inventory,0,Inventory,Inventario,0
-view,stock.inventory,0,Re-Open,Re-abrir,0
-view,stock.inventory.line,0,Inventory Line,LÃnea de Inventario,0
-view,stock.inventory.line,0,Inventory Lines,LÃneas de Inventario,0
-view,stock.location,0,Location,Lugar,0
-view,stock.location,0,Locations,Lugares,0
-view,stock.location,0,Product Stock,Inventario de Producto,0
-view,stock.location_stock_date.init,0,Product Quantity.,Cantidad de Producto.,0
-view,stock.move,0,Cancel,Cancelar,0
-view,stock.move,0,Move,Movimiento,0
-view,stock.move,0,Moves,Movimientos,0
-view,stock.move,0,Set Done,Marcar como Hecho,0
-view,stock.move,0,Set Draft,Marcar como Borrador,0
-view,stock.product_stock_date.init,0,Product Quantity.,Cantidad de Producto.,0
-view,stock.shipment.in,0,Cancel,Cancelar,0
-view,stock.shipment.in,0,Done,Hecho,0
-view,stock.shipment.in,0,Draft,Borrador,0
-view,stock.shipment.in,0,Incoming Moves,Movimientos de Entrada,0
-view,stock.shipment.in,0,Inventory Moves,Movimientos de Inventario,0
-view,stock.shipment.in,0,Moves,Movimientos,0
-view,stock.shipment.in,0,Received,Recibido,0
-view,stock.shipment.in,0,Reset to Draft,Revertir a Borrador,0
-view,stock.shipment.in,0,Supplier Shipment,EnvÃo del Proveedor,0
-view,stock.shipment.in,0,Supplier Shipments,EnvÃos del Proveedor,0
-view,stock.shipment.in.return,0,Assign,Asignar,0
-view,stock.shipment.in.return,0,Cancel,Cancelar,0
-view,stock.shipment.in.return,0,Done,Hecho,0
-view,stock.shipment.in.return,0,Draft,Borrador,0
-view,stock.shipment.in.return,0,Reset to Draft,Revertir a Borrador,0
-view,stock.shipment.in.return,0,Supplier Return Shipment,Devolución de Proveedor,0
-view,stock.shipment.in.return,0,Supplier Return Shipments,Devoluciones de Proveedor,0
-view,stock.shipment.in.return,0,Waiting,En Espera,0
-view,stock.shipment.in.return.assign.assign_failed,0,Moves,Movimientos,0
-view,stock.shipment.in.return.assign.assign_failed,0,Unable to Assign,No es posible asignar,0
-view,stock.shipment.in.return.assign.assign_failed,0,Unable to assign those products:,No es posible asignar esos productos:,0
-view,stock.shipment.internal,0,Assign,Asignar,0
-view,stock.shipment.internal,0,Cancel,Cancelar,0
-view,stock.shipment.internal,0,Done,Hecho,0
-view,stock.shipment.internal,0,Draft,Borrador,0
-view,stock.shipment.internal,0,Force Assign,Forzar Asignación,0
-view,stock.shipment.internal,0,Internal Shipment,EnvÃo Interno,0
-view,stock.shipment.internal,0,Internal Shipments,EnvÃos Internos,0
-view,stock.shipment.internal,0,Reset to Draft,Revertir a Borrador,0
-view,stock.shipment.internal,0,Set Done,Marcar como Hecho,0
-view,stock.shipment.internal,0,Set Waiting,Colocar en Espera,0
-view,stock.shipment.internal,0,Waiting,En espera,0
-view,stock.shipment.internal.assign.assign_failed,0,Moves,Movimientos,0
-view,stock.shipment.internal.assign.assign_failed,0,Unable to Assign,No es posible asignar,0
-view,stock.shipment.internal.assign.assign_failed,0,Unable to assign those products:,No es posible asignar esos productos:,0
-view,stock.shipment.out,0,Assign,Asignar,0
-view,stock.shipment.out,0,Cancel,Cancelar,0
-view,stock.shipment.out,0,Customer Shipment,EnvÃo de Cliente,0
-view,stock.shipment.out,0,Customer Shipments,EnvÃos de Cliente,0
-view,stock.shipment.out,0,Done,Hecho,0
-view,stock.shipment.out,0,Draft,Borrador,0
-view,stock.shipment.out,0,Force Assign,Forzar Asignación,0
-view,stock.shipment.out,0,Inventory Moves,Movimientos de Inventario,0
-view,stock.shipment.out,0,Make shipment,Hacer Empaque,0
-view,stock.shipment.out,0,Outgoing Moves,Movimientos de Salida,0
-view,stock.shipment.out,0,Reset to Draft,Revertir a Borrador,0
-view,stock.shipment.out,0,Set Done,Marcar como Hecho,0
-view,stock.shipment.out,0,Set Waiting,Colocar en Espera,0
-view,stock.shipment.out,0,Unpack,Sin empaque,0
-view,stock.shipment.out,0,Waiting,En espera,0
-view,stock.shipment.out.assign.assign_failed,0,Inventory Moves,Movimientos de Inventario,0
-view,stock.shipment.out.assign.assign_failed,0,Unable to Assign,No es posible asignar,0
-view,stock.shipment.out.assign.assign_failed,0,Unable to assign those products:,No es posible asignar esos productos:,0
-view,stock.shipment.out.return,0,Cancel,Cancelar,0
-view,stock.shipment.out.return,0,Customer Return Shipment,Devolución a Cliente,0
-view,stock.shipment.out.return,0,Customer Return Shipments,Devolución a Cliente,0
-view,stock.shipment.out.return,0,Done,Hecho,0
-view,stock.shipment.out.return,0,Incoming Moves,Movimientos de Entrada,0
-view,stock.shipment.out.return,0,Inventory Moves,Movimientos de Inventario,0
-view,stock.shipment.out.return,0,Moves,Movimientos,0
-view,stock.shipment.out.return,0,Received,Recibido,0
-view,stock.shipment.out.return,0,Reset to Draft,Revertir a Borrador,0
-wizard_button,"stock.location.open,init,end",0,Cancel,Cancelar,0
-wizard_button,"stock.location.open,init,open",0,Open,Abrir,0
-wizard_button,"stock.product.open,init,end",0,Cancel,Cancelar,0
-wizard_button,"stock.product.open,init,open",0,Open,Abrir,0
-wizard_button,"stock.shipment.in.return.assign,ask_force,end",0,Ok,Aceptar,0
-wizard_button,"stock.shipment.in.return.assign,ask_force,force",0,Force Assign,Forzar Asignación,0
-wizard_button,"stock.shipment.in.return.assign,assign_failed,end",0,Ok,Aceptar,0
-wizard_button,"stock.shipment.internal.assign,ask_force,end",0,Ok,Aceptar,0
-wizard_button,"stock.shipment.internal.assign,ask_force,force",0,Force Assign,Forzar Asignación,0
-wizard_button,"stock.shipment.internal.assign,assign_failed,end",0,Ok,Aceptar,0
-wizard_button,"stock.shipment.out.assign,ask_force,end",0,Ok,Aceptar,0
-wizard_button,"stock.shipment.out.assign,ask_force,force",0,Force Assign,Forzar Asignación,0
-wizard_button,"stock.shipment.out.assign,assign_failed,end",0,Ok,Aceptar,0
diff --git a/es_ES.csv b/es_ES.csv
deleted file mode 100644
index 2e9ce14..0000000
--- a/es_ES.csv
+++ /dev/null
@@ -1,479 +0,0 @@
-type,name,res_id,src,value,fuzzy
-error,product.template,0,You cannot change the default uom for a product which is associated to stock moves.,No puede cambiar la UdM predeterminada de un producto que está asociado con movimientos de existencias.,0
-error,stock.inventory.line,0,Line quantity must be positive!,La cantidad de la lÃnea debe ser positiva,0
-error,stock.inventory.line,0,Product must be unique by inventory!,El producto debe ser único por inventario,0
-error,stock.location,0,A location with existing moves cannot be changed to a type that does not support moves.,Una ubicación con movimientos no puede ser cambiado a un tipo que no soporte movimientos.,0
-error,stock.location,0,"Location ""%s"" must be a child of warehouse ""%s""!",La ubicación «%s» debe ser hijo del almacén «%s»,0
-error,stock.location,0,You can not create recursive locations!,No puede crear ubicaciones recursivas,0
-error,stock.move,0,Move can be on only one Shipment,Un movimiento solo puede hacerse con un envio.,0
-error,stock.move,0,Move quantity must be positive,La cantidad a mover tiene que ser positiva,0
-error,stock.move,0,Source and destination location must be different,Los lugares origen y destino deben ser distintos,0
-error,stock.move,0,You can not set state to assigned!,No puede establecer el estado como asignado,0
-error,stock.move,0,You can not set state to done!,No puede establecer el estado como terminado,0
-error,stock.move,0,You can not set state to draft!,No puede establecer el estado como borrador,0
-error,stock.move,0,You can not use service products for a move!,No puede usar productos de servicio para un movimiento,0
-error,stock.move,0,You can only delete draft or cancelled moves!,Solamente puede borrar movimientos en borrador o cancelados,0
-error,stock.shipment.in,0,Incoming Moves must have the warehouse input location as destination location!,Los movimientos de entrada deben tener la ubicación del almacén de entrada como la ubicación de destino,0
-error,stock.shipment.in,0,Inventory Moves must have the warehouse input location as source location!,Los movimientos de inventario deben tener la ubicación del almacén de entrada como la ubicación de origen,0
-error,stock.shipment.out.return,0,Incoming Moves must have the warehouse input location as destination location!,Los movimientos de entrada deben tener la ubicación del almacén de entrada como la ubicación de destino,0
-error,stock.shipment.out.return,0,Inventory Moves must have the warehouse input location as source location!,Los movimientos de inventario deben tener la ubicación del almacén de entrada como la ubicación de origen,0
-error,stock.shipment.out.return.create,0,The shipment with code %s is not yet sent.,El paquete con código %s no ha sido enviado aún.,0
-error,stock.shipment.out.return.create,0,You can not create return shipment,No puede crear paquetes de retorno,0
-field,"party.address,delivery",0,Delivery,EnvÃo,0
-field,"party.party,customer_location",0,Customer Location,Ubicación del cliente,0
-field,"party.party,supplier_location",0,Supplier Location,Ubicación del proveedor,0
-field,"product.product,forecast_quantity",0,Forecast Quantity,Cantidad prevista,0
-field,"product.product,quantity",0,Quantity,Cantidad,0
-field,"product.template,forecast_quantity",0,Forecast Quantity,Cantidad prevista,0
-field,"product.template,quantity",0,Quantity,Cantidad,0
-field,"stock.inventory,company",0,Company,Empresa,0
-field,"stock.inventory,date",0,Date,Fecha,0
-field,"stock.inventory.line,expected_quantity",0,Expected Quantity,Cantidad esperada,0
-field,"stock.inventory.line,inventory",0,Inventory,Inventario,0
-field,"stock.inventory.line,move",0,Move,Movimiento,0
-field,"stock.inventory.line,product",0,Product,Producto,0
-field,"stock.inventory.line,quantity",0,Quantity,Cantidad,0
-field,"stock.inventory.line,rec_name",0,Name,Nombre,0
-field,"stock.inventory,lines",0,Lines,LÃneas,0
-field,"stock.inventory.line,unit_digits",0,Unit Digits,DÃgitos de la unidad,0
-field,"stock.inventory.line,uom",0,UOM,UdM,0
-field,"stock.inventory,location",0,Location,Ubicación,0
-field,"stock.inventory,lost_found",0,Lost and Found,Perdido y encontrado,0
-field,"stock.inventory,rec_name",0,Name,Nombre,0
-field,"stock.inventory,state",0,State,Estado,0
-field,"stock.location,active",0,Active,Activo,0
-field,"stock.location,address",0,Address,Direcciones,0
-field,"stock.location,childs",0,Children,Hijos,0
-field,"stock.location,code",0,Code,Código,0
-field,"stock.location,forecast_quantity",0,Forecast Quantity,Cantidad prevista,0
-field,"stock.location,input_location",0,Input,Entrada,0
-field,"stock.location,left",0,Left,Izquierda,0
-field,"stock.location,name",0,Name,Nombre,0
-field,"stock.location,output_location",0,Output,Salida,0
-field,"stock.location,parent",0,Parent,Padre,0
-field,"stock.location,quantity",0,Quantity,Cantidad,0
-field,"stock.location,rec_name",0,Name,Nombre,0
-field,"stock.location,right",0,Right,Derecha,0
-field,"stock.location_stock_date.init,forecast_date",0,At Date,En la fecha,0
-field,"stock.location,storage_location",0,Storage,Almacén,0
-field,"stock.location,type",0,Location type,Tipo de ubicación,0
-field,"stock.move,company",0,Company,Empresa,0
-field,"stock.move,cost_price",0,Cost Price,Precio de coste,0
-field,"stock.move,currency",0,Currency,Divisa,0
-field,"stock.move,effective_date",0,Effective Date,Fecha efectiva,0
-field,"stock.move,from_location",0,From Location,Desde ubicación,0
-field,"stock.move,planned_date",0,Planned Date,Fecha estimada,0
-field,"stock.move,product",0,Product,Producto,0
-field,"stock.move,quantity",0,Quantity,Cantidad,0
-field,"stock.move,rec_name",0,Name,Nombre,0
-field,"stock.move,shipment_in",0,Supplier Shipment,EnvÃo del proveedor,0
-field,"stock.move,shipment_in_return",0,Supplier Return Shipment,Envio de devolución a proveedor,0
-field,"stock.move,shipment_internal",0,Internal Shipment,EnvÃo interno,0
-field,"stock.move,shipment_out",0,Customer Shipment,EnvÃo a cliente,0
-field,"stock.move,shipment_out_return",0,Customer Return Shipment,Envio de devolución de cliente,0
-field,"stock.move,state",0,State,Estado,0
-field,"stock.move,to_location",0,To Location,A ubicación,0
-field,"stock.move,unit_digits",0,Unit Digits,DÃgitos de unidad,0
-field,"stock.move,unit_price",0,Unit Price,Precio unitario,0
-field,"stock.move,unit_price_required",0,Unit Price Required,Requiere precio unitario,0
-field,"stock.move,uom",0,Uom,UdM,0
-field,"stock.product_stock_date.init,forecast_date",0,At Date,En la fecha,0
-field,"stock.shipment.in,code",0,Code,Código,0
-field,"stock.shipment.in,contact_address",0,Contact Address,Dirección de contacto,0
-field,"stock.shipment.in,effective_date",0,Effective Date,Fecha efectiva,0
-field,"stock.shipment.in,incoming_moves",0,Incoming Moves,Movimientos de entrada,0
-field,"stock.shipment.in,inventory_moves",0,Inventory Moves,Movimientos de inventario,0
-field,"stock.shipment.in,moves",0,Moves,Movimientos,0
-field,"stock.shipment.in,planned_date",0,Planned Date,Fecha estimada,0
-field,"stock.shipment.in,rec_name",0,Name,Nombre,0
-field,"stock.shipment.in,reference",0,Reference,Referencia,0
-field,"stock.shipment.in.return.assign.assign_failed,moves",0,Moves,Movimientos,0
-field,"stock.shipment.in.return,code",0,Code,Código,0
-field,"stock.shipment.in.return,effective_date",0,Effective Date,Fecha efectiva,0
-field,"stock.shipment.in.return,from_location",0,From Location,Desde ubicación,0
-field,"stock.shipment.in.return,moves",0,Moves,Movimientos,0
-field,"stock.shipment.in.return,planned_date",0,Planned Date,Fecha estimada,0
-field,"stock.shipment.in.return,rec_name",0,Name,Nombre,0
-field,"stock.shipment.in.return,reference",0,Reference,Referencia,0
-field,"stock.shipment.in.return,state",0,State,Estado,0
-field,"stock.shipment.in.return,to_location",0,To Location,A ubicación,0
-field,"stock.shipment.in,state",0,State,Estado,0
-field,"stock.shipment.in,supplier",0,Supplier,Proveedor,0
-field,"stock.shipment.internal.assign.assign_failed,moves",0,Moves,Movimientos,0
-field,"stock.shipment.internal,code",0,Code,Código,0
-field,"stock.shipment.internal,effective_date",0,Effective Date,Fecha efectiva,0
-field,"stock.shipment.internal,from_location",0,From Location,Desde ubicación,0
-field,"stock.shipment.internal,moves",0,Moves,Movimientos,0
-field,"stock.shipment.internal,planned_date",0,Planned Date,Fecha estimada,0
-field,"stock.shipment.internal,rec_name",0,Name,Nombre,0
-field,"stock.shipment.internal,reference",0,Reference,Referencia,0
-field,"stock.shipment.internal,state",0,State,Estado,0
-field,"stock.shipment.internal,to_location",0,To Location,A ubicación,0
-field,"stock.shipment.in,warehouse",0,Warehouse,Almacén,0
-field,"stock.shipment.out.assign.assign_failed,inventory_moves",0,Inventory Moves,Movimientos de inventario,0
-field,"stock.shipment.out,code",0,Code,Código,0
-field,"stock.shipment.out,customer",0,Customer,Cliente,0
-field,"stock.shipment.out,delivery_address",0,Delivery Address,Dirección de envÃo,0
-field,"stock.shipment.out,effective_date",0,Effective Date,Fecha efectiva,0
-field,"stock.shipment.out,inventory_moves",0,Inventory Moves,Movimientos de inventario,0
-field,"stock.shipment.out,moves",0,Moves,Movimientos,0
-field,"stock.shipment.out,outgoing_moves",0,Outgoing Moves,Movimientos de salida,0
-field,"stock.shipment.out,planned_date",0,Planned Date,Fecha estimada,0
-field,"stock.shipment.out,rec_name",0,Name,Nombre,0
-field,"stock.shipment.out,reference",0,Reference,Referencia,0
-field,"stock.shipment.out.return,code",0,Code,Código,0
-field,"stock.shipment.out.return,customer",0,Customer,Cliente,0
-field,"stock.shipment.out.return,delivery_address",0,Delivery Address,Dirección de envÃo,0
-field,"stock.shipment.out.return,effective_date",0,Effective Date,Fecha efectiva,0
-field,"stock.shipment.out.return,incoming_moves",0,Incoming Moves,Movimientos de entrada,0
-field,"stock.shipment.out.return,inventory_moves",0,Inventory Moves,Movimientos de inventario,0
-field,"stock.shipment.out.return,moves",0,Moves,Movimientos,0
-field,"stock.shipment.out.return,planned_date",0,Planned Date,Fecha estimada,0
-field,"stock.shipment.out.return,rec_name",0,Name,Nombre,0
-field,"stock.shipment.out.return,reference",0,Reference,Referencia,0
-field,"stock.shipment.out.return,state",0,State,Estado,0
-field,"stock.shipment.out.return,warehouse",0,Warehouse,Almacén,0
-field,"stock.shipment.out,state",0,State,Estado,0
-field,"stock.shipment.out,warehouse",0,Warehouse,Almacén,0
-help,"party.party,customer_location",0,The default destination location when sending products to the party.,El lugar de destino predeterminado cuando se envian productos al tercero.,0
-help,"party.party,supplier_location",0,The default source location when receiving products from the party.,La ubicación de origen predeterminado cuando se reciben productos del tercero.,0
-help,"stock.location_stock_date.init,forecast_date",0,"Allow to compute expected stock quantities for this date.
-* An empty value is an infinite date in the future.
-* A date in the past will provide historical values.","Permite calcular las existencias esperadas para esta fecha.
-* Un valor vacÃo es una fecha infinita en el futuro.
-* Una fecha pasada proveerá de datos históricos.",0
-help,"stock.product_stock_date.init,forecast_date",0,"Allow to compute expected stock quantities for this date.
-* An empty value is an infinite date in the future.
-* A date in the past will provide historical values.","Permite calcular las existencias esperadas para esta fecha.
-* Un valor vacÃo es una fecha infinita en el futuro.
-* Una fecha pasada proveerá de datos históricos.",0
-model,"ir.action,name",act_shipment_out_form_assigned,Assigned Customer Shipments,EnvÃos a clientes asignados,0
-model,"ir.action,name",act_shipment_internal_assigned_form,Assigned Internal Shipments,EnvÃos internos asignados,0
-model,"ir.action,name",wizard_shipment_in_return_assign,Assign Purchase Return Shipment,Asignar envio de devolución de compra,0
-model,"ir.action,name",wizard_shipment_internal_assign,Assign Shipment Internal,Asignar envÃo interno,0
-model,"ir.action,name",wizard_shipment_out_assign,Assign Shipment Out,Asignación de salida de envÃo,0
-model,"ir.action,name",wizard_complete_inventory,Complete Inventory,Inventario completo,0
-model,"ir.action,name",create_shipment_out_return,Create Return Shipment,Crear envio de devolución,0
-model,"ir.action,name",act_shipment_out_return_form,Customer Return Shipments,Envios de devoluciones de cliente,0
-model,"ir.action,name",act_shipment_out_form,Customer Shipments,EnvÃos a cliente,0
-model,"ir.action,name",act_shipment_out_form2,Customer Shipments,EnvÃos de cliente,0
-model,"ir.action,name",act_shipment_out_form_ready,Customer Shipments Ready for Shipping,EnvÃos a cliente listos para ser enviados,0
-model,"ir.action,name",act_shipment_out_form_waiting,Customer Shipments Waiting Assignation,EnvÃos a cliente esperando asignación,0
-model,"ir.action,name",report_shipment_out_delivery_note,Delivery Note,Albarán de envÃo,0
-model,"ir.action,name",act_shipment_internal_draft_form,Draft Internal Shipments,EnvÃos internos en borrador,0
-model,"ir.action,name",act_location_form,Edit Locations,Editar ubicaciones,0
-model,"ir.action,name",report_shipment_internal,Internal Shipment,EnvÃo interno,0
-model,"ir.action,name",act_shipment_internal_form,Internal Shipments,EnvÃos internos,0
-model,"ir.action,name",act_shipment_internal_waiting_form,Internal Shipments Waiting Assignation,EnvÃos internos esperando asignación,0
-model,"ir.action,name",act_inventory_form,Inventories,Inventarios,0
-model,"ir.action,name",act_location_tree,Locations,Ubicaciones,0
-model,"ir.action,name",act_move_form,Moves,Movimientos,0
-model,"ir.action,name",act_move_form_supp,Moves from Suppliers,Movimientos de proveedores,0
-model,"ir.action,name",act_move_form_supp_proceed,Moves from Suppliers Waiting Arrival,Movimientos de proveedores en espera de llegada,0
-model,"ir.action,name",act_move_form_cust,Moves to Customers,Movimientos hacia clientes,0
-model,"ir.action,name",act_shipment_out_return_form2,New Customer Return Shipment,Nuevo envio de devolución de cliente,0
-model,"ir.action,name",act_shipment_internal_new_form,New Internal Shipment,Nuevo envÃo interno,0
-model,"ir.action,name",act_shipment_in_return_new_form,New Supplier Return Shipment,Nuevo envio de devolución a proveedor,0
-model,"ir.action,name",act_shipment_in_form2,New Supplier Shipment,Nuevo envÃo de proveedor,0
-model,"ir.action,name",report_shipment_out_picking_list,Picking List,Lista de selección,0
-model,"ir.action,name",wizard_location_open,Product by Location,Producto por ubicación,0
-model,"ir.action,name",wizard_product_open,Product Quantities,Cantidades de producto,0
-model,"ir.action,name",act_product_by_location,Products by Locations,Productos por Ubicaciones,0
-model,"ir.action,name",act_location_quantity_tree,Product Stock,Existencias de producto,0
-model,"ir.action,name",act_shipment_in_form_received,Received Supplier shipments,Paquetes recibidos de proveedores,0
-model,"ir.action,name",report_shipment_in_restocking_list,Restocking List,Lista de renovación de inventario,0
-model,"ir.action,name",report_shipment_out_return_restocking_list,Restocking List,Lista de renovación de inventario,0
-model,"ir.action,name",act_shipment_in_return_form,Supplier Return Shipments,Envios de devolución a proveedor,0
-model,"ir.action,name",act_shipment_in_form,Supplier Shipments,EnvÃos del proveedor,0
-model,"ir.action,name",act_shipment_out_form3,Supplier Shipments,Envios a proveedor,0
-model,"ir.sequence,name",sequence_shipment_out_return,Customer Return Shipment,Envio de devolución de cliente,0
-model,"ir.sequence,name",sequence_shipment_out,Customer Shipment,EnvÃo a cliente,0
-model,"ir.sequence,name",sequence_shipment_internal,Internal Shipment,EnvÃo interno,0
-model,"ir.sequence,name",sequence_shipment_in_return,Supplier Return Shipment,Envio de devolución a proveedor,0
-model,"ir.sequence,name",sequence_shipment_in,Supplier Shipment,EnvÃo de proveedor,0
-model,"ir.sequence.type,name",sequence_type_shipment_out_return,Customer Return Shipment,Envio de devolución de cliente,0
-model,"ir.sequence.type,name",sequence_type_shipment_out,Customer Shipment,EnvÃo a cliente,0
-model,"ir.sequence.type,name",sequence_type_shipment_internal,Internal Shipment,EnvÃo interno,0
-model,"ir.sequence.type,name",sequence_type_shipment_in_return,Supplier Return Shipment,Envio de devolución a proveedor,0
-model,"ir.sequence.type,name",sequence_type_shipment_in,Supplier Shipment,EnvÃo de proveedor,0
-model,"ir.ui.menu,name",menu_shipment_out_assigned,Assigned Customer Shipments,EnvÃos a clientes asignados,0
-model,"ir.ui.menu,name",menu_shipment_internal_assigned_form,Assigned Internal Shipments,EnvÃos internos asignados,0
-model,"ir.ui.menu,name",menu_configuration,Configuration,Configuración,0
-model,"ir.ui.menu,name",menu_shipment_out_return_form,Customer Return Shipments,Envio de devolución de cliente,0
-model,"ir.ui.menu,name",menu_shipment_out_form,Customer Shipments,EnvÃos al cliente,0
-model,"ir.ui.menu,name",menu_shipment_out_ready,Customer Shipments Ready for Shipping,EnvÃos al cliente listos para su envio,0
-model,"ir.ui.menu,name",menu_shipment_out_waiting,Customer Shipments Waiting Assignation,EnvÃos a cliente esperando asignación,0
-model,"ir.ui.menu,name",menu_shipment_internal_draft_form,Draft Internal Shipments,EnvÃos Internos en borrador,0
-model,"ir.ui.menu,name",menu_location_form,Edit Locations,Editar ubicaciones,0
-model,"ir.ui.menu,name",menu_shipment_internal_form,Internal Shipments,EnvÃos internos,0
-model,"ir.ui.menu,name",menu_shipment_internal_waiting_form,Internal Shipments Waiting Assignation,EnvÃo internos esperando asignación,0
-model,"ir.ui.menu,name",menu_inventory_form,Inventories,Inventarios,0
-model,"ir.ui.menu,name",menu_stock,Inventory Management,Gestión de Inventarios,0
-model,"ir.ui.menu,name",menu_location_tree,Locations,Ubicaciones,0
-model,"ir.ui.menu,name",menu_move_form,Moves,Movimientos,0
-model,"ir.ui.menu,name",menu_move_form_supp,Moves from Suppliers,Movimientos de proveedores,0
-model,"ir.ui.menu,name",menu_move_form_supp_proceed,Moves from Suppliers Waiting Arrival,Movimientos de proveedores en espera de llegada,0
-model,"ir.ui.menu,name",menu_move_form_cust,Moves to Customers,Movimientos hacia clientes,0
-model,"ir.ui.menu,name",menu_shipment_out_return_form2,New Customer Return Shipment,Nuevo envio de devolución de cliente,0
-model,"ir.ui.menu,name",menu_shipment_internal_new_form,New Internal Shipment,Nuevo envÃo interno,0
-model,"ir.ui.menu,name",menu_shipment_in_return_new_form,New Supplier Return Shipment,Nuevo envio de devolución a proveedor,0
-model,"ir.ui.menu,name",menu_shipment_in_form2,New Supplier Shipment,Nuevo envÃo de proveedor,0
-model,"ir.ui.menu,name",menu_shipment_in_received,Received Supplier shipments,Paquetes de proveedores recibidos,0
-model,"ir.ui.menu,name",menu_reporting,Reporting,Informes,0
-model,"ir.ui.menu,name",menu_shipment_in_return_form,Supplier Return Shipments,Envios de devolución a proveedor,0
-model,"ir.ui.menu,name",menu_shipment_in_form,Supplier Shipments,EnvÃos del proveedor,0
-model,"res.group,name",group_stock,Stock,Existencias,0
-model,"res.group,name",group_stock_admin,Stock Administration,Administración de existencias,0
-model,"res.group,name",group_stock_force_assignment,Stock Force Assignment,Asignación forzada de existencias,0
-model,"stock.inventory.line,name",0,Stock Inventory Line,LÃnea de existencia en Inventario ,0
-model,"stock.inventory,name",0,Stock Inventory,Inventario de existencia,0
-model,"stock.location,name",location_customer,Customer,Cliente,0
-model,"stock.location,name",location_input,Input Zone,Zona de entrada,0
-model,"stock.location,name",location_lost_found,Lost and Found,Perdido y encontrado,0
-model,"stock.location,name",location_output,Output Zone,Zona de salida,0
-model,"stock.location,name",0,Stock Location,Ubicación de existencia,0
-model,"stock.location,name",location_storage,Storage Zone,Zona de almacenamiento,0
-model,"stock.location,name",location_supplier,Supplier,Proveedor,0
-model,"stock.location,name",location_warehouse,Warehouse,Almacén,0
-model,"stock.location_stock_date.init,name",0,Compute stock quantities,Calcular cantidades de existencias,0
-model,"stock.move,name",0,Stock Move,Movimiento de existencias,0
-model,"stock.product_stock_date.init,name",0,Compute stock quantities,Calcular cantidades de existencias,0
-model,"stock.shipment.in,name",0,Supplier Shipment,EnvÃo de proveedor,0
-model,"stock.shipment.in.return.assign.assign_failed,name",0,Assign Supplier Return Shipment Ask Force,Asignar envio interno de proveedor - Solicitud forzosa,0
-model,"stock.shipment.in.return,name",0,Supplier Return Shipment,Envio de devolución a proveedor,0
-model,"stock.shipment.internal.assign.assign_failed,name",0,Assign Shipment Internal Ask Force,Asignar envio interno - Solicitud forzosa,0
-model,"stock.shipment.internal,name",0,Internal Shipment,EnvÃo interno,0
-model,"stock.shipment.out.assign.assign_failed,name",0,Assign Shipment Out Ask Force,Asignar envio de salida - Solicitud forzosa,0
-model,"stock.shipment.out,name",0,Customer Shipment,EnvÃo a cliente,0
-model,"stock.shipment.out.return,name",0,Customer Return Shipment,Envio de devolución de cliente,0
-model,"workflow.activity,name",shipmentout_act_assigned,Assigned,Asignado,0
-model,"workflow.activity,name",shipmentinternal_act_assigned,Assigned,Asignado,0
-model,"workflow.activity,name",shipment_in_return_act_assigned,Assigned,Asignado,0
-model,"workflow.activity,name",shipmentin_act_cancel,Canceled,Cancelado,0
-model,"workflow.activity,name",shipmentout_act_cancel,Canceled,Cancelado,0
-model,"workflow.activity,name",shipmentinternal_act_cancel,Canceled,Cancelado,0
-model,"workflow.activity,name",shipment_out_return_act_cancel,Canceled,Cancelado,0
-model,"workflow.activity,name",shipment_in_return_act_cancel,Canceled,Cancelado,0
-model,"workflow.activity,name",inventory_act_cancel,Canceled,Cancelado,0
-model,"workflow.activity,name",shipmentin_act_done,Done,Terminado,0
-model,"workflow.activity,name",shipmentout_act_done,Done,Terminado,0
-model,"workflow.activity,name",shipmentinternal_act_done,Done,Terminado,0
-model,"workflow.activity,name",shipment_out_return_act_done,Done,Terminado,0
-model,"workflow.activity,name",shipment_in_return_act_done,Done,Terminado,0
-model,"workflow.activity,name",inventory_act_done,Done,Terminado,0
-model,"workflow.activity,name",shipmentin_act_draft,Draft,Borrador,0
-model,"workflow.activity,name",shipmentout_act_draft,Draft,Borrador,0
-model,"workflow.activity,name",shipmentinternal_act_draft,Draft,Borrador,0
-model,"workflow.activity,name",shipment_out_return_act_draft,Draft,Borrador,0
-model,"workflow.activity,name",shipment_in_return_act_draft,Draft,Borrador,0
-model,"workflow.activity,name",inventory_act_draft,Draft,Borrador,0
-model,"workflow.activity,name",shipmentout_act_packed,Packed,Empaquetado,0
-model,"workflow.activity,name",shipmentin_act_received,Received,Recibido,0
-model,"workflow.activity,name",shipment_out_return_act_received,Received,Recibido,0
-model,"workflow.activity,name",shipmentout_act_waiting,Waiting,En espera,0
-model,"workflow.activity,name",shipmentinternal_act_waiting,Waiting,En espera,0
-model,"workflow.activity,name",shipment_in_return_act_waiting,Waiting,En espera,0
-model,"workflow,name",wkf_shipment_out_return,Customer Return Shipment,Envio de devolución de Cliente,0
-model,"workflow,name",wkf_shipmentout,Customer Shipment,EnvÃo a cliente,0
-model,"workflow,name",wkf_shipmentinternal,Internal Shipment,EnvÃo interno,0
-model,"workflow,name",wkf_inventory,Inventory,Inventario,0
-model,"workflow,name",wkf_shipment_in_return,Supplier Return Shipment,Envio de devolución a proveedor,0
-model,"workflow,name",wkf_shipmentin,Supplier Shipment,EnvÃo de proveedor,0
-odt,stock.shipment.in.restocking_list,0,/,/,0
-odt,stock.shipment.in.restocking_list,0,Code:,Código:,0
-odt,stock.shipment.in.restocking_list,0,E-Mail:,Correo electrónico:,0
-odt,stock.shipment.in.restocking_list,0,From Location,Desde ubicación,0
-odt,stock.shipment.in.restocking_list,0,Phone:,Teléfono:,0
-odt,stock.shipment.in.restocking_list,0,Planned Date:,Fecha planeada:,0
-odt,stock.shipment.in.restocking_list,0,Product,Producto,0
-odt,stock.shipment.in.restocking_list,0,Quantity,Cantidad,0
-odt,stock.shipment.in.restocking_list,0,Reference:,Referencia:,0
-odt,stock.shipment.in.restocking_list,0,Restocking List,Lista de renovación de existencias,0
-odt,stock.shipment.in.restocking_list,0,Supplier:,Proveedor:,0
-odt,stock.shipment.in.restocking_list,0,To Location,A ubicación,0
-odt,stock.shipment.in.restocking_list,0,Warehouse:,Almacén:,0
-odt,stock.shipment.internal.report,0,/,/,0
-odt,stock.shipment.internal.report,0,Code:,Código:,0
-odt,stock.shipment.internal.report,0,E-Mail:,Correo electrónico:,0
-odt,stock.shipment.internal.report,0,From Location,Desde ubicación,0
-odt,stock.shipment.internal.report,0,From Location:,Desde ubicación:,0
-odt,stock.shipment.internal.report,0,Internal Shipment,EnvÃo interno,0
-odt,stock.shipment.internal.report,0,Phone:,Teléfono:,0
-odt,stock.shipment.internal.report,0,Planned Date:,Fecha estimada:,0
-odt,stock.shipment.internal.report,0,Product,Producto,0
-odt,stock.shipment.internal.report,0,Quantity,Cantidad,0
-odt,stock.shipment.internal.report,0,Reference:,Referencia:,0
-odt,stock.shipment.internal.report,0,To Location,A ubicación,0
-odt,stock.shipment.internal.report,0,To Location:,A ubicación:,0
-odt,stock.shipment.out.delivery_note,0,/,/,0
-odt,stock.shipment.out.delivery_note,0,Customer Code:,Código de cliente:,0
-odt,stock.shipment.out.delivery_note,0,Date:,Fecha:,0
-odt,stock.shipment.out.delivery_note,0,Delivery Note,Albarán de envio,0
-odt,stock.shipment.out.delivery_note,0,E-Mail:,Correo electrónico:,0
-odt,stock.shipment.out.delivery_note,0,Phone:,Teléfono:,0
-odt,stock.shipment.out.delivery_note,0,Product,Producto,0
-odt,stock.shipment.out.delivery_note,0,Quantity,Cantidad,0
-odt,stock.shipment.out.delivery_note,0,Reference:,Referencia:,0
-odt,stock.shipment.out.delivery_note,0,Shipment Number:,Número de envÃo:,0
-odt,stock.shipment.out.picking_list,0,/,/,0
-odt,stock.shipment.out.picking_list,0,Code:,Código:,0
-odt,stock.shipment.out.picking_list,0,Customer:,Cliente:,0
-odt,stock.shipment.out.picking_list,0,E-Mail:,Correo electrónico:,0
-odt,stock.shipment.out.picking_list,0,From Location,Desde ubicación,0
-odt,stock.shipment.out.picking_list,0,Phone:,Teléfono:,0
-odt,stock.shipment.out.picking_list,0,Picking List,Lista de selección,0
-odt,stock.shipment.out.picking_list,0,Planned Date:,Fecha estimada:,0
-odt,stock.shipment.out.picking_list,0,Product,Producto,0
-odt,stock.shipment.out.picking_list,0,Quantity,Cantidad,0
-odt,stock.shipment.out.picking_list,0,Reference:,Referencia:,0
-odt,stock.shipment.out.picking_list,0,To Location,A ubicación,0
-odt,stock.shipment.out.picking_list,0,Warehouse:,Almacén:,0
-odt,stock.shipment.out.return.restocking_list,0,/,/,0
-odt,stock.shipment.out.return.restocking_list,0,Code:,Código:,0
-odt,stock.shipment.out.return.restocking_list,0,E-Mail:,Correo electrónico:,0
-odt,stock.shipment.out.return.restocking_list,0,From Location,De ubicación,0
-odt,stock.shipment.out.return.restocking_list,0,Phone:,Teléfono:,0
-odt,stock.shipment.out.return.restocking_list,0,Planned Date:,Fecha estimada:,0
-odt,stock.shipment.out.return.restocking_list,0,Product,Producto,0
-odt,stock.shipment.out.return.restocking_list,0,Quantity,Cantidad,0
-odt,stock.shipment.out.return.restocking_list,0,Reference:,Referencia:,0
-odt,stock.shipment.out.return.restocking_list,0,Restocking List,Lista de renovación de existencias,0
-odt,stock.shipment.out.return.restocking_list,0,Supplier:,Proveedor:,0
-odt,stock.shipment.out.return.restocking_list,0,To Location,A ubicación,0
-odt,stock.shipment.out.return.restocking_list,0,Warehouse:,Almacén:,0
-selection,"stock.inventory,state",0,Canceled,Cancelado,0
-selection,"stock.inventory,state",0,Done,Terminado,0
-selection,"stock.inventory,state",0,Draft,Borrador,0
-selection,"stock.location,type",0,Customer,Cliente,0
-selection,"stock.location,type",0,Lost and Found,Perdido y encontrado,0
-selection,"stock.location,type",0,Production,Producción,0
-selection,"stock.location,type",0,Storage,Almacén,0
-selection,"stock.location,type",0,Supplier,Proveedor,0
-selection,"stock.location,type",0,View,Vista,0
-selection,"stock.location,type",0,Warehouse,Almacén,0
-selection,"stock.move,state",0,Assigned,Asignado,0
-selection,"stock.move,state",0,Canceled,Cancelado,0
-selection,"stock.move,state",0,Done,Terminado,0
-selection,"stock.move,state",0,Draft,Borrador,0
-selection,"stock.shipment.in.return,state",0,Assigned,Asignado,0
-selection,"stock.shipment.in.return,state",0,Canceled,Cancelado,0
-selection,"stock.shipment.in.return,state",0,Done,Terminado,0
-selection,"stock.shipment.in.return,state",0,Draft,Borrador,0
-selection,"stock.shipment.in.return,state",0,Waiting,En espera,0
-selection,"stock.shipment.in,state",0,Canceled,Cancelado,0
-selection,"stock.shipment.in,state",0,Done,Terminado,0
-selection,"stock.shipment.in,state",0,Draft,Borrador,0
-selection,"stock.shipment.in,state",0,Received,Recibido,0
-selection,"stock.shipment.internal,state",0,Assigned,Asignado,0
-selection,"stock.shipment.internal,state",0,Canceled,Cancelado,0
-selection,"stock.shipment.internal,state",0,Done,Terminado,0
-selection,"stock.shipment.internal,state",0,Draft,Borrador,0
-selection,"stock.shipment.internal,state",0,Waiting,En espera,0
-selection,"stock.shipment.out.return,state",0,Canceled,Cancelado,0
-selection,"stock.shipment.out.return,state",0,Done,Terminado,0
-selection,"stock.shipment.out.return,state",0,Draft,Borrador,0
-selection,"stock.shipment.out.return,state",0,Received,Recibido,0
-selection,"stock.shipment.out,state",0,Assigned,Asignado,0
-selection,"stock.shipment.out,state",0,Canceled,Cancelado,0
-selection,"stock.shipment.out,state",0,Done,Terminado,0
-selection,"stock.shipment.out,state",0,Draft,Borrador,0
-selection,"stock.shipment.out,state",0,Packed,Empaquetado,0
-selection,"stock.shipment.out,state",0,Waiting,En espera,0
-view,party.party,0,Stock,Existencias,0
-view,party.party,0,_Stock,_Existencias,0
-view,product.product,0,Products,Productos,0
-view,stock.inventory,0,Add an inventory line for each missing products,Añadir una lÃnea de inventario por cada producto que falta,0
-view,stock.inventory,0,All generated moves will be cancelled!,Se cancelarán todos los movimientos generados,0
-view,stock.inventory,0,Cancel,Cancelar,0
-view,stock.inventory,0,Complete Inventory,Inventario completo,0
-view,stock.inventory,0,Confirm,Confirmar,0
-view,stock.inventory,0,Inventories,Inventarios,0
-view,stock.inventory,0,Inventory,Inventario,0
-view,stock.inventory,0,Re-Open,Reabrir,0
-view,stock.inventory.line,0,Inventory Line,LÃnea de inventario,0
-view,stock.inventory.line,0,Inventory Lines,LÃneas de inventario,0
-view,stock.location,0,Location,Ubicación,0
-view,stock.location,0,Locations,Ubicaciones,0
-view,stock.location,0,Product Stock,Existencias del producto,0
-view,stock.location_stock_date.init,0,Product Quantity.,Cantidad de producto.,0
-view,stock.move,0,Cancel,Cancelar,0
-view,stock.move,0,Move,Movimiento,0
-view,stock.move,0,Moves,Movimientos,0
-view,stock.move,0,Set Done,Marcar como terminado,0
-view,stock.move,0,Set Draft,Marcar como borrador,0
-view,stock.product_stock_date.init,0,Product Quantity.,Cantidad de producto.,0
-view,stock.shipment.in,0,Cancel,Cancelar,0
-view,stock.shipment.in,0,Done,Terminado,0
-view,stock.shipment.in,0,Draft,Borrador,0
-view,stock.shipment.in,0,Incoming Moves,Movimientos de entrada,0
-view,stock.shipment.in,0,Inventory Moves,Movimientos de inventario,0
-view,stock.shipment.in,0,Moves,Movimientos,0
-view,stock.shipment.in,0,Received,Recibido,0
-view,stock.shipment.in,0,Reset to Draft,Restablecer a borrador,0
-view,stock.shipment.in,0,Supplier Shipment,EnvÃo de proveedor,0
-view,stock.shipment.in,0,Supplier Shipments,EnvÃos de proveedor,0
-view,stock.shipment.in.return,0,Assign,Asignar,0
-view,stock.shipment.in.return,0,Cancel,Cancelar,0
-view,stock.shipment.in.return,0,Done,Terminado,0
-view,stock.shipment.in.return,0,Draft,Borrador,0
-view,stock.shipment.in.return,0,Reset to Draft,Restablecer a borrador,0
-view,stock.shipment.in.return,0,Supplier Return Shipment,Envio de devolución a proveedor,0
-view,stock.shipment.in.return,0,Supplier Return Shipments,Envios de devolución a proveedor,0
-view,stock.shipment.in.return,0,Waiting,En espera,0
-view,stock.shipment.in.return.assign.assign_failed,0,Moves,Movimientos,0
-view,stock.shipment.in.return.assign.assign_failed,0,Unable to Assign,No es posible asignar,0
-view,stock.shipment.in.return.assign.assign_failed,0,Unable to assign those products:,No es posible asignar esos productos:,0
-view,stock.shipment.internal,0,Assign,Asignar,0
-view,stock.shipment.internal,0,Cancel,Cancelar,0
-view,stock.shipment.internal,0,Done,Terminado,0
-view,stock.shipment.internal,0,Draft,Borrador,0
-view,stock.shipment.internal,0,Force Assign,Forzar asignación,0
-view,stock.shipment.internal,0,Internal Shipment,EnvÃo interno,0
-view,stock.shipment.internal,0,Internal Shipments,EnvÃos internos,0
-view,stock.shipment.internal,0,Reset to Draft,Restablecer a borrador,0
-view,stock.shipment.internal,0,Set Done,Marcar como terminado,0
-view,stock.shipment.internal,0,Set Waiting,Colocar en espera,0
-view,stock.shipment.internal,0,Waiting,En espera,0
-view,stock.shipment.internal.assign.assign_failed,0,Moves,Movimientos,0
-view,stock.shipment.internal.assign.assign_failed,0,Unable to Assign,No es posible asignar,0
-view,stock.shipment.internal.assign.assign_failed,0,Unable to assign those products:,No es posible asignar esos productos:,0
-view,stock.shipment.out,0,Assign,Asignar,0
-view,stock.shipment.out,0,Cancel,Cancelar,0
-view,stock.shipment.out,0,Customer Shipment,EnvÃo a cliente,0
-view,stock.shipment.out,0,Customer Shipments,EnvÃos a clientes,0
-view,stock.shipment.out,0,Done,Terminado,0
-view,stock.shipment.out,0,Draft,Borrador,0
-view,stock.shipment.out,0,Force Assign,Forzar asignación,0
-view,stock.shipment.out,0,Inventory Moves,Movimientos de inventario,0
-view,stock.shipment.out,0,Make shipment,Hacer empaquetado,0
-view,stock.shipment.out,0,Outgoing Moves,Movimientos de salida,0
-view,stock.shipment.out,0,Reset to Draft,Restablecer a borrador,0
-view,stock.shipment.out,0,Set Done,Marcar como terminado,0
-view,stock.shipment.out,0,Set Waiting,Colocar en espera,0
-view,stock.shipment.out,0,Unpack,Desempaquetar,0
-view,stock.shipment.out,0,Waiting,En espera,0
-view,stock.shipment.out.assign.assign_failed,0,Inventory Moves,Movimientos de inventario,0
-view,stock.shipment.out.assign.assign_failed,0,Unable to Assign,No es posible asignar,0
-view,stock.shipment.out.assign.assign_failed,0,Unable to assign those products:,No es posible asignar esos productos:,0
-view,stock.shipment.out.return,0,Cancel,Cancelar,0
-view,stock.shipment.out.return,0,Customer Return Shipment,Envio de devolución de cliente,0
-view,stock.shipment.out.return,0,Customer Return Shipments,Envios de devolución de cliente,0
-view,stock.shipment.out.return,0,Done,Terminado,0
-view,stock.shipment.out.return,0,Incoming Moves,Movimientos de entrada,0
-view,stock.shipment.out.return,0,Inventory Moves,Movimientos de inventario,0
-view,stock.shipment.out.return,0,Moves,Movimientos,0
-view,stock.shipment.out.return,0,Received,Recibido,0
-view,stock.shipment.out.return,0,Reset to Draft,Restablecer a borrador,0
-wizard_button,"stock.location.open,init,end",0,Cancel,Cancelar,0
-wizard_button,"stock.location.open,init,open",0,Open,Abrir,0
-wizard_button,"stock.product.open,init,end",0,Cancel,Cancelar,0
-wizard_button,"stock.product.open,init,open",0,Open,Abrir,0
-wizard_button,"stock.shipment.in.return.assign,ask_force,end",0,Ok,Aceptar,0
-wizard_button,"stock.shipment.in.return.assign,ask_force,force",0,Force Assign,Forzar asignación,0
-wizard_button,"stock.shipment.in.return.assign,assign_failed,end",0,Ok,Aceptar,0
-wizard_button,"stock.shipment.internal.assign,ask_force,end",0,Ok,Aceptar,0
-wizard_button,"stock.shipment.internal.assign,ask_force,force",0,Force Assign,Forzar asignación,0
-wizard_button,"stock.shipment.internal.assign,assign_failed,end",0,Ok,Aceptar,0
-wizard_button,"stock.shipment.out.assign,ask_force,end",0,Ok,Aceptar,0
-wizard_button,"stock.shipment.out.assign,ask_force,force",0,Force Assign,Forzar asignación,0
-wizard_button,"stock.shipment.out.assign,assign_failed,end",0,Ok,Aceptar,0
\ No newline at end of file
diff --git a/fr_FR.csv b/fr_FR.csv
deleted file mode 100644
index efb6dcf..0000000
--- a/fr_FR.csv
+++ /dev/null
@@ -1,526 +0,0 @@
-type,name,res_id,src,value,fuzzy
-error,product.template,0,You cannot change the default uom for a product which is associated to stock moves.,Vous ne pouvez pas changer l'UDM par défaut pour un produit qui a déjà fait l'objet de mouvements de stock,0
-error,stock.inventory.line,0,Line quantity must be positive!,Les quantités sur les lignes doivent être positives!,0
-error,stock.inventory.line,0,Product must be unique by inventory!,Chaque produit ne peut apparaître qu'une seule fois par inventaire,0
-error,stock.location,0,A location with existing moves cannot be changed to a type that does not support moves.,Un emplacement avec des mouvements ne peut pas être changé en un type qui ne supporte pas les mouvements.,0
-error,stock.location,0,"Location ""%s"" must be a child of warehouse ""%s""!","L'emplacement ""%s"" doit être un sous-emplacement de l'entrepôt ""%s"" !",0
-error,stock.location,0,You can not create recursive locations!,Vous ne pouvez pas créer des emplacements récursifs !,0
-error,stock.move,0,Internal move quantity must be positive,La quantité interne doit être positive,0
-error,stock.move,0,Move can be on only one Shipment,Un mouvement ne peut être que sur une seule expédition,0
-error,stock.move,0,Move quantity must be positive,La quantité sur le mouvement doit être positive.,0
-error,stock.move,0,Source and destination location must be different,Les emplacements d'origine et de destination doivent être distincts,0
-error,stock.move,0,"You can not modify a move in the state: ""Assigned"", ""Done"" or ""Cancel""","Vous ne pouvez modifier un mouvement dans un des états : ""Assigné"", ""Terminé"" ou ""Annulé""",0
-error,stock.move,0,You can not modify move in closed period!,Vous ne pouvez modifier un mouvement d'une période fermée !,0
-error,stock.move,0,You can not set state to assigned!,Vous ne pouvez pas mettre l'état à assigné !,0
-error,stock.move,0,You can not set state to done!,Vous ne pouvez pas mettre l'état à fait !,0
-error,stock.move,0,You can not set state to draft!,Vous ne pouvez pas mettre l'état à brouillon !,0
-error,stock.move,0,You can not use service products for a move!,Vous ne pouvez pas utiliser un produit de type service sur un mouvement !,0
-error,stock.move,0,You can only delete draft or cancelled moves!,Vous pouvez supprimer que des mouvements qui sont annulés ou a l'état de brouillon !,0
-error,stock.period,0,You can not close a period in the future or today!,Vous ne pouvez fermer une période qui se termine aujourd'hui ou dans le futur !,0
-error,stock.period,0,You can not close a period when there is still assigned moves!,Vous ne pouvez fermer une période alors que des mouvements sont toujours assignés !,0
-error,stock.shipment.in,0,Incoming Moves must have the warehouse input location as destination location!,Les mouvements d'entrée doivent avoir l'emplacement d'entrée de l'entrepôt comme destination !,0
-error,stock.shipment.in,0,Inventory Moves must have the warehouse input location as source location!,Les mouvements d'inventaire doivent avoir l'emplacement d'entrée de l'entrepôt comme source !,0
-error,stock.shipment.out,0,Inventory Moves must have the warehouse output location as destination location!,Les mouvements d'inventaires doivent avoir une sortie d'entrepôt comme location de destination.,0
-error,stock.shipment.out,0,Outgoing Moves must have the warehouse output location as source location!,Les mouvements de sortie doivent avoir une sortie d'entrepôt comme location source !,0
-error,stock.shipment.out.return,0,Incoming Moves must have the warehouse input location as destination location!,Les mouvements d'entrée doivent avoir l'emplacement d'entrée de l'entrepôt comme destination !,0
-error,stock.shipment.out.return,0,Inventory Moves must have the warehouse input location as source location!,Les mouvements d'inventaire doivent avoir l'emplacement d'entrée de l'entrepôt comme source !,0
-error,stock.shipment.out.return.create,0,The shipment with code %s is not yet sent.,L'emballage avec le code %s n'est pas encore envoyé.,0
-error,stock.shipment.out.return.create,0,You can not create return shipment,Vous ne pouvez pas créer d'expédition retour,0
-field,"party.address,delivery",0,Delivery,Livraison,0
-field,"party.party,customer_location",0,Customer Location,Emplacement client,0
-field,"party.party,supplier_location",0,Supplier Location,Emplacement fournisseur,0
-field,"product.product,forecast_quantity",0,Forecast Quantity,Quantités prévisionnelles,0
-field,"product.product,quantity",0,Quantity,Quantité,0
-field,"product.template,forecast_quantity",0,Forecast Quantity,Quantité prévue,0
-field,"product.template,quantity",0,Quantity,Quantité,0
-field,"stock.configuration,rec_name",0,Name,Nom,0
-field,"stock.configuration,shipment_in_return_sequence",0,Supplier Return Shipment Sequence,Séquence des retours expédition fournisseur,0
-field,"stock.configuration,shipment_in_sequence",0,Supplier Shipment Sequence,Séquence des expédition fournisseur,0
-field,"stock.configuration,shipment_internal_sequence",0,Internal Shipment Sequence,Séquence des expédition interne,0
-field,"stock.configuration,shipment_out_return_sequence",0,Customer Return Shipment Sequence,Séquence des retours d'expédition client,0
-field,"stock.configuration,shipment_out_sequence",0,Customer Shipment Sequence,Séquence des expéditions client,0
-field,"stock.inventory,company",0,Company,Société,0
-field,"stock.inventory,date",0,Date,Date,0
-field,"stock.inventory,lines",0,Lines,Lignes,0
-field,"stock.inventory,location",0,Location,Emplacement,0
-field,"stock.inventory,lost_found",0,Lost and Found,Pertes et surplus,0
-field,"stock.inventory,rec_name",0,Name,Nom,0
-field,"stock.inventory,state",0,State,Ãtat,0
-field,"stock.inventory.line,expected_quantity",0,Expected Quantity,Quantité attendue,0
-field,"stock.inventory.line,inventory",0,Inventory,Inventaire,0
-field,"stock.inventory.line,move",0,Move,Mouvement,0
-field,"stock.inventory.line,product",0,Product,Produit,0
-field,"stock.inventory.line,quantity",0,Quantity,Quantité,0
-field,"stock.inventory.line,rec_name",0,Name,Nom,0
-field,"stock.inventory.line,unit_digits",0,Unit Digits,Décimales de l'unité,0
-field,"stock.inventory.line,uom",0,UOM,UDM,0
-field,"stock.location,active",0,Active,Actif,0
-field,"stock.location,address",0,Address,Adresse,0
-field,"stock.location,childs",0,Children,Enfants,0
-field,"stock.location,code",0,Code,Code,0
-field,"stock.location,forecast_quantity",0,Forecast Quantity,Quantité prévisionnelle,0
-field,"stock.location,input_location",0,Input,Réception,0
-field,"stock.location,left",0,Left,Gauche,0
-field,"stock.location,name",0,Name,Nom,0
-field,"stock.location,output_location",0,Output,Expédition,0
-field,"stock.location,parent",0,Parent,Parent,0
-field,"stock.location,quantity",0,Quantity,Quantité,0
-field,"stock.location,rec_name",0,Name,Nom,0
-field,"stock.location,right",0,Right,Droit,0
-field,"stock.location,storage_location",0,Storage,Magasin,0
-field,"stock.location,type",0,Location type,Type d'emplacement,0
-field,"stock.location_stock_date.init,forecast_date",0,At Date,Ã la date,0
-field,"stock.move,company",0,Company,Société,0
-field,"stock.move,cost_price",0,Cost Price,Prix de revient,0
-field,"stock.move,currency",0,Currency,Devise,0
-field,"stock.move,effective_date",0,Effective Date,Date effective,0
-field,"stock.move,from_location",0,From Location,Emplacement d'origine,0
-field,"stock.move,internal_quantity",0,Internal Quantity,Quantité interne,0
-field,"stock.move,planned_date",0,Planned Date,Date planifiée,0
-field,"stock.move,product",0,Product,Produit,0
-field,"stock.move,quantity",0,Quantity,Quantité,0
-field,"stock.move,rec_name",0,Name,Nom,0
-field,"stock.move,shipment_in",0,Supplier Shipment,Expédition fournisseur,0
-field,"stock.move,shipment_in_return",0,Supplier Return Shipment,Retour expédition fournisseur,0
-field,"stock.move,shipment_internal",0,Internal Shipment,Expédition interne,0
-field,"stock.move,shipment_out",0,Customer Shipment,Expédition client,0
-field,"stock.move,shipment_out_return",0,Customer Return Shipment,Retour d'expédition client,0
-field,"stock.move,state",0,State,Etat,0
-field,"stock.move,to_location",0,To Location,Emplacement de destination,0
-field,"stock.move,unit_digits",0,Unit Digits,Décimales de l'unité,0
-field,"stock.move,unit_price",0,Unit Price,Prix unitaire,0
-field,"stock.move,unit_price_required",0,Unit Price Required,Prix unitaire requis,0
-field,"stock.move,uom",0,Uom,UDM,0
-field,"stock.period,caches",0,Caches,,0
-field,"stock.period,company",0,Company,Société,1
-field,"stock.period,date",0,Date,date,1
-field,"stock.period,rec_name",0,Name,Nom de la pièce jointe,1
-field,"stock.period,state",0,State,Ãtat,1
-field,"stock.period.cache,internal_quantity",0,Internal Quantity,Quantité interne,0
-field,"stock.period.cache,location",0,Location,Emplacement,1
-field,"stock.period.cache,period",0,Period,Période,1
-field,"stock.period.cache,product",0,Product,Produit,1
-field,"stock.period.cache,rec_name",0,Name,Nom de la pièce jointe,1
-field,"stock.product_stock_date.init,forecast_date",0,At Date,Ã la date,0
-field,"stock.shipment.in,code",0,Code,Code,0
-field,"stock.shipment.in,contact_address",0,Contact Address,Adresse de contact,0
-field,"stock.shipment.in,effective_date",0,Effective Date,Date effective,0
-field,"stock.shipment.in,incoming_moves",0,Incoming Moves,Mouvements entrants,0
-field,"stock.shipment.in,inventory_moves",0,Inventory Moves,Mouvement internes,0
-field,"stock.shipment.in,moves",0,Moves,Mouvements,0
-field,"stock.shipment.in,planned_date",0,Planned Date,Date planifiée,0
-field,"stock.shipment.in,rec_name",0,Name,Nom,0
-field,"stock.shipment.in,reference",0,Reference,Référence,0
-field,"stock.shipment.in,state",0,State,Ãtat,0
-field,"stock.shipment.in,supplier",0,Supplier,Fournisseur,0
-field,"stock.shipment.in,warehouse",0,Warehouse,Entrepôt,0
-field,"stock.shipment.in.return,code",0,Code,Code,0
-field,"stock.shipment.in.return,effective_date",0,Effective Date,Date effective,0
-field,"stock.shipment.in.return,from_location",0,From Location,Emplacement d'origine,0
-field,"stock.shipment.in.return,moves",0,Moves,Mouvements,0
-field,"stock.shipment.in.return,planned_date",0,Planned Date,Date planifiée,0
-field,"stock.shipment.in.return,rec_name",0,Name,Nom,0
-field,"stock.shipment.in.return,reference",0,Reference,Référence,0
-field,"stock.shipment.in.return,state",0,State,Ãtat,0
-field,"stock.shipment.in.return,to_location",0,To Location,Emplacement de destination,0
-field,"stock.shipment.in.return.assign.assign_failed,moves",0,Moves,Mouvements,0
-field,"stock.shipment.internal,code",0,Code,Code,0
-field,"stock.shipment.internal,effective_date",0,Effective Date,Date effective,0
-field,"stock.shipment.internal,from_location",0,From Location,Emplacement d'origine,0
-field,"stock.shipment.internal,moves",0,Moves,Mouvements,0
-field,"stock.shipment.internal,planned_date",0,Planned Date,Date planifiée,0
-field,"stock.shipment.internal,rec_name",0,Name,Nom,0
-field,"stock.shipment.internal,reference",0,Reference,Référence,0
-field,"stock.shipment.internal,state",0,State,Ãtat,0
-field,"stock.shipment.internal,to_location",0,To Location,Emplacement de destination,0
-field,"stock.shipment.internal.assign.assign_failed,moves",0,Moves,Mouvements,0
-field,"stock.shipment.out,code",0,Code,Code,0
-field,"stock.shipment.out,customer",0,Customer,Client,0
-field,"stock.shipment.out,delivery_address",0,Delivery Address,Adresse de livraison,0
-field,"stock.shipment.out,effective_date",0,Effective Date,Date effective,0
-field,"stock.shipment.out,inventory_moves",0,Inventory Moves,Mouvements internes,0
-field,"stock.shipment.out,moves",0,Moves,Mouvements,0
-field,"stock.shipment.out,outgoing_moves",0,Outgoing Moves,Mouvements de sortie,0
-field,"stock.shipment.out,planned_date",0,Planned Date,Date planifiée,0
-field,"stock.shipment.out,rec_name",0,Name,Nom,0
-field,"stock.shipment.out,reference",0,Reference,Référence,0
-field,"stock.shipment.out,state",0,State,Ãtat,0
-field,"stock.shipment.out,warehouse",0,Warehouse,Entrepôt,0
-field,"stock.shipment.out.assign.assign_failed,inventory_moves",0,Inventory Moves,Mouvements internes,0
-field,"stock.shipment.out.return,code",0,Code,Code,0
-field,"stock.shipment.out.return,customer",0,Customer,Client,0
-field,"stock.shipment.out.return,delivery_address",0,Delivery Address,Adresse de livraison,0
-field,"stock.shipment.out.return,effective_date",0,Effective Date,Date effective,0
-field,"stock.shipment.out.return,incoming_moves",0,Incoming Moves,Mouvements entrants,0
-field,"stock.shipment.out.return,inventory_moves",0,Inventory Moves,Mouvements internes,0
-field,"stock.shipment.out.return,moves",0,Moves,Mouvements,0
-field,"stock.shipment.out.return,planned_date",0,Planned Date,Date planifiée,0
-field,"stock.shipment.out.return,rec_name",0,Name,Nom,0
-field,"stock.shipment.out.return,reference",0,Reference,Référence,0
-field,"stock.shipment.out.return,state",0,State,Ãtat,0
-field,"stock.shipment.out.return,warehouse",0,Warehouse,Entrepôt,0
-help,"party.party,customer_location",0,The default destination location when sending products to the party.,L'emplacement de destination par défaut quand des produits sont envoyés vers ce tiers.,0
-help,"party.party,supplier_location",0,The default source location when receiving products from the party.,L'emplacement d'origine par défaut quand des produits sont reçus depuis ce tiers.,0
-help,"stock.location_stock_date.init,forecast_date",0,"Allow to compute expected stock quantities for this date.
-* An empty value is an infinite date in the future.
-* A date in the past will provide historical values.","Permet de calculer les quantités en stock attendues pour cette date.
-* Une valeur vide correspond à une date infinie dans le futur.
-* Une date dans le passé retournera des données historiques.",0
-help,"stock.product_stock_date.init,forecast_date",0,"Allow to compute expected stock quantities for this date.
-* An empty value is an infinite date in the future.
-* A date in the past will provide historical values.","Permet de calculer les quantités en stock attendues pour cette date.
-* Une valeur vide correspond à une date infinie dans le futur.
-* Une date dans le passé retournera des données historiques.",0
-model,"ir.action,name",act_inventory_form,Inventories,Inventaires,0
-model,"ir.action,name",act_inventory_form2,Inventories,Inventaires,0
-model,"ir.action,name",act_inventory_form_draft,Draft Inventories,Inventaires brouillons,0
-model,"ir.action,name",act_location_form,Locations,Ãditer les emplacements,0
-model,"ir.action,name",act_location_quantity_tree,Product Stock,Quantités en stock,0
-model,"ir.action,name",act_location_tree,Locations,Emplacements,0
-model,"ir.action,name",act_move_form,Moves,Mouvements,0
-model,"ir.action,name",act_move_form_cust,Moves to Customers,Mouvements clients,0
-model,"ir.action,name",act_move_form_supp,Moves from Suppliers,Mouvements fournisseurs,0
-model,"ir.action,name",act_move_form_supp_proceed,Moves from Suppliers Waiting Arrival,Mouvement fournisseur en attente de réception,0
-model,"ir.action,name",act_period_list,Periods,Périodes,1
-model,"ir.action,name",act_product_by_location,Products by Locations,Produits par emplacements,0
-model,"ir.action,name",act_shipment_in_form,Supplier Shipments,Expéditions fournisseur,0
-model,"ir.action,name",act_shipment_in_form2,New Supplier Shipment,Nouvelle expédition fournisseur,0
-model,"ir.action,name",act_shipment_in_form_received,Received Supplier shipments,Expéditions fournisseur reçues,0
-model,"ir.action,name",act_shipment_in_return_form,Supplier Return Shipments,Retour d'expéditions fournisseur,0
-model,"ir.action,name",act_shipment_in_return_new_form,New Supplier Return Shipment,Nouveau retour d'expédition fournisseur,0
-model,"ir.action,name",act_shipment_internal_assigned_form,Assigned Internal Shipments,Expédition internes assignées,0
-model,"ir.action,name",act_shipment_internal_draft_form,Draft Internal Shipments,Expéditions internes brouillon,0
-model,"ir.action,name",act_shipment_internal_form,Internal Shipments,Expédition interne,0
-model,"ir.action,name",act_shipment_internal_new_form,New Internal Shipment,Nouvelle expédition Interne,0
-model,"ir.action,name",act_shipment_internal_waiting_form,Internal Shipments Waiting Assignation,Expéditions internes en attente d'assignation,0
-model,"ir.action,name",act_shipment_out_form,Customer Shipments,Expéditions client,0
-model,"ir.action,name",act_shipment_out_form2,Customer Shipments,Expéditions client,0
-model,"ir.action,name",act_shipment_out_form3,Supplier Shipments,Expéditions fournisseur,0
-model,"ir.action,name",act_shipment_out_form_assigned,Assigned Customer Shipments,Expéditions client assignées,0
-model,"ir.action,name",act_shipment_out_form_ready,Customer Shipments Ready for Shipping,Expéditions client prêtes à livrer,0
-model,"ir.action,name",act_shipment_out_form_waiting,Customer Shipments Waiting Assignation,Expéditions client en attente d'assignation,0
-model,"ir.action,name",act_shipment_out_return_form,Customer Return Shipments,Retour d'expéditions client,0
-model,"ir.action,name",act_shipment_out_return_form2,New Customer Return Shipment,Nouveau retour d'expédition client,0
-model,"ir.action,name",act_stock_configuration_form,Stock Configuration,Configuration des stocks,0
-model,"ir.action,name",create_shipment_out_return,Create Return Shipment,Créer l'expédition de retour,0
-model,"ir.action,name",report_shipment_in_restocking_list,Restocking List,Liste de restockage,0
-model,"ir.action,name",report_shipment_internal,Internal Shipment,Expédition interne,0
-model,"ir.action,name",report_shipment_out_delivery_note,Delivery Note,Bon de livraison,0
-model,"ir.action,name",report_shipment_out_picking_list,Picking List,Liste de prélèvement,0
-model,"ir.action,name",report_shipment_out_return_restocking_list,Restocking List,Liste de restockage,0
-model,"ir.action,name",wizard_complete_inventory,Complete Inventory,Compléter l'inventaire,0
-model,"ir.action,name",wizard_location_open,Product by Location,Produits par emplacement,0
-model,"ir.action,name",wizard_product_open,Product Quantities,Quantités de produit,0
-model,"ir.action,name",wizard_shipment_in_return_assign,Assign Purchase Return Shipment,Assigner le retour d'expédition fournisseur,0
-model,"ir.action,name",wizard_shipment_internal_assign,Assign Shipment Internal,Assigner l'expédition interne,0
-model,"ir.action,name",wizard_shipment_out_assign,Assign Shipment Out,Assigner l'expédition de sortie,0
-model,"ir.sequence,name",sequence_shipment_in,Supplier Shipment,Expédition fournisseur,0
-model,"ir.sequence,name",sequence_shipment_in_return,Supplier Return Shipment,Retour d'expédition fournisseur,0
-model,"ir.sequence,name",sequence_shipment_internal,Internal Shipment,Expédition Interne,0
-model,"ir.sequence,name",sequence_shipment_out,Customer Shipment,Expédition client,0
-model,"ir.sequence,name",sequence_shipment_out_return,Customer Return Shipment,Retour d'expédition client,0
-model,"ir.sequence.type,name",sequence_type_shipment_in,Supplier Shipment,Expédition fournisseur,0
-model,"ir.sequence.type,name",sequence_type_shipment_in_return,Supplier Return Shipment,Retour d'expédition fournisseur,0
-model,"ir.sequence.type,name",sequence_type_shipment_internal,Internal Shipment,Expédition interne,0
-model,"ir.sequence.type,name",sequence_type_shipment_out,Customer Shipment,Expédition client,0
-model,"ir.sequence.type,name",sequence_type_shipment_out_return,Customer Return Shipment,Retour d'expédition client,0
-model,"ir.ui.menu,name",menu_configuration,Configuration,Configuration,0
-model,"ir.ui.menu,name",menu_inventory_form,Inventories,Inventaires,0
-model,"ir.ui.menu,name",menu_inventory_form_draft,Draft Inventories,Inventaires brouillons,0
-model,"ir.ui.menu,name",menu_inventory_form_new,New Inventory,Nouvel inventaire,0
-model,"ir.ui.menu,name",menu_location_form,Locations,Ãditer les emplacements,0
-model,"ir.ui.menu,name",menu_location_tree,Locations,Emplacements,0
-model,"ir.ui.menu,name",menu_move_form,Moves,Mouvements,0
-model,"ir.ui.menu,name",menu_move_form_cust,Moves to Customers,Mouvements clients,0
-model,"ir.ui.menu,name",menu_move_form_supp,Moves from Suppliers,Mouvements fournisseurs,0
-model,"ir.ui.menu,name",menu_move_form_supp_proceed,Moves from Suppliers Waiting Arrival,Mouvements fournisseur en attente de réception,0
-model,"ir.ui.menu,name",menu_period_list,Periods,Périodes,1
-model,"ir.ui.menu,name",menu_reporting,Reporting,Rapports,0
-model,"ir.ui.menu,name",menu_shipment_in_form,Supplier Shipments,Expéditions fournisseur,0
-model,"ir.ui.menu,name",menu_shipment_in_form2,New Supplier Shipment,Nouvelle expédition fournisseur,0
-model,"ir.ui.menu,name",menu_shipment_in_received,Received Supplier shipments,Expéditions fournisseur reçues,0
-model,"ir.ui.menu,name",menu_shipment_in_return_form,Supplier Return Shipments,Retour d'expédition fournisseur,0
-model,"ir.ui.menu,name",menu_shipment_in_return_new_form,New Supplier Return Shipment,Nouveau retour d'expédition fournisseur,0
-model,"ir.ui.menu,name",menu_shipment_internal_assigned_form,Assigned Internal Shipments,Expéditions internes assignées,0
-model,"ir.ui.menu,name",menu_shipment_internal_draft_form,Draft Internal Shipments,Expéditions internes brouillons,0
-model,"ir.ui.menu,name",menu_shipment_internal_form,Internal Shipments,Expéditions internes,0
-model,"ir.ui.menu,name",menu_shipment_internal_new_form,New Internal Shipment,Nouvelle expédition Interne,0
-model,"ir.ui.menu,name",menu_shipment_internal_waiting_form,Internal Shipments Waiting Assignation,Expéditions internes en attente d'assignation,0
-model,"ir.ui.menu,name",menu_shipment_out_assigned,Assigned Customer Shipments,Expéditions client assignées,0
-model,"ir.ui.menu,name",menu_shipment_out_form,Customer Shipments,Expéditions client,0
-model,"ir.ui.menu,name",menu_shipment_out_ready,Customer Shipments Ready for Shipping,Expéditions client prêtes pour la livraison,0
-model,"ir.ui.menu,name",menu_shipment_out_return_form,Customer Return Shipments,Retour d'expédition client,0
-model,"ir.ui.menu,name",menu_shipment_out_return_form2,New Customer Return Shipment,Nouveau retour d'expédition client,0
-model,"ir.ui.menu,name",menu_shipment_out_waiting,Customer Shipments Waiting Assignation,Expéditions client en attente d'assignation,0
-model,"ir.ui.menu,name",menu_stock,Inventory Management,Gestion des stocks,0
-model,"ir.ui.menu,name",menu_stock_configuration,Stock Configuration,Configuration des stocks,0
-model,"res.group,name",group_stock,Stock,Stock,0
-model,"res.group,name",group_stock_admin,Stock Administration,Administration des stocks,0
-model,"res.group,name",group_stock_force_assignment,Stock Force Assignment,Stock forcer assignation,0
-model,"stock.configuration,name",0,Stock Configuration,Configuration des stocks,0
-model,"stock.inventory,name",0,Stock Inventory,Inventaire du stock,0
-model,"stock.inventory.line,name",0,Stock Inventory Line,Ligne d'inventaire de stock,0
-model,"stock.location,name",0,Stock Location,Lieu de Stockage,0
-model,"stock.location,name",location_customer,Customer,Client,1
-model,"stock.location,name",location_input,Input Zone,Zone d'entrée,0
-model,"stock.location,name",location_lost_found,Lost and Found,Pertes et surplus,1
-model,"stock.location,name",location_output,Output Zone,Zone de sortie,0
-model,"stock.location,name",location_storage,Storage Zone,Zone de stockage,0
-model,"stock.location,name",location_supplier,Supplier,Fournisseur,1
-model,"stock.location,name",location_warehouse,Warehouse,Entrepôt,1
-model,"stock.location_stock_date.init,name",0,Compute stock quantities,Quantité de stock calculées,0
-model,"stock.move,name",0,Stock Move,Mouvement de stock,0
-model,"stock.period,name",0,Stock Period,Période de stock,0
-model,"stock.period.cache,name",0,"
- Stock Period Cache
-
- It is used to store cached computation of stock quantities.
- ",,0
-model,"stock.product_stock_date.init,name",0,Compute stock quantities,Quantités de stock calculées,0
-model,"stock.shipment.in,name",0,Supplier Shipment,Expédition fournisseur,0
-model,"stock.shipment.in.return,name",0,Supplier Return Shipment,Retour d'expédition fournisseur,0
-model,"stock.shipment.in.return.assign.assign_failed,name",0,Assign Supplier Return Shipment Assign Failed,Assigner le retour d'expédition fournisseur - Demande forcée,0
-model,"stock.shipment.internal,name",0,Internal Shipment,Expédition interne,0
-model,"stock.shipment.internal.assign.assign_failed,name",0,Assign Shipment Internal Assign Failed,Assigner l'expédition interne - Demande forcée,0
-model,"stock.shipment.out,name",0,Customer Shipment,Expédition Client,0
-model,"stock.shipment.out.assign.assign_failed,name",0,Assign Shipment Out Assign Failed,Assigner l'expédition de sortie - Demande forcée,0
-model,"stock.shipment.out.return,name",0,Customer Return Shipment,Retour d'expédition client,0
-model,"workflow,name",wkf_inventory,Inventory,Inventaire,0
-model,"workflow,name",wkf_shipment_in_return,Supplier Return Shipment,Retour d'expédition fournisseur,0
-model,"workflow,name",wkf_shipment_out_return,Customer Return Shipment,Retour d'expédition client,0
-model,"workflow,name",wkf_shipmentin,Supplier Shipment,Expédition fournisseur,0
-model,"workflow,name",wkf_shipmentinternal,Internal Shipment,Expédition interne,0
-model,"workflow,name",wkf_shipmentout,Customer Shipment,Expédition client,0
-model,"workflow.activity,name",inventory_act_cancel,Canceled,Annulé,0
-model,"workflow.activity,name",inventory_act_done,Done,Fait,0
-model,"workflow.activity,name",inventory_act_draft,Draft,Brouillon,0
-model,"workflow.activity,name",shipment_in_return_act_assigned,Assigned,Assigné,0
-model,"workflow.activity,name",shipment_in_return_act_cancel,Canceled,Annuler,0
-model,"workflow.activity,name",shipment_in_return_act_done,Done,Fait,0
-model,"workflow.activity,name",shipment_in_return_act_draft,Draft,Brouillon,0
-model,"workflow.activity,name",shipment_in_return_act_waiting,Waiting,En attente,0
-model,"workflow.activity,name",shipment_out_return_act_cancel,Canceled,Annuler,0
-model,"workflow.activity,name",shipment_out_return_act_done,Done,Fait,0
-model,"workflow.activity,name",shipment_out_return_act_draft,Draft,Brouillon,0
-model,"workflow.activity,name",shipment_out_return_act_received,Received,Reçu,0
-model,"workflow.activity,name",shipmentin_act_cancel,Canceled,Annulé,0
-model,"workflow.activity,name",shipmentin_act_done,Done,Fait,0
-model,"workflow.activity,name",shipmentin_act_draft,Draft,Brouillon,0
-model,"workflow.activity,name",shipmentin_act_received,Received,Reçu,0
-model,"workflow.activity,name",shipmentinternal_act_assigned,Assigned,Assigné,0
-model,"workflow.activity,name",shipmentinternal_act_cancel,Canceled,Annulé,0
-model,"workflow.activity,name",shipmentinternal_act_done,Done,Fait,0
-model,"workflow.activity,name",shipmentinternal_act_draft,Draft,Brouillon,0
-model,"workflow.activity,name",shipmentinternal_act_waiting,Waiting,En attente,0
-model,"workflow.activity,name",shipmentout_act_assigned,Assigned,Assigné,0
-model,"workflow.activity,name",shipmentout_act_cancel,Canceled,Annulé,0
-model,"workflow.activity,name",shipmentout_act_done,Done,Fait,0
-model,"workflow.activity,name",shipmentout_act_draft,Draft,Brouillon,0
-model,"workflow.activity,name",shipmentout_act_packed,Packed,Emballé,0
-model,"workflow.activity,name",shipmentout_act_waiting,Waiting,En attente,0
-odt,stock.shipment.in.restocking_list,0,/,/,0
-odt,stock.shipment.in.restocking_list,0,Code:,Code :,0
-odt,stock.shipment.in.restocking_list,0,E-Mail:,E-Mail :,0
-odt,stock.shipment.in.restocking_list,0,From Location,Emplacement d'origine,0
-odt,stock.shipment.in.restocking_list,0,Phone:,Téléphone :,0
-odt,stock.shipment.in.restocking_list,0,Planned Date:,Date planifiée :,0
-odt,stock.shipment.in.restocking_list,0,Product,Produit,0
-odt,stock.shipment.in.restocking_list,0,Quantity,Quantité,0
-odt,stock.shipment.in.restocking_list,0,Reference:,Référence :,0
-odt,stock.shipment.in.restocking_list,0,Restocking List,Liste de restockage,0
-odt,stock.shipment.in.restocking_list,0,Supplier:,Fournisseur :,0
-odt,stock.shipment.in.restocking_list,0,To Location,Emplacement de destination,0
-odt,stock.shipment.in.restocking_list,0,VAT Number:,Numéro TVA :,0
-odt,stock.shipment.in.restocking_list,0,Warehouse:,Entrepôt :,0
-odt,stock.shipment.internal.report,0,/,/,0
-odt,stock.shipment.internal.report,0,Code:,Code :,0
-odt,stock.shipment.internal.report,0,E-Mail:,E-Mail :,0
-odt,stock.shipment.internal.report,0,From Location,Emplacement d'origine,0
-odt,stock.shipment.internal.report,0,From Location:,Emplacement d'origine :,0
-odt,stock.shipment.internal.report,0,Internal Shipment,Expédition interne,0
-odt,stock.shipment.internal.report,0,Phone:,Téléphone :,0
-odt,stock.shipment.internal.report,0,Planned Date:,Date planifiée :,0
-odt,stock.shipment.internal.report,0,Product,Produit,0
-odt,stock.shipment.internal.report,0,Quantity,Quantité,0
-odt,stock.shipment.internal.report,0,Reference:,Référence :,0
-odt,stock.shipment.internal.report,0,To Location,Emplacement de destination,0
-odt,stock.shipment.internal.report,0,To Location:,Emplacement de destination :,0
-odt,stock.shipment.internal.report,0,VAT Number:,Numéro TVA :,0
-odt,stock.shipment.out.delivery_note,0,/,/,0
-odt,stock.shipment.out.delivery_note,0,Customer Code:,Code client :,0
-odt,stock.shipment.out.delivery_note,0,Date:,Date :,0
-odt,stock.shipment.out.delivery_note,0,Delivery Note,Bon de livraison,0
-odt,stock.shipment.out.delivery_note,0,E-Mail:,E-Mail :,0
-odt,stock.shipment.out.delivery_note,0,Phone:,Téléphone :,0
-odt,stock.shipment.out.delivery_note,0,Product,Produit,0
-odt,stock.shipment.out.delivery_note,0,Quantity,Quantité,0
-odt,stock.shipment.out.delivery_note,0,Reference:,Référence :,0
-odt,stock.shipment.out.delivery_note,0,Shipment Number:,Numéro d'expédition :,0
-odt,stock.shipment.out.delivery_note,0,VAT Number:,Numéro TVA :,0
-odt,stock.shipment.out.picking_list,0,/,/,0
-odt,stock.shipment.out.picking_list,0,Code:,Code :,0
-odt,stock.shipment.out.picking_list,0,Customer:,Client :,0
-odt,stock.shipment.out.picking_list,0,E-Mail:,E-Mail:,0
-odt,stock.shipment.out.picking_list,0,From Location,Emplacement d'origine,0
-odt,stock.shipment.out.picking_list,0,Phone:,Téléphone :,0
-odt,stock.shipment.out.picking_list,0,Picking List,Liste de prélèvement,0
-odt,stock.shipment.out.picking_list,0,Planned Date:,Date planifiée :,0
-odt,stock.shipment.out.picking_list,0,Product,Produit,0
-odt,stock.shipment.out.picking_list,0,Quantity,Quantité,0
-odt,stock.shipment.out.picking_list,0,Reference:,Référence :,0
-odt,stock.shipment.out.picking_list,0,To Location,Emplacement de destination,0
-odt,stock.shipment.out.picking_list,0,VAT Number:,Numéro TVA :,0
-odt,stock.shipment.out.picking_list,0,Warehouse:,Entrepôt :,0
-odt,stock.shipment.out.return.restocking_list,0,/,/,0
-odt,stock.shipment.out.return.restocking_list,0,Code:,Code :,0
-odt,stock.shipment.out.return.restocking_list,0,E-Mail:,E-Mail :,0
-odt,stock.shipment.out.return.restocking_list,0,From Location,Emplacement d'origine,0
-odt,stock.shipment.out.return.restocking_list,0,Phone:,Téléphone :,0
-odt,stock.shipment.out.return.restocking_list,0,Planned Date:,Date planifiée :,0
-odt,stock.shipment.out.return.restocking_list,0,Product,Produit,0
-odt,stock.shipment.out.return.restocking_list,0,Quantity,Quantité,0
-odt,stock.shipment.out.return.restocking_list,0,Reference:,Référence :,0
-odt,stock.shipment.out.return.restocking_list,0,Restocking List,Liste de restockage,0
-odt,stock.shipment.out.return.restocking_list,0,Supplier:,Fournisseur :,0
-odt,stock.shipment.out.return.restocking_list,0,To Location,Emplacement de destination,0
-odt,stock.shipment.out.return.restocking_list,0,VAT Number:,Numéro TVA :,0
-odt,stock.shipment.out.return.restocking_list,0,Warehouse:,Entrepôt :,0
-selection,"stock.inventory,state",0,Canceled,Annulé,0
-selection,"stock.inventory,state",0,Done,Fait,0
-selection,"stock.inventory,state",0,Draft,Brouillon,0
-selection,"stock.location,type",0,Customer,Client,0
-selection,"stock.location,type",0,Lost and Found,Pertes et surplus,0
-selection,"stock.location,type",0,Production,Production,0
-selection,"stock.location,type",0,Storage,Magasin,0
-selection,"stock.location,type",0,Supplier,Fournisseur,0
-selection,"stock.location,type",0,View,Vue,0
-selection,"stock.location,type",0,Warehouse,Entrepôt,0
-selection,"stock.move,state",0,Assigned,Assigné,0
-selection,"stock.move,state",0,Canceled,Annulé,0
-selection,"stock.move,state",0,Done,Fait,0
-selection,"stock.move,state",0,Draft,Brouillon,0
-selection,"stock.period,state",0,Closed,Fermé,1
-selection,"stock.period,state",0,Draft,Brouillon,1
-selection,"stock.shipment.in,state",0,Canceled,Annulé,0
-selection,"stock.shipment.in,state",0,Done,Fait,0
-selection,"stock.shipment.in,state",0,Draft,Brouillon,0
-selection,"stock.shipment.in,state",0,Received,Reçu,0
-selection,"stock.shipment.in.return,state",0,Assigned,Assigné,0
-selection,"stock.shipment.in.return,state",0,Canceled,Annuler,0
-selection,"stock.shipment.in.return,state",0,Done,Fait,0
-selection,"stock.shipment.in.return,state",0,Draft,Brouillon,0
-selection,"stock.shipment.in.return,state",0,Waiting,En attente,0
-selection,"stock.shipment.internal,state",0,Assigned,Assigné,0
-selection,"stock.shipment.internal,state",0,Canceled,Annulé,0
-selection,"stock.shipment.internal,state",0,Done,Fait,0
-selection,"stock.shipment.internal,state",0,Draft,Brouillon,0
-selection,"stock.shipment.internal,state",0,Waiting,En attente,0
-selection,"stock.shipment.out,state",0,Assigned,Assigné,0
-selection,"stock.shipment.out,state",0,Canceled,Annulé,0
-selection,"stock.shipment.out,state",0,Done,Fait,0
-selection,"stock.shipment.out,state",0,Draft,Brouillon,0
-selection,"stock.shipment.out,state",0,Packed,Emballé,0
-selection,"stock.shipment.out,state",0,Waiting,En attente,0
-selection,"stock.shipment.out.return,state",0,Canceled,Annulé,0
-selection,"stock.shipment.out.return,state",0,Done,Fait,0
-selection,"stock.shipment.out.return,state",0,Draft,Brouillon,0
-selection,"stock.shipment.out.return,state",0,Received,Reçu,0
-view,party.party,0,Stock,Stock,0
-view,party.party,0,_Stock,_Stocks,0
-view,product.product,0,Products,Produits,0
-view,stock.configuration,0,Stock Configuration,Configuration des stocks,0
-view,stock.inventory,0,Add an inventory line for each missing products,Ajouter une ligne d'inventaire pour chaque produit manquant,0
-view,stock.inventory,0,All generated moves will be cancelled!,Tous les mouvements générés vont être annulés,0
-view,stock.inventory,0,Cancel,Annuler,0
-view,stock.inventory,0,Complete Inventory,Compléter l'inventaire,0
-view,stock.inventory,0,Confirm,Confirmer,0
-view,stock.inventory,0,Inventories,Inventaires,0
-view,stock.inventory,0,Inventory,Inventaire,0
-view,stock.inventory,0,Re-Open,Ré-Ouvrir,0
-view,stock.inventory.line,0,Inventory Line,Ligne d'inventaire,0
-view,stock.inventory.line,0,Inventory Lines,Lignes d'inventaire,0
-view,stock.location,0,Location,Emplacement,0
-view,stock.location,0,Locations,Emplacements,0
-view,stock.location,0,Product Stock,Quantités en stock,0
-view,stock.location_stock_date.init,0,Product Quantity.,Quantité de produit,0
-view,stock.move,0,Move,Mouvement,0
-view,stock.move,0,Moves,Mouvements,0
-view,stock.period,0,Close,Fermer,1
-view,stock.period,0,Draft,Brouillon,1
-view,stock.period,0,Period,Période,1
-view,stock.period,0,Periods,Périodes,1
-view,stock.period.cache,0,Period Cache,Cache de la période,0
-view,stock.period.cache,0,Period Caches,Caches des périodes,0
-view,stock.product_stock_date.init,0,Product Quantity.,Quantité Produit :,0
-view,stock.shipment.in,0,Cancel,Annuler,0
-view,stock.shipment.in,0,Done,Fait,0
-view,stock.shipment.in,0,Draft,Brouillon,0
-view,stock.shipment.in,0,Incoming Moves,Mouvements en entrée,0
-view,stock.shipment.in,0,Inventory Moves,Mouvements internes,0
-view,stock.shipment.in,0,Moves,Mouvements,0
-view,stock.shipment.in,0,Received,Réception,0
-view,stock.shipment.in,0,Reset to Draft,Remettre en brouillon,0
-view,stock.shipment.in,0,Supplier Shipment,Expédition fournisseur,0
-view,stock.shipment.in,0,Supplier Shipments,Expéditions fournisseur,0
-view,stock.shipment.in.return,0,Assign,Assigner,0
-view,stock.shipment.in.return,0,Cancel,Annuler,0
-view,stock.shipment.in.return,0,Done,Fait,0
-view,stock.shipment.in.return,0,Draft,Brouillon,0
-view,stock.shipment.in.return,0,Reset to Draft,Remettre en brouillon,0
-view,stock.shipment.in.return,0,Supplier Return Shipment,Retour d'expédition fournisseur,0
-view,stock.shipment.in.return,0,Supplier Return Shipments,Retours d'expédition fournisseur,0
-view,stock.shipment.in.return,0,Waiting,En attente,0
-view,stock.shipment.in.return.assign.assign_failed,0,Moves,Mouvements,0
-view,stock.shipment.in.return.assign.assign_failed,0,Unable to Assign,Impossible d'assigner,0
-view,stock.shipment.in.return.assign.assign_failed,0,Unable to assign those products:,Impossible d'assigner ces produits :,0
-view,stock.shipment.internal,0,Assign,Assigner,0
-view,stock.shipment.internal,0,Cancel,Annuler,0
-view,stock.shipment.internal,0,Done,Fait,0
-view,stock.shipment.internal,0,Draft,Brouillon,0
-view,stock.shipment.internal,0,Force Assign,Forcer l'assignation,0
-view,stock.shipment.internal,0,Internal Shipment,Expédition interne,0
-view,stock.shipment.internal,0,Internal Shipments,Expéditions internes,0
-view,stock.shipment.internal,0,Reset to Draft,Remettre en brouillon,0
-view,stock.shipment.internal,0,Waiting,En attente,0
-view,stock.shipment.internal.assign.assign_failed,0,Moves,Mouvements,0
-view,stock.shipment.internal.assign.assign_failed,0,Unable to Assign,Impossible d'assigner,0
-view,stock.shipment.internal.assign.assign_failed,0,Unable to assign those products:,Impossible d'assigner ces produits :,0
-view,stock.shipment.out,0,Are you sure to force assignation?,Ãtes-vous sûr de forcer l'assignation ?,0
-view,stock.shipment.out,0,Assign,Assigner,0
-view,stock.shipment.out,0,Cancel,Annuler,0
-view,stock.shipment.out,0,Customer Shipment,Expédition client,0
-view,stock.shipment.out,0,Customer Shipments,Expéditions client,0
-view,stock.shipment.out,0,Done,Fait,0
-view,stock.shipment.out,0,Draft,Brouillon,0
-view,stock.shipment.out,0,Force Assign,Forcer l'assignation,0
-view,stock.shipment.out,0,Inventory Moves,Mouvements internes,0
-view,stock.shipment.out,0,Make shipment,Faire l'expédition,0
-view,stock.shipment.out,0,Outgoing Moves,Mouvements en sortie,0
-view,stock.shipment.out,0,Reset to Draft,Remettre en brouillon,0
-view,stock.shipment.out,0,Unpack,Déballer,0
-view,stock.shipment.out,0,Waiting,En attente,0
-view,stock.shipment.out.assign.assign_failed,0,Inventory Moves,Mouvements internes,0
-view,stock.shipment.out.assign.assign_failed,0,Unable to Assign,Impossible d'assigner,0
-view,stock.shipment.out.assign.assign_failed,0,Unable to assign those products:,Impossible d'assigner ces produits :,0
-view,stock.shipment.out.return,0,Cancel,Annuler,0
-view,stock.shipment.out.return,0,Customer Return Shipment,Retour d'expédition client,0
-view,stock.shipment.out.return,0,Customer Return Shipments,Retours d'expédition client,0
-view,stock.shipment.out.return,0,Done,Fait,0
-view,stock.shipment.out.return,0,Incoming Moves,Mouvements entrants,0
-view,stock.shipment.out.return,0,Inventory Moves,Mouvements internes,0
-view,stock.shipment.out.return,0,Moves,Mouvements,0
-view,stock.shipment.out.return,0,Received,Reçu,0
-view,stock.shipment.out.return,0,Reset to Draft,Remettre en brouillon,0
-wizard_button,"stock.location.open,init,end",0,Cancel,Annuler,0
-wizard_button,"stock.location.open,init,open",0,Open,Ouvrir,0
-wizard_button,"stock.product.open,init,end",0,Cancel,Annuler,0
-wizard_button,"stock.product.open,init,open",0,Open,Ouvrir,0
-wizard_button,"stock.shipment.in.return.assign,ask_force,end",0,Ok,Ok,0
-wizard_button,"stock.shipment.in.return.assign,ask_force,force",0,Force Assign,Forcer l'assignation,0
-wizard_button,"stock.shipment.in.return.assign,assign_failed,end",0,Ok,Ok,0
-wizard_button,"stock.shipment.internal.assign,ask_force,end",0,Ok,Ok,0
-wizard_button,"stock.shipment.internal.assign,ask_force,force",0,Force Assign,Forcer l'assignation,0
-wizard_button,"stock.shipment.internal.assign,assign_failed,end",0,Ok,Ok,0
-wizard_button,"stock.shipment.out.assign,ask_force,end",0,Ok,Ok,0
-wizard_button,"stock.shipment.out.assign,ask_force,force",0,Force Assign,Forcer l'assignation,0
-wizard_button,"stock.shipment.out.assign,assign_failed,end",0,Ok,Ok,0
diff --git a/icons/__init__.py b/icons/__init__.py
deleted file mode 100644
index e69de29..0000000
diff --git a/icons/tryton-inventory.svg b/icons/tryton-inventory.svg
new file mode 100644
index 0000000..47beed7
--- /dev/null
+++ b/icons/tryton-inventory.svg
@@ -0,0 +1,485 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ sodipodi:docname="package-x-generic.svg"
+ sodipodi:docbase="/home/jimmac/src/cvs/tango-icon-theme/scalable/mimetypes"
+ inkscape:version="0.46"
+ sodipodi:version="0.32"
+ id="svg2963"
+ height="48px"
+ width="48px"
+ inkscape:output_extension="org.inkscape.output.svg.inkscape">
+ <defs
+ id="defs3">
+ <inkscape:perspective
+ sodipodi:type="inkscape:persp3d"
+ inkscape:vp_x="0 : 24 : 1"
+ inkscape:vp_y="0 : 1000 : 0"
+ inkscape:vp_z="48 : 24 : 1"
+ inkscape:persp3d-origin="24 : 16 : 1"
+ id="perspective77" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient5060"
+ id="radialGradient6719"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(-2.774389,0,0,1.969706,112.7623,-872.8854)"
+ cx="605.71429"
+ cy="486.64789"
+ fx="605.71429"
+ fy="486.64789"
+ r="117.14286" />
+ <linearGradient
+ inkscape:collect="always"
+ id="linearGradient5060">
+ <stop
+ style="stop-color:black;stop-opacity:1;"
+ offset="0"
+ id="stop5062" />
+ <stop
+ style="stop-color:black;stop-opacity:0;"
+ offset="1"
+ id="stop5064" />
+ </linearGradient>
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient5060"
+ id="radialGradient6717"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(2.774389,0,0,1.969706,-1891.633,-872.8854)"
+ cx="605.71429"
+ cy="486.64789"
+ fx="605.71429"
+ fy="486.64789"
+ r="117.14286" />
+ <linearGradient
+ id="linearGradient5048">
+ <stop
+ style="stop-color:black;stop-opacity:0;"
+ offset="0"
+ id="stop5050" />
+ <stop
+ id="stop5056"
+ offset="0.5"
+ style="stop-color:black;stop-opacity:1;" />
+ <stop
+ style="stop-color:black;stop-opacity:0;"
+ offset="1"
+ id="stop5052" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient5048"
+ id="linearGradient6715"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(2.774389,0,0,1.969706,-1892.179,-872.8854)"
+ x1="302.85715"
+ y1="366.64789"
+ x2="302.85715"
+ y2="609.50507" />
+ <linearGradient
+ inkscape:collect="always"
+ id="linearGradient2884">
+ <stop
+ style="stop-color:#000000;stop-opacity:1;"
+ offset="0"
+ id="stop2886" />
+ <stop
+ style="stop-color:#000000;stop-opacity:0;"
+ offset="1"
+ id="stop2888" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient2869">
+ <stop
+ style="stop-color:#ffffff;stop-opacity:1;"
+ offset="0"
+ id="stop2871" />
+ <stop
+ style="stop-color:#cccccc;stop-opacity:1.0000000;"
+ offset="1.0000000"
+ id="stop2873" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient4995">
+ <stop
+ id="stop4997"
+ offset="0"
+ style="stop-color:#de9523;stop-opacity:1;" />
+ <stop
+ id="stop4999"
+ offset="1.0000000"
+ style="stop-color:#a36d18;stop-opacity:1.0000000;" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient4987"
+ inkscape:collect="always">
+ <stop
+ id="stop4989"
+ offset="0"
+ style="stop-color:#a0670c;stop-opacity:1;" />
+ <stop
+ id="stop4991"
+ offset="1"
+ style="stop-color:#a0670c;stop-opacity:0;" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient4979">
+ <stop
+ id="stop4981"
+ offset="0.0000000"
+ style="stop-color:#fbf0e0;stop-opacity:1.0000000;" />
+ <stop
+ id="stop4983"
+ offset="1.0000000"
+ style="stop-color:#f0ce99;stop-opacity:1.0000000;" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient4946"
+ inkscape:collect="always">
+ <stop
+ id="stop4948"
+ offset="0"
+ style="stop-color:#000000;stop-opacity:1;" />
+ <stop
+ id="stop4950"
+ offset="1"
+ style="stop-color:#000000;stop-opacity:0;" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient4222">
+ <stop
+ id="stop4224"
+ offset="0"
+ style="stop-color:#ffffff;stop-opacity:1;" />
+ <stop
+ id="stop4226"
+ offset="1.0000000"
+ style="stop-color:#ffffff;stop-opacity:0.68639052;" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient4210">
+ <stop
+ id="stop4212"
+ offset="0.0000000"
+ style="stop-color:#eaba6f;stop-opacity:1.0000000;" />
+ <stop
+ id="stop4214"
+ offset="1.0000000"
+ style="stop-color:#b97a1b;stop-opacity:1.0000000;" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient4192">
+ <stop
+ id="stop4194"
+ offset="0"
+ style="stop-color:#e9b96e;stop-opacity:1;" />
+ <stop
+ id="stop4196"
+ offset="1.0000000"
+ style="stop-color:#f1d19e;stop-opacity:1.0000000;" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient4182">
+ <stop
+ id="stop4184"
+ offset="0.0000000"
+ style="stop-color:#a36d18;stop-opacity:1.0000000;" />
+ <stop
+ id="stop4186"
+ offset="1.0000000"
+ style="stop-color:#d79020;stop-opacity:1.0000000;" />
+ </linearGradient>
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4946"
+ id="radialGradient2252"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.000000,0.000000,0.000000,0.333333,2.658463e-16,23.58206)"
+ cx="22.930462"
+ cy="35.373093"
+ fx="22.930462"
+ fy="35.373093"
+ r="17.576654" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4979"
+ id="linearGradient2269"
+ gradientUnits="userSpaceOnUse"
+ x1="30.062469"
+ y1="13.444801"
+ x2="17.696169"
+ y2="12.333632" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4995"
+ id="linearGradient2274"
+ gradientUnits="userSpaceOnUse"
+ x1="36.288929"
+ y1="14.661557"
+ x2="47.065835"
+ y2="15.267649" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4192"
+ id="linearGradient2277"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.000000,0.000000,0.000000,0.986355,0.000000,0.316638)"
+ x1="25.381256"
+ y1="24.720648"
+ x2="24.119167"
+ y2="16.170370" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4182"
+ id="linearGradient2280"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.000000,0.000000,0.000000,1.039184,0.000000,-4.057054e-2)"
+ x1="16.148972"
+ y1="12.636667"
+ x2="34.193642"
+ y2="12.636667" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4987"
+ id="linearGradient2282"
+ gradientUnits="userSpaceOnUse"
+ x1="21.906841"
+ y1="9.7577486"
+ x2="22.071806"
+ y2="16.020695" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4222"
+ id="linearGradient2285"
+ gradientUnits="userSpaceOnUse"
+ x1="18.706615"
+ y1="19.912336"
+ x2="30.014812"
+ y2="47.388485" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4210"
+ id="linearGradient2288"
+ gradientUnits="userSpaceOnUse"
+ x1="24.990499"
+ y1="34.004856"
+ x2="24.990499"
+ y2="22.585211" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient2884"
+ id="radialGradient2896"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.353283,5.468101e-16,-1.144754e-13,0.635968,-8.458890,3.413470)"
+ cx="23.943670"
+ cy="20.800287"
+ fx="23.943670"
+ fy="20.800287"
+ r="6.4286140" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient2869"
+ id="radialGradient2898"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.749420,0.000000,0.000000,0.394055,6.226925,10.09253)"
+ cx="21.578989"
+ cy="9.0255041"
+ fx="21.578989"
+ fy="9.0255041"
+ r="9.5862970" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient2884"
+ id="radialGradient2906"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.353283,5.468101e-16,-1.144754e-13,0.635968,-8.458890,3.413470)"
+ cx="23.943670"
+ cy="20.800287"
+ fx="23.943670"
+ fy="20.800287"
+ r="6.4286140" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient2869"
+ id="radialGradient2908"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.749420,0.000000,0.000000,0.394055,6.226925,10.09253)"
+ cx="21.578989"
+ cy="9.8105707"
+ fx="21.578989"
+ fy="9.8105707"
+ r="9.5862970" />
+ </defs>
+ <sodipodi:namedview
+ inkscape:window-y="142"
+ inkscape:window-x="392"
+ inkscape:window-height="706"
+ inkscape:window-width="872"
+ stroke="#c17d11"
+ fill="#e9b96e"
+ inkscape:showpageshadow="false"
+ inkscape:document-units="px"
+ inkscape:grid-bbox="true"
+ showgrid="false"
+ inkscape:current-layer="layer1"
+ inkscape:cy="39.004018"
+ inkscape:cx="74.637005"
+ inkscape:zoom="1"
+ inkscape:pageshadow="2"
+ inkscape:pageopacity="0.0"
+ borderopacity="0.16470588"
+ bordercolor="#666666"
+ pagecolor="#ffffff"
+ id="base" />
+ <metadata
+ id="metadata4">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title>Package</dc:title>
+ <dc:creator>
+ <cc:Agent>
+ <dc:title>Jakub Steiner</dc:title>
+ </cc:Agent>
+ </dc:creator>
+ <dc:source>http://jimmac.musichall.cz/</dc:source>
+ <dc:subject>
+ <rdf:Bag>
+ <rdf:li>package</rdf:li>
+ <rdf:li>archive</rdf:li>
+ <rdf:li>tarball</rdf:li>
+ <rdf:li>tar</rdf:li>
+ <rdf:li>bzip</rdf:li>
+ <rdf:li>gzip</rdf:li>
+ <rdf:li>zip</rdf:li>
+ <rdf:li>arj</rdf:li>
+ <rdf:li>tar</rdf:li>
+ <rdf:li>jar</rdf:li>
+ </rdf:Bag>
+ </dc:subject>
+ <cc:license
+ rdf:resource="http://creativecommons.org/licenses/publicdomain/" />
+ </cc:Work>
+ <cc:License
+ rdf:about="http://creativecommons.org/licenses/publicdomain/">
+ <cc:permits
+ rdf:resource="http://creativecommons.org/ns#Reproduction" />
+ <cc:permits
+ rdf:resource="http://creativecommons.org/ns#Distribution" />
+ <cc:permits
+ rdf:resource="http://creativecommons.org/ns#DerivativeWorks" />
+ </cc:License>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:groupmode="layer"
+ inkscape:label="Layer 1"
+ id="layer1">
+ <g
+ style="display:inline"
+ transform="matrix(2.105461e-2,0,0,2.086758e-2,42.60172,35.4036)"
+ id="g6707">
+ <rect
+ style="opacity:0.40206185;color:black;fill:url(#linearGradient6715);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+ id="rect6709"
+ width="1339.6335"
+ height="478.35718"
+ x="-1559.2523"
+ y="-150.69685" />
+ <path
+ style="opacity:0.40206185;color:black;fill:url(#radialGradient6717);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+ d="M -219.61876,-150.68038 C -219.61876,-150.68038 -219.61876,327.65041 -219.61876,327.65041 C -76.744594,328.55086 125.78146,220.48075 125.78138,88.454235 C 125.78138,-43.572302 -33.655436,-150.68036 -219.61876,-150.68038 z "
+ id="path6711"
+ sodipodi:nodetypes="cccc" />
+ <path
+ sodipodi:nodetypes="cccc"
+ id="path6713"
+ d="M -1559.2523,-150.68038 C -1559.2523,-150.68038 -1559.2523,327.65041 -1559.2523,327.65041 C -1702.1265,328.55086 -1904.6525,220.48075 -1904.6525,88.454235 C -1904.6525,-43.572302 -1745.2157,-150.68036 -1559.2523,-150.68038 z "
+ style="opacity:0.40206185;color:black;fill:url(#radialGradient6719);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" />
+ </g>
+ <rect
+ ry="2.3944440"
+ rx="2.4241352"
+ y="15.275433"
+ x="7.4623847"
+ height="23.112879"
+ width="31.978371"
+ id="rect3115"
+ style="opacity:1.0000000;color:#000000;fill:url(#linearGradient2288);fill-opacity:1.0000000;fill-rule:nonzero;stroke:#a0670c;stroke-width:1.0000007;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4.0000000;stroke-dasharray:none;stroke-dashoffset:0.0000000;stroke-opacity:1.0000000;visibility:visible;display:block;overflow:visible" />
+ <rect
+ style="opacity:0.48101267;color:#000000;fill:none;fill-opacity:1.0000000;fill-rule:nonzero;stroke:url(#linearGradient2285);stroke-width:1.0000011;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4.0000000;stroke-dasharray:none;stroke-dashoffset:0.0000000;stroke-opacity:1.0000000;visibility:visible;display:block;overflow:visible"
+ id="rect4220"
+ width="29.804138"
+ height="21.075352"
+ x="8.4989996"
+ y="16.243698"
+ rx="1.2846882"
+ ry="1.2846882" />
+ <path
+ sodipodi:nodetypes="ccccc"
+ id="path4162"
+ d="M 8.7697819,16.547178 L 13.819731,9.7363408 L 32.615291,9.6353255 L 37.835264,16.408941 L 8.7697819,16.547178 z "
+ style="fill:url(#linearGradient2280);fill-opacity:1.0000000;fill-rule:evenodd;stroke:url(#linearGradient2282);stroke-width:1.0000008;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4.0000000;stroke-dasharray:none;stroke-opacity:1.0000000" />
+ <path
+ sodipodi:nodetypes="ccccc"
+ id="path4164"
+ d="M 38.276321,16.325703 L 43.469269,23.520364 L 3.9609455,23.520364 L 8.6250143,16.320763 L 38.276321,16.325703 z "
+ style="opacity:1.0000000;color:#000000;fill:url(#linearGradient2277);fill-opacity:1.0000000;fill-rule:nonzero;stroke:#a0670c;stroke-width:1.0000005;stroke-linecap:round;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4.0000000;stroke-dasharray:none;stroke-dashoffset:0.0000000;stroke-opacity:1.0000000;visibility:visible;display:block;overflow:visible" />
+ <path
+ sodipodi:nodetypes="ccccc"
+ id="path4178"
+ d="M 32.849333,9.6141009 L 37.532219,16.536370 L 46.565835,20.921197 L 38.451329,12.008545 L 32.849333,9.6141009 z "
+ style="opacity:1.0000000;color:#000000;fill:url(#linearGradient2274);fill-opacity:1.0000000;fill-rule:nonzero;stroke:#a0670c;stroke-width:1.0000005;stroke-linecap:round;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4.0000000;stroke-dasharray:none;stroke-dashoffset:0.0000000;stroke-opacity:1.0000000;visibility:visible;display:block;overflow:visible" />
+ <path
+ sodipodi:nodetypes="ccccc"
+ style="opacity:1.0000000;color:#000000;fill:#f8e8cf;fill-opacity:1.0000000;fill-rule:nonzero;stroke:#a0670c;stroke-width:1.0000000;stroke-linecap:round;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4.0000000;stroke-dasharray:none;stroke-dashoffset:0.0000000;stroke-opacity:1.0000000;visibility:visible;display:block;overflow:visible"
+ d="M 13.617702,9.7151161 L 9.6419233,16.435355 L 0.50729183,20.820182 L 8.6217973,11.907530 L 13.617702,9.7151161 z "
+ id="path4180" />
+ <path
+ style="opacity:1.0000000;color:#000000;fill:none;fill-opacity:1.0000000;fill-rule:nonzero;stroke:#f4e3ca;stroke-width:1.0000000;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4.0000000;stroke-dasharray:none;stroke-dashoffset:0.0000000;stroke-opacity:1.0000000;visibility:visible;display:block;overflow:visible"
+ d="M 37.024959,16.436050 L 41.478871,22.493011 L 5.6482792,22.493011 L 9.7892982,16.312694 L 37.024959,16.436050 z "
+ id="path4954"
+ sodipodi:nodetypes="ccccc" />
+ <g
+ id="g2892"
+ transform="matrix(0.676538,0.000000,0.000000,1.000000,3.994869,0.000000)">
+ <path
+ style="opacity:1.0000000;color:#000000;fill:url(#radialGradient2896);fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:2.0000000;stroke-linecap:round;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4.0000000;stroke-dasharray:none;stroke-dashoffset:0.0000000;stroke-opacity:1.0000000;visibility:visible;display:inline;overflow:visible"
+ d="M 23.926073,12.101621 C 18.588065,12.101621 14.282569,14.129809 14.282569,16.641813 L 33.604773,16.641813 C 33.604773,14.129809 29.264081,12.101621 23.926073,12.101621 z "
+ id="path2882" />
+ <path
+ id="path2141"
+ d="M 23.931961,12.861168 C 20.379986,12.861168 17.515057,14.210748 17.515057,15.882266 L 30.372285,15.882266 C 30.372285,14.210748 27.483936,12.861168 23.931961,12.861168 z "
+ style="opacity:1.0000000;color:#000000;fill:url(#radialGradient2898);fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:2.0000000;stroke-linecap:round;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4.0000000;stroke-dasharray:none;stroke-dashoffset:0.0000000;stroke-opacity:1.0000000;visibility:visible;display:inline;overflow:visible" />
+ </g>
+ <g
+ transform="matrix(0.676538,0.000000,0.000000,1.000000,10.49487,0.000000)"
+ id="g2900">
+ <path
+ id="path2902"
+ d="M 23.926073,12.101621 C 18.588065,12.101621 14.282569,14.129809 14.282569,16.641813 L 33.604773,16.641813 C 33.604773,14.129809 29.264081,12.101621 23.926073,12.101621 z "
+ style="opacity:1.0000000;color:#000000;fill:url(#radialGradient2906);fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:2.0000000;stroke-linecap:round;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4.0000000;stroke-dasharray:none;stroke-dashoffset:0.0000000;stroke-opacity:1.0000000;visibility:visible;display:inline;overflow:visible" />
+ <path
+ style="opacity:1.0000000;color:#000000;fill:url(#radialGradient2908);fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:2.0000000;stroke-linecap:round;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4.0000000;stroke-dasharray:none;stroke-dashoffset:0.0000000;stroke-opacity:1.0000000;visibility:visible;display:inline;overflow:visible"
+ d="M 23.931961,12.861168 C 20.379986,12.861168 17.515057,14.210748 17.515057,15.882266 L 30.372285,15.882266 C 30.372285,14.210748 27.483936,12.861168 23.931961,12.861168 z "
+ id="path2904" />
+ </g>
+ <path
+ style="opacity:0.87974685;fill:none;fill-opacity:1.0000000;fill-rule:evenodd;stroke:url(#linearGradient2269);stroke-width:1.0000000;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4.0000000;stroke-dasharray:none;stroke-opacity:1.0000000"
+ d="M 9.6523127,16.371803 L 13.036643,10.593020 L 33.514841,10.517799 L 37.356782,16.369880 L 9.6523127,16.371803 z "
+ id="path4966"
+ sodipodi:nodetypes="ccccc" />
+ </g>
+</svg>
diff --git a/inventory.py b/inventory.py
index 518290d..80d02bf 100644
--- a/inventory.py
+++ b/inventory.py
@@ -1,15 +1,16 @@
#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 __future__ import with_statement
from trytond.model import ModelWorkflow, ModelView, ModelSQL, fields
from trytond.wizard import Wizard
from trytond.pyson import Not, Equal, Eval, Or, Bool
from trytond.backend import TableHandler
from trytond.transaction import Transaction
+from trytond.pool import Pool
STATES = {
'readonly': Not(Equal(Eval('state'), 'draft')),
}
+DEPENDS = ['state']
class Inventory(ModelWorkflow, ModelSQL, ModelView):
@@ -23,21 +24,25 @@ class Inventory(ModelWorkflow, ModelSQL, ModelView):
domain=[('type', '=', 'storage')], states={
'readonly': Or(Not(Equal(Eval('state'), 'draft')),
Bool(Eval('lines'))),
- })
+ },
+ depends=['state', 'lines'])
date = fields.Date('Date', required=True, states={
'readonly': Or(Not(Equal(Eval('state'), 'draft')),
Bool(Eval('lines'))),
- })
+ },
+ depends=['state', 'lines'])
lost_found = fields.Many2One(
'stock.location', 'Lost and Found', required=True,
- domain=[('type', '=', 'lost_found')], states=STATES)
+ domain=[('type', '=', 'lost_found')], states=STATES, depends=DEPENDS)
lines = fields.One2Many(
- 'stock.inventory.line', 'inventory', 'Lines', states=STATES)
+ 'stock.inventory.line', 'inventory', 'Lines', states=STATES,
+ depends=DEPENDS)
company = fields.Many2One('company.company', 'Company', required=True,
states={
'readonly': Or(Not(Equal(Eval('state'), 'draft')),
Bool(Eval('lines'))),
- })
+ },
+ depends=['state', 'lines'])
state = fields.Selection([
('draft', 'Draft'),
('done', 'Done'),
@@ -60,46 +65,44 @@ class Inventory(ModelWorkflow, ModelSQL, ModelView):
return 'draft'
def default_date(self):
- date_obj = self.pool.get('ir.date')
+ date_obj = Pool().get('ir.date')
return date_obj.today()
def default_company(self):
return Transaction().context.get('company') or False
def default_lost_found(self):
- location_obj = self.pool.get('stock.location')
+ location_obj = Pool().get('stock.location')
location_ids = location_obj.search(self.lost_found.domain)
if len(location_ids) == 1:
return location_ids[0]
return False
- def set_state_draft(self, inventory_id):
- self.write(inventory_id, {
+ def wkf_draft(self, inventory):
+ self.write(inventory.id, {
'state': 'draft',
})
- def set_state_cancel(self, inventory_id):
- line_obj = self.pool.get("stock.inventory.line")
- inventory = self.browse(inventory_id)
+ def wkf_cancel(self, inventory):
+ line_obj = Pool().get("stock.inventory.line")
line_obj.cancel_move(inventory.lines)
- self.write(inventory_id, {
+ self.write(inventory.id, {
'state': 'cancel',
})
- def set_state_done(self, inventory_id):
- date_obj = self.pool.get('ir.date')
- line_obj = self.pool.get('stock.inventory.line')
- inventory = self.browse(inventory_id)
+ def wkf_done(self, inventory):
+ date_obj = Pool().get('ir.date')
+ line_obj = Pool().get('stock.inventory.line')
for line in inventory.lines:
line_obj.create_move(line)
- self.write(inventory_id, {
+ self.write(inventory.id, {
'state': 'done',
})
def copy(self, ids, default=None):
- date_obj = self.pool.get('ir.date')
- line_obj = self.pool.get('stock.inventory.line')
+ date_obj = Pool().get('ir.date')
+ line_obj = Pool().get('stock.inventory.line')
int_id = False
if isinstance(ids, (int, long)):
@@ -134,9 +137,10 @@ class Inventory(ModelWorkflow, ModelSQL, ModelView):
:param ids: the ids of stock.inventory
:param context: the context
'''
- line_obj = self.pool.get('stock.inventory.line')
- product_obj = self.pool.get('product.product')
- uom_obj = self.pool.get('product.uom')
+ pool = Pool()
+ line_obj = pool.get('stock.inventory.line')
+ product_obj = pool.get('product.product')
+ uom_obj = pool.get('product.uom')
if isinstance(ids, (int, long)):
ids = [ids]
@@ -222,8 +226,8 @@ class InventoryLine(ModelSQL, ModelView):
return 2
def on_change_product(self, vals):
- product_obj = self.pool.get('product.product')
- uom_obj = self.pool.get('product.uom')
+ product_obj = Pool().get('product.product')
+ uom_obj = Pool().get('product.uom')
res = {}
res['unit_digits'] = 2
if vals.get('product'):
@@ -246,7 +250,7 @@ class InventoryLine(ModelSQL, ModelView):
return res
def cancel_move(self, lines):
- move_obj = self.pool.get('stock.move')
+ move_obj = Pool().get('stock.move')
move_obj.write( [l.move.id for l in lines if l.move], {
'state': 'cancel',
})
@@ -262,8 +266,8 @@ class InventoryLine(ModelSQL, ModelView):
:param line: a BrowseRecord of inventory.line
:return: the stock.move id or None
'''
- move_obj = self.pool.get('stock.move')
- uom_obj = self.pool.get('product.uom')
+ move_obj = Pool().get('stock.move')
+ uom_obj = Pool().get('product.uom')
delta_qty = uom_obj.compute_qty(line.uom,
line.expected_quantity - line.quantity,
@@ -347,7 +351,7 @@ class CompleteInventory(Wizard):
}
def _complete(self, data):
- inventory_obj = self.pool.get('stock.inventory')
+ inventory_obj = Pool().get('stock.inventory')
inventory_obj.complete_lines(data['ids'])
return {}
diff --git a/inventory.xml b/inventory.xml
index 0790b01..0ff605c 100644
--- a/inventory.xml
+++ b/inventory.xml
@@ -7,7 +7,11 @@ this repository contains the full copyright notices and license terms. -->
<field name="name">Complete Inventory</field>
<field name="wiz_name">stock.inventory.complete</field>
<field name="model">stock.inventory</field>
- <field name="groups" eval="[('add', ref('group_stock'))]"/>
+ </record>
+ <record model="ir.action-res.group"
+ id="wizard_complete_inventory_group_stock">
+ <field name="action" ref="wizard_complete_inventory"/>
+ <field name="group" ref="group_stock"/>
</record>
<record model="ir.ui.view" id="inventory_view_form">
@@ -38,11 +42,11 @@ this repository contains the full copyright notices and license terms. -->
<button string="Cancel"
name="cancel"
states="{'invisible': In(Eval('state'), ['cancel', 'done']), 'readonly': Not(In(%(group_stock)d, Eval('groups', [])))}"
- icon="'tryton-cancel'" />
+ icon="tryton-cancel" />
<button string="Confirm"
name="done"
states="{'invisible': In(Eval('state'), ['done','cancel']), 'readonly': Not(In(%(group_stock)d, Eval('groups', [])))}"
- icon="'tryton-ok'"/>
+ icon="tryton-ok"/>
</group>
</group>
</form>
@@ -55,11 +59,11 @@ this repository contains the full copyright notices and license terms. -->
<field name="arch" type="xml">
<![CDATA[
<tree string="Inventories">
- <field name="location" select="1"/>
- <field name="date" select="1"/>
- <field name="state" select="1"/>
- <field name="company" select="2"/>
- <field name="create_date" tree_invisible="1" select="2"/>
+ <field name="location"/>
+ <field name="date"/>
+ <field name="state"/>
+ <field name="company"/>
+ <field name="create_date" tree_invisible="1"/>
</tree>
]]>
</field>
@@ -67,7 +71,7 @@ this repository contains the full copyright notices and license terms. -->
<record model="ir.action.act_window" id="act_inventory_form">
<field name="name">Inventories</field>
<field name="res_model">stock.inventory</field>
- <field name="search_value">{'create_date': ['between', Date(delta_years=-1)]}</field>
+ <field name="search_value">[('create_date', '>=', DateTime(hour=0, minute=0, second=0, microsecond=0, delta_years=-1))]</field>
</record>
<record model="ir.action.act_window.view"
id="act_inventory_form_view1">
@@ -84,26 +88,6 @@ this repository contains the full copyright notices and license terms. -->
<menuitem parent="menu_stock" sequence="50"
action="act_inventory_form" id="menu_inventory_form"/>
- <record model="ir.action.act_window" id="act_inventory_form2">
- <field name="name">Inventories</field>
- <field name="res_model">stock.inventory</field>
- </record>
- <record model="ir.action.act_window.view"
- id="act_inventory_form2_view1">
- <field name="sequence" eval="10"/>
- <field name="view" ref="inventory_view_form"/>
- <field name="act_window" ref="act_inventory_form2"/>
- </record>
- <record model="ir.action.act_window.view"
- id="act_inventory_form2_view2">
- <field name="sequence" eval="20"/>
- <field name="view" ref="inventory_view_tree"/>
- <field name="act_window" ref="act_inventory_form2"/>
- </record>
- <menuitem name="New Inventory" parent="menu_inventory_form"
- action="act_inventory_form2" id="menu_inventory_form_new"
- sequence="10"/>
-
<record model="ir.action.act_window" id="act_inventory_form_draft">
<field name="name">Draft Inventories</field>
<field name="res_model">stock.inventory</field>
@@ -154,10 +138,10 @@ this repository contains the full copyright notices and license terms. -->
<field name="arch" type="xml">
<![CDATA[
<tree string="Inventory Lines" editable="bottom">
- <field name="product" select="1"/>
+ <field name="product"/>
<field name="expected_quantity"/>
- <field name="quantity" select="2"/>
- <field name="uom" select="2"/>
+ <field name="quantity"/>
+ <field name="uom"/>
<field name="unit_digits" tree_invisible="1"/>
</tree>
]]>
@@ -173,23 +157,20 @@ this repository contains the full copyright notices and license terms. -->
<record model="workflow.activity" id="inventory_act_draft">
<field name="workflow" ref="wkf_inventory"/>
<field name="flow_start">True</field>
- <field name="kind">function</field>
- <field name="action">set_state_draft()</field>
+ <field name="method">wkf_draft</field>
<field name="name">Draft</field>
</record>
<record model="workflow.activity" id="inventory_act_cancel">
<field name="workflow" ref="wkf_inventory"/>
<field name="flow_stop">True</field>
<field name="name">Canceled</field>
- <field name="kind">function</field>
- <field name="action">set_state_cancel()</field>
+ <field name="method">wkf_cancel</field>
</record>
<record model="workflow.activity" id="inventory_act_done">
<field name="workflow" ref="wkf_inventory"/>
<field name="flow_stop">True</field>
<field name="name">Done</field>
- <field name="kind">function</field>
- <field name="action">set_state_done()</field>
+ <field name="method">wkf_done</field>
</record>
<record model="workflow.transition"
id="inventory_trans_draft_cancel">
@@ -208,7 +189,7 @@ this repository contains the full copyright notices and license terms. -->
<record model="ir.model.access" id="access_inventory">
<field name="model" search="[('model', '=', 'stock.inventory')]"/>
- <field name="perm_read" eval="True"/>
+ <field name="perm_read" eval="False"/>
<field name="perm_write" eval="False"/>
<field name="perm_create" eval="False"/>
<field name="perm_delete" eval="False"/>
@@ -224,7 +205,7 @@ this repository contains the full copyright notices and license terms. -->
<record model="ir.model.access" id="access_inventory_line">
<field name="model" search="[('model', '=', 'stock.inventory.line')]"/>
- <field name="perm_read" eval="True"/>
+ <field name="perm_read" eval="False"/>
<field name="perm_write" eval="False"/>
<field name="perm_create" eval="False"/>
<field name="perm_delete" eval="False"/>
diff --git a/locale/bg_BG.po b/locale/bg_BG.po
new file mode 100644
index 0000000..a537aaa
--- /dev/null
+++ b/locale/bg_BG.po
@@ -0,0 +1,2079 @@
+#
+msgid ""
+msgstr "Content-Type: text/plain; charset=utf-8\n"
+
+msgctxt "error:product.template:0"
+msgid ""
+"You cannot change the default uom for a product which is associated to stock"
+" moves."
+msgstr ""
+"Ðе може да пÑоменÑÑе меÑ. ед. на пÑодÑÐºÑ ÐºÐ¾Ð¹Ñо е ÑвÑÑзан Ñ Ð´Ð²Ð¸Ð¶ÐµÐ½Ð¸Ñ Ð½Ð° "
+"налиÑноÑÑ."
+
+msgctxt "error:stock.inventory.line:0"
+msgid "Line quantity must be positive!"
+msgstr "ÐолиÑеÑÑвоÑо на Ñеда ÑÑÑбва да е положиÑелно ÑиÑло!"
+
+msgctxt "error:stock.inventory.line:0"
+msgid "Product must be unique by inventory!"
+msgstr "ÐÑодÑкÑа ÑÑÑбва да е Ñникален по инвенÑаÑизаÑиÑ!"
+
+msgctxt "error:stock.location:0"
+msgid ""
+"A location with existing moves cannot be changed to a type that does not "
+"support moves."
+msgstr ""
+"ÐеÑÑонаÑ
ождение ÑÑÑ ÑÑÑеÑÑвÑваÑи Ð´Ð²Ð¸Ð¶ÐµÐ½Ð¸Ñ Ð½Ðµ може да бÑде пÑоменено Ñ Ñакова"
+" коеÑо не поддÑÑжа движениÑ"
+
+msgctxt "error:stock.location:0"
+msgid "Location \"%s\" must be a child of warehouse \"%s\"!"
+msgstr "ÐеÑÑонаÑ
ождение \"%s\" ÑÑÑбва да е подÑинен на Ñклад \"%s\" !"
+
+msgctxt "error:stock.location:0"
+msgid "You can not create recursive locations!"
+msgstr "Ðе може да ÑÑздаваÑе взаимновложени меÑÑонаÑ
ождениÑ!"
+
+msgctxt "error:stock.move:0"
+msgid "Internal move quantity must be positive"
+msgstr "ÐолиÑеÑÑваÑа на движение ÑÑÑбва да Ñа положиÑелно ÑиÑло"
+
+msgctxt "error:stock.move:0"
+msgid "Move can be on only one Shipment"
+msgstr "ÐвижениеÑо ÑÑÑбва да Ñамо вÑÑÑ
Ñ ÐµÐ´Ð½Ð¾ изпÑаÑане"
+
+msgctxt "error:stock.move:0"
+msgid "Move quantity must be positive"
+msgstr "ÐолиÑеÑÑвоÑо на движение ÑÑÑбва да е положиÑелно ÑиÑло"
+
+msgctxt "error:stock.move:0"
+msgid "Source and destination location must be different"
+msgstr "ÐзÑоÑника и ÑелÑа на меÑÑонаÑ
ождениеÑо ÑÑÑбва да Ñа ÑазлиÑни"
+
+msgctxt "error:stock.move:0"
+msgid "You can not modify a move in the state: \"Assigned\", \"Done\" or \"Cancel\""
+msgstr ""
+"Ðе може да пÑоменÑÑе движение в ÑÑÑÑоÑние: \"ÐазнаÑен\", \"ÐÑиклÑÑен\" или "
+"\"ÐÑказ\""
+
+msgctxt "error:stock.move:0"
+msgid "You can not modify move in closed period!"
+msgstr "Ðе може да пÑоменÑÑе заÑвоÑен пеÑиод!"
+
+msgctxt "error:stock.move:0"
+msgid "You can not set state to assigned!"
+msgstr "Ðе може да пÑомениÑе ÑÑÑÑоÑниеÑо в назнаÑен!"
+
+msgctxt "error:stock.move:0"
+msgid "You can not set state to done!"
+msgstr "Ðе може да пÑеÑ
вÑÑлиÑе в ÑÑÑÑоÑние ÐоÑов!"
+
+msgctxt "error:stock.move:0"
+msgid "You can not set state to draft!"
+msgstr "Ðе може да пÑаÑиÑе ÑÑаÑÑÑа в пÑоекÑ!"
+
+msgctxt "error:stock.move:0"
+msgid "You can not use service products for a move!"
+msgstr "Рдвижение не може да използваÑе пÑодÑкÑи коиÑо Ñа ÑÑлÑги! "
+
+msgctxt "error:stock.move:0"
+msgid "You can only delete draft or cancelled moves!"
+msgstr "Ðе може да изÑÑиваÑе Ð´Ð²Ð¸Ð¶ÐµÐ½Ð¸Ñ Ð² ÑÑаÑÑÑ Ð¿ÑÐ¾ÐµÐºÑ Ð¸Ð»Ð¸ оÑказан!"
+
+msgctxt "error:stock.period:0"
+msgid "You can not close a period in the future or today!"
+msgstr "Ðе може да заÑваÑÑÑе пеÑиод Ð¾Ñ Ð´Ð½ÐµÑ Ð¸Ð»Ð¸ в бедеÑеÑо!"
+
+msgctxt "error:stock.period:0"
+msgid "You can not close a period when there is still assigned moves!"
+msgstr "Ðе може да заÑваÑÑÑе пеÑиод когаÑо ÑÑдÑÑжа назнаÑени движениÑ!"
+
+msgctxt "error:stock.shipment.in:0"
+msgid ""
+"Incoming Moves must have the warehouse input location as destination "
+"location!"
+msgstr ""
+"ÐÑ
одÑÑиÑе Ð´Ð²Ð¸Ð¶ÐµÐ½Ð¸Ñ ÑÑÑбва да Ð¸Ð¼Ð°Ñ Ð¼ÐµÑÑонаÑ
ождение-вÑ
од на Ñклад каÑо "
+"меÑÑонаÑ
ождение-Ñел!"
+
+msgctxt "error:stock.shipment.in:0"
+msgid ""
+"Inventory Moves must have the warehouse input location as source location!"
+msgstr ""
+"Ðвижение на инвенÑаÑизаÑÐ¸Ñ ÑÑÑбва да Ð¸Ð¼Ð°Ñ Ð¼ÐµÑÑонаÑ
ождение-вÑ
од на Ñклад каÑо"
+" меÑÑонаÑ
ождение-изÑоÑник!"
+
+msgctxt "error:stock.shipment.out.return.create:0"
+msgid "The shipment with code %s is not yet sent."
+msgstr "ÐÑаÑкаÑа Ñ ÐºÐ¾Ð´ %s оÑе не е изпÑаÑена"
+
+msgctxt "error:stock.shipment.out.return.create:0"
+msgid "You can not create return shipment"
+msgstr "Ðе може да ÑÑздадеÑе вÑÑÑане на пÑаÑка"
+
+msgctxt "error:stock.shipment.out.return:0"
+msgid ""
+"Incoming Moves must have the warehouse input location as destination "
+"location!"
+msgstr ""
+"ÐÑ
одÑÑиÑе Ð´Ð²Ð¸Ð¶ÐµÐ½Ð¸Ñ ÑÑÑбва да Ð¸Ð¼Ð°Ñ ÐºÐ°Ñо меÑÑонаÑ
ождение-Ñел деÑÑонаÑиÑ-вÑ
од "
+"на Ñклад!"
+
+msgctxt "error:stock.shipment.out.return:0"
+msgid ""
+"Inventory Moves must have the warehouse input location as source location!"
+msgstr ""
+"Ðвижение на инвенÑаÑизаÑÐ¸Ñ ÑÑÑбва да Ð¸Ð¼Ð°Ñ Ð¼ÐµÑÑонаÑ
ождение-вÑ
од на Ñклад каÑо"
+" меÑÑонаÑ
ождение-изÑоÑник!"
+
+msgctxt "error:stock.shipment.out:0"
+msgid ""
+"Inventory Moves must have the warehouse output location as destination "
+"location!"
+msgstr ""
+"Ðвижение на инвенÑаÑизаÑÐ¸Ñ ÑÑÑбва да Ð¸Ð¼Ð°Ñ Ð¼ÐµÑÑонаÑ
ождение-изÑ
од на Ñклад "
+"каÑо меÑÑонаÑ
ождение-Ñел!"
+
+msgctxt "error:stock.shipment.out:0"
+msgid ""
+"Outgoing Moves must have the warehouse output location as source location!"
+msgstr ""
+"ÐзÑ
одÑÑиÑе Ð´Ð²Ð¸Ð¶ÐµÐ½Ð¸Ñ ÑÑÑбва да Ð¸Ð¼Ð°Ñ Ð¼ÐµÑÑонаÑ
ождение-изÑ
од на Ñклад каÑо "
+"меÑÑонаÑ
ождение-изÑоÑник!"
+
+msgctxt "field:party.address,delivery:0"
+msgid "Delivery"
+msgstr "ÐоÑÑавка"
+
+msgctxt "field:party.party,customer_location:0"
+msgid "Customer Location"
+msgstr "ÐеÑÑонаÑ
ождение на клиенÑ"
+
+msgctxt "field:party.party,supplier_location:0"
+msgid "Supplier Location"
+msgstr "ÐеÑÑонаÑ
ождение на доÑÑавÑик"
+
+msgctxt "field:product.product,forecast_quantity:0"
+msgid "Forecast Quantity"
+msgstr "ÐланиÑано колиÑеÑÑво"
+
+msgctxt "field:product.product,quantity:0"
+msgid "Quantity"
+msgstr "ÐолиÑеÑÑво"
+
+msgctxt "field:product.template,forecast_quantity:0"
+msgid "Forecast Quantity"
+msgstr "ÐланиÑано колиÑеÑÑво"
+
+msgctxt "field:product.template,quantity:0"
+msgid "Quantity"
+msgstr "ÐолиÑеÑÑво"
+
+msgctxt "field:stock.configuration,rec_name:0"
+msgid "Name"
+msgstr "Ðме"
+
+msgctxt "field:stock.configuration,shipment_in_return_sequence:0"
+msgid "Supplier Return Shipment Sequence"
+msgstr "ÐоÑледоваÑелноÑÑ Ð·Ð° пÑаÑка вÑÑнаÑа на доÑÑавик"
+
+msgctxt "field:stock.configuration,shipment_in_sequence:0"
+msgid "Supplier Shipment Sequence"
+msgstr "ÐоÑледоваÑелноÑÑ Ð·Ð° пÑаÑка на доÑÑавÑик"
+
+msgctxt "field:stock.configuration,shipment_internal_sequence:0"
+msgid "Internal Shipment Sequence"
+msgstr "ÐоÑледоваÑелноÑÑ Ð½Ð° вÑÑÑеÑна пÑаÑка"
+
+msgctxt "field:stock.configuration,shipment_out_return_sequence:0"
+msgid "Customer Return Shipment Sequence"
+msgstr "ÐоÑледоваÑелноÑÑ Ð·Ð° пÑаÑка вÑÑнаÑа Ð¾Ñ ÐºÐ»Ð¸ÐµÐ½Ñ"
+
+msgctxt "field:stock.configuration,shipment_out_sequence:0"
+msgid "Customer Shipment Sequence"
+msgstr "ÐоÑледоваÑелноÑÑ Ð½Ð° пÑаÑка за клиенÑ"
+
+msgctxt "field:stock.inventory,company:0"
+msgid "Company"
+msgstr "ФиÑма"
+
+msgctxt "field:stock.inventory,date:0"
+msgid "Date"
+msgstr "ÐаÑа"
+
+msgctxt "field:stock.inventory,lines:0"
+msgid "Lines"
+msgstr "Редове"
+
+msgctxt "field:stock.inventory,location:0"
+msgid "Location"
+msgstr "ÐеÑÑоположение"
+
+msgctxt "field:stock.inventory,lost_found:0"
+msgid "Lost and Found"
+msgstr "ÐагÑбени и намеÑени"
+
+msgctxt "field:stock.inventory,rec_name:0"
+msgid "Name"
+msgstr "Ðме"
+
+msgctxt "field:stock.inventory,state:0"
+msgid "State"
+msgstr "СÑÑÑоÑние"
+
+msgctxt "field:stock.inventory.line,expected_quantity:0"
+msgid "Expected Quantity"
+msgstr "ÐÑаквано колиÑеÑÑво"
+
+msgctxt "field:stock.inventory.line,inventory:0"
+msgid "Inventory"
+msgstr "ÐнвенÑаÑизаÑиÑ"
+
+msgctxt "field:stock.inventory.line,move:0"
+msgid "Move"
+msgstr "Ðвижение"
+
+msgctxt "field:stock.inventory.line,product:0"
+msgid "Product"
+msgstr "ÐÑодÑкÑ"
+
+msgctxt "field:stock.inventory.line,quantity:0"
+msgid "Quantity"
+msgstr "ÐолиÑеÑÑво"
+
+msgctxt "field:stock.inventory.line,rec_name:0"
+msgid "Name"
+msgstr "Ðме"
+
+msgctxt "field:stock.inventory.line,unit_digits:0"
+msgid "Unit Digits"
+msgstr "ÐеÑеÑиÑни единиÑи"
+
+msgctxt "field:stock.inventory.line,uom:0"
+msgid "UOM"
+msgstr "ÐеÑ. ед."
+
+msgctxt "field:stock.location,active:0"
+msgid "Active"
+msgstr "ÐкÑивен"
+
+msgctxt "field:stock.location,address:0"
+msgid "Address"
+msgstr "ÐдÑеÑ"
+
+msgctxt "field:stock.location,childs:0"
+msgid "Children"
+msgstr "ÐеÑа"
+
+msgctxt "field:stock.location,code:0"
+msgid "Code"
+msgstr "Ðод"
+
+msgctxt "field:stock.location,forecast_quantity:0"
+msgid "Forecast Quantity"
+msgstr "ÐланиÑани колиÑеÑÑва"
+
+msgctxt "field:stock.location,input_location:0"
+msgid "Input"
+msgstr "ÐÑ
од"
+
+msgctxt "field:stock.location,left:0"
+msgid "Left"
+msgstr "ÐÑв"
+
+msgctxt "field:stock.location,name:0"
+msgid "Name"
+msgstr "Ðме"
+
+msgctxt "field:stock.location,output_location:0"
+msgid "Output"
+msgstr "ÐзÑ
од"
+
+msgctxt "field:stock.location,parent:0"
+msgid "Parent"
+msgstr "РодиÑел"
+
+msgctxt "field:stock.location,quantity:0"
+msgid "Quantity"
+msgstr "ÐолиÑеÑÑво"
+
+msgctxt "field:stock.location,rec_name:0"
+msgid "Name"
+msgstr "Ðме"
+
+msgctxt "field:stock.location,right:0"
+msgid "Right"
+msgstr "ÐеÑен"
+
+msgctxt "field:stock.location,storage_location:0"
+msgid "Storage"
+msgstr "Склад"
+
+msgctxt "field:stock.location,type:0"
+msgid "Location type"
+msgstr "Ðид меÑÑонаÑ
ождение"
+
+msgctxt "field:stock.location_stock_date.init,forecast_date:0"
+msgid "At Date"
+msgstr "Ðа даÑа"
+
+msgctxt "field:stock.move,company:0"
+msgid "Company"
+msgstr "ФиÑма"
+
+msgctxt "field:stock.move,cost_price:0"
+msgid "Cost Price"
+msgstr "ФабÑиÑна Ñена"
+
+msgctxt "field:stock.move,currency:0"
+msgid "Currency"
+msgstr "ÐалÑÑа"
+
+msgctxt "field:stock.move,effective_date:0"
+msgid "Effective Date"
+msgstr "ÐÑекÑивна даÑа"
+
+msgctxt "field:stock.move,from_location:0"
+msgid "From Location"
+msgstr "ÐÑ Ð¼ÐµÑÑонаÑ
ождение"
+
+msgctxt "field:stock.move,internal_quantity:0"
+msgid "Internal Quantity"
+msgstr "ÐÑÑÑеÑно колиÑеÑÑво"
+
+msgctxt "field:stock.move,planned_date:0"
+msgid "Planned Date"
+msgstr "ÐланиÑана даÑа"
+
+msgctxt "field:stock.move,product:0"
+msgid "Product"
+msgstr "ÐÑодÑкÑ"
+
+msgctxt "field:stock.move,quantity:0"
+msgid "Quantity"
+msgstr "ÐолиÑеÑÑво"
+
+msgctxt "field:stock.move,rec_name:0"
+msgid "Name"
+msgstr "Ðме"
+
+msgctxt "field:stock.move,shipment_in:0"
+msgid "Supplier Shipment"
+msgstr "ÐÑаÑка на доÑÑавÑик"
+
+msgctxt "field:stock.move,shipment_in_return:0"
+msgid "Supplier Return Shipment"
+msgstr "ÐÑаÑка вÑÑнаÑа Ð¾Ñ Ð´Ð¾ÑÑавÑик'"
+
+msgctxt "field:stock.move,shipment_internal:0"
+msgid "Internal Shipment"
+msgstr "ÐÑÑÑеÑно изпÑаÑане"
+
+msgctxt "field:stock.move,shipment_out:0"
+msgid "Customer Shipment"
+msgstr "ÐÑаÑка за клиенÑ"
+
+msgctxt "field:stock.move,shipment_out_return:0"
+msgid "Customer Return Shipment"
+msgstr "ÐÑаÑка вÑÑнаÑа Ð¾Ñ ÐºÐ»Ð¸ÐµÐ½Ñ"
+
+msgctxt "field:stock.move,state:0"
+msgid "State"
+msgstr "СÑÑÑоÑние"
+
+msgctxt "field:stock.move,to_location:0"
+msgid "To Location"
+msgstr "ÐÑм меÑÑонаÑ
ождение"
+
+msgctxt "field:stock.move,unit_digits:0"
+msgid "Unit Digits"
+msgstr "ÐеÑеÑиÑни единиÑи"
+
+msgctxt "field:stock.move,unit_price:0"
+msgid "Unit Price"
+msgstr "ÐдиниÑна Ñена"
+
+msgctxt "field:stock.move,unit_price_required:0"
+msgid "Unit Price Required"
+msgstr "ÐдиниÑнаÑа Ñена е задÑлжиÑелна"
+
+msgctxt "field:stock.move,uom:0"
+msgid "Uom"
+msgstr "ÐеÑ. ед."
+
+msgctxt "field:stock.period,caches:0"
+msgid "Caches"
+msgstr "ÐаÑи в налиÑноÑÑ"
+
+msgctxt "field:stock.period,company:0"
+msgid "Company"
+msgstr "ФиÑма"
+
+msgctxt "field:stock.period,date:0"
+msgid "Date"
+msgstr "ÐаÑа"
+
+msgctxt "field:stock.period,rec_name:0"
+msgid "Name"
+msgstr "Ðме на пÑикаÑен Ñайл"
+
+msgctxt "field:stock.period,state:0"
+msgid "State"
+msgstr "ЩаÑ"
+
+msgctxt "field:stock.period.cache,internal_quantity:0"
+msgid "Internal Quantity"
+msgstr "ÐÑÑÑеÑно колиÑеÑÑво"
+
+msgctxt "field:stock.period.cache,location:0"
+msgid "Location"
+msgstr "ÐеÑÑоположение"
+
+msgctxt "field:stock.period.cache,period:0"
+msgid "Period"
+msgstr "ÐеÑиод"
+
+msgctxt "field:stock.period.cache,product:0"
+msgid "Product"
+msgstr "ÐÑодÑкÑ"
+
+msgctxt "field:stock.period.cache,rec_name:0"
+msgid "Name"
+msgstr "Ðме на пÑикаÑен Ñайл"
+
+msgctxt "field:stock.product_stock_date.init,forecast_date:0"
+msgid "At Date"
+msgstr "Ðа даÑа"
+
+msgctxt "field:stock.shipment.in,code:0"
+msgid "Code"
+msgstr "Ðод"
+
+#, fuzzy
+msgctxt "field:stock.shipment.in,company:0"
+msgid "Company"
+msgstr "ФиÑма"
+
+msgctxt "field:stock.shipment.in,contact_address:0"
+msgid "Contact Address"
+msgstr "ÐдÑÐµÑ Ð·Ð° конÑакÑ"
+
+msgctxt "field:stock.shipment.in,effective_date:0"
+msgid "Effective Date"
+msgstr "ÐÑекÑивна даÑа"
+
+msgctxt "field:stock.shipment.in,incoming_moves:0"
+msgid "Incoming Moves"
+msgstr "ÐÑ
одÑÑи движениÑ"
+
+msgctxt "field:stock.shipment.in,inventory_moves:0"
+msgid "Inventory Moves"
+msgstr "ÐÐ²Ð¸Ð¶ÐµÐ½Ð¸Ñ Ð½Ð° инвенÑаÑизаÑиÑ"
+
+msgctxt "field:stock.shipment.in,moves:0"
+msgid "Moves"
+msgstr "ÐвижениÑ"
+
+msgctxt "field:stock.shipment.in,planned_date:0"
+msgid "Planned Date"
+msgstr "ÐланиÑана даÑа"
+
+msgctxt "field:stock.shipment.in,rec_name:0"
+msgid "Name"
+msgstr "Ðме"
+
+msgctxt "field:stock.shipment.in,reference:0"
+msgid "Reference"
+msgstr "ÐÑпÑаÑка"
+
+msgctxt "field:stock.shipment.in,state:0"
+msgid "State"
+msgstr "СÑÑÑоÑние"
+
+msgctxt "field:stock.shipment.in,supplier:0"
+msgid "Supplier"
+msgstr "ÐоÑÑавÑик"
+
+msgctxt "field:stock.shipment.in,warehouse:0"
+msgid "Warehouse"
+msgstr "Склад"
+
+msgctxt "field:stock.shipment.in.return,code:0"
+msgid "Code"
+msgstr "Ðод"
+
+#, fuzzy
+msgctxt "field:stock.shipment.in.return,company:0"
+msgid "Company"
+msgstr "ФиÑма"
+
+msgctxt "field:stock.shipment.in.return,effective_date:0"
+msgid "Effective Date"
+msgstr "ÐÑекÑивна даÑа"
+
+msgctxt "field:stock.shipment.in.return,from_location:0"
+msgid "From Location"
+msgstr "ÐÑ Ð¼ÐµÑÑонаÑ
ождение"
+
+msgctxt "field:stock.shipment.in.return,moves:0"
+msgid "Moves"
+msgstr "ÐвижениÑ"
+
+msgctxt "field:stock.shipment.in.return,planned_date:0"
+msgid "Planned Date"
+msgstr "ÐланиÑана даÑа"
+
+msgctxt "field:stock.shipment.in.return,rec_name:0"
+msgid "Name"
+msgstr "Ðме"
+
+msgctxt "field:stock.shipment.in.return,reference:0"
+msgid "Reference"
+msgstr "ÐÑпÑаÑка"
+
+msgctxt "field:stock.shipment.in.return,state:0"
+msgid "State"
+msgstr "СÑÑÑоÑние"
+
+msgctxt "field:stock.shipment.in.return,to_location:0"
+msgid "To Location"
+msgstr "ÐÑм меÑÑонаÑ
ождение"
+
+msgctxt "field:stock.shipment.in.return.assign.assign_failed,moves:0"
+msgid "Moves"
+msgstr "ÐвижениÑ"
+
+msgctxt "field:stock.shipment.internal,code:0"
+msgid "Code"
+msgstr "Ðод"
+
+#, fuzzy
+msgctxt "field:stock.shipment.internal,company:0"
+msgid "Company"
+msgstr "ФиÑма"
+
+msgctxt "field:stock.shipment.internal,effective_date:0"
+msgid "Effective Date"
+msgstr "ÐÑекÑивна даÑа"
+
+msgctxt "field:stock.shipment.internal,from_location:0"
+msgid "From Location"
+msgstr "ÐÑ Ð¼ÐµÑÑонаÑ
ождение"
+
+msgctxt "field:stock.shipment.internal,moves:0"
+msgid "Moves"
+msgstr "ÐвижениÑ"
+
+msgctxt "field:stock.shipment.internal,planned_date:0"
+msgid "Planned Date"
+msgstr "ÐланиÑана даÑа"
+
+msgctxt "field:stock.shipment.internal,rec_name:0"
+msgid "Name"
+msgstr "Ðме"
+
+msgctxt "field:stock.shipment.internal,reference:0"
+msgid "Reference"
+msgstr "ÐÑпÑаÑка"
+
+msgctxt "field:stock.shipment.internal,state:0"
+msgid "State"
+msgstr "СÑÑÑоÑние"
+
+msgctxt "field:stock.shipment.internal,to_location:0"
+msgid "To Location"
+msgstr "ÐÑм меÑÑонаÑ
ождение"
+
+msgctxt "field:stock.shipment.internal.assign.assign_failed,moves:0"
+msgid "Moves"
+msgstr "ÐвижениÑ"
+
+msgctxt "field:stock.shipment.out,code:0"
+msgid "Code"
+msgstr "Ðод"
+
+#, fuzzy
+msgctxt "field:stock.shipment.out,company:0"
+msgid "Company"
+msgstr "ФиÑма"
+
+msgctxt "field:stock.shipment.out,customer:0"
+msgid "Customer"
+msgstr "ÐлиенÑ"
+
+msgctxt "field:stock.shipment.out,delivery_address:0"
+msgid "Delivery Address"
+msgstr "ÐдÑÐµÑ Ð·Ð° доÑÑвка"
+
+msgctxt "field:stock.shipment.out,effective_date:0"
+msgid "Effective Date"
+msgstr "ÐÑекÑивна даÑа"
+
+msgctxt "field:stock.shipment.out,inventory_moves:0"
+msgid "Inventory Moves"
+msgstr "ÐÐ²Ð¸Ð¶ÐµÐ½Ð¸Ñ Ð½Ð° инвенÑаÑизаÑиÑ"
+
+msgctxt "field:stock.shipment.out,moves:0"
+msgid "Moves"
+msgstr "ÐвижениÑ"
+
+msgctxt "field:stock.shipment.out,outgoing_moves:0"
+msgid "Outgoing Moves"
+msgstr "ÐзÑ
одÑÑи движениÑ"
+
+msgctxt "field:stock.shipment.out,planned_date:0"
+msgid "Planned Date"
+msgstr "ÐланиÑана даÑа"
+
+msgctxt "field:stock.shipment.out,rec_name:0"
+msgid "Name"
+msgstr "Ðме"
+
+msgctxt "field:stock.shipment.out,reference:0"
+msgid "Reference"
+msgstr "ÐÑпÑаÑка"
+
+msgctxt "field:stock.shipment.out,state:0"
+msgid "State"
+msgstr "СÑÑÑоÑние"
+
+msgctxt "field:stock.shipment.out,warehouse:0"
+msgid "Warehouse"
+msgstr "Склад"
+
+msgctxt "field:stock.shipment.out.assign.assign_failed,inventory_moves:0"
+msgid "Inventory Moves"
+msgstr "ÐÐ²Ð¸Ð¶ÐµÐ½Ð¸Ñ Ð½Ð° инвенÑаÑизаÑиÑ"
+
+msgctxt "field:stock.shipment.out.return,code:0"
+msgid "Code"
+msgstr "Ðод"
+
+#, fuzzy
+msgctxt "field:stock.shipment.out.return,company:0"
+msgid "Company"
+msgstr "ФиÑма"
+
+msgctxt "field:stock.shipment.out.return,customer:0"
+msgid "Customer"
+msgstr "ÐлиенÑ"
+
+msgctxt "field:stock.shipment.out.return,delivery_address:0"
+msgid "Delivery Address"
+msgstr "ÐдÑÐµÑ Ð·Ð° доÑÑвка"
+
+msgctxt "field:stock.shipment.out.return,effective_date:0"
+msgid "Effective Date"
+msgstr "ÐÑекÑивна даÑа"
+
+msgctxt "field:stock.shipment.out.return,incoming_moves:0"
+msgid "Incoming Moves"
+msgstr "ÐÑ
одÑÑи движениÑ"
+
+msgctxt "field:stock.shipment.out.return,inventory_moves:0"
+msgid "Inventory Moves"
+msgstr "ÐÐ²Ð¸Ð¶ÐµÐ½Ð¸Ñ Ð½Ð° инвенÑаÑизаÑиÑ"
+
+msgctxt "field:stock.shipment.out.return,moves:0"
+msgid "Moves"
+msgstr "ÐвижениÑ"
+
+msgctxt "field:stock.shipment.out.return,planned_date:0"
+msgid "Planned Date"
+msgstr "ÐланиÑана даÑа"
+
+msgctxt "field:stock.shipment.out.return,rec_name:0"
+msgid "Name"
+msgstr "Ðме"
+
+msgctxt "field:stock.shipment.out.return,reference:0"
+msgid "Reference"
+msgstr "ÐÑпÑаÑка"
+
+msgctxt "field:stock.shipment.out.return,state:0"
+msgid "State"
+msgstr "СÑÑÑоÑние"
+
+msgctxt "field:stock.shipment.out.return,warehouse:0"
+msgid "Warehouse"
+msgstr "Склад"
+
+msgctxt "help:party.party,customer_location:0"
+msgid "The default destination location when sending products to the party."
+msgstr ""
+"ЦелÑа-меÑÑонаÑ
ождение по подÑазбиÑане когаÑо Ñе изпÑаÑÐ°Ñ Ð¿ÑодÑкÑи на "
+"паÑÑнÑоÑа."
+
+msgctxt "help:party.party,supplier_location:0"
+msgid "The default source location when receiving products from the party."
+msgstr ""
+"ÐзÑоÑник-меÑÑонаÑ
Ð¾Ð¶Ð´ÐµÐ½Ð¸Ñ Ð¿Ð¾ подÑазбиÑане когаÑо Ñе полÑÑÐ°Ð²Ð°Ñ Ð¿ÑодÑкÑи Ð¾Ñ "
+"паÑÑнÑоÑа."
+
+msgctxt "help:stock.location_stock_date.init,forecast_date:0"
+msgid ""
+"Allow to compute expected stock quantities for this date.\n"
+"* An empty value is an infinite date in the future.\n"
+"* A date in the past will provide historical values."
+msgstr ""
+"ÐозволÑва да Ñе изÑиÑли оÑакваниÑе налиÑноÑÑи Ð¾Ñ Ð¿ÑодÑÐºÑ Ð·Ð° Ñази даÑа:\n"
+"* ÐÑазна даÑа е неизвеÑÑна даÑа в бÑдеÑеÑо.\n"
+"* ÐаÑа Ð¾Ñ Ð¼Ð¸Ð½Ð°Ð» пеÑиод показва иÑÑоÑиÑеÑки данни."
+
+msgctxt "help:stock.product_stock_date.init,forecast_date:0"
+msgid ""
+"Allow to compute expected stock quantities for this date.\n"
+"* An empty value is an infinite date in the future.\n"
+"* A date in the past will provide historical values."
+msgstr ""
+"ÐозволÑва да Ñе изÑиÑли оÑакваниÑе налиÑноÑÑи Ð¾Ñ Ð¿ÑодÑÐºÑ Ð·Ð° Ñази даÑа:\n"
+"* ÐÑазна даÑа е неизвеÑÑна даÑа в бÑдеÑеÑо.\n"
+"* ÐаÑа Ð¾Ñ Ð¼Ð¸Ð½Ð°Ð» пеÑиод показва иÑÑоÑиÑеÑки данни."
+
+msgctxt "model:ir.action,name:act_inventory_form"
+msgid "Inventories"
+msgstr "ÐнвенÑаÑизаÑии"
+
+msgctxt "model:ir.action,name:act_inventory_form_draft"
+msgid "Draft Inventories"
+msgstr "ÐÑÐ¾ÐµÐºÑ Ð½Ð° инвенÑаÑизаÑиÑ"
+
+msgctxt "model:ir.action,name:act_location_form"
+msgid "Locations"
+msgstr "ÐеÑÑонаÑ
ождениÑ"
+
+msgctxt "model:ir.action,name:act_location_quantity_tree"
+msgid "Product Stock"
+msgstr "ÐалиÑноÑÑ Ð½Ð° пÑодÑкÑ"
+
+msgctxt "model:ir.action,name:act_location_tree"
+msgid "Locations"
+msgstr "ÐеÑÑонаÑ
ождениÑ"
+
+msgctxt "model:ir.action,name:act_move_form"
+msgid "Moves"
+msgstr "ÐвижениÑ"
+
+msgctxt "model:ir.action,name:act_move_form_cust"
+msgid "Moves to Customers"
+msgstr "ÐÐ²Ð¸Ð¶ÐµÐ½Ð¸Ñ ÐºÑм клиенÑи"
+
+msgctxt "model:ir.action,name:act_move_form_supp"
+msgid "Moves from Suppliers"
+msgstr "ÐÐ²Ð¸Ð¶ÐµÐ½Ð¸Ñ Ð¾Ñ Ð´Ð¾ÑÑавÑик"
+
+msgctxt "model:ir.action,name:act_move_form_supp_proceed"
+msgid "Moves from Suppliers Waiting Arrival"
+msgstr "ÐÐ²Ð¸Ð¶ÐµÐ½Ð¸Ñ Ð¾Ñ Ð´Ð¾ÑÑавÑик оÑакваÑи пÑиÑÑигане"
+
+#, fuzzy
+msgctxt "model:ir.action,name:act_period_list"
+msgid "Periods"
+msgstr "ÐеÑиоди"
+
+msgctxt "model:ir.action,name:act_product_by_location"
+msgid "Products by Locations"
+msgstr "ÐÑодÑкÑи по меÑÑонаÑ
ождение"
+
+msgctxt "model:ir.action,name:act_shipment_in_draft"
+msgid "Draft Supplier Shipment"
+msgstr ""
+
+msgctxt "model:ir.action,name:act_shipment_in_form"
+msgid "Supplier Shipments"
+msgstr "ÐÑаÑки на доÑÑавÑик"
+
+msgctxt "model:ir.action,name:act_shipment_in_form_received"
+msgid "Received Supplier shipments"
+msgstr "ÐÑаÑки полÑÑени Ð¾Ñ Ð´Ð¾ÑÑавÑик"
+
+msgctxt "model:ir.action,name:act_shipment_in_return_form"
+msgid "Supplier Return Shipments"
+msgstr "ÐÑаÑка вÑÑнаÑа на доÑÑавÑик"
+
+msgctxt "model:ir.action,name:act_shipment_internal_assigned_form"
+msgid "Assigned Internal Shipments"
+msgstr "ÐазнаÑаване на вÑÑÑеÑна пÑаÑка"
+
+msgctxt "model:ir.action,name:act_shipment_internal_draft_form"
+msgid "Draft Internal Shipments"
+msgstr "ÐÑÐ¾ÐµÐºÑ Ð½Ð° вÑÑÑеÑна пÑаÑка"
+
+msgctxt "model:ir.action,name:act_shipment_internal_form"
+msgid "Internal Shipments"
+msgstr "ÐÑÑÑеÑни изпÑаÑаниÑ"
+
+msgctxt "model:ir.action,name:act_shipment_internal_waiting_form"
+msgid "Internal Shipments Waiting Assignation"
+msgstr "ÐÑÑÑеÑни пÑаÑки оÑакваÑи назнаÑаване"
+
+msgctxt "model:ir.action,name:act_shipment_out_form"
+msgid "Customer Shipments"
+msgstr "ÐÑаÑки за клиенÑи"
+
+msgctxt "model:ir.action,name:act_shipment_out_form2"
+msgid "Customer Shipments"
+msgstr "ÐÑаÑки за клиенÑи"
+
+msgctxt "model:ir.action,name:act_shipment_out_form3"
+msgid "Supplier Shipments"
+msgstr "ÐÑаÑки на доÑÑавÑик"
+
+msgctxt "model:ir.action,name:act_shipment_out_form_assigned"
+msgid "Assigned Customer Shipments"
+msgstr "ÐазнаÑени пÑаÑки за клиенÑи"
+
+msgctxt "model:ir.action,name:act_shipment_out_form_ready"
+msgid "Customer Shipments Ready for Shipping"
+msgstr "ÐÑаÑки за клиенÑи гоÑови за изпÑаÑане"
+
+msgctxt "model:ir.action,name:act_shipment_out_form_waiting"
+msgid "Customer Shipments Waiting Assignation"
+msgstr "ÐÑаÑки за клиенÑи ÑакаÑи назнаÑаване"
+
+msgctxt "model:ir.action,name:act_shipment_out_return_form"
+msgid "Customer Return Shipments"
+msgstr "ÐÑаÑки вÑÑнаÑи Ð¾Ñ ÐºÐ»Ð¸ÐµÐ½Ñ"
+
+msgctxt "model:ir.action,name:act_stock_configuration_form"
+msgid "Stock Configuration"
+msgstr "ÐонÑигÑÑиÑане на налиÑноÑÑ"
+
+msgctxt "model:ir.action,name:create_shipment_out_return"
+msgid "Create Return Shipment"
+msgstr "СÑздаване на вÑÑнаÑа пÑаÑка"
+
+msgctxt "model:ir.action,name:report_shipment_in_restocking_list"
+msgid "Restocking List"
+msgstr "СпиÑÑк за ÑвелиÑаване налиÑноÑÑ Ð½Ð° пÑодÑкÑ"
+
+msgctxt "model:ir.action,name:report_shipment_internal"
+msgid "Internal Shipment"
+msgstr "ÐÑÑÑеÑно изпÑаÑане"
+
+msgctxt "model:ir.action,name:report_shipment_out_delivery_note"
+msgid "Delivery Note"
+msgstr "Ðележка кÑм доÑÑавка"
+
+msgctxt "model:ir.action,name:report_shipment_out_picking_list"
+msgid "Picking List"
+msgstr "СпиÑÑк за опаковане"
+
+msgctxt "model:ir.action,name:report_shipment_out_return_restocking_list"
+msgid "Restocking List"
+msgstr "СпиÑÑк за ÑвелиÑаване налиÑноÑÑ Ð½Ð° пÑодÑкÑ"
+
+msgctxt "model:ir.action,name:wizard_complete_inventory"
+msgid "Complete Inventory"
+msgstr "ÐÑлна инвенÑаÑизаÑиÑ"
+
+msgctxt "model:ir.action,name:wizard_location_open"
+msgid "Product by Location"
+msgstr "ÐÑодÑкÑа по меÑÑонаÑ
ождение"
+
+msgctxt "model:ir.action,name:wizard_product_open"
+msgid "Product Quantities"
+msgstr "ÐолиÑеÑÑва на пÑодÑкÑ"
+
+msgctxt "model:ir.action,name:wizard_shipment_in_return_assign"
+msgid "Assign Purchase Return Shipment"
+msgstr "ÐазнаÑаване за вÑÑÑане на пÑаÑка Ð¾Ñ Ð¿Ð¾ÐºÑпка"
+
+msgctxt "model:ir.action,name:wizard_shipment_internal_assign"
+msgid "Assign Shipment Internal"
+msgstr "ÐазнаÑаване на вÑÑÑеÑна пÑаÑка"
+
+msgctxt "model:ir.action,name:wizard_shipment_out_assign"
+msgid "Assign Shipment Out"
+msgstr "ÐазнаÑаване на пÑаÑка за навÑн"
+
+msgctxt "model:ir.sequence,name:sequence_shipment_in"
+msgid "Supplier Shipment"
+msgstr "ÐзпÑаÑане на доÑÑавÑик"
+
+msgctxt "model:ir.sequence,name:sequence_shipment_in_return"
+msgid "Supplier Return Shipment"
+msgstr "ÐÑаÑка вÑÑнаÑа Ð¾Ñ Ð´Ð¾ÑÑавÑик'"
+
+msgctxt "model:ir.sequence,name:sequence_shipment_internal"
+msgid "Internal Shipment"
+msgstr "ÐÑÑÑеÑна пÑаÑка"
+
+msgctxt "model:ir.sequence,name:sequence_shipment_out"
+msgid "Customer Shipment"
+msgstr "ÐÑаÑка за клиенÑ"
+
+msgctxt "model:ir.sequence,name:sequence_shipment_out_return"
+msgid "Customer Return Shipment"
+msgstr "ÐÑаÑка вÑÑнаÑа Ð¾Ñ ÐºÐ»Ð¸ÐµÐ½Ñ"
+
+msgctxt "model:ir.sequence.type,name:sequence_type_shipment_in"
+msgid "Supplier Shipment"
+msgstr "ÐÑаÑка на доÑÑавÑик"
+
+msgctxt "model:ir.sequence.type,name:sequence_type_shipment_in_return"
+msgid "Supplier Return Shipment"
+msgstr "ÐÑаÑка вÑÑнаÑа Ð¾Ñ Ð´Ð¾ÑÑавÑик'"
+
+msgctxt "model:ir.sequence.type,name:sequence_type_shipment_internal"
+msgid "Internal Shipment"
+msgstr "ÐÑÑÑеÑна пÑаÑка"
+
+msgctxt "model:ir.sequence.type,name:sequence_type_shipment_out"
+msgid "Customer Shipment"
+msgstr "ÐÑаÑка за клиенÑ"
+
+msgctxt "model:ir.sequence.type,name:sequence_type_shipment_out_return"
+msgid "Customer Return Shipment"
+msgstr "ÐÑаÑка вÑÑнаÑа Ð¾Ñ ÐºÐ»Ð¸ÐµÐ½Ñ"
+
+msgctxt "model:ir.ui.menu,name:menu_configuration"
+msgid "Configuration"
+msgstr "ÐонÑигÑÑаÑиÑ"
+
+msgctxt "model:ir.ui.menu,name:menu_inventory_form"
+msgid "Inventories"
+msgstr "ÐнвенÑаÑизаÑии"
+
+msgctxt "model:ir.ui.menu,name:menu_inventory_form_draft"
+msgid "Draft Inventories"
+msgstr "ÐÑÐ¾ÐµÐºÑ Ð½Ð° инвенÑаÑизаÑиÑ"
+
+msgctxt "model:ir.ui.menu,name:menu_location_form"
+msgid "Locations"
+msgstr "ÐеÑÑонаÑ
ождениÑ"
+
+msgctxt "model:ir.ui.menu,name:menu_location_tree"
+msgid "Locations"
+msgstr "ÐеÑÑонаÑ
ождениÑ"
+
+msgctxt "model:ir.ui.menu,name:menu_move_form"
+msgid "Moves"
+msgstr "ÐвижениÑ"
+
+msgctxt "model:ir.ui.menu,name:menu_move_form_cust"
+msgid "Moves to Customers"
+msgstr "ÐÐ²Ð¸Ð¶ÐµÐ½Ð¸Ñ ÐºÑм клиенÑи"
+
+msgctxt "model:ir.ui.menu,name:menu_move_form_supp"
+msgid "Moves from Suppliers"
+msgstr "ÐÐ²Ð¸Ð¶ÐµÐ½Ð¸Ñ Ð¾Ñ Ð´Ð¾ÑÑавÑик"
+
+msgctxt "model:ir.ui.menu,name:menu_move_form_supp_proceed"
+msgid "Moves from Suppliers Waiting Arrival"
+msgstr "ÐÐ²Ð¸Ð¶ÐµÐ½Ð¸Ñ Ð¾Ñ Ð´Ð¾ÑÑавÑик оÑакваÑи пÑиÑÑигане"
+
+#, fuzzy
+msgctxt "model:ir.ui.menu,name:menu_period_list"
+msgid "Periods"
+msgstr "ÐеÑиоди"
+
+msgctxt "model:ir.ui.menu,name:menu_reporting"
+msgid "Reporting"
+msgstr "СпÑавки"
+
+msgctxt "model:ir.ui.menu,name:menu_shipment_in_draft"
+msgid "Draft Supplier Shipment"
+msgstr ""
+
+msgctxt "model:ir.ui.menu,name:menu_shipment_in_form"
+msgid "Supplier Shipments"
+msgstr "ÐÑаÑки на доÑÑавÑик"
+
+msgctxt "model:ir.ui.menu,name:menu_shipment_in_received"
+msgid "Received Supplier shipments"
+msgstr "ÐÑаÑки полÑÑени Ð¾Ñ Ð´Ð¾ÑÑавÑик"
+
+msgctxt "model:ir.ui.menu,name:menu_shipment_in_return_form"
+msgid "Supplier Return Shipments"
+msgstr "ÐÑаÑка вÑÑнаÑа на доÑÑавÑик"
+
+msgctxt "model:ir.ui.menu,name:menu_shipment_internal_assigned_form"
+msgid "Assigned Internal Shipments"
+msgstr "ÐазнаÑени вÑÑÑеÑни пÑаÑки"
+
+msgctxt "model:ir.ui.menu,name:menu_shipment_internal_draft_form"
+msgid "Draft Internal Shipments"
+msgstr "ÐÑÐ¾ÐµÐºÑ Ð½Ð° вÑÑÑеÑна пÑаÑка"
+
+msgctxt "model:ir.ui.menu,name:menu_shipment_internal_form"
+msgid "Internal Shipments"
+msgstr "ÐÑÑÑеÑни изпÑаÑаниÑ"
+
+msgctxt "model:ir.ui.menu,name:menu_shipment_internal_waiting_form"
+msgid "Internal Shipments Waiting Assignation"
+msgstr "ÐÑÑÑеÑни пÑаÑки оÑакваÑи назнаÑаване"
+
+msgctxt "model:ir.ui.menu,name:menu_shipment_out_assigned"
+msgid "Assigned Customer Shipments"
+msgstr "ÐазнаÑени пÑаÑки за клиенÑи"
+
+msgctxt "model:ir.ui.menu,name:menu_shipment_out_form"
+msgid "Customer Shipments"
+msgstr "ÐÑаÑки за клиенÑи"
+
+msgctxt "model:ir.ui.menu,name:menu_shipment_out_ready"
+msgid "Customer Shipments Ready for Shipping"
+msgstr "ÐÑаÑки за клиенÑи гоÑови за изпÑаÑане"
+
+msgctxt "model:ir.ui.menu,name:menu_shipment_out_return_form"
+msgid "Customer Return Shipments"
+msgstr "ÐÑаÑки вÑÑнаÑи Ð¾Ñ ÐºÐ»Ð¸ÐµÐ½Ñ"
+
+msgctxt "model:ir.ui.menu,name:menu_shipment_out_waiting"
+msgid "Customer Shipments Waiting Assignation"
+msgstr "ÐÑаÑки за клиенÑи ÑакаÑи назнаÑаване"
+
+#, fuzzy
+msgctxt "model:ir.ui.menu,name:menu_stock"
+msgid "Inventory & Stock"
+msgstr "УпÑавление на инвенÑаÑизаÑиÑ"
+
+msgctxt "model:ir.ui.menu,name:menu_stock_configuration"
+msgid "Stock Configuration"
+msgstr "ÐонÑигÑÑиÑане на налиÑноÑÑ"
+
+msgctxt "model:res.group,name:group_stock"
+msgid "Stock"
+msgstr "ÐалиÑноÑÑ"
+
+msgctxt "model:res.group,name:group_stock_admin"
+msgid "Stock Administration"
+msgstr "УпÑавление на налиÑноÑÑ"
+
+msgctxt "model:res.group,name:group_stock_force_assignment"
+msgid "Stock Force Assignment"
+msgstr "ÐаÑоÑно назнаÑване на налиÑноÑÑ"
+
+msgctxt "model:stock.configuration,name:0"
+msgid "Stock Configuration"
+msgstr "ÐонÑигÑÑиÑане на налиÑноÑÑ"
+
+msgctxt "model:stock.inventory,name:0"
+msgid "Stock Inventory"
+msgstr "ÐнвенÑаÑизаÑÐ¸Ñ Ð½Ð° налиÑноÑÑ"
+
+msgctxt "model:stock.inventory.line,name:0"
+msgid "Stock Inventory Line"
+msgstr "Ред Ð¾Ñ Ð½Ð°Ð»Ð¸ÑноÑÑ Ð½Ð° пÑодÑкÑ"
+
+msgctxt "model:stock.location,name:0"
+msgid "Stock Location"
+msgstr "ÐеÑÑонаÑ
ождение на налиÑноÑÑ"
+
+msgctxt "model:stock.location,name:location_customer"
+msgid "Customer"
+msgstr "ÐлиенÑ"
+
+msgctxt "model:stock.location,name:location_input"
+msgid "Input Zone"
+msgstr "Ðона вÑ
од"
+
+msgctxt "model:stock.location,name:location_lost_found"
+msgid "Lost and Found"
+msgstr "ÐагÑбени и намеÑени"
+
+msgctxt "model:stock.location,name:location_output"
+msgid "Output Zone"
+msgstr "Ðона изÑ
од"
+
+msgctxt "model:stock.location,name:location_storage"
+msgid "Storage Zone"
+msgstr "Ðона за ÑÑÑ
Ñанение"
+
+msgctxt "model:stock.location,name:location_supplier"
+msgid "Supplier"
+msgstr "ÐоÑÑавÑик"
+
+msgctxt "model:stock.location,name:location_warehouse"
+msgid "Warehouse"
+msgstr "Склад"
+
+msgctxt "model:stock.location_stock_date.init,name:0"
+msgid "Compute stock quantities"
+msgstr "ÐзÑиÑлÑване на колиÑеÑÑва на налиÑноÑÑ"
+
+msgctxt "model:stock.move,name:0"
+msgid "Stock Move"
+msgstr "Ðвижение на налиÑноÑÑ"
+
+msgctxt "model:stock.period,name:0"
+msgid "Stock Period"
+msgstr "ÐеÑиод на налиÑноÑÑ"
+
+msgctxt "model:stock.period.cache,name:0"
+msgid ""
+"\n"
+" Stock Period Cache\n"
+"\n"
+" It is used to store cached computation of stock quantities.\n"
+" "
+msgstr ""
+"\n"
+" ÐеÑиод на налиÑноÑÑ Ð² паÑи в бÑой\n"
+"\n"
+" Ðзползва Ñе за Ð·Ð°Ð¿Ð¸Ñ Ð½Ð° изÑиÑлениÑе паÑи в бÑой на налиÑниÑе колиÑеÑÑва."
+
+msgctxt "model:stock.product_stock_date.init,name:0"
+msgid "Compute stock quantities"
+msgstr "ÐзÑиÑлÑване на колиÑеÑÑва на налиÑноÑÑ"
+
+msgctxt "model:stock.shipment.in,name:0"
+msgid "Supplier Shipment"
+msgstr "ÐÑаÑка на доÑÑавÑик"
+
+msgctxt "model:stock.shipment.in.return,name:0"
+msgid "Supplier Return Shipment"
+msgstr "ÐÑаÑка вÑÑнаÑа Ð¾Ñ Ð´Ð¾ÑÑавÑик'"
+
+msgctxt "model:stock.shipment.in.return.assign.assign_failed,name:0"
+msgid "Assign Supplier Return Shipment Assign Failed"
+msgstr "ÐеÑÑпеÑно назнаÑаване на доÑÑавÑик за вÑÑнаÑа пÑаÑка"
+
+msgctxt "model:stock.shipment.internal,name:0"
+msgid "Internal Shipment"
+msgstr "ÐÑÑÑеÑно изпÑаÑане"
+
+msgctxt "model:stock.shipment.internal.assign.assign_failed,name:0"
+msgid "Assign Shipment Internal Assign Failed"
+msgstr "ÐеÑÑпеÑно назнаÑаване на вÑÑÑеÑно пÑаÑка"
+
+msgctxt "model:stock.shipment.out,name:0"
+msgid "Customer Shipment"
+msgstr "ÐÑаÑка за клиенÑ"
+
+msgctxt "model:stock.shipment.out.assign.assign_failed,name:0"
+msgid "Assign Shipment Out Assign Failed"
+msgstr "ÐеÑÑпеÑно назнаÑаване на пÑаÑка за навÑн"
+
+msgctxt "model:stock.shipment.out.return,name:0"
+msgid "Customer Return Shipment"
+msgstr "ÐÑаÑка вÑÑнаÑа Ð¾Ñ ÐºÐ»Ð¸ÐµÐ½Ñ"
+
+msgctxt "model:workflow,name:wkf_inventory"
+msgid "Inventory"
+msgstr "ÐнвенÑаÑизаÑиÑ"
+
+msgctxt "model:workflow,name:wkf_shipment_in_return"
+msgid "Supplier Return Shipment"
+msgstr "ÐÑаÑка вÑÑнаÑа Ð¾Ñ Ð´Ð¾ÑÑавÑик'"
+
+msgctxt "model:workflow,name:wkf_shipment_out_return"
+msgid "Customer Return Shipment"
+msgstr "ÐÑаÑка вÑÑнаÑа Ð¾Ñ ÐºÐ»Ð¸ÐµÐ½Ñ"
+
+msgctxt "model:workflow,name:wkf_shipmentin"
+msgid "Supplier Shipment"
+msgstr "ÐÑаÑка на доÑÑавÑик"
+
+msgctxt "model:workflow,name:wkf_shipmentinternal"
+msgid "Internal Shipment"
+msgstr "ÐÑÑÑеÑно изпÑаÑане"
+
+msgctxt "model:workflow,name:wkf_shipmentout"
+msgid "Customer Shipment"
+msgstr "ÐÑаÑка за клиенÑ"
+
+msgctxt "model:workflow.activity,name:inventory_act_cancel"
+msgid "Canceled"
+msgstr "ÐÑказан"
+
+msgctxt "model:workflow.activity,name:inventory_act_done"
+msgid "Done"
+msgstr "ÐÑиклÑÑен"
+
+msgctxt "model:workflow.activity,name:inventory_act_draft"
+msgid "Draft"
+msgstr "ÐÑоекÑ"
+
+msgctxt "model:workflow.activity,name:shipment_in_return_act_assigned"
+msgid "Assigned"
+msgstr "ÐазнаÑен"
+
+msgctxt "model:workflow.activity,name:shipment_in_return_act_cancel"
+msgid "Canceled"
+msgstr "ÐÑказан"
+
+msgctxt "model:workflow.activity,name:shipment_in_return_act_done"
+msgid "Done"
+msgstr "ÐÑиклÑÑен"
+
+msgctxt "model:workflow.activity,name:shipment_in_return_act_draft"
+msgid "Draft"
+msgstr "ÐÑоекÑ"
+
+msgctxt "model:workflow.activity,name:shipment_in_return_act_waiting"
+msgid "Waiting"
+msgstr "ÐзÑакваÑ"
+
+msgctxt "model:workflow.activity,name:shipment_out_return_act_cancel"
+msgid "Canceled"
+msgstr "ÐÑказан"
+
+msgctxt "model:workflow.activity,name:shipment_out_return_act_done"
+msgid "Done"
+msgstr "ÐÑиклÑÑен"
+
+msgctxt "model:workflow.activity,name:shipment_out_return_act_draft"
+msgid "Draft"
+msgstr "ÐÑоекÑ"
+
+msgctxt "model:workflow.activity,name:shipment_out_return_act_received"
+msgid "Received"
+msgstr "ÐолÑÑен"
+
+msgctxt "model:workflow.activity,name:shipmentin_act_cancel"
+msgid "Canceled"
+msgstr "ÐÑказан"
+
+msgctxt "model:workflow.activity,name:shipmentin_act_done"
+msgid "Done"
+msgstr "ÐÑиклÑÑен"
+
+msgctxt "model:workflow.activity,name:shipmentin_act_draft"
+msgid "Draft"
+msgstr "ÐÑоекÑ"
+
+msgctxt "model:workflow.activity,name:shipmentin_act_received"
+msgid "Received"
+msgstr "ÐолÑÑен"
+
+msgctxt "model:workflow.activity,name:shipmentinternal_act_assigned"
+msgid "Assigned"
+msgstr "ÐазнаÑен"
+
+msgctxt "model:workflow.activity,name:shipmentinternal_act_cancel"
+msgid "Canceled"
+msgstr "ÐÑказан"
+
+msgctxt "model:workflow.activity,name:shipmentinternal_act_done"
+msgid "Done"
+msgstr "ÐÑиклÑÑен"
+
+msgctxt "model:workflow.activity,name:shipmentinternal_act_draft"
+msgid "Draft"
+msgstr "ÐÑоекÑ"
+
+msgctxt "model:workflow.activity,name:shipmentinternal_act_waiting"
+msgid "Waiting"
+msgstr "ÐзÑакваÑ"
+
+msgctxt "model:workflow.activity,name:shipmentout_act_assigned"
+msgid "Assigned"
+msgstr "ÐазнаÑен"
+
+msgctxt "model:workflow.activity,name:shipmentout_act_cancel"
+msgid "Canceled"
+msgstr "ÐÑказан"
+
+msgctxt "model:workflow.activity,name:shipmentout_act_done"
+msgid "Done"
+msgstr "ÐÑиклÑÑен"
+
+msgctxt "model:workflow.activity,name:shipmentout_act_draft"
+msgid "Draft"
+msgstr "ÐÑоекÑ"
+
+msgctxt "model:workflow.activity,name:shipmentout_act_packed"
+msgid "Packed"
+msgstr "Ðпакован"
+
+msgctxt "model:workflow.activity,name:shipmentout_act_waiting"
+msgid "Waiting"
+msgstr "ÐзÑакваÑ"
+
+msgctxt "odt:stock.shipment.in.restocking_list:0"
+msgid "/"
+msgstr "/"
+
+msgctxt "odt:stock.shipment.in.restocking_list:0"
+msgid "Code:"
+msgstr "Ðод:"
+
+msgctxt "odt:stock.shipment.in.restocking_list:0"
+msgid "E-Mail:"
+msgstr "E-Mail:"
+
+msgctxt "odt:stock.shipment.in.restocking_list:0"
+msgid "From Location"
+msgstr "ÐÑ Ð¼ÐµÑÑонаÑ
ождение"
+
+msgctxt "odt:stock.shipment.in.restocking_list:0"
+msgid "Phone:"
+msgstr "ТелеÑон:"
+
+msgctxt "odt:stock.shipment.in.restocking_list:0"
+msgid "Planned Date:"
+msgstr "ÐланиÑана даÑа:"
+
+msgctxt "odt:stock.shipment.in.restocking_list:0"
+msgid "Product"
+msgstr "ÐÑодÑкÑ"
+
+msgctxt "odt:stock.shipment.in.restocking_list:0"
+msgid "Quantity"
+msgstr "ÐолиÑеÑÑво"
+
+msgctxt "odt:stock.shipment.in.restocking_list:0"
+msgid "Reference:"
+msgstr "ÐÑпÑаÑка:"
+
+msgctxt "odt:stock.shipment.in.restocking_list:0"
+msgid "Restocking List"
+msgstr "СпиÑÑк за ÑвелиÑаване налиÑноÑÑ Ð½Ð° пÑодÑкÑ"
+
+msgctxt "odt:stock.shipment.in.restocking_list:0"
+msgid "Supplier:"
+msgstr "ÐоÑÑавÑик:"
+
+msgctxt "odt:stock.shipment.in.restocking_list:0"
+msgid "To Location"
+msgstr "ÐÑм меÑÑонаÑ
ождение"
+
+msgctxt "odt:stock.shipment.in.restocking_list:0"
+msgid "VAT Number:"
+msgstr ""
+
+msgctxt "odt:stock.shipment.in.restocking_list:0"
+msgid "Warehouse:"
+msgstr "Склад:"
+
+msgctxt "odt:stock.shipment.internal.report:0"
+msgid "/"
+msgstr "/"
+
+msgctxt "odt:stock.shipment.internal.report:0"
+msgid "Code:"
+msgstr "Ðод:"
+
+msgctxt "odt:stock.shipment.internal.report:0"
+msgid "E-Mail:"
+msgstr "E-Mail:"
+
+msgctxt "odt:stock.shipment.internal.report:0"
+msgid "From Location"
+msgstr "ÐÑ Ð¼ÐµÑÑонаÑ
ождение"
+
+msgctxt "odt:stock.shipment.internal.report:0"
+msgid "From Location:"
+msgstr "ÐÑ Ð¼ÐµÑÑонаÑ
ождение:"
+
+msgctxt "odt:stock.shipment.internal.report:0"
+msgid "Internal Shipment"
+msgstr "ÐÑÑÑеÑно пÑаÑка"
+
+msgctxt "odt:stock.shipment.internal.report:0"
+msgid "Phone:"
+msgstr "ТелеÑон:"
+
+msgctxt "odt:stock.shipment.internal.report:0"
+msgid "Planned Date:"
+msgstr "ÐланиÑана даÑа:"
+
+msgctxt "odt:stock.shipment.internal.report:0"
+msgid "Product"
+msgstr "ÐÑодÑкÑ"
+
+msgctxt "odt:stock.shipment.internal.report:0"
+msgid "Quantity"
+msgstr "ÐолиÑеÑÑво"
+
+msgctxt "odt:stock.shipment.internal.report:0"
+msgid "Reference:"
+msgstr "ÐÑпÑаÑка:"
+
+msgctxt "odt:stock.shipment.internal.report:0"
+msgid "To Location"
+msgstr "ÐÑм меÑÑонаÑ
ождение"
+
+msgctxt "odt:stock.shipment.internal.report:0"
+msgid "To Location:"
+msgstr "ÐÑм меÑÑонаÑ
ождение:"
+
+msgctxt "odt:stock.shipment.internal.report:0"
+msgid "VAT Number:"
+msgstr ""
+
+msgctxt "odt:stock.shipment.out.delivery_note:0"
+msgid "/"
+msgstr "/"
+
+msgctxt "odt:stock.shipment.out.delivery_note:0"
+msgid "Customer Code:"
+msgstr "Ðод на клиенÑ:"
+
+msgctxt "odt:stock.shipment.out.delivery_note:0"
+msgid "Date:"
+msgstr "ÐаÑа:"
+
+msgctxt "odt:stock.shipment.out.delivery_note:0"
+msgid "Delivery Note"
+msgstr "Ðележка кÑм доÑÑавка"
+
+msgctxt "odt:stock.shipment.out.delivery_note:0"
+msgid "E-Mail:"
+msgstr "E-Mail:"
+
+msgctxt "odt:stock.shipment.out.delivery_note:0"
+msgid "Phone:"
+msgstr "ТелеÑон:"
+
+msgctxt "odt:stock.shipment.out.delivery_note:0"
+msgid "Product"
+msgstr "ÐÑодÑкÑ"
+
+msgctxt "odt:stock.shipment.out.delivery_note:0"
+msgid "Quantity"
+msgstr "ÐолиÑеÑÑво"
+
+msgctxt "odt:stock.shipment.out.delivery_note:0"
+msgid "Reference:"
+msgstr "ÐÑпÑаÑка:"
+
+msgctxt "odt:stock.shipment.out.delivery_note:0"
+msgid "Shipment Number:"
+msgstr "ÐÐ¾Ð¼ÐµÑ Ð½Ð° пÑаÑка:"
+
+msgctxt "odt:stock.shipment.out.delivery_note:0"
+msgid "VAT Number:"
+msgstr ""
+
+msgctxt "odt:stock.shipment.out.picking_list:0"
+msgid "/"
+msgstr "/"
+
+msgctxt "odt:stock.shipment.out.picking_list:0"
+msgid "Code:"
+msgstr "Ðод:"
+
+msgctxt "odt:stock.shipment.out.picking_list:0"
+msgid "Customer:"
+msgstr "ÐлиенÑ:"
+
+msgctxt "odt:stock.shipment.out.picking_list:0"
+msgid "E-Mail:"
+msgstr "E-Mail:"
+
+msgctxt "odt:stock.shipment.out.picking_list:0"
+msgid "From Location"
+msgstr "ÐÑ Ð¼ÐµÑÑонаÑ
ождение"
+
+msgctxt "odt:stock.shipment.out.picking_list:0"
+msgid "Phone:"
+msgstr "ТелеÑон:"
+
+msgctxt "odt:stock.shipment.out.picking_list:0"
+msgid "Picking List"
+msgstr "СпиÑÑк за опаковане"
+
+msgctxt "odt:stock.shipment.out.picking_list:0"
+msgid "Planned Date:"
+msgstr "ÐланиÑана даÑа:"
+
+msgctxt "odt:stock.shipment.out.picking_list:0"
+msgid "Product"
+msgstr "ÐÑодÑкÑ"
+
+msgctxt "odt:stock.shipment.out.picking_list:0"
+msgid "Quantity"
+msgstr "ÐолиÑеÑÑво"
+
+msgctxt "odt:stock.shipment.out.picking_list:0"
+msgid "Reference:"
+msgstr "ÐÑпÑаÑка:"
+
+msgctxt "odt:stock.shipment.out.picking_list:0"
+msgid "To Location"
+msgstr "ÐÑм меÑÑонаÑ
ождение"
+
+msgctxt "odt:stock.shipment.out.picking_list:0"
+msgid "VAT Number:"
+msgstr ""
+
+msgctxt "odt:stock.shipment.out.picking_list:0"
+msgid "Warehouse:"
+msgstr "Склад:"
+
+msgctxt "odt:stock.shipment.out.return.restocking_list:0"
+msgid "/"
+msgstr "/"
+
+msgctxt "odt:stock.shipment.out.return.restocking_list:0"
+msgid "Code:"
+msgstr "Ðод:"
+
+msgctxt "odt:stock.shipment.out.return.restocking_list:0"
+msgid "E-Mail:"
+msgstr "E-Mail:"
+
+msgctxt "odt:stock.shipment.out.return.restocking_list:0"
+msgid "From Location"
+msgstr "ÐÑ Ð¼ÐµÑÑонаÑ
ождение"
+
+msgctxt "odt:stock.shipment.out.return.restocking_list:0"
+msgid "Phone:"
+msgstr "ТелеÑон:"
+
+msgctxt "odt:stock.shipment.out.return.restocking_list:0"
+msgid "Planned Date:"
+msgstr "ÐланиÑана даÑа:"
+
+msgctxt "odt:stock.shipment.out.return.restocking_list:0"
+msgid "Product"
+msgstr "ÐÑодÑкÑ"
+
+msgctxt "odt:stock.shipment.out.return.restocking_list:0"
+msgid "Quantity"
+msgstr "ÐолиÑеÑÑво"
+
+msgctxt "odt:stock.shipment.out.return.restocking_list:0"
+msgid "Reference:"
+msgstr "ÐÑпÑаÑка:"
+
+msgctxt "odt:stock.shipment.out.return.restocking_list:0"
+msgid "Restocking List"
+msgstr "СпиÑÑк за ÑвелиÑаване налиÑноÑÑ Ð½Ð° пÑодÑкÑ"
+
+msgctxt "odt:stock.shipment.out.return.restocking_list:0"
+msgid "Supplier:"
+msgstr "ÐоÑÑавÑик:"
+
+msgctxt "odt:stock.shipment.out.return.restocking_list:0"
+msgid "To Location"
+msgstr "ÐÑм меÑÑонаÑ
ождение"
+
+msgctxt "odt:stock.shipment.out.return.restocking_list:0"
+msgid "VAT Number:"
+msgstr ""
+
+msgctxt "odt:stock.shipment.out.return.restocking_list:0"
+msgid "Warehouse:"
+msgstr "Склад:"
+
+msgctxt "selection:stock.inventory,state:0"
+msgid "Canceled"
+msgstr "ÐÑказан"
+
+msgctxt "selection:stock.inventory,state:0"
+msgid "Done"
+msgstr "ÐÑиклÑÑен"
+
+msgctxt "selection:stock.inventory,state:0"
+msgid "Draft"
+msgstr "ÐÑоекÑ"
+
+msgctxt "selection:stock.location,type:0"
+msgid "Customer"
+msgstr "ÐлиенÑ"
+
+msgctxt "selection:stock.location,type:0"
+msgid "Lost and Found"
+msgstr "ÐагÑбени и намеÑени"
+
+msgctxt "selection:stock.location,type:0"
+msgid "Production"
+msgstr "ÐÑоизводÑÑво"
+
+msgctxt "selection:stock.location,type:0"
+msgid "Storage"
+msgstr "Склад"
+
+msgctxt "selection:stock.location,type:0"
+msgid "Supplier"
+msgstr "ÐоÑÑавÑик"
+
+msgctxt "selection:stock.location,type:0"
+msgid "View"
+msgstr "Ðзглед"
+
+msgctxt "selection:stock.location,type:0"
+msgid "Warehouse"
+msgstr "Склад"
+
+msgctxt "selection:stock.move,state:0"
+msgid "Assigned"
+msgstr "ÐазнаÑен"
+
+msgctxt "selection:stock.move,state:0"
+msgid "Canceled"
+msgstr "ÐÑказан"
+
+msgctxt "selection:stock.move,state:0"
+msgid "Done"
+msgstr "ÐÑиклÑÑен"
+
+msgctxt "selection:stock.move,state:0"
+msgid "Draft"
+msgstr "ÐÑоекÑ"
+
+msgctxt "selection:stock.period,state:0"
+msgid "Closed"
+msgstr "ÐÑиклÑÑен"
+
+msgctxt "selection:stock.period,state:0"
+msgid "Draft"
+msgstr "ÐÑоекÑ"
+
+msgctxt "selection:stock.shipment.in,state:0"
+msgid "Canceled"
+msgstr "ÐÑказан"
+
+msgctxt "selection:stock.shipment.in,state:0"
+msgid "Done"
+msgstr "ÐÑиклÑÑен"
+
+msgctxt "selection:stock.shipment.in,state:0"
+msgid "Draft"
+msgstr "ÐÑоекÑ"
+
+msgctxt "selection:stock.shipment.in,state:0"
+msgid "Received"
+msgstr "ÐолÑÑен"
+
+msgctxt "selection:stock.shipment.in.return,state:0"
+msgid "Assigned"
+msgstr "ÐазнаÑен"
+
+msgctxt "selection:stock.shipment.in.return,state:0"
+msgid "Canceled"
+msgstr "ÐÑказан"
+
+msgctxt "selection:stock.shipment.in.return,state:0"
+msgid "Done"
+msgstr "ÐÑиклÑÑен"
+
+msgctxt "selection:stock.shipment.in.return,state:0"
+msgid "Draft"
+msgstr "ÐÑоекÑ"
+
+msgctxt "selection:stock.shipment.in.return,state:0"
+msgid "Waiting"
+msgstr "ÐзÑакваÑ"
+
+msgctxt "selection:stock.shipment.internal,state:0"
+msgid "Assigned"
+msgstr "ÐазнаÑен"
+
+msgctxt "selection:stock.shipment.internal,state:0"
+msgid "Canceled"
+msgstr "ÐÑказан"
+
+msgctxt "selection:stock.shipment.internal,state:0"
+msgid "Done"
+msgstr "ÐÑиклÑÑен"
+
+msgctxt "selection:stock.shipment.internal,state:0"
+msgid "Draft"
+msgstr "ÐÑоекÑ"
+
+msgctxt "selection:stock.shipment.internal,state:0"
+msgid "Waiting"
+msgstr "ÐзÑакваÑ"
+
+msgctxt "selection:stock.shipment.out,state:0"
+msgid "Assigned"
+msgstr "ÐазнаÑен"
+
+msgctxt "selection:stock.shipment.out,state:0"
+msgid "Canceled"
+msgstr "ÐÑказан"
+
+msgctxt "selection:stock.shipment.out,state:0"
+msgid "Done"
+msgstr "ÐÑиклÑÑен"
+
+msgctxt "selection:stock.shipment.out,state:0"
+msgid "Draft"
+msgstr "ÐÑоекÑ"
+
+msgctxt "selection:stock.shipment.out,state:0"
+msgid "Packed"
+msgstr "Ðпакован"
+
+msgctxt "selection:stock.shipment.out,state:0"
+msgid "Waiting"
+msgstr "ÐзÑакваÑ"
+
+msgctxt "selection:stock.shipment.out.return,state:0"
+msgid "Canceled"
+msgstr "ÐÑказан"
+
+msgctxt "selection:stock.shipment.out.return,state:0"
+msgid "Done"
+msgstr "ÐÑиклÑÑен"
+
+msgctxt "selection:stock.shipment.out.return,state:0"
+msgid "Draft"
+msgstr "ÐÑоекÑ"
+
+msgctxt "selection:stock.shipment.out.return,state:0"
+msgid "Received"
+msgstr "ÐолÑÑен"
+
+msgctxt "view:party.party:0"
+msgid "Stock"
+msgstr "ÐалиÑноÑÑ"
+
+msgctxt "view:product.product:0"
+msgid "Products"
+msgstr "ÐÑодÑкÑи"
+
+msgctxt "view:stock.configuration:0"
+msgid "Stock Configuration"
+msgstr "ÐонÑигÑÑиÑане на налиÑноÑÑ"
+
+msgctxt "view:stock.inventory.line:0"
+msgid "Inventory Line"
+msgstr "Ред Ð¾Ñ Ð¸Ð½Ð²ÐµÐ½ÑаÑизаÑиÑ"
+
+msgctxt "view:stock.inventory.line:0"
+msgid "Inventory Lines"
+msgstr "Редове Ð¾Ñ Ð¸Ð½Ð²ÐµÐ½ÑаÑизаÑиÑ"
+
+msgctxt "view:stock.inventory:0"
+msgid "Add an inventory line for each missing products"
+msgstr "ÐобавÑне на Ñед Ð¾Ñ Ð¸Ð½Ð²ÐµÐ½ÑаÑизаÑÐ¸Ñ Ð·Ð° вÑеки липÑÐ²Ð°Ñ Ð¿ÑодÑкÑ"
+
+msgctxt "view:stock.inventory:0"
+msgid "Cancel"
+msgstr "ÐÑказ"
+
+msgctxt "view:stock.inventory:0"
+msgid "Complete Inventory"
+msgstr "ÐÑлна инвенÑаÑизаÑиÑ"
+
+msgctxt "view:stock.inventory:0"
+msgid "Confirm"
+msgstr "ÐоÑвÑÑждаване"
+
+msgctxt "view:stock.inventory:0"
+msgid "Inventories"
+msgstr "ÐнвенÑаÑизаÑии"
+
+msgctxt "view:stock.inventory:0"
+msgid "Inventory"
+msgstr "ÐнвенÑаÑизаÑиÑ"
+
+msgctxt "view:stock.location:0"
+msgid "Location"
+msgstr "ÐеÑÑоположение"
+
+msgctxt "view:stock.location:0"
+msgid "Locations"
+msgstr "ÐеÑÑонаÑ
ождениÑ"
+
+msgctxt "view:stock.location:0"
+msgid "Product Stock"
+msgstr "ÐалиÑноÑÑ Ð½Ð° пÑодÑкÑ"
+
+msgctxt "view:stock.location_stock_date.init:0"
+msgid "Product Quantity."
+msgstr "ÐолиÑеÑÑво пÑодÑкÑ"
+
+msgctxt "view:stock.move:0"
+msgid "Move"
+msgstr "Ðвижение"
+
+msgctxt "view:stock.move:0"
+msgid "Moves"
+msgstr "ÐвижениÑ"
+
+msgctxt "view:stock.period.cache:0"
+msgid "Period Cache"
+msgstr ""
+
+msgctxt "view:stock.period.cache:0"
+msgid "Period Caches"
+msgstr ""
+
+#, fuzzy
+msgctxt "view:stock.period:0"
+msgid "Close"
+msgstr "ÐаÑваÑÑне"
+
+#, fuzzy
+msgctxt "view:stock.period:0"
+msgid "Draft"
+msgstr "ÐÑоекÑ"
+
+#, fuzzy
+msgctxt "view:stock.period:0"
+msgid "Period"
+msgstr "ÐеÑиод"
+
+#, fuzzy
+msgctxt "view:stock.period:0"
+msgid "Periods"
+msgstr "ÐеÑиоди"
+
+msgctxt "view:stock.product_stock_date.init:0"
+msgid "Product Quantity."
+msgstr "ÐолиÑеÑÑво пÑодÑкÑ"
+
+msgctxt "view:stock.shipment.in.return.assign.assign_failed:0"
+msgid "Moves"
+msgstr "ÐвижениÑ"
+
+msgctxt "view:stock.shipment.in.return.assign.assign_failed:0"
+msgid "Unable to Assign"
+msgstr "ÐевÑзможен доÑÑÑп"
+
+msgctxt "view:stock.shipment.in.return.assign.assign_failed:0"
+msgid "Unable to assign those products:"
+msgstr "Ðе Ð¼Ð¾Ð³Ð°Ñ Ð´Ð° бÑÐ´Ð°Ñ Ð½Ð°Ð·Ð½Ð°Ñени ÑледниÑе пÑодÑкÑи:"
+
+msgctxt "view:stock.shipment.in.return:0"
+msgid "Assign"
+msgstr "ÐазнаÑаване"
+
+msgctxt "view:stock.shipment.in.return:0"
+msgid "Cancel"
+msgstr "ÐÑказ"
+
+msgctxt "view:stock.shipment.in.return:0"
+msgid "Done"
+msgstr "ÐÑиклÑÑен"
+
+msgctxt "view:stock.shipment.in.return:0"
+msgid "Draft"
+msgstr "ÐÑоекÑ"
+
+msgctxt "view:stock.shipment.in.return:0"
+msgid "Reset to Draft"
+msgstr "ÐзпÑаÑане в пÑоекÑ"
+
+msgctxt "view:stock.shipment.in.return:0"
+msgid "Supplier Return Shipment"
+msgstr "ÐÑаÑка вÑÑнаÑа на доÑÑавÑик"
+
+msgctxt "view:stock.shipment.in.return:0"
+msgid "Supplier Return Shipments"
+msgstr "ÐÑаÑка вÑÑнаÑа на доÑÑавÑик"
+
+msgctxt "view:stock.shipment.in.return:0"
+msgid "Waiting"
+msgstr "ÐзÑакваÑ"
+
+msgctxt "view:stock.shipment.in:0"
+msgid "Cancel"
+msgstr "ÐÑказ"
+
+msgctxt "view:stock.shipment.in:0"
+msgid "Done"
+msgstr "ÐÑиклÑÑен"
+
+msgctxt "view:stock.shipment.in:0"
+msgid "Incoming Moves"
+msgstr "ÐÑ
одÑÑи движениÑ"
+
+msgctxt "view:stock.shipment.in:0"
+msgid "Inventory Moves"
+msgstr "ÐÐ²Ð¸Ð¶ÐµÐ½Ð¸Ñ Ð½Ð° инвенÑаÑизаÑиÑ"
+
+msgctxt "view:stock.shipment.in:0"
+msgid "Moves"
+msgstr "ÐвижениÑ"
+
+msgctxt "view:stock.shipment.in:0"
+msgid "Received"
+msgstr "ÐолÑÑен"
+
+msgctxt "view:stock.shipment.in:0"
+msgid "Reset to Draft"
+msgstr "ÐзпÑаÑане в пÑоекÑ"
+
+msgctxt "view:stock.shipment.in:0"
+msgid "Supplier Shipment"
+msgstr "ÐÑаÑка на доÑÑавÑик"
+
+msgctxt "view:stock.shipment.in:0"
+msgid "Supplier Shipments"
+msgstr "ÐÑаÑки на доÑÑавÑик"
+
+msgctxt "view:stock.shipment.internal.assign.assign_failed:0"
+msgid "Moves"
+msgstr "ÐвижениÑ"
+
+msgctxt "view:stock.shipment.internal.assign.assign_failed:0"
+msgid "Unable to Assign"
+msgstr "ÐевÑзможен доÑÑÑп"
+
+msgctxt "view:stock.shipment.internal.assign.assign_failed:0"
+msgid "Unable to assign those products:"
+msgstr "Ðе Ð¼Ð¾Ð³Ð°Ñ Ð´Ð° бÑÐ´Ð°Ñ Ð½Ð°Ð·Ð½Ð°Ñени ÑледниÑе пÑодÑкÑи:"
+
+msgctxt "view:stock.shipment.internal:0"
+msgid "Assign"
+msgstr "ÐазнаÑаване"
+
+msgctxt "view:stock.shipment.internal:0"
+msgid "Cancel"
+msgstr "ÐÑказ"
+
+msgctxt "view:stock.shipment.internal:0"
+msgid "Done"
+msgstr "ÐÑиклÑÑен"
+
+msgctxt "view:stock.shipment.internal:0"
+msgid "Draft"
+msgstr "ÐÑоекÑ"
+
+msgctxt "view:stock.shipment.internal:0"
+msgid "Internal Shipment"
+msgstr "ÐÑÑÑеÑна пÑаÑка"
+
+msgctxt "view:stock.shipment.internal:0"
+msgid "Internal Shipments"
+msgstr "ÐÑÑÑеÑни пÑаÑки"
+
+msgctxt "view:stock.shipment.internal:0"
+msgid "Reset to Draft"
+msgstr "ÐзпÑаÑане в пÑоекÑ"
+
+msgctxt "view:stock.shipment.internal:0"
+msgid "Waiting"
+msgstr "ÐзÑакваÑ"
+
+msgctxt "view:stock.shipment.out.assign.assign_failed:0"
+msgid "Inventory Moves"
+msgstr "ÐÐ²Ð¸Ð¶ÐµÐ½Ð¸Ñ Ð½Ð° инвенÑаÑизаÑиÑ"
+
+msgctxt "view:stock.shipment.out.assign.assign_failed:0"
+msgid "Unable to Assign"
+msgstr "ÐевÑзможен доÑÑÑп"
+
+msgctxt "view:stock.shipment.out.assign.assign_failed:0"
+msgid "Unable to assign those products:"
+msgstr "Ðе Ð¼Ð¾Ð³Ð°Ñ Ð´Ð° бÑÐ´Ð°Ñ Ð½Ð°Ð·Ð½Ð°Ñени ÑледниÑе пÑодÑкÑи:"
+
+msgctxt "view:stock.shipment.out.return:0"
+msgid "Cancel"
+msgstr "ÐÑказ"
+
+msgctxt "view:stock.shipment.out.return:0"
+msgid "Customer Return Shipment"
+msgstr "ÐÑаÑка вÑÑнаÑа Ð¾Ñ ÐºÐ»Ð¸ÐµÐ½Ñ"
+
+msgctxt "view:stock.shipment.out.return:0"
+msgid "Customer Return Shipments"
+msgstr "ÐÑаÑки вÑÑнаÑи Ð¾Ñ ÐºÐ»Ð¸ÐµÐ½Ñ"
+
+msgctxt "view:stock.shipment.out.return:0"
+msgid "Done"
+msgstr "ÐÑиклÑÑен"
+
+msgctxt "view:stock.shipment.out.return:0"
+msgid "Incoming Moves"
+msgstr "ÐÑ
одÑÑи движениÑ"
+
+msgctxt "view:stock.shipment.out.return:0"
+msgid "Inventory Moves"
+msgstr "ÐÐ²Ð¸Ð¶ÐµÐ½Ð¸Ñ Ð½Ð° инвенÑаÑизаÑиÑ"
+
+msgctxt "view:stock.shipment.out.return:0"
+msgid "Moves"
+msgstr "ÐвижениÑ"
+
+msgctxt "view:stock.shipment.out.return:0"
+msgid "Received"
+msgstr "ÐолÑÑен"
+
+msgctxt "view:stock.shipment.out.return:0"
+msgid "Reset to Draft"
+msgstr "ÐзпÑаÑане в пÑоекÑ"
+
+msgctxt "view:stock.shipment.out:0"
+msgid "Assign"
+msgstr "ÐазнаÑаване"
+
+msgctxt "view:stock.shipment.out:0"
+msgid "Cancel"
+msgstr "ÐÑказ"
+
+msgctxt "view:stock.shipment.out:0"
+msgid "Customer Shipment"
+msgstr "ÐÑаÑка за клиенÑ"
+
+msgctxt "view:stock.shipment.out:0"
+msgid "Customer Shipments"
+msgstr "ÐÑаÑки за клиенÑи"
+
+msgctxt "view:stock.shipment.out:0"
+msgid "Done"
+msgstr "ÐÑиклÑÑен"
+
+msgctxt "view:stock.shipment.out:0"
+msgid "Draft"
+msgstr "ÐÑоекÑ"
+
+msgctxt "view:stock.shipment.out:0"
+msgid "Inventory Moves"
+msgstr "ÐÐ²Ð¸Ð¶ÐµÐ½Ð¸Ñ Ð½Ð° инвенÑаÑизаÑиÑ"
+
+msgctxt "view:stock.shipment.out:0"
+msgid "Make shipment"
+msgstr "СÑздаване на изпÑаÑане"
+
+msgctxt "view:stock.shipment.out:0"
+msgid "Outgoing Moves"
+msgstr "ÐзÑ
одÑÑи движениÑ"
+
+msgctxt "view:stock.shipment.out:0"
+msgid "Reset to Draft"
+msgstr "ÐзпÑаÑане в пÑоекÑ"
+
+msgctxt "view:stock.shipment.out:0"
+msgid "Waiting"
+msgstr "ÐзÑакваÑ"
+
+msgctxt "wizard_button:stock.location.open,init,end:0"
+msgid "Cancel"
+msgstr "ÐÑказ"
+
+msgctxt "wizard_button:stock.location.open,init,open:0"
+msgid "Open"
+msgstr "ÐÑваÑÑне"
+
+msgctxt "wizard_button:stock.product.open,init,end:0"
+msgid "Cancel"
+msgstr "ÐÑказ"
+
+msgctxt "wizard_button:stock.product.open,init,open:0"
+msgid "Open"
+msgstr "ÐÑваÑÑне"
+
+msgctxt "wizard_button:stock.shipment.in.return.assign,ask_force,end:0"
+msgid "Ok"
+msgstr "ÐобÑе"
+
+msgctxt "wizard_button:stock.shipment.in.return.assign,ask_force,force:0"
+msgid "Force Assign"
+msgstr "СÑздай изÑиÑно назнаÑение"
+
+msgctxt "wizard_button:stock.shipment.in.return.assign,assign_failed,end:0"
+msgid "Ok"
+msgstr "ÐобÑе"
+
+msgctxt "wizard_button:stock.shipment.internal.assign,ask_force,end:0"
+msgid "Ok"
+msgstr "ÐобÑе"
+
+msgctxt "wizard_button:stock.shipment.internal.assign,ask_force,force:0"
+msgid "Force Assign"
+msgstr "СÑздай изÑиÑно назнаÑение"
+
+msgctxt "wizard_button:stock.shipment.internal.assign,assign_failed,end:0"
+msgid "Ok"
+msgstr "ÐобÑе"
+
+msgctxt "wizard_button:stock.shipment.out.assign,ask_force,end:0"
+msgid "Ok"
+msgstr "ÐобÑе"
+
+msgctxt "wizard_button:stock.shipment.out.assign,ask_force,force:0"
+msgid "Force Assign"
+msgstr "СÑздай изÑиÑно назнаÑение"
+
+msgctxt "wizard_button:stock.shipment.out.assign,assign_failed,end:0"
+msgid "Ok"
+msgstr "ÐобÑе"
diff --git a/locale/cs_CZ.po b/locale/cs_CZ.po
new file mode 100644
index 0000000..dd5392d
--- /dev/null
+++ b/locale/cs_CZ.po
@@ -0,0 +1,2035 @@
+#
+msgid ""
+msgstr "Content-Type: text/plain; charset=utf-8\n"
+
+msgctxt "error:product.template:0"
+msgid ""
+"You cannot change the default uom for a product which is associated to stock"
+" moves."
+msgstr ""
+
+msgctxt "error:stock.inventory.line:0"
+msgid "Line quantity must be positive!"
+msgstr ""
+
+msgctxt "error:stock.inventory.line:0"
+msgid "Product must be unique by inventory!"
+msgstr ""
+
+msgctxt "error:stock.location:0"
+msgid ""
+"A location with existing moves cannot be changed to a type that does not "
+"support moves."
+msgstr ""
+
+msgctxt "error:stock.location:0"
+msgid "Location \"%s\" must be a child of warehouse \"%s\"!"
+msgstr ""
+
+msgctxt "error:stock.location:0"
+msgid "You can not create recursive locations!"
+msgstr ""
+
+msgctxt "error:stock.move:0"
+msgid "Internal move quantity must be positive"
+msgstr ""
+
+msgctxt "error:stock.move:0"
+msgid "Move can be on only one Shipment"
+msgstr ""
+
+msgctxt "error:stock.move:0"
+msgid "Move quantity must be positive"
+msgstr ""
+
+msgctxt "error:stock.move:0"
+msgid "Source and destination location must be different"
+msgstr ""
+
+msgctxt "error:stock.move:0"
+msgid "You can not modify a move in the state: \"Assigned\", \"Done\" or \"Cancel\""
+msgstr ""
+
+msgctxt "error:stock.move:0"
+msgid "You can not modify move in closed period!"
+msgstr ""
+
+msgctxt "error:stock.move:0"
+msgid "You can not set state to assigned!"
+msgstr ""
+
+msgctxt "error:stock.move:0"
+msgid "You can not set state to done!"
+msgstr ""
+
+msgctxt "error:stock.move:0"
+msgid "You can not set state to draft!"
+msgstr ""
+
+msgctxt "error:stock.move:0"
+msgid "You can not use service products for a move!"
+msgstr ""
+
+msgctxt "error:stock.move:0"
+msgid "You can only delete draft or cancelled moves!"
+msgstr ""
+
+msgctxt "error:stock.period:0"
+msgid "You can not close a period in the future or today!"
+msgstr ""
+
+msgctxt "error:stock.period:0"
+msgid "You can not close a period when there is still assigned moves!"
+msgstr ""
+
+msgctxt "error:stock.shipment.in:0"
+msgid ""
+"Incoming Moves must have the warehouse input location as destination "
+"location!"
+msgstr ""
+
+msgctxt "error:stock.shipment.in:0"
+msgid ""
+"Inventory Moves must have the warehouse input location as source location!"
+msgstr ""
+
+msgctxt "error:stock.shipment.out.return.create:0"
+msgid "The shipment with code %s is not yet sent."
+msgstr ""
+
+msgctxt "error:stock.shipment.out.return.create:0"
+msgid "You can not create return shipment"
+msgstr ""
+
+msgctxt "error:stock.shipment.out.return:0"
+msgid ""
+"Incoming Moves must have the warehouse input location as destination "
+"location!"
+msgstr ""
+
+msgctxt "error:stock.shipment.out.return:0"
+msgid ""
+"Inventory Moves must have the warehouse input location as source location!"
+msgstr ""
+
+msgctxt "error:stock.shipment.out:0"
+msgid ""
+"Inventory Moves must have the warehouse output location as destination "
+"location!"
+msgstr ""
+
+msgctxt "error:stock.shipment.out:0"
+msgid ""
+"Outgoing Moves must have the warehouse output location as source location!"
+msgstr ""
+
+msgctxt "field:party.address,delivery:0"
+msgid "Delivery"
+msgstr ""
+
+msgctxt "field:party.party,customer_location:0"
+msgid "Customer Location"
+msgstr ""
+
+msgctxt "field:party.party,supplier_location:0"
+msgid "Supplier Location"
+msgstr ""
+
+msgctxt "field:product.product,forecast_quantity:0"
+msgid "Forecast Quantity"
+msgstr ""
+
+msgctxt "field:product.product,quantity:0"
+msgid "Quantity"
+msgstr ""
+
+msgctxt "field:product.template,forecast_quantity:0"
+msgid "Forecast Quantity"
+msgstr ""
+
+msgctxt "field:product.template,quantity:0"
+msgid "Quantity"
+msgstr ""
+
+msgctxt "field:stock.configuration,rec_name:0"
+msgid "Name"
+msgstr ""
+
+msgctxt "field:stock.configuration,shipment_in_return_sequence:0"
+msgid "Supplier Return Shipment Sequence"
+msgstr ""
+
+msgctxt "field:stock.configuration,shipment_in_sequence:0"
+msgid "Supplier Shipment Sequence"
+msgstr ""
+
+msgctxt "field:stock.configuration,shipment_internal_sequence:0"
+msgid "Internal Shipment Sequence"
+msgstr ""
+
+msgctxt "field:stock.configuration,shipment_out_return_sequence:0"
+msgid "Customer Return Shipment Sequence"
+msgstr ""
+
+msgctxt "field:stock.configuration,shipment_out_sequence:0"
+msgid "Customer Shipment Sequence"
+msgstr ""
+
+msgctxt "field:stock.inventory,company:0"
+msgid "Company"
+msgstr ""
+
+msgctxt "field:stock.inventory,date:0"
+msgid "Date"
+msgstr ""
+
+msgctxt "field:stock.inventory,lines:0"
+msgid "Lines"
+msgstr ""
+
+msgctxt "field:stock.inventory,location:0"
+msgid "Location"
+msgstr ""
+
+msgctxt "field:stock.inventory,lost_found:0"
+msgid "Lost and Found"
+msgstr ""
+
+msgctxt "field:stock.inventory,rec_name:0"
+msgid "Name"
+msgstr ""
+
+msgctxt "field:stock.inventory,state:0"
+msgid "State"
+msgstr ""
+
+msgctxt "field:stock.inventory.line,expected_quantity:0"
+msgid "Expected Quantity"
+msgstr ""
+
+msgctxt "field:stock.inventory.line,inventory:0"
+msgid "Inventory"
+msgstr ""
+
+msgctxt "field:stock.inventory.line,move:0"
+msgid "Move"
+msgstr ""
+
+msgctxt "field:stock.inventory.line,product:0"
+msgid "Product"
+msgstr ""
+
+msgctxt "field:stock.inventory.line,quantity:0"
+msgid "Quantity"
+msgstr ""
+
+msgctxt "field:stock.inventory.line,rec_name:0"
+msgid "Name"
+msgstr ""
+
+msgctxt "field:stock.inventory.line,unit_digits:0"
+msgid "Unit Digits"
+msgstr ""
+
+msgctxt "field:stock.inventory.line,uom:0"
+msgid "UOM"
+msgstr ""
+
+msgctxt "field:stock.location,active:0"
+msgid "Active"
+msgstr ""
+
+msgctxt "field:stock.location,address:0"
+msgid "Address"
+msgstr ""
+
+msgctxt "field:stock.location,childs:0"
+msgid "Children"
+msgstr ""
+
+msgctxt "field:stock.location,code:0"
+msgid "Code"
+msgstr ""
+
+msgctxt "field:stock.location,forecast_quantity:0"
+msgid "Forecast Quantity"
+msgstr ""
+
+msgctxt "field:stock.location,input_location:0"
+msgid "Input"
+msgstr ""
+
+msgctxt "field:stock.location,left:0"
+msgid "Left"
+msgstr ""
+
+msgctxt "field:stock.location,name:0"
+msgid "Name"
+msgstr ""
+
+msgctxt "field:stock.location,output_location:0"
+msgid "Output"
+msgstr ""
+
+msgctxt "field:stock.location,parent:0"
+msgid "Parent"
+msgstr ""
+
+msgctxt "field:stock.location,quantity:0"
+msgid "Quantity"
+msgstr ""
+
+msgctxt "field:stock.location,rec_name:0"
+msgid "Name"
+msgstr ""
+
+msgctxt "field:stock.location,right:0"
+msgid "Right"
+msgstr ""
+
+msgctxt "field:stock.location,storage_location:0"
+msgid "Storage"
+msgstr ""
+
+msgctxt "field:stock.location,type:0"
+msgid "Location type"
+msgstr ""
+
+msgctxt "field:stock.location_stock_date.init,forecast_date:0"
+msgid "At Date"
+msgstr ""
+
+msgctxt "field:stock.move,company:0"
+msgid "Company"
+msgstr ""
+
+msgctxt "field:stock.move,cost_price:0"
+msgid "Cost Price"
+msgstr ""
+
+msgctxt "field:stock.move,currency:0"
+msgid "Currency"
+msgstr ""
+
+msgctxt "field:stock.move,effective_date:0"
+msgid "Effective Date"
+msgstr ""
+
+msgctxt "field:stock.move,from_location:0"
+msgid "From Location"
+msgstr ""
+
+msgctxt "field:stock.move,internal_quantity:0"
+msgid "Internal Quantity"
+msgstr ""
+
+msgctxt "field:stock.move,planned_date:0"
+msgid "Planned Date"
+msgstr ""
+
+msgctxt "field:stock.move,product:0"
+msgid "Product"
+msgstr ""
+
+msgctxt "field:stock.move,quantity:0"
+msgid "Quantity"
+msgstr ""
+
+msgctxt "field:stock.move,rec_name:0"
+msgid "Name"
+msgstr ""
+
+msgctxt "field:stock.move,shipment_in:0"
+msgid "Supplier Shipment"
+msgstr ""
+
+msgctxt "field:stock.move,shipment_in_return:0"
+msgid "Supplier Return Shipment"
+msgstr ""
+
+msgctxt "field:stock.move,shipment_internal:0"
+msgid "Internal Shipment"
+msgstr ""
+
+msgctxt "field:stock.move,shipment_out:0"
+msgid "Customer Shipment"
+msgstr ""
+
+msgctxt "field:stock.move,shipment_out_return:0"
+msgid "Customer Return Shipment"
+msgstr ""
+
+msgctxt "field:stock.move,state:0"
+msgid "State"
+msgstr ""
+
+msgctxt "field:stock.move,to_location:0"
+msgid "To Location"
+msgstr ""
+
+msgctxt "field:stock.move,unit_digits:0"
+msgid "Unit Digits"
+msgstr ""
+
+msgctxt "field:stock.move,unit_price:0"
+msgid "Unit Price"
+msgstr ""
+
+msgctxt "field:stock.move,unit_price_required:0"
+msgid "Unit Price Required"
+msgstr ""
+
+msgctxt "field:stock.move,uom:0"
+msgid "Uom"
+msgstr ""
+
+msgctxt "field:stock.period,caches:0"
+msgid "Caches"
+msgstr ""
+
+msgctxt "field:stock.period,company:0"
+msgid "Company"
+msgstr ""
+
+msgctxt "field:stock.period,date:0"
+msgid "Date"
+msgstr ""
+
+msgctxt "field:stock.period,rec_name:0"
+msgid "Name"
+msgstr ""
+
+msgctxt "field:stock.period,state:0"
+msgid "State"
+msgstr ""
+
+msgctxt "field:stock.period.cache,internal_quantity:0"
+msgid "Internal Quantity"
+msgstr ""
+
+msgctxt "field:stock.period.cache,location:0"
+msgid "Location"
+msgstr ""
+
+msgctxt "field:stock.period.cache,period:0"
+msgid "Period"
+msgstr ""
+
+msgctxt "field:stock.period.cache,product:0"
+msgid "Product"
+msgstr ""
+
+msgctxt "field:stock.period.cache,rec_name:0"
+msgid "Name"
+msgstr ""
+
+msgctxt "field:stock.product_stock_date.init,forecast_date:0"
+msgid "At Date"
+msgstr ""
+
+msgctxt "field:stock.shipment.in,code:0"
+msgid "Code"
+msgstr ""
+
+msgctxt "field:stock.shipment.in,company:0"
+msgid "Company"
+msgstr ""
+
+msgctxt "field:stock.shipment.in,contact_address:0"
+msgid "Contact Address"
+msgstr ""
+
+msgctxt "field:stock.shipment.in,effective_date:0"
+msgid "Effective Date"
+msgstr ""
+
+msgctxt "field:stock.shipment.in,incoming_moves:0"
+msgid "Incoming Moves"
+msgstr ""
+
+msgctxt "field:stock.shipment.in,inventory_moves:0"
+msgid "Inventory Moves"
+msgstr ""
+
+msgctxt "field:stock.shipment.in,moves:0"
+msgid "Moves"
+msgstr ""
+
+msgctxt "field:stock.shipment.in,planned_date:0"
+msgid "Planned Date"
+msgstr ""
+
+msgctxt "field:stock.shipment.in,rec_name:0"
+msgid "Name"
+msgstr ""
+
+msgctxt "field:stock.shipment.in,reference:0"
+msgid "Reference"
+msgstr ""
+
+msgctxt "field:stock.shipment.in,state:0"
+msgid "State"
+msgstr ""
+
+msgctxt "field:stock.shipment.in,supplier:0"
+msgid "Supplier"
+msgstr ""
+
+msgctxt "field:stock.shipment.in,warehouse:0"
+msgid "Warehouse"
+msgstr ""
+
+msgctxt "field:stock.shipment.in.return,code:0"
+msgid "Code"
+msgstr ""
+
+msgctxt "field:stock.shipment.in.return,company:0"
+msgid "Company"
+msgstr ""
+
+msgctxt "field:stock.shipment.in.return,effective_date:0"
+msgid "Effective Date"
+msgstr ""
+
+msgctxt "field:stock.shipment.in.return,from_location:0"
+msgid "From Location"
+msgstr ""
+
+msgctxt "field:stock.shipment.in.return,moves:0"
+msgid "Moves"
+msgstr ""
+
+msgctxt "field:stock.shipment.in.return,planned_date:0"
+msgid "Planned Date"
+msgstr ""
+
+msgctxt "field:stock.shipment.in.return,rec_name:0"
+msgid "Name"
+msgstr ""
+
+msgctxt "field:stock.shipment.in.return,reference:0"
+msgid "Reference"
+msgstr ""
+
+msgctxt "field:stock.shipment.in.return,state:0"
+msgid "State"
+msgstr ""
+
+msgctxt "field:stock.shipment.in.return,to_location:0"
+msgid "To Location"
+msgstr ""
+
+msgctxt "field:stock.shipment.in.return.assign.assign_failed,moves:0"
+msgid "Moves"
+msgstr ""
+
+msgctxt "field:stock.shipment.internal,code:0"
+msgid "Code"
+msgstr ""
+
+msgctxt "field:stock.shipment.internal,company:0"
+msgid "Company"
+msgstr ""
+
+msgctxt "field:stock.shipment.internal,effective_date:0"
+msgid "Effective Date"
+msgstr ""
+
+msgctxt "field:stock.shipment.internal,from_location:0"
+msgid "From Location"
+msgstr ""
+
+msgctxt "field:stock.shipment.internal,moves:0"
+msgid "Moves"
+msgstr ""
+
+msgctxt "field:stock.shipment.internal,planned_date:0"
+msgid "Planned Date"
+msgstr ""
+
+msgctxt "field:stock.shipment.internal,rec_name:0"
+msgid "Name"
+msgstr ""
+
+msgctxt "field:stock.shipment.internal,reference:0"
+msgid "Reference"
+msgstr ""
+
+msgctxt "field:stock.shipment.internal,state:0"
+msgid "State"
+msgstr ""
+
+msgctxt "field:stock.shipment.internal,to_location:0"
+msgid "To Location"
+msgstr ""
+
+msgctxt "field:stock.shipment.internal.assign.assign_failed,moves:0"
+msgid "Moves"
+msgstr ""
+
+msgctxt "field:stock.shipment.out,code:0"
+msgid "Code"
+msgstr ""
+
+msgctxt "field:stock.shipment.out,company:0"
+msgid "Company"
+msgstr ""
+
+msgctxt "field:stock.shipment.out,customer:0"
+msgid "Customer"
+msgstr ""
+
+msgctxt "field:stock.shipment.out,delivery_address:0"
+msgid "Delivery Address"
+msgstr ""
+
+msgctxt "field:stock.shipment.out,effective_date:0"
+msgid "Effective Date"
+msgstr ""
+
+msgctxt "field:stock.shipment.out,inventory_moves:0"
+msgid "Inventory Moves"
+msgstr ""
+
+msgctxt "field:stock.shipment.out,moves:0"
+msgid "Moves"
+msgstr ""
+
+msgctxt "field:stock.shipment.out,outgoing_moves:0"
+msgid "Outgoing Moves"
+msgstr ""
+
+msgctxt "field:stock.shipment.out,planned_date:0"
+msgid "Planned Date"
+msgstr ""
+
+msgctxt "field:stock.shipment.out,rec_name:0"
+msgid "Name"
+msgstr ""
+
+msgctxt "field:stock.shipment.out,reference:0"
+msgid "Reference"
+msgstr ""
+
+msgctxt "field:stock.shipment.out,state:0"
+msgid "State"
+msgstr ""
+
+msgctxt "field:stock.shipment.out,warehouse:0"
+msgid "Warehouse"
+msgstr ""
+
+msgctxt "field:stock.shipment.out.assign.assign_failed,inventory_moves:0"
+msgid "Inventory Moves"
+msgstr ""
+
+msgctxt "field:stock.shipment.out.return,code:0"
+msgid "Code"
+msgstr ""
+
+msgctxt "field:stock.shipment.out.return,company:0"
+msgid "Company"
+msgstr ""
+
+msgctxt "field:stock.shipment.out.return,customer:0"
+msgid "Customer"
+msgstr ""
+
+msgctxt "field:stock.shipment.out.return,delivery_address:0"
+msgid "Delivery Address"
+msgstr ""
+
+msgctxt "field:stock.shipment.out.return,effective_date:0"
+msgid "Effective Date"
+msgstr ""
+
+msgctxt "field:stock.shipment.out.return,incoming_moves:0"
+msgid "Incoming Moves"
+msgstr ""
+
+msgctxt "field:stock.shipment.out.return,inventory_moves:0"
+msgid "Inventory Moves"
+msgstr ""
+
+msgctxt "field:stock.shipment.out.return,moves:0"
+msgid "Moves"
+msgstr ""
+
+msgctxt "field:stock.shipment.out.return,planned_date:0"
+msgid "Planned Date"
+msgstr ""
+
+msgctxt "field:stock.shipment.out.return,rec_name:0"
+msgid "Name"
+msgstr ""
+
+msgctxt "field:stock.shipment.out.return,reference:0"
+msgid "Reference"
+msgstr ""
+
+msgctxt "field:stock.shipment.out.return,state:0"
+msgid "State"
+msgstr ""
+
+msgctxt "field:stock.shipment.out.return,warehouse:0"
+msgid "Warehouse"
+msgstr ""
+
+msgctxt "help:party.party,customer_location:0"
+msgid "The default destination location when sending products to the party."
+msgstr ""
+
+msgctxt "help:party.party,supplier_location:0"
+msgid "The default source location when receiving products from the party."
+msgstr ""
+
+msgctxt "help:stock.location_stock_date.init,forecast_date:0"
+msgid ""
+"Allow to compute expected stock quantities for this date.\n"
+"* An empty value is an infinite date in the future.\n"
+"* A date in the past will provide historical values."
+msgstr ""
+
+msgctxt "help:stock.product_stock_date.init,forecast_date:0"
+msgid ""
+"Allow to compute expected stock quantities for this date.\n"
+"* An empty value is an infinite date in the future.\n"
+"* A date in the past will provide historical values."
+msgstr ""
+
+msgctxt "model:ir.action,name:act_inventory_form"
+msgid "Inventories"
+msgstr ""
+
+msgctxt "model:ir.action,name:act_inventory_form_draft"
+msgid "Draft Inventories"
+msgstr ""
+
+msgctxt "model:ir.action,name:act_location_form"
+msgid "Locations"
+msgstr ""
+
+msgctxt "model:ir.action,name:act_location_quantity_tree"
+msgid "Product Stock"
+msgstr ""
+
+msgctxt "model:ir.action,name:act_location_tree"
+msgid "Locations"
+msgstr ""
+
+msgctxt "model:ir.action,name:act_move_form"
+msgid "Moves"
+msgstr ""
+
+msgctxt "model:ir.action,name:act_move_form_cust"
+msgid "Moves to Customers"
+msgstr ""
+
+msgctxt "model:ir.action,name:act_move_form_supp"
+msgid "Moves from Suppliers"
+msgstr ""
+
+msgctxt "model:ir.action,name:act_move_form_supp_proceed"
+msgid "Moves from Suppliers Waiting Arrival"
+msgstr ""
+
+msgctxt "model:ir.action,name:act_period_list"
+msgid "Periods"
+msgstr ""
+
+msgctxt "model:ir.action,name:act_product_by_location"
+msgid "Products by Locations"
+msgstr ""
+
+msgctxt "model:ir.action,name:act_shipment_in_draft"
+msgid "Draft Supplier Shipment"
+msgstr ""
+
+msgctxt "model:ir.action,name:act_shipment_in_form"
+msgid "Supplier Shipments"
+msgstr ""
+
+msgctxt "model:ir.action,name:act_shipment_in_form_received"
+msgid "Received Supplier shipments"
+msgstr ""
+
+msgctxt "model:ir.action,name:act_shipment_in_return_form"
+msgid "Supplier Return Shipments"
+msgstr ""
+
+msgctxt "model:ir.action,name:act_shipment_internal_assigned_form"
+msgid "Assigned Internal Shipments"
+msgstr ""
+
+msgctxt "model:ir.action,name:act_shipment_internal_draft_form"
+msgid "Draft Internal Shipments"
+msgstr ""
+
+msgctxt "model:ir.action,name:act_shipment_internal_form"
+msgid "Internal Shipments"
+msgstr ""
+
+msgctxt "model:ir.action,name:act_shipment_internal_waiting_form"
+msgid "Internal Shipments Waiting Assignation"
+msgstr ""
+
+msgctxt "model:ir.action,name:act_shipment_out_form"
+msgid "Customer Shipments"
+msgstr ""
+
+msgctxt "model:ir.action,name:act_shipment_out_form2"
+msgid "Customer Shipments"
+msgstr ""
+
+msgctxt "model:ir.action,name:act_shipment_out_form3"
+msgid "Supplier Shipments"
+msgstr ""
+
+msgctxt "model:ir.action,name:act_shipment_out_form_assigned"
+msgid "Assigned Customer Shipments"
+msgstr ""
+
+msgctxt "model:ir.action,name:act_shipment_out_form_ready"
+msgid "Customer Shipments Ready for Shipping"
+msgstr ""
+
+msgctxt "model:ir.action,name:act_shipment_out_form_waiting"
+msgid "Customer Shipments Waiting Assignation"
+msgstr ""
+
+msgctxt "model:ir.action,name:act_shipment_out_return_form"
+msgid "Customer Return Shipments"
+msgstr ""
+
+msgctxt "model:ir.action,name:act_stock_configuration_form"
+msgid "Stock Configuration"
+msgstr ""
+
+msgctxt "model:ir.action,name:create_shipment_out_return"
+msgid "Create Return Shipment"
+msgstr ""
+
+msgctxt "model:ir.action,name:report_shipment_in_restocking_list"
+msgid "Restocking List"
+msgstr ""
+
+msgctxt "model:ir.action,name:report_shipment_internal"
+msgid "Internal Shipment"
+msgstr ""
+
+msgctxt "model:ir.action,name:report_shipment_out_delivery_note"
+msgid "Delivery Note"
+msgstr ""
+
+msgctxt "model:ir.action,name:report_shipment_out_picking_list"
+msgid "Picking List"
+msgstr ""
+
+msgctxt "model:ir.action,name:report_shipment_out_return_restocking_list"
+msgid "Restocking List"
+msgstr ""
+
+msgctxt "model:ir.action,name:wizard_complete_inventory"
+msgid "Complete Inventory"
+msgstr ""
+
+msgctxt "model:ir.action,name:wizard_location_open"
+msgid "Product by Location"
+msgstr ""
+
+msgctxt "model:ir.action,name:wizard_product_open"
+msgid "Product Quantities"
+msgstr ""
+
+msgctxt "model:ir.action,name:wizard_shipment_in_return_assign"
+msgid "Assign Purchase Return Shipment"
+msgstr ""
+
+msgctxt "model:ir.action,name:wizard_shipment_internal_assign"
+msgid "Assign Shipment Internal"
+msgstr ""
+
+msgctxt "model:ir.action,name:wizard_shipment_out_assign"
+msgid "Assign Shipment Out"
+msgstr ""
+
+msgctxt "model:ir.sequence,name:sequence_shipment_in"
+msgid "Supplier Shipment"
+msgstr ""
+
+msgctxt "model:ir.sequence,name:sequence_shipment_in_return"
+msgid "Supplier Return Shipment"
+msgstr ""
+
+msgctxt "model:ir.sequence,name:sequence_shipment_internal"
+msgid "Internal Shipment"
+msgstr ""
+
+msgctxt "model:ir.sequence,name:sequence_shipment_out"
+msgid "Customer Shipment"
+msgstr ""
+
+msgctxt "model:ir.sequence,name:sequence_shipment_out_return"
+msgid "Customer Return Shipment"
+msgstr ""
+
+msgctxt "model:ir.sequence.type,name:sequence_type_shipment_in"
+msgid "Supplier Shipment"
+msgstr ""
+
+msgctxt "model:ir.sequence.type,name:sequence_type_shipment_in_return"
+msgid "Supplier Return Shipment"
+msgstr ""
+
+msgctxt "model:ir.sequence.type,name:sequence_type_shipment_internal"
+msgid "Internal Shipment"
+msgstr ""
+
+msgctxt "model:ir.sequence.type,name:sequence_type_shipment_out"
+msgid "Customer Shipment"
+msgstr ""
+
+msgctxt "model:ir.sequence.type,name:sequence_type_shipment_out_return"
+msgid "Customer Return Shipment"
+msgstr ""
+
+msgctxt "model:ir.ui.menu,name:menu_configuration"
+msgid "Configuration"
+msgstr ""
+
+msgctxt "model:ir.ui.menu,name:menu_inventory_form"
+msgid "Inventories"
+msgstr ""
+
+msgctxt "model:ir.ui.menu,name:menu_inventory_form_draft"
+msgid "Draft Inventories"
+msgstr ""
+
+msgctxt "model:ir.ui.menu,name:menu_location_form"
+msgid "Locations"
+msgstr ""
+
+msgctxt "model:ir.ui.menu,name:menu_location_tree"
+msgid "Locations"
+msgstr ""
+
+msgctxt "model:ir.ui.menu,name:menu_move_form"
+msgid "Moves"
+msgstr ""
+
+msgctxt "model:ir.ui.menu,name:menu_move_form_cust"
+msgid "Moves to Customers"
+msgstr ""
+
+msgctxt "model:ir.ui.menu,name:menu_move_form_supp"
+msgid "Moves from Suppliers"
+msgstr ""
+
+msgctxt "model:ir.ui.menu,name:menu_move_form_supp_proceed"
+msgid "Moves from Suppliers Waiting Arrival"
+msgstr ""
+
+msgctxt "model:ir.ui.menu,name:menu_period_list"
+msgid "Periods"
+msgstr ""
+
+msgctxt "model:ir.ui.menu,name:menu_reporting"
+msgid "Reporting"
+msgstr ""
+
+msgctxt "model:ir.ui.menu,name:menu_shipment_in_draft"
+msgid "Draft Supplier Shipment"
+msgstr ""
+
+msgctxt "model:ir.ui.menu,name:menu_shipment_in_form"
+msgid "Supplier Shipments"
+msgstr ""
+
+msgctxt "model:ir.ui.menu,name:menu_shipment_in_received"
+msgid "Received Supplier shipments"
+msgstr ""
+
+msgctxt "model:ir.ui.menu,name:menu_shipment_in_return_form"
+msgid "Supplier Return Shipments"
+msgstr ""
+
+msgctxt "model:ir.ui.menu,name:menu_shipment_internal_assigned_form"
+msgid "Assigned Internal Shipments"
+msgstr ""
+
+msgctxt "model:ir.ui.menu,name:menu_shipment_internal_draft_form"
+msgid "Draft Internal Shipments"
+msgstr ""
+
+msgctxt "model:ir.ui.menu,name:menu_shipment_internal_form"
+msgid "Internal Shipments"
+msgstr ""
+
+msgctxt "model:ir.ui.menu,name:menu_shipment_internal_waiting_form"
+msgid "Internal Shipments Waiting Assignation"
+msgstr ""
+
+msgctxt "model:ir.ui.menu,name:menu_shipment_out_assigned"
+msgid "Assigned Customer Shipments"
+msgstr ""
+
+msgctxt "model:ir.ui.menu,name:menu_shipment_out_form"
+msgid "Customer Shipments"
+msgstr ""
+
+msgctxt "model:ir.ui.menu,name:menu_shipment_out_ready"
+msgid "Customer Shipments Ready for Shipping"
+msgstr ""
+
+msgctxt "model:ir.ui.menu,name:menu_shipment_out_return_form"
+msgid "Customer Return Shipments"
+msgstr ""
+
+msgctxt "model:ir.ui.menu,name:menu_shipment_out_waiting"
+msgid "Customer Shipments Waiting Assignation"
+msgstr ""
+
+msgctxt "model:ir.ui.menu,name:menu_stock"
+msgid "Inventory & Stock"
+msgstr ""
+
+msgctxt "model:ir.ui.menu,name:menu_stock_configuration"
+msgid "Stock Configuration"
+msgstr ""
+
+msgctxt "model:res.group,name:group_stock"
+msgid "Stock"
+msgstr ""
+
+msgctxt "model:res.group,name:group_stock_admin"
+msgid "Stock Administration"
+msgstr ""
+
+msgctxt "model:res.group,name:group_stock_force_assignment"
+msgid "Stock Force Assignment"
+msgstr ""
+
+msgctxt "model:stock.configuration,name:0"
+msgid "Stock Configuration"
+msgstr ""
+
+msgctxt "model:stock.inventory,name:0"
+msgid "Stock Inventory"
+msgstr ""
+
+msgctxt "model:stock.inventory.line,name:0"
+msgid "Stock Inventory Line"
+msgstr ""
+
+msgctxt "model:stock.location,name:0"
+msgid "Stock Location"
+msgstr ""
+
+msgctxt "model:stock.location,name:location_customer"
+msgid "Customer"
+msgstr ""
+
+msgctxt "model:stock.location,name:location_input"
+msgid "Input Zone"
+msgstr ""
+
+msgctxt "model:stock.location,name:location_lost_found"
+msgid "Lost and Found"
+msgstr ""
+
+msgctxt "model:stock.location,name:location_output"
+msgid "Output Zone"
+msgstr ""
+
+msgctxt "model:stock.location,name:location_storage"
+msgid "Storage Zone"
+msgstr ""
+
+msgctxt "model:stock.location,name:location_supplier"
+msgid "Supplier"
+msgstr ""
+
+msgctxt "model:stock.location,name:location_warehouse"
+msgid "Warehouse"
+msgstr ""
+
+msgctxt "model:stock.location_stock_date.init,name:0"
+msgid "Compute stock quantities"
+msgstr ""
+
+msgctxt "model:stock.move,name:0"
+msgid "Stock Move"
+msgstr ""
+
+msgctxt "model:stock.period,name:0"
+msgid "Stock Period"
+msgstr ""
+
+msgctxt "model:stock.period.cache,name:0"
+msgid ""
+"\n"
+" Stock Period Cache\n"
+"\n"
+" It is used to store cached computation of stock quantities.\n"
+" "
+msgstr ""
+
+msgctxt "model:stock.product_stock_date.init,name:0"
+msgid "Compute stock quantities"
+msgstr ""
+
+msgctxt "model:stock.shipment.in,name:0"
+msgid "Supplier Shipment"
+msgstr ""
+
+msgctxt "model:stock.shipment.in.return,name:0"
+msgid "Supplier Return Shipment"
+msgstr ""
+
+msgctxt "model:stock.shipment.in.return.assign.assign_failed,name:0"
+msgid "Assign Supplier Return Shipment Assign Failed"
+msgstr ""
+
+msgctxt "model:stock.shipment.internal,name:0"
+msgid "Internal Shipment"
+msgstr ""
+
+msgctxt "model:stock.shipment.internal.assign.assign_failed,name:0"
+msgid "Assign Shipment Internal Assign Failed"
+msgstr ""
+
+msgctxt "model:stock.shipment.out,name:0"
+msgid "Customer Shipment"
+msgstr ""
+
+msgctxt "model:stock.shipment.out.assign.assign_failed,name:0"
+msgid "Assign Shipment Out Assign Failed"
+msgstr ""
+
+msgctxt "model:stock.shipment.out.return,name:0"
+msgid "Customer Return Shipment"
+msgstr ""
+
+msgctxt "model:workflow,name:wkf_inventory"
+msgid "Inventory"
+msgstr ""
+
+msgctxt "model:workflow,name:wkf_shipment_in_return"
+msgid "Supplier Return Shipment"
+msgstr ""
+
+msgctxt "model:workflow,name:wkf_shipment_out_return"
+msgid "Customer Return Shipment"
+msgstr ""
+
+msgctxt "model:workflow,name:wkf_shipmentin"
+msgid "Supplier Shipment"
+msgstr ""
+
+msgctxt "model:workflow,name:wkf_shipmentinternal"
+msgid "Internal Shipment"
+msgstr ""
+
+msgctxt "model:workflow,name:wkf_shipmentout"
+msgid "Customer Shipment"
+msgstr ""
+
+msgctxt "model:workflow.activity,name:inventory_act_cancel"
+msgid "Canceled"
+msgstr ""
+
+msgctxt "model:workflow.activity,name:inventory_act_done"
+msgid "Done"
+msgstr ""
+
+msgctxt "model:workflow.activity,name:inventory_act_draft"
+msgid "Draft"
+msgstr ""
+
+msgctxt "model:workflow.activity,name:shipment_in_return_act_assigned"
+msgid "Assigned"
+msgstr ""
+
+msgctxt "model:workflow.activity,name:shipment_in_return_act_cancel"
+msgid "Canceled"
+msgstr ""
+
+msgctxt "model:workflow.activity,name:shipment_in_return_act_done"
+msgid "Done"
+msgstr ""
+
+msgctxt "model:workflow.activity,name:shipment_in_return_act_draft"
+msgid "Draft"
+msgstr ""
+
+msgctxt "model:workflow.activity,name:shipment_in_return_act_waiting"
+msgid "Waiting"
+msgstr ""
+
+msgctxt "model:workflow.activity,name:shipment_out_return_act_cancel"
+msgid "Canceled"
+msgstr ""
+
+msgctxt "model:workflow.activity,name:shipment_out_return_act_done"
+msgid "Done"
+msgstr ""
+
+msgctxt "model:workflow.activity,name:shipment_out_return_act_draft"
+msgid "Draft"
+msgstr ""
+
+msgctxt "model:workflow.activity,name:shipment_out_return_act_received"
+msgid "Received"
+msgstr ""
+
+msgctxt "model:workflow.activity,name:shipmentin_act_cancel"
+msgid "Canceled"
+msgstr ""
+
+msgctxt "model:workflow.activity,name:shipmentin_act_done"
+msgid "Done"
+msgstr ""
+
+msgctxt "model:workflow.activity,name:shipmentin_act_draft"
+msgid "Draft"
+msgstr ""
+
+msgctxt "model:workflow.activity,name:shipmentin_act_received"
+msgid "Received"
+msgstr ""
+
+msgctxt "model:workflow.activity,name:shipmentinternal_act_assigned"
+msgid "Assigned"
+msgstr ""
+
+msgctxt "model:workflow.activity,name:shipmentinternal_act_cancel"
+msgid "Canceled"
+msgstr ""
+
+msgctxt "model:workflow.activity,name:shipmentinternal_act_done"
+msgid "Done"
+msgstr ""
+
+msgctxt "model:workflow.activity,name:shipmentinternal_act_draft"
+msgid "Draft"
+msgstr ""
+
+msgctxt "model:workflow.activity,name:shipmentinternal_act_waiting"
+msgid "Waiting"
+msgstr ""
+
+msgctxt "model:workflow.activity,name:shipmentout_act_assigned"
+msgid "Assigned"
+msgstr ""
+
+msgctxt "model:workflow.activity,name:shipmentout_act_cancel"
+msgid "Canceled"
+msgstr ""
+
+msgctxt "model:workflow.activity,name:shipmentout_act_done"
+msgid "Done"
+msgstr ""
+
+msgctxt "model:workflow.activity,name:shipmentout_act_draft"
+msgid "Draft"
+msgstr ""
+
+msgctxt "model:workflow.activity,name:shipmentout_act_packed"
+msgid "Packed"
+msgstr ""
+
+msgctxt "model:workflow.activity,name:shipmentout_act_waiting"
+msgid "Waiting"
+msgstr ""
+
+msgctxt "odt:stock.shipment.in.restocking_list:0"
+msgid "/"
+msgstr ""
+
+msgctxt "odt:stock.shipment.in.restocking_list:0"
+msgid "Code:"
+msgstr ""
+
+msgctxt "odt:stock.shipment.in.restocking_list:0"
+msgid "E-Mail:"
+msgstr ""
+
+msgctxt "odt:stock.shipment.in.restocking_list:0"
+msgid "From Location"
+msgstr ""
+
+msgctxt "odt:stock.shipment.in.restocking_list:0"
+msgid "Phone:"
+msgstr ""
+
+msgctxt "odt:stock.shipment.in.restocking_list:0"
+msgid "Planned Date:"
+msgstr ""
+
+msgctxt "odt:stock.shipment.in.restocking_list:0"
+msgid "Product"
+msgstr ""
+
+msgctxt "odt:stock.shipment.in.restocking_list:0"
+msgid "Quantity"
+msgstr ""
+
+msgctxt "odt:stock.shipment.in.restocking_list:0"
+msgid "Reference:"
+msgstr ""
+
+msgctxt "odt:stock.shipment.in.restocking_list:0"
+msgid "Restocking List"
+msgstr ""
+
+msgctxt "odt:stock.shipment.in.restocking_list:0"
+msgid "Supplier:"
+msgstr ""
+
+msgctxt "odt:stock.shipment.in.restocking_list:0"
+msgid "To Location"
+msgstr ""
+
+msgctxt "odt:stock.shipment.in.restocking_list:0"
+msgid "VAT Number:"
+msgstr ""
+
+msgctxt "odt:stock.shipment.in.restocking_list:0"
+msgid "Warehouse:"
+msgstr ""
+
+msgctxt "odt:stock.shipment.internal.report:0"
+msgid "/"
+msgstr ""
+
+msgctxt "odt:stock.shipment.internal.report:0"
+msgid "Code:"
+msgstr ""
+
+msgctxt "odt:stock.shipment.internal.report:0"
+msgid "E-Mail:"
+msgstr ""
+
+msgctxt "odt:stock.shipment.internal.report:0"
+msgid "From Location"
+msgstr ""
+
+msgctxt "odt:stock.shipment.internal.report:0"
+msgid "From Location:"
+msgstr ""
+
+msgctxt "odt:stock.shipment.internal.report:0"
+msgid "Internal Shipment"
+msgstr ""
+
+msgctxt "odt:stock.shipment.internal.report:0"
+msgid "Phone:"
+msgstr ""
+
+msgctxt "odt:stock.shipment.internal.report:0"
+msgid "Planned Date:"
+msgstr ""
+
+msgctxt "odt:stock.shipment.internal.report:0"
+msgid "Product"
+msgstr ""
+
+msgctxt "odt:stock.shipment.internal.report:0"
+msgid "Quantity"
+msgstr ""
+
+msgctxt "odt:stock.shipment.internal.report:0"
+msgid "Reference:"
+msgstr ""
+
+msgctxt "odt:stock.shipment.internal.report:0"
+msgid "To Location"
+msgstr ""
+
+msgctxt "odt:stock.shipment.internal.report:0"
+msgid "To Location:"
+msgstr ""
+
+msgctxt "odt:stock.shipment.internal.report:0"
+msgid "VAT Number:"
+msgstr ""
+
+msgctxt "odt:stock.shipment.out.delivery_note:0"
+msgid "/"
+msgstr ""
+
+msgctxt "odt:stock.shipment.out.delivery_note:0"
+msgid "Customer Code:"
+msgstr ""
+
+msgctxt "odt:stock.shipment.out.delivery_note:0"
+msgid "Date:"
+msgstr ""
+
+msgctxt "odt:stock.shipment.out.delivery_note:0"
+msgid "Delivery Note"
+msgstr ""
+
+msgctxt "odt:stock.shipment.out.delivery_note:0"
+msgid "E-Mail:"
+msgstr ""
+
+msgctxt "odt:stock.shipment.out.delivery_note:0"
+msgid "Phone:"
+msgstr ""
+
+msgctxt "odt:stock.shipment.out.delivery_note:0"
+msgid "Product"
+msgstr ""
+
+msgctxt "odt:stock.shipment.out.delivery_note:0"
+msgid "Quantity"
+msgstr ""
+
+msgctxt "odt:stock.shipment.out.delivery_note:0"
+msgid "Reference:"
+msgstr ""
+
+msgctxt "odt:stock.shipment.out.delivery_note:0"
+msgid "Shipment Number:"
+msgstr ""
+
+msgctxt "odt:stock.shipment.out.delivery_note:0"
+msgid "VAT Number:"
+msgstr ""
+
+msgctxt "odt:stock.shipment.out.picking_list:0"
+msgid "/"
+msgstr ""
+
+msgctxt "odt:stock.shipment.out.picking_list:0"
+msgid "Code:"
+msgstr ""
+
+msgctxt "odt:stock.shipment.out.picking_list:0"
+msgid "Customer:"
+msgstr ""
+
+msgctxt "odt:stock.shipment.out.picking_list:0"
+msgid "E-Mail:"
+msgstr ""
+
+msgctxt "odt:stock.shipment.out.picking_list:0"
+msgid "From Location"
+msgstr ""
+
+msgctxt "odt:stock.shipment.out.picking_list:0"
+msgid "Phone:"
+msgstr ""
+
+msgctxt "odt:stock.shipment.out.picking_list:0"
+msgid "Picking List"
+msgstr ""
+
+msgctxt "odt:stock.shipment.out.picking_list:0"
+msgid "Planned Date:"
+msgstr ""
+
+msgctxt "odt:stock.shipment.out.picking_list:0"
+msgid "Product"
+msgstr ""
+
+msgctxt "odt:stock.shipment.out.picking_list:0"
+msgid "Quantity"
+msgstr ""
+
+msgctxt "odt:stock.shipment.out.picking_list:0"
+msgid "Reference:"
+msgstr ""
+
+msgctxt "odt:stock.shipment.out.picking_list:0"
+msgid "To Location"
+msgstr ""
+
+msgctxt "odt:stock.shipment.out.picking_list:0"
+msgid "VAT Number:"
+msgstr ""
+
+msgctxt "odt:stock.shipment.out.picking_list:0"
+msgid "Warehouse:"
+msgstr ""
+
+msgctxt "odt:stock.shipment.out.return.restocking_list:0"
+msgid "/"
+msgstr ""
+
+msgctxt "odt:stock.shipment.out.return.restocking_list:0"
+msgid "Code:"
+msgstr ""
+
+msgctxt "odt:stock.shipment.out.return.restocking_list:0"
+msgid "E-Mail:"
+msgstr ""
+
+msgctxt "odt:stock.shipment.out.return.restocking_list:0"
+msgid "From Location"
+msgstr ""
+
+msgctxt "odt:stock.shipment.out.return.restocking_list:0"
+msgid "Phone:"
+msgstr ""
+
+msgctxt "odt:stock.shipment.out.return.restocking_list:0"
+msgid "Planned Date:"
+msgstr ""
+
+msgctxt "odt:stock.shipment.out.return.restocking_list:0"
+msgid "Product"
+msgstr ""
+
+msgctxt "odt:stock.shipment.out.return.restocking_list:0"
+msgid "Quantity"
+msgstr ""
+
+msgctxt "odt:stock.shipment.out.return.restocking_list:0"
+msgid "Reference:"
+msgstr ""
+
+msgctxt "odt:stock.shipment.out.return.restocking_list:0"
+msgid "Restocking List"
+msgstr ""
+
+msgctxt "odt:stock.shipment.out.return.restocking_list:0"
+msgid "Supplier:"
+msgstr ""
+
+msgctxt "odt:stock.shipment.out.return.restocking_list:0"
+msgid "To Location"
+msgstr ""
+
+msgctxt "odt:stock.shipment.out.return.restocking_list:0"
+msgid "VAT Number:"
+msgstr ""
+
+msgctxt "odt:stock.shipment.out.return.restocking_list:0"
+msgid "Warehouse:"
+msgstr ""
+
+msgctxt "selection:stock.inventory,state:0"
+msgid "Canceled"
+msgstr ""
+
+msgctxt "selection:stock.inventory,state:0"
+msgid "Done"
+msgstr ""
+
+msgctxt "selection:stock.inventory,state:0"
+msgid "Draft"
+msgstr ""
+
+msgctxt "selection:stock.location,type:0"
+msgid "Customer"
+msgstr ""
+
+msgctxt "selection:stock.location,type:0"
+msgid "Lost and Found"
+msgstr ""
+
+msgctxt "selection:stock.location,type:0"
+msgid "Production"
+msgstr ""
+
+msgctxt "selection:stock.location,type:0"
+msgid "Storage"
+msgstr ""
+
+msgctxt "selection:stock.location,type:0"
+msgid "Supplier"
+msgstr ""
+
+msgctxt "selection:stock.location,type:0"
+msgid "View"
+msgstr ""
+
+msgctxt "selection:stock.location,type:0"
+msgid "Warehouse"
+msgstr ""
+
+msgctxt "selection:stock.move,state:0"
+msgid "Assigned"
+msgstr ""
+
+msgctxt "selection:stock.move,state:0"
+msgid "Canceled"
+msgstr ""
+
+msgctxt "selection:stock.move,state:0"
+msgid "Done"
+msgstr ""
+
+msgctxt "selection:stock.move,state:0"
+msgid "Draft"
+msgstr ""
+
+msgctxt "selection:stock.period,state:0"
+msgid "Closed"
+msgstr ""
+
+msgctxt "selection:stock.period,state:0"
+msgid "Draft"
+msgstr ""
+
+msgctxt "selection:stock.shipment.in,state:0"
+msgid "Canceled"
+msgstr ""
+
+msgctxt "selection:stock.shipment.in,state:0"
+msgid "Done"
+msgstr ""
+
+msgctxt "selection:stock.shipment.in,state:0"
+msgid "Draft"
+msgstr ""
+
+msgctxt "selection:stock.shipment.in,state:0"
+msgid "Received"
+msgstr ""
+
+msgctxt "selection:stock.shipment.in.return,state:0"
+msgid "Assigned"
+msgstr ""
+
+msgctxt "selection:stock.shipment.in.return,state:0"
+msgid "Canceled"
+msgstr ""
+
+msgctxt "selection:stock.shipment.in.return,state:0"
+msgid "Done"
+msgstr ""
+
+msgctxt "selection:stock.shipment.in.return,state:0"
+msgid "Draft"
+msgstr ""
+
+msgctxt "selection:stock.shipment.in.return,state:0"
+msgid "Waiting"
+msgstr ""
+
+msgctxt "selection:stock.shipment.internal,state:0"
+msgid "Assigned"
+msgstr ""
+
+msgctxt "selection:stock.shipment.internal,state:0"
+msgid "Canceled"
+msgstr ""
+
+msgctxt "selection:stock.shipment.internal,state:0"
+msgid "Done"
+msgstr ""
+
+msgctxt "selection:stock.shipment.internal,state:0"
+msgid "Draft"
+msgstr ""
+
+msgctxt "selection:stock.shipment.internal,state:0"
+msgid "Waiting"
+msgstr ""
+
+msgctxt "selection:stock.shipment.out,state:0"
+msgid "Assigned"
+msgstr ""
+
+msgctxt "selection:stock.shipment.out,state:0"
+msgid "Canceled"
+msgstr ""
+
+msgctxt "selection:stock.shipment.out,state:0"
+msgid "Done"
+msgstr ""
+
+msgctxt "selection:stock.shipment.out,state:0"
+msgid "Draft"
+msgstr ""
+
+msgctxt "selection:stock.shipment.out,state:0"
+msgid "Packed"
+msgstr ""
+
+msgctxt "selection:stock.shipment.out,state:0"
+msgid "Waiting"
+msgstr ""
+
+msgctxt "selection:stock.shipment.out.return,state:0"
+msgid "Canceled"
+msgstr ""
+
+msgctxt "selection:stock.shipment.out.return,state:0"
+msgid "Done"
+msgstr ""
+
+msgctxt "selection:stock.shipment.out.return,state:0"
+msgid "Draft"
+msgstr ""
+
+msgctxt "selection:stock.shipment.out.return,state:0"
+msgid "Received"
+msgstr ""
+
+msgctxt "view:party.party:0"
+msgid "Stock"
+msgstr ""
+
+msgctxt "view:product.product:0"
+msgid "Products"
+msgstr ""
+
+msgctxt "view:stock.configuration:0"
+msgid "Stock Configuration"
+msgstr ""
+
+msgctxt "view:stock.inventory.line:0"
+msgid "Inventory Line"
+msgstr ""
+
+msgctxt "view:stock.inventory.line:0"
+msgid "Inventory Lines"
+msgstr ""
+
+msgctxt "view:stock.inventory:0"
+msgid "Add an inventory line for each missing products"
+msgstr ""
+
+msgctxt "view:stock.inventory:0"
+msgid "Cancel"
+msgstr ""
+
+msgctxt "view:stock.inventory:0"
+msgid "Complete Inventory"
+msgstr ""
+
+msgctxt "view:stock.inventory:0"
+msgid "Confirm"
+msgstr ""
+
+msgctxt "view:stock.inventory:0"
+msgid "Inventories"
+msgstr ""
+
+msgctxt "view:stock.inventory:0"
+msgid "Inventory"
+msgstr ""
+
+msgctxt "view:stock.location:0"
+msgid "Location"
+msgstr ""
+
+msgctxt "view:stock.location:0"
+msgid "Locations"
+msgstr ""
+
+msgctxt "view:stock.location:0"
+msgid "Product Stock"
+msgstr ""
+
+msgctxt "view:stock.location_stock_date.init:0"
+msgid "Product Quantity."
+msgstr ""
+
+msgctxt "view:stock.move:0"
+msgid "Move"
+msgstr ""
+
+msgctxt "view:stock.move:0"
+msgid "Moves"
+msgstr ""
+
+msgctxt "view:stock.period.cache:0"
+msgid "Period Cache"
+msgstr ""
+
+msgctxt "view:stock.period.cache:0"
+msgid "Period Caches"
+msgstr ""
+
+msgctxt "view:stock.period:0"
+msgid "Close"
+msgstr ""
+
+msgctxt "view:stock.period:0"
+msgid "Draft"
+msgstr ""
+
+msgctxt "view:stock.period:0"
+msgid "Period"
+msgstr ""
+
+msgctxt "view:stock.period:0"
+msgid "Periods"
+msgstr ""
+
+msgctxt "view:stock.product_stock_date.init:0"
+msgid "Product Quantity."
+msgstr ""
+
+msgctxt "view:stock.shipment.in.return.assign.assign_failed:0"
+msgid "Moves"
+msgstr ""
+
+msgctxt "view:stock.shipment.in.return.assign.assign_failed:0"
+msgid "Unable to Assign"
+msgstr ""
+
+msgctxt "view:stock.shipment.in.return.assign.assign_failed:0"
+msgid "Unable to assign those products:"
+msgstr ""
+
+msgctxt "view:stock.shipment.in.return:0"
+msgid "Assign"
+msgstr ""
+
+msgctxt "view:stock.shipment.in.return:0"
+msgid "Cancel"
+msgstr ""
+
+msgctxt "view:stock.shipment.in.return:0"
+msgid "Done"
+msgstr ""
+
+msgctxt "view:stock.shipment.in.return:0"
+msgid "Draft"
+msgstr ""
+
+msgctxt "view:stock.shipment.in.return:0"
+msgid "Reset to Draft"
+msgstr ""
+
+msgctxt "view:stock.shipment.in.return:0"
+msgid "Supplier Return Shipment"
+msgstr ""
+
+msgctxt "view:stock.shipment.in.return:0"
+msgid "Supplier Return Shipments"
+msgstr ""
+
+msgctxt "view:stock.shipment.in.return:0"
+msgid "Waiting"
+msgstr ""
+
+msgctxt "view:stock.shipment.in:0"
+msgid "Cancel"
+msgstr ""
+
+msgctxt "view:stock.shipment.in:0"
+msgid "Done"
+msgstr ""
+
+msgctxt "view:stock.shipment.in:0"
+msgid "Incoming Moves"
+msgstr ""
+
+msgctxt "view:stock.shipment.in:0"
+msgid "Inventory Moves"
+msgstr ""
+
+msgctxt "view:stock.shipment.in:0"
+msgid "Moves"
+msgstr ""
+
+msgctxt "view:stock.shipment.in:0"
+msgid "Received"
+msgstr ""
+
+msgctxt "view:stock.shipment.in:0"
+msgid "Reset to Draft"
+msgstr ""
+
+msgctxt "view:stock.shipment.in:0"
+msgid "Supplier Shipment"
+msgstr ""
+
+msgctxt "view:stock.shipment.in:0"
+msgid "Supplier Shipments"
+msgstr ""
+
+msgctxt "view:stock.shipment.internal.assign.assign_failed:0"
+msgid "Moves"
+msgstr ""
+
+msgctxt "view:stock.shipment.internal.assign.assign_failed:0"
+msgid "Unable to Assign"
+msgstr ""
+
+msgctxt "view:stock.shipment.internal.assign.assign_failed:0"
+msgid "Unable to assign those products:"
+msgstr ""
+
+msgctxt "view:stock.shipment.internal:0"
+msgid "Assign"
+msgstr ""
+
+msgctxt "view:stock.shipment.internal:0"
+msgid "Cancel"
+msgstr ""
+
+msgctxt "view:stock.shipment.internal:0"
+msgid "Done"
+msgstr ""
+
+msgctxt "view:stock.shipment.internal:0"
+msgid "Draft"
+msgstr ""
+
+msgctxt "view:stock.shipment.internal:0"
+msgid "Internal Shipment"
+msgstr ""
+
+msgctxt "view:stock.shipment.internal:0"
+msgid "Internal Shipments"
+msgstr ""
+
+msgctxt "view:stock.shipment.internal:0"
+msgid "Reset to Draft"
+msgstr ""
+
+msgctxt "view:stock.shipment.internal:0"
+msgid "Waiting"
+msgstr ""
+
+msgctxt "view:stock.shipment.out.assign.assign_failed:0"
+msgid "Inventory Moves"
+msgstr ""
+
+msgctxt "view:stock.shipment.out.assign.assign_failed:0"
+msgid "Unable to Assign"
+msgstr ""
+
+msgctxt "view:stock.shipment.out.assign.assign_failed:0"
+msgid "Unable to assign those products:"
+msgstr ""
+
+msgctxt "view:stock.shipment.out.return:0"
+msgid "Cancel"
+msgstr ""
+
+msgctxt "view:stock.shipment.out.return:0"
+msgid "Customer Return Shipment"
+msgstr ""
+
+msgctxt "view:stock.shipment.out.return:0"
+msgid "Customer Return Shipments"
+msgstr ""
+
+msgctxt "view:stock.shipment.out.return:0"
+msgid "Done"
+msgstr ""
+
+msgctxt "view:stock.shipment.out.return:0"
+msgid "Incoming Moves"
+msgstr ""
+
+msgctxt "view:stock.shipment.out.return:0"
+msgid "Inventory Moves"
+msgstr ""
+
+msgctxt "view:stock.shipment.out.return:0"
+msgid "Moves"
+msgstr ""
+
+msgctxt "view:stock.shipment.out.return:0"
+msgid "Received"
+msgstr ""
+
+msgctxt "view:stock.shipment.out.return:0"
+msgid "Reset to Draft"
+msgstr ""
+
+msgctxt "view:stock.shipment.out:0"
+msgid "Assign"
+msgstr ""
+
+msgctxt "view:stock.shipment.out:0"
+msgid "Cancel"
+msgstr ""
+
+msgctxt "view:stock.shipment.out:0"
+msgid "Customer Shipment"
+msgstr ""
+
+msgctxt "view:stock.shipment.out:0"
+msgid "Customer Shipments"
+msgstr ""
+
+msgctxt "view:stock.shipment.out:0"
+msgid "Done"
+msgstr ""
+
+msgctxt "view:stock.shipment.out:0"
+msgid "Draft"
+msgstr ""
+
+msgctxt "view:stock.shipment.out:0"
+msgid "Inventory Moves"
+msgstr ""
+
+msgctxt "view:stock.shipment.out:0"
+msgid "Make shipment"
+msgstr ""
+
+msgctxt "view:stock.shipment.out:0"
+msgid "Outgoing Moves"
+msgstr ""
+
+msgctxt "view:stock.shipment.out:0"
+msgid "Reset to Draft"
+msgstr ""
+
+msgctxt "view:stock.shipment.out:0"
+msgid "Waiting"
+msgstr ""
+
+msgctxt "wizard_button:stock.location.open,init,end:0"
+msgid "Cancel"
+msgstr ""
+
+msgctxt "wizard_button:stock.location.open,init,open:0"
+msgid "Open"
+msgstr ""
+
+msgctxt "wizard_button:stock.product.open,init,end:0"
+msgid "Cancel"
+msgstr ""
+
+msgctxt "wizard_button:stock.product.open,init,open:0"
+msgid "Open"
+msgstr ""
+
+msgctxt "wizard_button:stock.shipment.in.return.assign,ask_force,end:0"
+msgid "Ok"
+msgstr ""
+
+msgctxt "wizard_button:stock.shipment.in.return.assign,ask_force,force:0"
+msgid "Force Assign"
+msgstr ""
+
+msgctxt "wizard_button:stock.shipment.in.return.assign,assign_failed,end:0"
+msgid "Ok"
+msgstr ""
+
+msgctxt "wizard_button:stock.shipment.internal.assign,ask_force,end:0"
+msgid "Ok"
+msgstr ""
+
+msgctxt "wizard_button:stock.shipment.internal.assign,ask_force,force:0"
+msgid "Force Assign"
+msgstr ""
+
+msgctxt "wizard_button:stock.shipment.internal.assign,assign_failed,end:0"
+msgid "Ok"
+msgstr ""
+
+msgctxt "wizard_button:stock.shipment.out.assign,ask_force,end:0"
+msgid "Ok"
+msgstr ""
+
+msgctxt "wizard_button:stock.shipment.out.assign,ask_force,force:0"
+msgid "Force Assign"
+msgstr ""
+
+msgctxt "wizard_button:stock.shipment.out.assign,assign_failed,end:0"
+msgid "Ok"
+msgstr ""
diff --git a/locale/de_DE.po b/locale/de_DE.po
new file mode 100644
index 0000000..6ab74d3
--- /dev/null
+++ b/locale/de_DE.po
@@ -0,0 +1,2130 @@
+#
+msgid ""
+msgstr "Content-Type: text/plain; charset=utf-8\n"
+
+msgctxt "error:product.template:0"
+msgid ""
+"You cannot change the default uom for a product which is associated to stock"
+" moves."
+msgstr ""
+"Die StandardmaÃeinheit kann nicht für einen Artikel geändert werden, der "
+"Lagerbewegungen zugeordnet ist."
+
+msgctxt "error:stock.inventory.line:0"
+msgid "Line quantity must be positive!"
+msgstr "Anzahl der Position muss positiv sein!"
+
+msgctxt "error:stock.inventory.line:0"
+msgid "Product must be unique by inventory!"
+msgstr ""
+"Ein Artikel kann in einem Lagerbestand nicht mehrfach vergeben werden!"
+
+msgctxt "error:stock.location:0"
+msgid ""
+"A location with existing moves cannot be changed to a type that does not "
+"support moves."
+msgstr ""
+"Ein Lagerort mit zugordneten Bewegungen kann nicht zu einem Typ geändert "
+"werden, der keine Bewegungen unterstützt."
+
+msgctxt "error:stock.location:0"
+msgid "Location \"%s\" must be a child of warehouse \"%s\"!"
+msgstr "Lagerort \"%s\" muss untergeordnet zu Warenlager \"%s\" sein!"
+
+msgctxt "error:stock.location:0"
+msgid "You can not create recursive locations!"
+msgstr "Lagerorte können nicht rekursiv angelegt werden!"
+
+msgctxt "error:stock.move:0"
+msgid "Internal move quantity must be positive"
+msgstr "Interne Anzahl von Bewegungen muss positiv sein!"
+
+msgctxt "error:stock.move:0"
+msgid "Move can be on only one Shipment"
+msgstr "Eine Bewegung kann nur auf einem Lieferposten erfolgen!"
+
+msgctxt "error:stock.move:0"
+msgid "Move quantity must be positive"
+msgstr "Zu bewegende Anzahl muss positiv sein"
+
+msgctxt "error:stock.move:0"
+msgid "Source and destination location must be different"
+msgstr "Herkunfts- und Bestimmungsort müssen unterschiedlich sein"
+
+msgctxt "error:stock.move:0"
+msgid "You can not modify a move in the state: \"Assigned\", \"Done\" or \"Cancel\""
+msgstr ""
+"Eine Bewegung in Status \"Zugewiesen\", \"Erledigt\" oder \"Annulliert\" "
+"kann nicht geändert werden!"
+
+msgctxt "error:stock.move:0"
+msgid "You can not modify move in closed period!"
+msgstr ""
+"Eine Bewegung in einer geschlossenen Periode kann nicht geändert werden!"
+
+msgctxt "error:stock.move:0"
+msgid "You can not set state to assigned!"
+msgstr "Status kann nicht auf Zugewiesen gesetzt werden!"
+
+msgctxt "error:stock.move:0"
+msgid "You can not set state to done!"
+msgstr "Status kann nicht auf Erledigt gesetzt werden!"
+
+msgctxt "error:stock.move:0"
+msgid "You can not set state to draft!"
+msgstr "Status \"Entwurf\" kann nicht gesetzt werden!"
+
+msgctxt "error:stock.move:0"
+msgid "You can not use service products for a move!"
+msgstr "Dienstleistungen können nicht in Warenbewegungen verwendet werden!"
+
+msgctxt "error:stock.move:0"
+msgid "You can only delete draft or cancelled moves!"
+msgstr ""
+"Nur Bewegungen mit Status \"Entwurf\" oder \"Annulliert\" können gelöscht "
+"werden!"
+
+msgctxt "error:stock.period:0"
+msgid "You can not close a period in the future or today!"
+msgstr ""
+"Eine Periode kann nicht am heutigen Tag (oder später) geschlossen werden!"
+
+msgctxt "error:stock.period:0"
+msgid "You can not close a period when there is still assigned moves!"
+msgstr ""
+"Eine Periode, die noch zugewiesene Bewegungen enthält, kann nicht "
+"geschlossen werden!"
+
+msgctxt "error:stock.shipment.in:0"
+msgid ""
+"Incoming Moves must have the warehouse input location as destination "
+"location!"
+msgstr ""
+"Eingehende Bewegungen müssen den Eingangsbereich des Warenlagers als Zielort"
+" haben!"
+
+msgctxt "error:stock.shipment.in:0"
+msgid ""
+"Inventory Moves must have the warehouse input location as source location!"
+msgstr ""
+"Bestandsänderungen müssen den Eingangsbereich des Warenlagers als "
+"Herkunftsort haben!"
+
+msgctxt "error:stock.shipment.out.return.create:0"
+msgid "The shipment with code %s is not yet sent."
+msgstr "Der Lieferposten mit Code %s ist noch nicht erledigt."
+
+msgctxt "error:stock.shipment.out.return.create:0"
+msgid "You can not create return shipment"
+msgstr "Warenrücknahme nicht möglich!"
+
+msgctxt "error:stock.shipment.out.return:0"
+msgid ""
+"Incoming Moves must have the warehouse input location as destination "
+"location!"
+msgstr ""
+"Eingehende Bewegungen müssen den Eingangsbereich des Warenlagers als Zielort"
+" haben!"
+
+msgctxt "error:stock.shipment.out.return:0"
+msgid ""
+"Inventory Moves must have the warehouse input location as source location!"
+msgstr ""
+"Bestandsänderungen müssen den Eingangsbereich des Warenlagers als "
+"Herkunftsort haben!"
+
+msgctxt "error:stock.shipment.out:0"
+msgid ""
+"Inventory Moves must have the warehouse output location as destination "
+"location!"
+msgstr ""
+"Bestandsänderungen müssen den Ausgangsbereich des Warenlagers als Zielort "
+"haben!"
+
+msgctxt "error:stock.shipment.out:0"
+msgid ""
+"Outgoing Moves must have the warehouse output location as source location!"
+msgstr ""
+"Ausgehende Bewegungen müssen den Ausgangsbereich des Warenlagers als "
+"Herkunftsort haben!"
+
+msgctxt "field:party.address,delivery:0"
+msgid "Delivery"
+msgstr "Lieferadresse"
+
+msgctxt "field:party.party,customer_location:0"
+msgid "Customer Location"
+msgstr "Lagerort Kunde"
+
+msgctxt "field:party.party,supplier_location:0"
+msgid "Supplier Location"
+msgstr "Lagerort Lieferant"
+
+msgctxt "field:product.product,forecast_quantity:0"
+msgid "Forecast Quantity"
+msgstr "Voraussichtliche Anzahl"
+
+msgctxt "field:product.product,quantity:0"
+msgid "Quantity"
+msgstr "Anzahl"
+
+msgctxt "field:product.template,forecast_quantity:0"
+msgid "Forecast Quantity"
+msgstr "Voraussichtliche Anzahl"
+
+msgctxt "field:product.template,quantity:0"
+msgid "Quantity"
+msgstr "Anzahl"
+
+msgctxt "field:stock.configuration,rec_name:0"
+msgid "Name"
+msgstr "Name"
+
+msgctxt "field:stock.configuration,shipment_in_return_sequence:0"
+msgid "Supplier Return Shipment Sequence"
+msgstr "Nummernkreis Warenrückgabe"
+
+msgctxt "field:stock.configuration,shipment_in_sequence:0"
+msgid "Supplier Shipment Sequence"
+msgstr "Nummernkreis Lieferposten von Lieferant"
+
+msgctxt "field:stock.configuration,shipment_internal_sequence:0"
+msgid "Internal Shipment Sequence"
+msgstr "Nummernkreis Interne Lieferposten"
+
+msgctxt "field:stock.configuration,shipment_out_return_sequence:0"
+msgid "Customer Return Shipment Sequence"
+msgstr "Nummernkreis Warenrücknahme"
+
+msgctxt "field:stock.configuration,shipment_out_sequence:0"
+msgid "Customer Shipment Sequence"
+msgstr "Nummernkreis Lieferposten an Kunde"
+
+msgctxt "field:stock.inventory,company:0"
+msgid "Company"
+msgstr "Unternehmen"
+
+msgctxt "field:stock.inventory,date:0"
+msgid "Date"
+msgstr "Datum"
+
+msgctxt "field:stock.inventory,lines:0"
+msgid "Lines"
+msgstr "Positionen"
+
+msgctxt "field:stock.inventory,location:0"
+msgid "Location"
+msgstr "Ort"
+
+msgctxt "field:stock.inventory,lost_found:0"
+msgid "Lost and Found"
+msgstr "Inventurdifferenz"
+
+msgctxt "field:stock.inventory,rec_name:0"
+msgid "Name"
+msgstr "Name"
+
+msgctxt "field:stock.inventory,state:0"
+msgid "State"
+msgstr "Status"
+
+msgctxt "field:stock.inventory.line,expected_quantity:0"
+msgid "Expected Quantity"
+msgstr "Erwartete Anzahl"
+
+msgctxt "field:stock.inventory.line,inventory:0"
+msgid "Inventory"
+msgstr "Lagerbestand"
+
+msgctxt "field:stock.inventory.line,move:0"
+msgid "Move"
+msgstr "Bewegung"
+
+msgctxt "field:stock.inventory.line,product:0"
+msgid "Product"
+msgstr "Artikel"
+
+msgctxt "field:stock.inventory.line,quantity:0"
+msgid "Quantity"
+msgstr "Anzahl"
+
+msgctxt "field:stock.inventory.line,rec_name:0"
+msgid "Name"
+msgstr "Name"
+
+msgctxt "field:stock.inventory.line,unit_digits:0"
+msgid "Unit Digits"
+msgstr "Anzahl Stellen"
+
+msgctxt "field:stock.inventory.line,uom:0"
+msgid "UOM"
+msgstr "MaÃeinheit"
+
+msgctxt "field:stock.location,active:0"
+msgid "Active"
+msgstr "Aktiv"
+
+msgctxt "field:stock.location,address:0"
+msgid "Address"
+msgstr "Adresse"
+
+msgctxt "field:stock.location,childs:0"
+msgid "Children"
+msgstr "Untergeordnet (Lagerorte)"
+
+msgctxt "field:stock.location,code:0"
+msgid "Code"
+msgstr "Code"
+
+msgctxt "field:stock.location,forecast_quantity:0"
+msgid "Forecast Quantity"
+msgstr "Voraussichtliche Anzahl"
+
+msgctxt "field:stock.location,input_location:0"
+msgid "Input"
+msgstr "Eingang"
+
+msgctxt "field:stock.location,left:0"
+msgid "Left"
+msgstr "Links"
+
+msgctxt "field:stock.location,name:0"
+msgid "Name"
+msgstr "Name"
+
+msgctxt "field:stock.location,output_location:0"
+msgid "Output"
+msgstr "Ausgang"
+
+msgctxt "field:stock.location,parent:0"
+msgid "Parent"
+msgstr "Ãbergeordnet (Lagerort)"
+
+msgctxt "field:stock.location,quantity:0"
+msgid "Quantity"
+msgstr "Anzahl"
+
+msgctxt "field:stock.location,rec_name:0"
+msgid "Name"
+msgstr "Name"
+
+msgctxt "field:stock.location,right:0"
+msgid "Right"
+msgstr "Rechts"
+
+msgctxt "field:stock.location,storage_location:0"
+msgid "Storage"
+msgstr "Lager"
+
+msgctxt "field:stock.location,type:0"
+msgid "Location type"
+msgstr "Lagertyp"
+
+msgctxt "field:stock.location_stock_date.init,forecast_date:0"
+msgid "At Date"
+msgstr "Zum"
+
+msgctxt "field:stock.move,company:0"
+msgid "Company"
+msgstr "Unternehmen"
+
+msgctxt "field:stock.move,cost_price:0"
+msgid "Cost Price"
+msgstr "Einkaufspreis"
+
+msgctxt "field:stock.move,currency:0"
+msgid "Currency"
+msgstr "Währung"
+
+msgctxt "field:stock.move,effective_date:0"
+msgid "Effective Date"
+msgstr "Effektives Datum"
+
+msgctxt "field:stock.move,from_location:0"
+msgid "From Location"
+msgstr "Von Lagerort"
+
+msgctxt "field:stock.move,internal_quantity:0"
+msgid "Internal Quantity"
+msgstr "Anzahl Intern"
+
+msgctxt "field:stock.move,planned_date:0"
+msgid "Planned Date"
+msgstr "Geplantes Datum"
+
+msgctxt "field:stock.move,product:0"
+msgid "Product"
+msgstr "Artikel"
+
+msgctxt "field:stock.move,quantity:0"
+msgid "Quantity"
+msgstr "Anzahl"
+
+msgctxt "field:stock.move,rec_name:0"
+msgid "Name"
+msgstr "Name"
+
+msgctxt "field:stock.move,shipment_in:0"
+msgid "Supplier Shipment"
+msgstr "Lieferposten von Lieferant"
+
+msgctxt "field:stock.move,shipment_in_return:0"
+msgid "Supplier Return Shipment"
+msgstr "Warenrückgabe"
+
+msgctxt "field:stock.move,shipment_internal:0"
+msgid "Internal Shipment"
+msgstr "Interner Lieferposten"
+
+msgctxt "field:stock.move,shipment_out:0"
+msgid "Customer Shipment"
+msgstr "Lieferposten an Kunde"
+
+msgctxt "field:stock.move,shipment_out_return:0"
+msgid "Customer Return Shipment"
+msgstr "Warenrücknahme"
+
+msgctxt "field:stock.move,state:0"
+msgid "State"
+msgstr "Status"
+
+msgctxt "field:stock.move,to_location:0"
+msgid "To Location"
+msgstr "Zu Lagerort"
+
+msgctxt "field:stock.move,unit_digits:0"
+msgid "Unit Digits"
+msgstr "Anzahl Stellen"
+
+msgctxt "field:stock.move,unit_price:0"
+msgid "Unit Price"
+msgstr "Einzelpreis"
+
+msgctxt "field:stock.move,unit_price_required:0"
+msgid "Unit Price Required"
+msgstr "Einzelpreis erforderlich"
+
+msgctxt "field:stock.move,uom:0"
+msgid "Uom"
+msgstr "Einheit"
+
+msgctxt "field:stock.period,caches:0"
+msgid "Caches"
+msgstr "Cache-Speicher"
+
+msgctxt "field:stock.period,company:0"
+msgid "Company"
+msgstr "Unternehmen"
+
+msgctxt "field:stock.period,date:0"
+msgid "Date"
+msgstr "Datum"
+
+msgctxt "field:stock.period,rec_name:0"
+msgid "Name"
+msgstr "Name"
+
+msgctxt "field:stock.period,state:0"
+msgid "State"
+msgstr "Status"
+
+msgctxt "field:stock.period.cache,internal_quantity:0"
+msgid "Internal Quantity"
+msgstr "Anzahl Intern"
+
+msgctxt "field:stock.period.cache,location:0"
+msgid "Location"
+msgstr "Lagerort"
+
+msgctxt "field:stock.period.cache,period:0"
+msgid "Period"
+msgstr "Periode"
+
+msgctxt "field:stock.period.cache,product:0"
+msgid "Product"
+msgstr "Artikel"
+
+msgctxt "field:stock.period.cache,rec_name:0"
+msgid "Name"
+msgstr "Name"
+
+msgctxt "field:stock.product_stock_date.init,forecast_date:0"
+msgid "At Date"
+msgstr "Zum"
+
+msgctxt "field:stock.shipment.in,code:0"
+msgid "Code"
+msgstr "Code"
+
+msgctxt "field:stock.shipment.in,company:0"
+msgid "Company"
+msgstr "Unternehmen"
+
+msgctxt "field:stock.shipment.in,contact_address:0"
+msgid "Contact Address"
+msgstr "Kontaktadresse"
+
+msgctxt "field:stock.shipment.in,effective_date:0"
+msgid "Effective Date"
+msgstr "Effektives Datum"
+
+msgctxt "field:stock.shipment.in,incoming_moves:0"
+msgid "Incoming Moves"
+msgstr "Eingehende Bewegungen"
+
+msgctxt "field:stock.shipment.in,inventory_moves:0"
+msgid "Inventory Moves"
+msgstr "Bestandsänderungen"
+
+msgctxt "field:stock.shipment.in,moves:0"
+msgid "Moves"
+msgstr "Bewegungen"
+
+msgctxt "field:stock.shipment.in,planned_date:0"
+msgid "Planned Date"
+msgstr "Geplantes Datum"
+
+msgctxt "field:stock.shipment.in,rec_name:0"
+msgid "Name"
+msgstr "Name"
+
+msgctxt "field:stock.shipment.in,reference:0"
+msgid "Reference"
+msgstr "Beleg-Nr."
+
+msgctxt "field:stock.shipment.in,state:0"
+msgid "State"
+msgstr "Status"
+
+msgctxt "field:stock.shipment.in,supplier:0"
+msgid "Supplier"
+msgstr "Lieferant"
+
+msgctxt "field:stock.shipment.in,warehouse:0"
+msgid "Warehouse"
+msgstr "Warenlager"
+
+msgctxt "field:stock.shipment.in.return,code:0"
+msgid "Code"
+msgstr "Code"
+
+msgctxt "field:stock.shipment.in.return,company:0"
+msgid "Company"
+msgstr "Unternehmen"
+
+msgctxt "field:stock.shipment.in.return,effective_date:0"
+msgid "Effective Date"
+msgstr "Effektives Datum"
+
+msgctxt "field:stock.shipment.in.return,from_location:0"
+msgid "From Location"
+msgstr "Von Lagerort"
+
+msgctxt "field:stock.shipment.in.return,moves:0"
+msgid "Moves"
+msgstr "Bewegungen"
+
+msgctxt "field:stock.shipment.in.return,planned_date:0"
+msgid "Planned Date"
+msgstr "Geplantes Datum"
+
+msgctxt "field:stock.shipment.in.return,rec_name:0"
+msgid "Name"
+msgstr "Name"
+
+msgctxt "field:stock.shipment.in.return,reference:0"
+msgid "Reference"
+msgstr "Beleg-Nr."
+
+msgctxt "field:stock.shipment.in.return,state:0"
+msgid "State"
+msgstr "Status"
+
+msgctxt "field:stock.shipment.in.return,to_location:0"
+msgid "To Location"
+msgstr "Zu Lagerort"
+
+msgctxt "field:stock.shipment.in.return.assign.assign_failed,moves:0"
+msgid "Moves"
+msgstr "Lagerbewegungen"
+
+msgctxt "field:stock.shipment.internal,code:0"
+msgid "Code"
+msgstr "Code"
+
+msgctxt "field:stock.shipment.internal,company:0"
+msgid "Company"
+msgstr "Unternehmen"
+
+msgctxt "field:stock.shipment.internal,effective_date:0"
+msgid "Effective Date"
+msgstr "Effektives Datum"
+
+msgctxt "field:stock.shipment.internal,from_location:0"
+msgid "From Location"
+msgstr "Von Lagerort"
+
+msgctxt "field:stock.shipment.internal,moves:0"
+msgid "Moves"
+msgstr "Bewegungen"
+
+msgctxt "field:stock.shipment.internal,planned_date:0"
+msgid "Planned Date"
+msgstr "Geplantes Datum"
+
+msgctxt "field:stock.shipment.internal,rec_name:0"
+msgid "Name"
+msgstr "Name"
+
+msgctxt "field:stock.shipment.internal,reference:0"
+msgid "Reference"
+msgstr "Beleg-Nr."
+
+msgctxt "field:stock.shipment.internal,state:0"
+msgid "State"
+msgstr "Status"
+
+msgctxt "field:stock.shipment.internal,to_location:0"
+msgid "To Location"
+msgstr "Zu Lagerort"
+
+msgctxt "field:stock.shipment.internal.assign.assign_failed,moves:0"
+msgid "Moves"
+msgstr "Bewegungen"
+
+msgctxt "field:stock.shipment.out,code:0"
+msgid "Code"
+msgstr "Code"
+
+msgctxt "field:stock.shipment.out,company:0"
+msgid "Company"
+msgstr "Unternehmen"
+
+msgctxt "field:stock.shipment.out,customer:0"
+msgid "Customer"
+msgstr "Kunde"
+
+msgctxt "field:stock.shipment.out,delivery_address:0"
+msgid "Delivery Address"
+msgstr "Lieferadresse"
+
+msgctxt "field:stock.shipment.out,effective_date:0"
+msgid "Effective Date"
+msgstr "Effektives Datum"
+
+msgctxt "field:stock.shipment.out,inventory_moves:0"
+msgid "Inventory Moves"
+msgstr "Bestandsänderungen"
+
+msgctxt "field:stock.shipment.out,moves:0"
+msgid "Moves"
+msgstr "Bewegungen"
+
+msgctxt "field:stock.shipment.out,outgoing_moves:0"
+msgid "Outgoing Moves"
+msgstr "Ausgehende Bewegungen"
+
+msgctxt "field:stock.shipment.out,planned_date:0"
+msgid "Planned Date"
+msgstr "Geplantes Datum"
+
+msgctxt "field:stock.shipment.out,rec_name:0"
+msgid "Name"
+msgstr "Name"
+
+msgctxt "field:stock.shipment.out,reference:0"
+msgid "Reference"
+msgstr "Beleg-Nr."
+
+msgctxt "field:stock.shipment.out,state:0"
+msgid "State"
+msgstr "Status"
+
+msgctxt "field:stock.shipment.out,warehouse:0"
+msgid "Warehouse"
+msgstr "Warenlager"
+
+msgctxt "field:stock.shipment.out.assign.assign_failed,inventory_moves:0"
+msgid "Inventory Moves"
+msgstr "Bestandsänderungen"
+
+msgctxt "field:stock.shipment.out.return,code:0"
+msgid "Code"
+msgstr "Code"
+
+msgctxt "field:stock.shipment.out.return,company:0"
+msgid "Company"
+msgstr "Unternehmen"
+
+msgctxt "field:stock.shipment.out.return,customer:0"
+msgid "Customer"
+msgstr "Kunde"
+
+msgctxt "field:stock.shipment.out.return,delivery_address:0"
+msgid "Delivery Address"
+msgstr "Lieferadresse"
+
+msgctxt "field:stock.shipment.out.return,effective_date:0"
+msgid "Effective Date"
+msgstr "Effektives Datum"
+
+msgctxt "field:stock.shipment.out.return,incoming_moves:0"
+msgid "Incoming Moves"
+msgstr "Eingehende Bewegungen"
+
+msgctxt "field:stock.shipment.out.return,inventory_moves:0"
+msgid "Inventory Moves"
+msgstr "Bestandsänderungen"
+
+msgctxt "field:stock.shipment.out.return,moves:0"
+msgid "Moves"
+msgstr "Bewegungen"
+
+msgctxt "field:stock.shipment.out.return,planned_date:0"
+msgid "Planned Date"
+msgstr "Geplantes Datum"
+
+msgctxt "field:stock.shipment.out.return,rec_name:0"
+msgid "Name"
+msgstr "Name"
+
+msgctxt "field:stock.shipment.out.return,reference:0"
+msgid "Reference"
+msgstr "Beleg-Nr."
+
+msgctxt "field:stock.shipment.out.return,state:0"
+msgid "State"
+msgstr "Status"
+
+msgctxt "field:stock.shipment.out.return,warehouse:0"
+msgid "Warehouse"
+msgstr "Warenlager"
+
+msgctxt "help:party.party,customer_location:0"
+msgid "The default destination location when sending products to the party."
+msgstr "Standardbestimmungsort für Sendungen zum Geschäftspartner"
+
+msgctxt "help:party.party,supplier_location:0"
+msgid "The default source location when receiving products from the party."
+msgstr "Standardbestimmungsort für Sendungen vom Geschäftspartner"
+
+msgctxt "help:stock.location_stock_date.init,forecast_date:0"
+msgid ""
+"Allow to compute expected stock quantities for this date.\n"
+"* An empty value is an infinite date in the future.\n"
+"* A date in the past will provide historical values."
+msgstr ""
+"Berechnet den erwarteten Lagerbestand für dieses Datum\n"
+"* ein leerer Wert ist ein unbegrenztes Datum in der Zukunft\n"
+"* ein Datum in der Vergangenheit berechnet historische Werte\n"
+
+msgctxt "help:stock.product_stock_date.init,forecast_date:0"
+msgid ""
+"Allow to compute expected stock quantities for this date.\n"
+"* An empty value is an infinite date in the future.\n"
+"* A date in the past will provide historical values."
+msgstr ""
+"Berechnet den erwarteten Lagerbestand für dieses Datum\n"
+"* ein leerer Wert ist ein unbegrenztes Datum in der Zukunft\n"
+"* ein Datum in der Vergangenheit berechnet historische Werte\n"
+
+msgctxt "model:ir.action,name:act_inventory_form"
+msgid "Inventories"
+msgstr "Bestandskorrekturen"
+
+msgctxt "model:ir.action,name:act_inventory_form_draft"
+msgid "Draft Inventories"
+msgstr "Entwürfe Bestandskorrekturen"
+
+msgctxt "model:ir.action,name:act_location_form"
+msgid "Locations"
+msgstr "Lagerorte"
+
+msgctxt "model:ir.action,name:act_location_quantity_tree"
+msgid "Product Stock"
+msgstr "Lagerbestand"
+
+msgctxt "model:ir.action,name:act_location_tree"
+msgid "Locations"
+msgstr "Lagerorte"
+
+msgctxt "model:ir.action,name:act_move_form"
+msgid "Moves"
+msgstr "Lagerbewegungen"
+
+msgctxt "model:ir.action,name:act_move_form_cust"
+msgid "Moves to Customers"
+msgstr "Bewegungen zu Kunden"
+
+msgctxt "model:ir.action,name:act_move_form_supp"
+msgid "Moves from Suppliers"
+msgstr "Bewegungen von Lieferanten"
+
+msgctxt "model:ir.action,name:act_move_form_supp_proceed"
+msgid "Moves from Suppliers Waiting Arrival"
+msgstr "Erwartete Bewegungen von Lieferanten"
+
+msgctxt "model:ir.action,name:act_period_list"
+msgid "Periods"
+msgstr "Lagerperioden"
+
+msgctxt "model:ir.action,name:act_product_by_location"
+msgid "Products by Locations"
+msgstr "Artikel nach Lagerort"
+
+msgctxt "model:ir.action,name:act_shipment_in_draft"
+msgid "Draft Supplier Shipment"
+msgstr "Entwürfe Lieferposten von Lieferanten"
+
+msgctxt "model:ir.action,name:act_shipment_in_form"
+msgid "Supplier Shipments"
+msgstr "Lieferposten von Lieferanten"
+
+msgctxt "model:ir.action,name:act_shipment_in_form_received"
+msgid "Received Supplier shipments"
+msgstr "Erhaltene Lieferposten von Lieferanten"
+
+msgctxt "model:ir.action,name:act_shipment_in_return_form"
+msgid "Supplier Return Shipments"
+msgstr "Warenrückgaben (an Lieferanten)"
+
+msgctxt "model:ir.action,name:act_shipment_internal_assigned_form"
+msgid "Assigned Internal Shipments"
+msgstr "Zugewiesene Interne Lieferposten"
+
+msgctxt "model:ir.action,name:act_shipment_internal_draft_form"
+msgid "Draft Internal Shipments"
+msgstr "Entwürfe Interne Lieferposten"
+
+msgctxt "model:ir.action,name:act_shipment_internal_form"
+msgid "Internal Shipments"
+msgstr "Interne Lieferposten"
+
+msgctxt "model:ir.action,name:act_shipment_internal_waiting_form"
+msgid "Internal Shipments Waiting Assignation"
+msgstr "Wartende Interne Lieferposten"
+
+msgctxt "model:ir.action,name:act_shipment_out_form"
+msgid "Customer Shipments"
+msgstr "Lieferposten an Kunden"
+
+msgctxt "model:ir.action,name:act_shipment_out_form2"
+msgid "Customer Shipments"
+msgstr "Lieferposten als Kunde"
+
+msgctxt "model:ir.action,name:act_shipment_out_form3"
+msgid "Supplier Shipments"
+msgstr "Lieferposten als Lieferant"
+
+msgctxt "model:ir.action,name:act_shipment_out_form_assigned"
+msgid "Assigned Customer Shipments"
+msgstr "Zugewiesene Lieferposten an Kunden"
+
+msgctxt "model:ir.action,name:act_shipment_out_form_ready"
+msgid "Customer Shipments Ready for Shipping"
+msgstr "Versandbereite Lieferposten an Kunden"
+
+msgctxt "model:ir.action,name:act_shipment_out_form_waiting"
+msgid "Customer Shipments Waiting Assignation"
+msgstr "Wartende Lieferposten an Kunden"
+
+msgctxt "model:ir.action,name:act_shipment_out_return_form"
+msgid "Customer Return Shipments"
+msgstr "Warenrücknahmen (von Kunden)"
+
+msgctxt "model:ir.action,name:act_stock_configuration_form"
+msgid "Stock Configuration"
+msgstr "Einstellungen Lager"
+
+msgctxt "model:ir.action,name:create_shipment_out_return"
+msgid "Create Return Shipment"
+msgstr "Warenrücknahme erstellen"
+
+msgctxt "model:ir.action,name:report_shipment_in_restocking_list"
+msgid "Restocking List"
+msgstr "Einlagerungsliste"
+
+msgctxt "model:ir.action,name:report_shipment_internal"
+msgid "Internal Shipment"
+msgstr "Interner Lieferposten"
+
+msgctxt "model:ir.action,name:report_shipment_out_delivery_note"
+msgid "Delivery Note"
+msgstr "Lieferschein"
+
+msgctxt "model:ir.action,name:report_shipment_out_picking_list"
+msgid "Picking List"
+msgstr "Pick Liste"
+
+msgctxt "model:ir.action,name:report_shipment_out_return_restocking_list"
+msgid "Restocking List"
+msgstr "Einlagerungsliste"
+
+msgctxt "model:ir.action,name:wizard_complete_inventory"
+msgid "Complete Inventory"
+msgstr "Lagerbestandspositionen komplettieren"
+
+msgctxt "model:ir.action,name:wizard_location_open"
+msgid "Product by Location"
+msgstr "Artikel nach Lagerort"
+
+msgctxt "model:ir.action,name:wizard_product_open"
+msgid "Product Quantities"
+msgstr "Artikelbestand"
+
+msgctxt "model:ir.action,name:wizard_shipment_in_return_assign"
+msgid "Assign Purchase Return Shipment"
+msgstr "Zuweisung Lieferposten Warenrückgabe"
+
+msgctxt "model:ir.action,name:wizard_shipment_internal_assign"
+msgid "Assign Shipment Internal"
+msgstr "Zuweisung Lieferposten Intern"
+
+msgctxt "model:ir.action,name:wizard_shipment_out_assign"
+msgid "Assign Shipment Out"
+msgstr "Zuweisung Lieferposten Ausgehend"
+
+msgctxt "model:ir.sequence,name:sequence_shipment_in"
+msgid "Supplier Shipment"
+msgstr "Lieferposten Lieferant"
+
+msgctxt "model:ir.sequence,name:sequence_shipment_in_return"
+msgid "Supplier Return Shipment"
+msgstr "Warenrückgabe Lieferant"
+
+msgctxt "model:ir.sequence,name:sequence_shipment_internal"
+msgid "Internal Shipment"
+msgstr "Interner Lieferposten"
+
+msgctxt "model:ir.sequence,name:sequence_shipment_out"
+msgid "Customer Shipment"
+msgstr "Lieferposten Kunde"
+
+msgctxt "model:ir.sequence,name:sequence_shipment_out_return"
+msgid "Customer Return Shipment"
+msgstr "Warenrücknahme Kunde"
+
+msgctxt "model:ir.sequence.type,name:sequence_type_shipment_in"
+msgid "Supplier Shipment"
+msgstr "Lieferposten Lieferant"
+
+msgctxt "model:ir.sequence.type,name:sequence_type_shipment_in_return"
+msgid "Supplier Return Shipment"
+msgstr "Warenrückgabe Lieferant"
+
+msgctxt "model:ir.sequence.type,name:sequence_type_shipment_internal"
+msgid "Internal Shipment"
+msgstr "Interner Lieferposten"
+
+msgctxt "model:ir.sequence.type,name:sequence_type_shipment_out"
+msgid "Customer Shipment"
+msgstr "Lieferposten Kunde"
+
+msgctxt "model:ir.sequence.type,name:sequence_type_shipment_out_return"
+msgid "Customer Return Shipment"
+msgstr "Warenrücknahme Kunde"
+
+msgctxt "model:ir.ui.menu,name:menu_configuration"
+msgid "Configuration"
+msgstr "Einstellungen"
+
+msgctxt "model:ir.ui.menu,name:menu_inventory_form"
+msgid "Inventories"
+msgstr "Bestandskorrektur"
+
+msgctxt "model:ir.ui.menu,name:menu_inventory_form_draft"
+msgid "Draft Inventories"
+msgstr "Entwürfe Bestandskorrekturen"
+
+msgctxt "model:ir.ui.menu,name:menu_location_form"
+msgid "Locations"
+msgstr "Lagerorte"
+
+msgctxt "model:ir.ui.menu,name:menu_location_tree"
+msgid "Locations"
+msgstr "Lagerorte"
+
+msgctxt "model:ir.ui.menu,name:menu_move_form"
+msgid "Moves"
+msgstr "Bewegungen"
+
+msgctxt "model:ir.ui.menu,name:menu_move_form_cust"
+msgid "Moves to Customers"
+msgstr "Bewegungen zu Kunden"
+
+msgctxt "model:ir.ui.menu,name:menu_move_form_supp"
+msgid "Moves from Suppliers"
+msgstr "Bewegungen von Lieferanten"
+
+msgctxt "model:ir.ui.menu,name:menu_move_form_supp_proceed"
+msgid "Moves from Suppliers Waiting Arrival"
+msgstr "Erwartete Bewegungen von Lieferanten"
+
+msgctxt "model:ir.ui.menu,name:menu_period_list"
+msgid "Periods"
+msgstr "Lagerperioden"
+
+msgctxt "model:ir.ui.menu,name:menu_reporting"
+msgid "Reporting"
+msgstr "Auswertungen"
+
+msgctxt "model:ir.ui.menu,name:menu_shipment_in_draft"
+msgid "Draft Supplier Shipment"
+msgstr "Entwürfe Lieferposten von Lieferanten"
+
+msgctxt "model:ir.ui.menu,name:menu_shipment_in_form"
+msgid "Supplier Shipments"
+msgstr "Lieferposten von Lieferanten"
+
+msgctxt "model:ir.ui.menu,name:menu_shipment_in_received"
+msgid "Received Supplier shipments"
+msgstr "Erhaltene Lieferposten von Lieferanten"
+
+msgctxt "model:ir.ui.menu,name:menu_shipment_in_return_form"
+msgid "Supplier Return Shipments"
+msgstr "Warenrückgaben (an Lieferanten)"
+
+msgctxt "model:ir.ui.menu,name:menu_shipment_internal_assigned_form"
+msgid "Assigned Internal Shipments"
+msgstr "Zugewiesene Interne Lieferposten"
+
+msgctxt "model:ir.ui.menu,name:menu_shipment_internal_draft_form"
+msgid "Draft Internal Shipments"
+msgstr "Entwürfe Interne Lieferposten"
+
+msgctxt "model:ir.ui.menu,name:menu_shipment_internal_form"
+msgid "Internal Shipments"
+msgstr "Interne Lieferposten"
+
+msgctxt "model:ir.ui.menu,name:menu_shipment_internal_waiting_form"
+msgid "Internal Shipments Waiting Assignation"
+msgstr "Wartende Interne Lieferposten"
+
+msgctxt "model:ir.ui.menu,name:menu_shipment_out_assigned"
+msgid "Assigned Customer Shipments"
+msgstr "Zugewiesene Lieferposten an Kunden"
+
+msgctxt "model:ir.ui.menu,name:menu_shipment_out_form"
+msgid "Customer Shipments"
+msgstr "Lieferposten an Kunden"
+
+msgctxt "model:ir.ui.menu,name:menu_shipment_out_ready"
+msgid "Customer Shipments Ready for Shipping"
+msgstr "Versandbereite Lieferposten an Kunden"
+
+msgctxt "model:ir.ui.menu,name:menu_shipment_out_return_form"
+msgid "Customer Return Shipments"
+msgstr "Warenrücknahmen (von Kunden)"
+
+msgctxt "model:ir.ui.menu,name:menu_shipment_out_waiting"
+msgid "Customer Shipments Waiting Assignation"
+msgstr "Wartende Lieferposten an Kunden"
+
+msgctxt "model:ir.ui.menu,name:menu_stock"
+msgid "Inventory & Stock"
+msgstr "Lager"
+
+msgctxt "model:ir.ui.menu,name:menu_stock_configuration"
+msgid "Stock Configuration"
+msgstr "Einstellungen Lager"
+
+msgctxt "model:res.group,name:group_stock"
+msgid "Stock"
+msgstr "Lager"
+
+msgctxt "model:res.group,name:group_stock_admin"
+msgid "Stock Administration"
+msgstr "Lager Administration"
+
+msgctxt "model:res.group,name:group_stock_force_assignment"
+msgid "Stock Force Assignment"
+msgstr "Lager Zuweisungserzwingung"
+
+msgctxt "model:stock.configuration,name:0"
+msgid "Stock Configuration"
+msgstr "Einstellungen Lager"
+
+msgctxt "model:stock.inventory,name:0"
+msgid "Stock Inventory"
+msgstr "Lager Lagerbestand"
+
+msgctxt "model:stock.inventory.line,name:0"
+msgid "Stock Inventory Line"
+msgstr "Lager Lagerbestand Position"
+
+msgctxt "model:stock.location,name:0"
+msgid "Stock Location"
+msgstr "Lager Lagerort"
+
+msgctxt "model:stock.location,name:location_customer"
+msgid "Customer"
+msgstr "Kunde"
+
+msgctxt "model:stock.location,name:location_input"
+msgid "Input Zone"
+msgstr "Wareneingang"
+
+msgctxt "model:stock.location,name:location_lost_found"
+msgid "Lost and Found"
+msgstr "Inventurdifferenz"
+
+msgctxt "model:stock.location,name:location_output"
+msgid "Output Zone"
+msgstr "Warenausgang"
+
+msgctxt "model:stock.location,name:location_storage"
+msgid "Storage Zone"
+msgstr "Lagerzone"
+
+msgctxt "model:stock.location,name:location_supplier"
+msgid "Supplier"
+msgstr "Lieferant"
+
+msgctxt "model:stock.location,name:location_warehouse"
+msgid "Warehouse"
+msgstr "Warenlager"
+
+msgctxt "model:stock.location_stock_date.init,name:0"
+msgid "Compute stock quantities"
+msgstr "Berechnung Lagerbestände"
+
+msgctxt "model:stock.move,name:0"
+msgid "Stock Move"
+msgstr "Lager Bewegung"
+
+msgctxt "model:stock.period,name:0"
+msgid "Stock Period"
+msgstr "Lager Periode"
+
+msgctxt "model:stock.period.cache,name:0"
+msgid ""
+"\n"
+" Stock Period Cache\n"
+"\n"
+" It is used to store cached computation of stock quantities.\n"
+" "
+msgstr ""
+"\n"
+" Perioden Cache-Speicher\n"
+"\n"
+" Dient der Pufferspeicherung von berechneten Lagerbeständen."
+
+msgctxt "model:stock.product_stock_date.init,name:0"
+msgid "Compute stock quantities"
+msgstr "Berechnung Lagerbestände"
+
+msgctxt "model:stock.shipment.in,name:0"
+msgid "Supplier Shipment"
+msgstr "Lieferant Lieferposten"
+
+msgctxt "model:stock.shipment.in.return,name:0"
+msgid "Supplier Return Shipment"
+msgstr "Warenrückgabe Lieferant"
+
+msgctxt "model:stock.shipment.in.return.assign.assign_failed,name:0"
+msgid "Assign Supplier Return Shipment Assign Failed"
+msgstr "Zuweisung Lieferposten Warenrückgabe Erzwungen"
+
+msgctxt "model:stock.shipment.internal,name:0"
+msgid "Internal Shipment"
+msgstr "Interner Lieferposten"
+
+msgctxt "model:stock.shipment.internal.assign.assign_failed,name:0"
+msgid "Assign Shipment Internal Assign Failed"
+msgstr "Zuweisung Lieferposten Intern Erzwungen"
+
+msgctxt "model:stock.shipment.out,name:0"
+msgid "Customer Shipment"
+msgstr "Lieferposten Kunde"
+
+msgctxt "model:stock.shipment.out.assign.assign_failed,name:0"
+msgid "Assign Shipment Out Assign Failed"
+msgstr "Zuweisung Lieferposten Ausgehend Erzwungen"
+
+msgctxt "model:stock.shipment.out.return,name:0"
+msgid "Customer Return Shipment"
+msgstr "Warenrücknahme Kunde"
+
+msgctxt "model:workflow,name:wkf_inventory"
+msgid "Inventory"
+msgstr "Lagerbestand"
+
+msgctxt "model:workflow,name:wkf_shipment_in_return"
+msgid "Supplier Return Shipment"
+msgstr "Warenrückgabe Lieferant"
+
+msgctxt "model:workflow,name:wkf_shipment_out_return"
+msgid "Customer Return Shipment"
+msgstr "Warenrücknahme Kunde"
+
+msgctxt "model:workflow,name:wkf_shipmentin"
+msgid "Supplier Shipment"
+msgstr "Lieferposten Lieferant"
+
+msgctxt "model:workflow,name:wkf_shipmentinternal"
+msgid "Internal Shipment"
+msgstr "Interner Lieferposten"
+
+msgctxt "model:workflow,name:wkf_shipmentout"
+msgid "Customer Shipment"
+msgstr "Lieferposten Kunde"
+
+msgctxt "model:workflow.activity,name:inventory_act_cancel"
+msgid "Canceled"
+msgstr "Annulliert"
+
+msgctxt "model:workflow.activity,name:inventory_act_done"
+msgid "Done"
+msgstr "Erledigt"
+
+msgctxt "model:workflow.activity,name:inventory_act_draft"
+msgid "Draft"
+msgstr "Entwurf"
+
+msgctxt "model:workflow.activity,name:shipment_in_return_act_assigned"
+msgid "Assigned"
+msgstr "Zugewiesen"
+
+msgctxt "model:workflow.activity,name:shipment_in_return_act_cancel"
+msgid "Canceled"
+msgstr "Annulliert"
+
+msgctxt "model:workflow.activity,name:shipment_in_return_act_done"
+msgid "Done"
+msgstr "Erledigt"
+
+msgctxt "model:workflow.activity,name:shipment_in_return_act_draft"
+msgid "Draft"
+msgstr "Entwurf"
+
+msgctxt "model:workflow.activity,name:shipment_in_return_act_waiting"
+msgid "Waiting"
+msgstr "Wartend"
+
+msgctxt "model:workflow.activity,name:shipment_out_return_act_cancel"
+msgid "Canceled"
+msgstr "Annulliert"
+
+msgctxt "model:workflow.activity,name:shipment_out_return_act_done"
+msgid "Done"
+msgstr "Erledigt"
+
+msgctxt "model:workflow.activity,name:shipment_out_return_act_draft"
+msgid "Draft"
+msgstr "Entwurf"
+
+msgctxt "model:workflow.activity,name:shipment_out_return_act_received"
+msgid "Received"
+msgstr "Erhalten"
+
+msgctxt "model:workflow.activity,name:shipmentin_act_cancel"
+msgid "Canceled"
+msgstr "Annulliert"
+
+msgctxt "model:workflow.activity,name:shipmentin_act_done"
+msgid "Done"
+msgstr "Erledigt"
+
+msgctxt "model:workflow.activity,name:shipmentin_act_draft"
+msgid "Draft"
+msgstr "Entwurf"
+
+msgctxt "model:workflow.activity,name:shipmentin_act_received"
+msgid "Received"
+msgstr "Erhalten"
+
+msgctxt "model:workflow.activity,name:shipmentinternal_act_assigned"
+msgid "Assigned"
+msgstr "Zugewiesen"
+
+msgctxt "model:workflow.activity,name:shipmentinternal_act_cancel"
+msgid "Canceled"
+msgstr "Annulliert"
+
+msgctxt "model:workflow.activity,name:shipmentinternal_act_done"
+msgid "Done"
+msgstr "Erledigt"
+
+msgctxt "model:workflow.activity,name:shipmentinternal_act_draft"
+msgid "Draft"
+msgstr "Entwurf"
+
+msgctxt "model:workflow.activity,name:shipmentinternal_act_waiting"
+msgid "Waiting"
+msgstr "Wartend"
+
+msgctxt "model:workflow.activity,name:shipmentout_act_assigned"
+msgid "Assigned"
+msgstr "Zugewiesen"
+
+msgctxt "model:workflow.activity,name:shipmentout_act_cancel"
+msgid "Canceled"
+msgstr "Annulliert"
+
+msgctxt "model:workflow.activity,name:shipmentout_act_done"
+msgid "Done"
+msgstr "Erledigt"
+
+msgctxt "model:workflow.activity,name:shipmentout_act_draft"
+msgid "Draft"
+msgstr "Entwurf"
+
+msgctxt "model:workflow.activity,name:shipmentout_act_packed"
+msgid "Packed"
+msgstr "Gepackt"
+
+msgctxt "model:workflow.activity,name:shipmentout_act_waiting"
+msgid "Waiting"
+msgstr "Wartend"
+
+msgctxt "odt:stock.shipment.in.restocking_list:0"
+msgid "/"
+msgstr "/"
+
+msgctxt "odt:stock.shipment.in.restocking_list:0"
+msgid "Code:"
+msgstr "Code:"
+
+msgctxt "odt:stock.shipment.in.restocking_list:0"
+msgid "E-Mail:"
+msgstr "E-Mail:"
+
+msgctxt "odt:stock.shipment.in.restocking_list:0"
+msgid "From Location"
+msgstr "Von Lagerort"
+
+msgctxt "odt:stock.shipment.in.restocking_list:0"
+msgid "Phone:"
+msgstr "Telefon:"
+
+msgctxt "odt:stock.shipment.in.restocking_list:0"
+msgid "Planned Date:"
+msgstr "Geplantes Datum:"
+
+msgctxt "odt:stock.shipment.in.restocking_list:0"
+msgid "Product"
+msgstr "Artikel"
+
+msgctxt "odt:stock.shipment.in.restocking_list:0"
+msgid "Quantity"
+msgstr "Anzahl"
+
+msgctxt "odt:stock.shipment.in.restocking_list:0"
+msgid "Reference:"
+msgstr "Beleg-Nr.:"
+
+msgctxt "odt:stock.shipment.in.restocking_list:0"
+msgid "Restocking List"
+msgstr "Einlagerungsliste"
+
+msgctxt "odt:stock.shipment.in.restocking_list:0"
+msgid "Supplier:"
+msgstr "Lieferant:"
+
+msgctxt "odt:stock.shipment.in.restocking_list:0"
+msgid "To Location"
+msgstr "Zu Lagerort"
+
+msgctxt "odt:stock.shipment.in.restocking_list:0"
+msgid "VAT Number:"
+msgstr "USt-ID-Nr.:"
+
+msgctxt "odt:stock.shipment.in.restocking_list:0"
+msgid "Warehouse:"
+msgstr "Warenlager:"
+
+msgctxt "odt:stock.shipment.internal.report:0"
+msgid "/"
+msgstr "/"
+
+msgctxt "odt:stock.shipment.internal.report:0"
+msgid "Code:"
+msgstr "Code:"
+
+msgctxt "odt:stock.shipment.internal.report:0"
+msgid "E-Mail:"
+msgstr "E-Mail:"
+
+msgctxt "odt:stock.shipment.internal.report:0"
+msgid "From Location"
+msgstr "Von Lagerort"
+
+msgctxt "odt:stock.shipment.internal.report:0"
+msgid "From Location:"
+msgstr "Von Lagerort:"
+
+msgctxt "odt:stock.shipment.internal.report:0"
+msgid "Internal Shipment"
+msgstr "Interner Lieferposten"
+
+msgctxt "odt:stock.shipment.internal.report:0"
+msgid "Phone:"
+msgstr "Telefon:"
+
+msgctxt "odt:stock.shipment.internal.report:0"
+msgid "Planned Date:"
+msgstr "Geplantes Datum:"
+
+msgctxt "odt:stock.shipment.internal.report:0"
+msgid "Product"
+msgstr "Artikel"
+
+msgctxt "odt:stock.shipment.internal.report:0"
+msgid "Quantity"
+msgstr "Anzahl"
+
+msgctxt "odt:stock.shipment.internal.report:0"
+msgid "Reference:"
+msgstr "Beleg-Nr.:"
+
+msgctxt "odt:stock.shipment.internal.report:0"
+msgid "To Location"
+msgstr "Zu Lagerort"
+
+msgctxt "odt:stock.shipment.internal.report:0"
+msgid "To Location:"
+msgstr "Zu Lagerort:"
+
+msgctxt "odt:stock.shipment.internal.report:0"
+msgid "VAT Number:"
+msgstr "USt-ID-Nr.:"
+
+msgctxt "odt:stock.shipment.out.delivery_note:0"
+msgid "/"
+msgstr "/"
+
+msgctxt "odt:stock.shipment.out.delivery_note:0"
+msgid "Customer Code:"
+msgstr "Kundennr:"
+
+msgctxt "odt:stock.shipment.out.delivery_note:0"
+msgid "Date:"
+msgstr "Datum:"
+
+msgctxt "odt:stock.shipment.out.delivery_note:0"
+msgid "Delivery Note"
+msgstr "Lieferschein"
+
+msgctxt "odt:stock.shipment.out.delivery_note:0"
+msgid "E-Mail:"
+msgstr "E-Mail:"
+
+msgctxt "odt:stock.shipment.out.delivery_note:0"
+msgid "Phone:"
+msgstr "Telefon:"
+
+msgctxt "odt:stock.shipment.out.delivery_note:0"
+msgid "Product"
+msgstr "Artikel"
+
+msgctxt "odt:stock.shipment.out.delivery_note:0"
+msgid "Quantity"
+msgstr "Anzahl"
+
+msgctxt "odt:stock.shipment.out.delivery_note:0"
+msgid "Reference:"
+msgstr "Beleg-Nr.:"
+
+msgctxt "odt:stock.shipment.out.delivery_note:0"
+msgid "Shipment Number:"
+msgstr "Lieferposten Nr.:"
+
+msgctxt "odt:stock.shipment.out.delivery_note:0"
+msgid "VAT Number:"
+msgstr "USt-ID-Nr.:"
+
+msgctxt "odt:stock.shipment.out.picking_list:0"
+msgid "/"
+msgstr "/"
+
+msgctxt "odt:stock.shipment.out.picking_list:0"
+msgid "Code:"
+msgstr "Code:"
+
+msgctxt "odt:stock.shipment.out.picking_list:0"
+msgid "Customer:"
+msgstr "Kunde:"
+
+msgctxt "odt:stock.shipment.out.picking_list:0"
+msgid "E-Mail:"
+msgstr "E-Mail:"
+
+msgctxt "odt:stock.shipment.out.picking_list:0"
+msgid "From Location"
+msgstr "Von Lagerort"
+
+msgctxt "odt:stock.shipment.out.picking_list:0"
+msgid "Phone:"
+msgstr "Telefon:"
+
+msgctxt "odt:stock.shipment.out.picking_list:0"
+msgid "Picking List"
+msgstr "Pick Liste"
+
+msgctxt "odt:stock.shipment.out.picking_list:0"
+msgid "Planned Date:"
+msgstr "Geplantes Datum:"
+
+msgctxt "odt:stock.shipment.out.picking_list:0"
+msgid "Product"
+msgstr "Artikel"
+
+msgctxt "odt:stock.shipment.out.picking_list:0"
+msgid "Quantity"
+msgstr "Anzahl"
+
+msgctxt "odt:stock.shipment.out.picking_list:0"
+msgid "Reference:"
+msgstr "Beleg-Nr.:"
+
+msgctxt "odt:stock.shipment.out.picking_list:0"
+msgid "To Location"
+msgstr "Zu Lagerort"
+
+msgctxt "odt:stock.shipment.out.picking_list:0"
+msgid "VAT Number:"
+msgstr "USt-ID-Nr.:"
+
+msgctxt "odt:stock.shipment.out.picking_list:0"
+msgid "Warehouse:"
+msgstr "Warenlager:"
+
+msgctxt "odt:stock.shipment.out.return.restocking_list:0"
+msgid "/"
+msgstr "/"
+
+msgctxt "odt:stock.shipment.out.return.restocking_list:0"
+msgid "Code:"
+msgstr "Code:"
+
+msgctxt "odt:stock.shipment.out.return.restocking_list:0"
+msgid "E-Mail:"
+msgstr "E-Mail:"
+
+msgctxt "odt:stock.shipment.out.return.restocking_list:0"
+msgid "From Location"
+msgstr "Von Lagerort"
+
+msgctxt "odt:stock.shipment.out.return.restocking_list:0"
+msgid "Phone:"
+msgstr "Telefon:"
+
+msgctxt "odt:stock.shipment.out.return.restocking_list:0"
+msgid "Planned Date:"
+msgstr "Geplantes Datum:"
+
+msgctxt "odt:stock.shipment.out.return.restocking_list:0"
+msgid "Product"
+msgstr "Artikel"
+
+msgctxt "odt:stock.shipment.out.return.restocking_list:0"
+msgid "Quantity"
+msgstr "Anzahl"
+
+msgctxt "odt:stock.shipment.out.return.restocking_list:0"
+msgid "Reference:"
+msgstr "Beleg-Nr.:"
+
+msgctxt "odt:stock.shipment.out.return.restocking_list:0"
+msgid "Restocking List"
+msgstr "Einlagerungsliste"
+
+msgctxt "odt:stock.shipment.out.return.restocking_list:0"
+msgid "Supplier:"
+msgstr "Lieferant:"
+
+msgctxt "odt:stock.shipment.out.return.restocking_list:0"
+msgid "To Location"
+msgstr "Zu Lagerort"
+
+msgctxt "odt:stock.shipment.out.return.restocking_list:0"
+msgid "VAT Number:"
+msgstr "USt-ID-Nr.:"
+
+msgctxt "odt:stock.shipment.out.return.restocking_list:0"
+msgid "Warehouse:"
+msgstr "Warenlager:"
+
+msgctxt "selection:stock.inventory,state:0"
+msgid "Canceled"
+msgstr "Annulliert"
+
+msgctxt "selection:stock.inventory,state:0"
+msgid "Done"
+msgstr "Erledigt"
+
+msgctxt "selection:stock.inventory,state:0"
+msgid "Draft"
+msgstr "Entwurf"
+
+msgctxt "selection:stock.location,type:0"
+msgid "Customer"
+msgstr "Kunde"
+
+msgctxt "selection:stock.location,type:0"
+msgid "Lost and Found"
+msgstr "Differenzen allgemein"
+
+msgctxt "selection:stock.location,type:0"
+msgid "Production"
+msgstr "Produktion"
+
+msgctxt "selection:stock.location,type:0"
+msgid "Storage"
+msgstr "Lager"
+
+msgctxt "selection:stock.location,type:0"
+msgid "Supplier"
+msgstr "Lieferant"
+
+msgctxt "selection:stock.location,type:0"
+msgid "View"
+msgstr "Sicht"
+
+msgctxt "selection:stock.location,type:0"
+msgid "Warehouse"
+msgstr "Warenlager"
+
+msgctxt "selection:stock.move,state:0"
+msgid "Assigned"
+msgstr "Zugewiesen"
+
+msgctxt "selection:stock.move,state:0"
+msgid "Canceled"
+msgstr "Annulliert"
+
+msgctxt "selection:stock.move,state:0"
+msgid "Done"
+msgstr "Erledigt"
+
+msgctxt "selection:stock.move,state:0"
+msgid "Draft"
+msgstr "Entwurf"
+
+msgctxt "selection:stock.period,state:0"
+msgid "Closed"
+msgstr "Geschlossen"
+
+msgctxt "selection:stock.period,state:0"
+msgid "Draft"
+msgstr "Entwurf"
+
+msgctxt "selection:stock.shipment.in,state:0"
+msgid "Canceled"
+msgstr "Annulliert"
+
+msgctxt "selection:stock.shipment.in,state:0"
+msgid "Done"
+msgstr "Erledigt"
+
+msgctxt "selection:stock.shipment.in,state:0"
+msgid "Draft"
+msgstr "Entwurf"
+
+msgctxt "selection:stock.shipment.in,state:0"
+msgid "Received"
+msgstr "Erhalten"
+
+msgctxt "selection:stock.shipment.in.return,state:0"
+msgid "Assigned"
+msgstr "Zugewiesen"
+
+msgctxt "selection:stock.shipment.in.return,state:0"
+msgid "Canceled"
+msgstr "Annulliert"
+
+msgctxt "selection:stock.shipment.in.return,state:0"
+msgid "Done"
+msgstr "Erledigt"
+
+msgctxt "selection:stock.shipment.in.return,state:0"
+msgid "Draft"
+msgstr "Entwurf"
+
+msgctxt "selection:stock.shipment.in.return,state:0"
+msgid "Waiting"
+msgstr "Wartend"
+
+msgctxt "selection:stock.shipment.internal,state:0"
+msgid "Assigned"
+msgstr "Zugewiesen"
+
+msgctxt "selection:stock.shipment.internal,state:0"
+msgid "Canceled"
+msgstr "Annulliert"
+
+msgctxt "selection:stock.shipment.internal,state:0"
+msgid "Done"
+msgstr "Erledigt"
+
+msgctxt "selection:stock.shipment.internal,state:0"
+msgid "Draft"
+msgstr "Entwurf"
+
+msgctxt "selection:stock.shipment.internal,state:0"
+msgid "Waiting"
+msgstr "Wartend"
+
+msgctxt "selection:stock.shipment.out,state:0"
+msgid "Assigned"
+msgstr "Zugewiesen"
+
+msgctxt "selection:stock.shipment.out,state:0"
+msgid "Canceled"
+msgstr "Annulliert"
+
+msgctxt "selection:stock.shipment.out,state:0"
+msgid "Done"
+msgstr "Erledigt"
+
+msgctxt "selection:stock.shipment.out,state:0"
+msgid "Draft"
+msgstr "Entwurf"
+
+msgctxt "selection:stock.shipment.out,state:0"
+msgid "Packed"
+msgstr "Gepackt"
+
+msgctxt "selection:stock.shipment.out,state:0"
+msgid "Waiting"
+msgstr "Wartend"
+
+msgctxt "selection:stock.shipment.out.return,state:0"
+msgid "Canceled"
+msgstr "Annulliert"
+
+msgctxt "selection:stock.shipment.out.return,state:0"
+msgid "Done"
+msgstr "Erledigt"
+
+msgctxt "selection:stock.shipment.out.return,state:0"
+msgid "Draft"
+msgstr "Entwurf"
+
+msgctxt "selection:stock.shipment.out.return,state:0"
+msgid "Received"
+msgstr "Erhalten"
+
+msgctxt "view:party.party:0"
+msgid "Stock"
+msgstr "Lager"
+
+msgctxt "view:party.party:0"
+msgid "_Stock"
+msgstr "_Lager"
+
+msgctxt "view:product.product:0"
+msgid "Products"
+msgstr "Artikel"
+
+msgctxt "view:stock.configuration:0"
+msgid "Stock Configuration"
+msgstr "Einstellungen Lager"
+
+msgctxt "view:stock.inventory.line:0"
+msgid "Inventory Line"
+msgstr "Position Bestand"
+
+msgctxt "view:stock.inventory.line:0"
+msgid "Inventory Lines"
+msgstr "Positionen Bestand"
+
+msgctxt "view:stock.inventory:0"
+msgid "Add an inventory line for each missing products"
+msgstr "Positionen für Bestandskorrektur um fehlende Artikel ergänzen"
+
+msgctxt "view:stock.inventory:0"
+msgid "All generated moves will be cancelled!"
+msgstr "Sämtliche erzeugten Bewegungen werden rückgängig gemacht!"
+
+msgctxt "view:stock.inventory:0"
+msgid "Cancel"
+msgstr "Annullieren"
+
+msgctxt "view:stock.inventory:0"
+msgid "Complete Inventory"
+msgstr "Lagerbestandspositionen komplettieren"
+
+msgctxt "view:stock.inventory:0"
+msgid "Confirm"
+msgstr "Bestätigen"
+
+msgctxt "view:stock.inventory:0"
+msgid "Inventories"
+msgstr "Bestandskorrekturen"
+
+msgctxt "view:stock.inventory:0"
+msgid "Inventory"
+msgstr "Lagerbestand"
+
+msgctxt "view:stock.inventory:0"
+msgid "Re-Open"
+msgstr "Wiedereröffnen"
+
+msgctxt "view:stock.location:0"
+msgid "Location"
+msgstr "Lagerort"
+
+msgctxt "view:stock.location:0"
+msgid "Locations"
+msgstr "Lagerorte"
+
+msgctxt "view:stock.location:0"
+msgid "Product Stock"
+msgstr "Lagerbestand"
+
+msgctxt "view:stock.location_stock_date.init:0"
+msgid "Product Quantity."
+msgstr "Artikel Mengen"
+
+msgctxt "view:stock.move:0"
+msgid "Cancel"
+msgstr "Annullieren"
+
+msgctxt "view:stock.move:0"
+msgid "Move"
+msgstr "Bewegung"
+
+msgctxt "view:stock.move:0"
+msgid "Moves"
+msgstr "Bewegungen"
+
+msgctxt "view:stock.move:0"
+msgid "Set Done"
+msgstr "Auf Erledigt setzen"
+
+msgctxt "view:stock.move:0"
+msgid "Set Draft"
+msgstr "Auf Entwurf setzen"
+
+msgctxt "view:stock.period.cache:0"
+msgid "Period Cache"
+msgstr "Perioden Cache-Speicher"
+
+msgctxt "view:stock.period.cache:0"
+msgid "Period Caches"
+msgstr "Perioden Cache-Speicher"
+
+msgctxt "view:stock.period:0"
+msgid "Close"
+msgstr "SchlieÃen"
+
+msgctxt "view:stock.period:0"
+msgid "Draft"
+msgstr "Entwurf"
+
+msgctxt "view:stock.period:0"
+msgid "Period"
+msgstr "Periode"
+
+msgctxt "view:stock.period:0"
+msgid "Periods"
+msgstr "Lagerperioden"
+
+msgctxt "view:stock.product_stock_date.init:0"
+msgid "Product Quantity."
+msgstr "Artikel Mengen"
+
+msgctxt "view:stock.shipment.in.return.assign.assign_failed:0"
+msgid "Moves"
+msgstr "Bewegungen"
+
+msgctxt "view:stock.shipment.in.return.assign.assign_failed:0"
+msgid "Unable to Assign"
+msgstr "Fehlmenge Zuweisung"
+
+msgctxt "view:stock.shipment.in.return.assign.assign_failed:0"
+msgid "Unable to assign those products:"
+msgstr "Folgende Artikel können nicht zugewiesen werden:"
+
+msgctxt "view:stock.shipment.in.return:0"
+msgid "Assign"
+msgstr "Zuweisen"
+
+msgctxt "view:stock.shipment.in.return:0"
+msgid "Cancel"
+msgstr "Annullieren"
+
+msgctxt "view:stock.shipment.in.return:0"
+msgid "Done"
+msgstr "Erledigt"
+
+msgctxt "view:stock.shipment.in.return:0"
+msgid "Draft"
+msgstr "Entwurf"
+
+msgctxt "view:stock.shipment.in.return:0"
+msgid "Reset to Draft"
+msgstr "Auf Entwurf zurücksetzen"
+
+msgctxt "view:stock.shipment.in.return:0"
+msgid "Supplier Return Shipment"
+msgstr "Warenrückgabe Lieferant"
+
+msgctxt "view:stock.shipment.in.return:0"
+msgid "Supplier Return Shipments"
+msgstr "Warenrückgaben (an Lieferanten)"
+
+msgctxt "view:stock.shipment.in.return:0"
+msgid "Waiting"
+msgstr "Wartend"
+
+msgctxt "view:stock.shipment.in:0"
+msgid "Cancel"
+msgstr "Annullieren"
+
+msgctxt "view:stock.shipment.in:0"
+msgid "Done"
+msgstr "Erledigt"
+
+msgctxt "view:stock.shipment.in:0"
+msgid "Draft"
+msgstr "Entwurf"
+
+msgctxt "view:stock.shipment.in:0"
+msgid "Incoming Moves"
+msgstr "Eingehende Bewegungen"
+
+msgctxt "view:stock.shipment.in:0"
+msgid "Inventory Moves"
+msgstr "Bestandsänderungen"
+
+msgctxt "view:stock.shipment.in:0"
+msgid "Moves"
+msgstr "Bewegungen"
+
+msgctxt "view:stock.shipment.in:0"
+msgid "Received"
+msgstr "Erhalten"
+
+msgctxt "view:stock.shipment.in:0"
+msgid "Reset to Draft"
+msgstr "Auf Entwurf zurücksetzen"
+
+msgctxt "view:stock.shipment.in:0"
+msgid "Supplier Shipment"
+msgstr "Lieferposten von Lieferant"
+
+msgctxt "view:stock.shipment.in:0"
+msgid "Supplier Shipments"
+msgstr "Lieferposten von Lieferanten"
+
+msgctxt "view:stock.shipment.internal.assign.assign_failed:0"
+msgid "Moves"
+msgstr "Bewegungen"
+
+msgctxt "view:stock.shipment.internal.assign.assign_failed:0"
+msgid "Unable to Assign"
+msgstr "Fehlmenge Zuweisung"
+
+msgctxt "view:stock.shipment.internal.assign.assign_failed:0"
+msgid "Unable to assign those products:"
+msgstr "Folgende Artikel können nicht zugewiesen werden:"
+
+msgctxt "view:stock.shipment.internal:0"
+msgid "Assign"
+msgstr "Zuweisen"
+
+msgctxt "view:stock.shipment.internal:0"
+msgid "Cancel"
+msgstr "Annullieren"
+
+msgctxt "view:stock.shipment.internal:0"
+msgid "Done"
+msgstr "Erledigt"
+
+msgctxt "view:stock.shipment.internal:0"
+msgid "Draft"
+msgstr "Entwurf"
+
+msgctxt "view:stock.shipment.internal:0"
+msgid "Force Assign"
+msgstr "Zuweisung erzwingen"
+
+msgctxt "view:stock.shipment.internal:0"
+msgid "Internal Shipment"
+msgstr "Interner Lieferposten"
+
+msgctxt "view:stock.shipment.internal:0"
+msgid "Internal Shipments"
+msgstr "Interne Lieferposten"
+
+msgctxt "view:stock.shipment.internal:0"
+msgid "Reset to Draft"
+msgstr "Auf Entwurf zurücksetzen"
+
+msgctxt "view:stock.shipment.internal:0"
+msgid "Set Done"
+msgstr "Auf Erledigt setzen"
+
+msgctxt "view:stock.shipment.internal:0"
+msgid "Set Waiting"
+msgstr "Auf Wartend setzen"
+
+msgctxt "view:stock.shipment.internal:0"
+msgid "Waiting"
+msgstr "Wartend"
+
+msgctxt "view:stock.shipment.out.assign.assign_failed:0"
+msgid "Inventory Moves"
+msgstr "Bestandsänderungen"
+
+msgctxt "view:stock.shipment.out.assign.assign_failed:0"
+msgid "Unable to Assign"
+msgstr "Fehlmenge Zuweisung"
+
+msgctxt "view:stock.shipment.out.assign.assign_failed:0"
+msgid "Unable to assign those products:"
+msgstr "Folgende Artikel können nicht zugewiesen werden:"
+
+msgctxt "view:stock.shipment.out.return:0"
+msgid "Cancel"
+msgstr "Annullieren"
+
+msgctxt "view:stock.shipment.out.return:0"
+msgid "Customer Return Shipment"
+msgstr "Warenrücknahme Kunde"
+
+msgctxt "view:stock.shipment.out.return:0"
+msgid "Customer Return Shipments"
+msgstr "Warenrücknahmen (von Kunden)"
+
+msgctxt "view:stock.shipment.out.return:0"
+msgid "Done"
+msgstr "Erledigt"
+
+msgctxt "view:stock.shipment.out.return:0"
+msgid "Incoming Moves"
+msgstr "Eingehende Bewegungen"
+
+msgctxt "view:stock.shipment.out.return:0"
+msgid "Inventory Moves"
+msgstr "Bestandsänderungen"
+
+msgctxt "view:stock.shipment.out.return:0"
+msgid "Moves"
+msgstr "Bewegungen"
+
+msgctxt "view:stock.shipment.out.return:0"
+msgid "Received"
+msgstr "Erhalten"
+
+msgctxt "view:stock.shipment.out.return:0"
+msgid "Reset to Draft"
+msgstr "Auf Entwurf zurücksetzen"
+
+msgctxt "view:stock.shipment.out:0"
+msgid "Are you sure to force assignation?"
+msgstr "Zuweisung wirklich erzwingen?"
+
+msgctxt "view:stock.shipment.out:0"
+msgid "Assign"
+msgstr "Zuweisen"
+
+msgctxt "view:stock.shipment.out:0"
+msgid "Cancel"
+msgstr "Annullieren"
+
+msgctxt "view:stock.shipment.out:0"
+msgid "Customer Shipment"
+msgstr "Lieferposten Kunde"
+
+msgctxt "view:stock.shipment.out:0"
+msgid "Customer Shipments"
+msgstr "Lieferposten an Kunden"
+
+msgctxt "view:stock.shipment.out:0"
+msgid "Done"
+msgstr "Erledigt"
+
+msgctxt "view:stock.shipment.out:0"
+msgid "Draft"
+msgstr "Entwurf"
+
+msgctxt "view:stock.shipment.out:0"
+msgid "Force Assign"
+msgstr "Zuweisung erzwingen"
+
+msgctxt "view:stock.shipment.out:0"
+msgid "Inventory Moves"
+msgstr "Bestandsänderungen"
+
+msgctxt "view:stock.shipment.out:0"
+msgid "Make shipment"
+msgstr "Packen"
+
+msgctxt "view:stock.shipment.out:0"
+msgid "Outgoing Moves"
+msgstr "Ausgehende Bewegungen"
+
+msgctxt "view:stock.shipment.out:0"
+msgid "Reset to Draft"
+msgstr "Auf Entwurf zurücksetzen"
+
+msgctxt "view:stock.shipment.out:0"
+msgid "Set Done"
+msgstr "Auf Erledigt setzen"
+
+msgctxt "view:stock.shipment.out:0"
+msgid "Set Waiting"
+msgstr "Auf Wartend setzen"
+
+msgctxt "view:stock.shipment.out:0"
+msgid "Unpack"
+msgstr "Entpackt"
+
+msgctxt "view:stock.shipment.out:0"
+msgid "Waiting"
+msgstr "Wartend"
+
+msgctxt "wizard_button:stock.location.open,init,end:0"
+msgid "Cancel"
+msgstr "Abbrechen"
+
+msgctxt "wizard_button:stock.location.open,init,open:0"
+msgid "Open"
+msgstr "Ãffnen"
+
+msgctxt "wizard_button:stock.product.open,init,end:0"
+msgid "Cancel"
+msgstr "Abbrechen"
+
+msgctxt "wizard_button:stock.product.open,init,open:0"
+msgid "Open"
+msgstr "Ãffnen"
+
+msgctxt "wizard_button:stock.shipment.in.return.assign,ask_force,end:0"
+msgid "Ok"
+msgstr "OK"
+
+msgctxt "wizard_button:stock.shipment.in.return.assign,ask_force,force:0"
+msgid "Force Assign"
+msgstr "Zuweisung erzwingen"
+
+msgctxt "wizard_button:stock.shipment.in.return.assign,assign_failed,end:0"
+msgid "Ok"
+msgstr "OK"
+
+msgctxt "wizard_button:stock.shipment.internal.assign,ask_force,end:0"
+msgid "Ok"
+msgstr "OK"
+
+msgctxt "wizard_button:stock.shipment.internal.assign,ask_force,force:0"
+msgid "Force Assign"
+msgstr "Zuweisung erzwingen"
+
+msgctxt "wizard_button:stock.shipment.internal.assign,assign_failed,end:0"
+msgid "Ok"
+msgstr "OK"
+
+msgctxt "wizard_button:stock.shipment.out.assign,ask_force,end:0"
+msgid "Ok"
+msgstr "OK"
+
+msgctxt "wizard_button:stock.shipment.out.assign,ask_force,force:0"
+msgid "Force Assign"
+msgstr "Zuweisung erzwingen"
+
+msgctxt "wizard_button:stock.shipment.out.assign,assign_failed,end:0"
+msgid "Ok"
+msgstr "OK"
diff --git a/locale/es_CO.po b/locale/es_CO.po
new file mode 100644
index 0000000..264ea07
--- /dev/null
+++ b/locale/es_CO.po
@@ -0,0 +1,2138 @@
+#
+msgid ""
+msgstr "Content-Type: text/plain; charset=utf-8\n"
+
+msgctxt "error:product.template:0"
+msgid ""
+"You cannot change the default uom for a product which is associated to stock"
+" moves."
+msgstr ""
+"No puede cambiar la UdM predeterminada para un producto asociado a "
+"movimientos de inventario."
+
+msgctxt "error:stock.inventory.line:0"
+msgid "Line quantity must be positive!"
+msgstr "La lÃnea de cantidad debe ser positiva!"
+
+msgctxt "error:stock.inventory.line:0"
+msgid "Product must be unique by inventory!"
+msgstr "El producto debe ser único por inventario!"
+
+msgctxt "error:stock.location:0"
+msgid ""
+"A location with existing moves cannot be changed to a type that does not "
+"support moves."
+msgstr ""
+"Un lugar con movimientos existentes no puede ser cambiado a un tipo que no "
+"soporte movimientos."
+
+msgctxt "error:stock.location:0"
+msgid "Location \"%s\" must be a child of warehouse \"%s\"!"
+msgstr "¡Localización de \"%s\" debe ser un hijo de la bodega \"%s\"!"
+
+msgctxt "error:stock.location:0"
+msgid "You can not create recursive locations!"
+msgstr "No puede crear lugares recursivamente!"
+
+msgctxt "error:stock.move:0"
+msgid "Internal move quantity must be positive"
+msgstr ""
+
+msgctxt "error:stock.move:0"
+msgid "Move can be on only one Shipment"
+msgstr "Solamente se puede hacer movimiento sobre un EnvÃo."
+
+msgctxt "error:stock.move:0"
+msgid "Move quantity must be positive"
+msgstr "El valor del movimiento debe ser positivo"
+
+msgctxt "error:stock.move:0"
+msgid "Source and destination location must be different"
+msgstr "Los lugares fuente y destino deben diferir"
+
+msgctxt "error:stock.move:0"
+msgid "You can not modify a move in the state: \"Assigned\", \"Done\" or \"Cancel\""
+msgstr ""
+
+msgctxt "error:stock.move:0"
+msgid "You can not modify move in closed period!"
+msgstr ""
+
+msgctxt "error:stock.move:0"
+msgid "You can not set state to assigned!"
+msgstr "No puede establecer el estado como asignado!"
+
+msgctxt "error:stock.move:0"
+msgid "You can not set state to done!"
+msgstr "No puede establecer el estado como hecho!"
+
+msgctxt "error:stock.move:0"
+msgid "You can not set state to draft!"
+msgstr "No puede establecer el estado como borrador!"
+
+msgctxt "error:stock.move:0"
+msgid "You can not use service products for a move!"
+msgstr "No puede usar productos de servicio para un movimiento!"
+
+msgctxt "error:stock.move:0"
+msgid "You can only delete draft or cancelled moves!"
+msgstr "Solamente puede eliminar movimientos en borrador o cancelados!"
+
+msgctxt "error:stock.period:0"
+msgid "You can not close a period in the future or today!"
+msgstr ""
+
+msgctxt "error:stock.period:0"
+msgid "You can not close a period when there is still assigned moves!"
+msgstr ""
+
+msgctxt "error:stock.shipment.in:0"
+msgid ""
+"Incoming Moves must have the warehouse input location as destination "
+"location!"
+msgstr ""
+"Movimientos de ingreso debe tener un lugar de entrada de bodega como lugar "
+"destino!"
+
+msgctxt "error:stock.shipment.in:0"
+msgid ""
+"Inventory Moves must have the warehouse input location as source location!"
+msgstr ""
+"Movimientos de inventario deben tener lugar de entrada a bodega como lugar "
+"fuente!"
+
+msgctxt "error:stock.shipment.out.return.create:0"
+msgid "The shipment with code %s is not yet sent."
+msgstr "El empaque con código %s no ha sido enviado aún."
+
+msgctxt "error:stock.shipment.out.return.create:0"
+msgid "You can not create return shipment"
+msgstr "No puede crear empaques de retorno"
+
+msgctxt "error:stock.shipment.out.return:0"
+msgid ""
+"Incoming Moves must have the warehouse input location as destination "
+"location!"
+msgstr "Ingreso deben tener lugar de entrada en bodega como lugar destino!"
+
+msgctxt "error:stock.shipment.out.return:0"
+msgid ""
+"Inventory Moves must have the warehouse input location as source location!"
+msgstr ""
+"Movimientos de inventario deben tener lugar de entrada en bodega como lugar "
+"fuente!"
+
+msgctxt "error:stock.shipment.out:0"
+msgid ""
+"Inventory Moves must have the warehouse output location as destination "
+"location!"
+msgstr ""
+
+msgctxt "error:stock.shipment.out:0"
+msgid ""
+"Outgoing Moves must have the warehouse output location as source location!"
+msgstr ""
+
+msgctxt "field:party.address,delivery:0"
+msgid "Delivery"
+msgstr "EnvÃo"
+
+msgctxt "field:party.party,customer_location:0"
+msgid "Customer Location"
+msgstr "Lugar del Cliente"
+
+msgctxt "field:party.party,supplier_location:0"
+msgid "Supplier Location"
+msgstr "Lugar del Proveedor"
+
+msgctxt "field:product.product,forecast_quantity:0"
+msgid "Forecast Quantity"
+msgstr "Cantidad Proyectada"
+
+msgctxt "field:product.product,quantity:0"
+msgid "Quantity"
+msgstr "Cantidad"
+
+msgctxt "field:product.template,forecast_quantity:0"
+msgid "Forecast Quantity"
+msgstr "Cantidad Proyectada"
+
+msgctxt "field:product.template,quantity:0"
+msgid "Quantity"
+msgstr "Cantidad"
+
+#, fuzzy
+msgctxt "field:stock.configuration,rec_name:0"
+msgid "Name"
+msgstr "Nombre de Contacto"
+
+msgctxt "field:stock.configuration,shipment_in_return_sequence:0"
+msgid "Supplier Return Shipment Sequence"
+msgstr "Secuencia de retorno de envÃo al proveedor"
+
+msgctxt "field:stock.configuration,shipment_in_sequence:0"
+msgid "Supplier Shipment Sequence"
+msgstr "Secuencia de envÃo al proveedor"
+
+msgctxt "field:stock.configuration,shipment_internal_sequence:0"
+msgid "Internal Shipment Sequence"
+msgstr "Secuencia de envÃo interno"
+
+msgctxt "field:stock.configuration,shipment_out_return_sequence:0"
+msgid "Customer Return Shipment Sequence"
+msgstr "Secuencia de retorno de envÃo al cliente "
+
+msgctxt "field:stock.configuration,shipment_out_sequence:0"
+msgid "Customer Shipment Sequence"
+msgstr "Secuencia de envÃo al cliente"
+
+msgctxt "field:stock.inventory,company:0"
+msgid "Company"
+msgstr "CompañÃa"
+
+msgctxt "field:stock.inventory,date:0"
+msgid "Date"
+msgstr "Fecha"
+
+msgctxt "field:stock.inventory,lines:0"
+msgid "Lines"
+msgstr "LÃneas de Inventario"
+
+msgctxt "field:stock.inventory,location:0"
+msgid "Location"
+msgstr "Lugar"
+
+msgctxt "field:stock.inventory,lost_found:0"
+msgid "Lost and Found"
+msgstr "Perdido y Encontrado"
+
+msgctxt "field:stock.inventory,rec_name:0"
+msgid "Name"
+msgstr "Nombre"
+
+msgctxt "field:stock.inventory,state:0"
+msgid "State"
+msgstr "Estado"
+
+msgctxt "field:stock.inventory.line,expected_quantity:0"
+msgid "Expected Quantity"
+msgstr "Cantidad Esperada"
+
+msgctxt "field:stock.inventory.line,inventory:0"
+msgid "Inventory"
+msgstr "Inventario"
+
+msgctxt "field:stock.inventory.line,move:0"
+msgid "Move"
+msgstr "Movimiento"
+
+msgctxt "field:stock.inventory.line,product:0"
+msgid "Product"
+msgstr "Producto"
+
+msgctxt "field:stock.inventory.line,quantity:0"
+msgid "Quantity"
+msgstr "Cantidad"
+
+msgctxt "field:stock.inventory.line,rec_name:0"
+msgid "Name"
+msgstr "Nombre"
+
+msgctxt "field:stock.inventory.line,unit_digits:0"
+msgid "Unit Digits"
+msgstr "DÃgitos Unitarios"
+
+msgctxt "field:stock.inventory.line,uom:0"
+msgid "UOM"
+msgstr "UDM"
+
+msgctxt "field:stock.location,active:0"
+msgid "Active"
+msgstr "Activo"
+
+msgctxt "field:stock.location,address:0"
+msgid "Address"
+msgstr "Direcciones"
+
+msgctxt "field:stock.location,childs:0"
+msgid "Children"
+msgstr "Hij at s"
+
+msgctxt "field:stock.location,code:0"
+msgid "Code"
+msgstr "Código"
+
+msgctxt "field:stock.location,forecast_quantity:0"
+msgid "Forecast Quantity"
+msgstr "Cantidad Proyectada"
+
+msgctxt "field:stock.location,input_location:0"
+msgid "Input"
+msgstr "Entrada"
+
+msgctxt "field:stock.location,left:0"
+msgid "Left"
+msgstr "Izquierda"
+
+msgctxt "field:stock.location,name:0"
+msgid "Name"
+msgstr "Nombre"
+
+msgctxt "field:stock.location,output_location:0"
+msgid "Output"
+msgstr "Salida"
+
+msgctxt "field:stock.location,parent:0"
+msgid "Parent"
+msgstr "Padre"
+
+msgctxt "field:stock.location,quantity:0"
+msgid "Quantity"
+msgstr "Cantidad"
+
+msgctxt "field:stock.location,rec_name:0"
+msgid "Name"
+msgstr "Nombre"
+
+msgctxt "field:stock.location,right:0"
+msgid "Right"
+msgstr "Derecha"
+
+msgctxt "field:stock.location,storage_location:0"
+msgid "Storage"
+msgstr "Almacén"
+
+msgctxt "field:stock.location,type:0"
+msgid "Location type"
+msgstr "Tipo de Lugar"
+
+msgctxt "field:stock.location_stock_date.init,forecast_date:0"
+msgid "At Date"
+msgstr "En la fecha"
+
+msgctxt "field:stock.move,company:0"
+msgid "Company"
+msgstr "CompañÃa"
+
+msgctxt "field:stock.move,cost_price:0"
+msgid "Cost Price"
+msgstr "Método de Precio"
+
+msgctxt "field:stock.move,currency:0"
+msgid "Currency"
+msgstr "Moneda"
+
+msgctxt "field:stock.move,effective_date:0"
+msgid "Effective Date"
+msgstr "Fecha Efectiva"
+
+msgctxt "field:stock.move,from_location:0"
+msgid "From Location"
+msgstr "Lugar Inicial"
+
+msgctxt "field:stock.move,internal_quantity:0"
+msgid "Internal Quantity"
+msgstr ""
+
+msgctxt "field:stock.move,planned_date:0"
+msgid "Planned Date"
+msgstr "Fecha Planeada"
+
+msgctxt "field:stock.move,product:0"
+msgid "Product"
+msgstr "Producto"
+
+msgctxt "field:stock.move,quantity:0"
+msgid "Quantity"
+msgstr "Cantidad"
+
+msgctxt "field:stock.move,rec_name:0"
+msgid "Name"
+msgstr "Nombre"
+
+msgctxt "field:stock.move,shipment_in:0"
+msgid "Supplier Shipment"
+msgstr "EnvÃo del Proveedor"
+
+msgctxt "field:stock.move,shipment_in_return:0"
+msgid "Supplier Return Shipment"
+msgstr "Devolución de Proveedor"
+
+msgctxt "field:stock.move,shipment_internal:0"
+msgid "Internal Shipment"
+msgstr "EnvÃo Interno"
+
+msgctxt "field:stock.move,shipment_out:0"
+msgid "Customer Shipment"
+msgstr "EnvÃo de Cliente"
+
+msgctxt "field:stock.move,shipment_out_return:0"
+msgid "Customer Return Shipment"
+msgstr "Devolución a Cliente"
+
+msgctxt "field:stock.move,state:0"
+msgid "State"
+msgstr "Estado"
+
+msgctxt "field:stock.move,to_location:0"
+msgid "To Location"
+msgstr "Al Lugar:"
+
+msgctxt "field:stock.move,unit_digits:0"
+msgid "Unit Digits"
+msgstr "DÃgitos de Unidad"
+
+msgctxt "field:stock.move,unit_price:0"
+msgid "Unit Price"
+msgstr "Precio Unitario"
+
+msgctxt "field:stock.move,unit_price_required:0"
+msgid "Unit Price Required"
+msgstr "Requiere Precio Unitario"
+
+msgctxt "field:stock.move,uom:0"
+msgid "Uom"
+msgstr "Udm"
+
+msgctxt "field:stock.period,caches:0"
+msgid "Caches"
+msgstr ""
+
+#, fuzzy
+msgctxt "field:stock.period,company:0"
+msgid "Company"
+msgstr "CompañÃa"
+
+#, fuzzy
+msgctxt "field:stock.period,date:0"
+msgid "Date"
+msgstr "Fecha"
+
+#, fuzzy
+msgctxt "field:stock.period,rec_name:0"
+msgid "Name"
+msgstr "Nombre de Contacto"
+
+#, fuzzy
+msgctxt "field:stock.period,state:0"
+msgid "State"
+msgstr "Estado"
+
+msgctxt "field:stock.period.cache,internal_quantity:0"
+msgid "Internal Quantity"
+msgstr ""
+
+#, fuzzy
+msgctxt "field:stock.period.cache,location:0"
+msgid "Location"
+msgstr "Lugar"
+
+#, fuzzy
+msgctxt "field:stock.period.cache,period:0"
+msgid "Period"
+msgstr "PerÃodo"
+
+#, fuzzy
+msgctxt "field:stock.period.cache,product:0"
+msgid "Product"
+msgstr "Productos"
+
+#, fuzzy
+msgctxt "field:stock.period.cache,rec_name:0"
+msgid "Name"
+msgstr "Nombre de Contacto"
+
+msgctxt "field:stock.product_stock_date.init,forecast_date:0"
+msgid "At Date"
+msgstr "En la fecha"
+
+msgctxt "field:stock.shipment.in,code:0"
+msgid "Code"
+msgstr "Código"
+
+#, fuzzy
+msgctxt "field:stock.shipment.in,company:0"
+msgid "Company"
+msgstr "CompañÃa"
+
+msgctxt "field:stock.shipment.in,contact_address:0"
+msgid "Contact Address"
+msgstr "Dirección de Contacto"
+
+msgctxt "field:stock.shipment.in,effective_date:0"
+msgid "Effective Date"
+msgstr "Fecha Efectiva"
+
+msgctxt "field:stock.shipment.in,incoming_moves:0"
+msgid "Incoming Moves"
+msgstr "Movimientos de Entrada"
+
+msgctxt "field:stock.shipment.in,inventory_moves:0"
+msgid "Inventory Moves"
+msgstr "Movimientos de Inventario"
+
+msgctxt "field:stock.shipment.in,moves:0"
+msgid "Moves"
+msgstr "Movimientos"
+
+msgctxt "field:stock.shipment.in,planned_date:0"
+msgid "Planned Date"
+msgstr "Fecha Planeada"
+
+msgctxt "field:stock.shipment.in,rec_name:0"
+msgid "Name"
+msgstr "Nombre"
+
+msgctxt "field:stock.shipment.in,reference:0"
+msgid "Reference"
+msgstr "Referencia"
+
+msgctxt "field:stock.shipment.in,state:0"
+msgid "State"
+msgstr "Estado"
+
+msgctxt "field:stock.shipment.in,supplier:0"
+msgid "Supplier"
+msgstr "Proveedor"
+
+msgctxt "field:stock.shipment.in,warehouse:0"
+msgid "Warehouse"
+msgstr "Depósito"
+
+msgctxt "field:stock.shipment.in.return,code:0"
+msgid "Code"
+msgstr "Código"
+
+#, fuzzy
+msgctxt "field:stock.shipment.in.return,company:0"
+msgid "Company"
+msgstr "CompañÃa"
+
+msgctxt "field:stock.shipment.in.return,effective_date:0"
+msgid "Effective Date"
+msgstr "Fecha Efectiva"
+
+msgctxt "field:stock.shipment.in.return,from_location:0"
+msgid "From Location"
+msgstr "Lugar Inicial"
+
+msgctxt "field:stock.shipment.in.return,moves:0"
+msgid "Moves"
+msgstr "Movimientos"
+
+msgctxt "field:stock.shipment.in.return,planned_date:0"
+msgid "Planned Date"
+msgstr "Fecha Planeada"
+
+msgctxt "field:stock.shipment.in.return,rec_name:0"
+msgid "Name"
+msgstr "Nombre"
+
+msgctxt "field:stock.shipment.in.return,reference:0"
+msgid "Reference"
+msgstr "Referencia"
+
+msgctxt "field:stock.shipment.in.return,state:0"
+msgid "State"
+msgstr "Estado"
+
+msgctxt "field:stock.shipment.in.return,to_location:0"
+msgid "To Location"
+msgstr "Al Lugar:"
+
+msgctxt "field:stock.shipment.in.return.assign.assign_failed,moves:0"
+msgid "Moves"
+msgstr "Movimientos"
+
+msgctxt "field:stock.shipment.internal,code:0"
+msgid "Code"
+msgstr "Código"
+
+#, fuzzy
+msgctxt "field:stock.shipment.internal,company:0"
+msgid "Company"
+msgstr "CompañÃa"
+
+msgctxt "field:stock.shipment.internal,effective_date:0"
+msgid "Effective Date"
+msgstr "Fecha Efectiva"
+
+msgctxt "field:stock.shipment.internal,from_location:0"
+msgid "From Location"
+msgstr "Lugar Inicial"
+
+msgctxt "field:stock.shipment.internal,moves:0"
+msgid "Moves"
+msgstr "Movimientos"
+
+msgctxt "field:stock.shipment.internal,planned_date:0"
+msgid "Planned Date"
+msgstr "Fecha Planeada"
+
+msgctxt "field:stock.shipment.internal,rec_name:0"
+msgid "Name"
+msgstr "Nombre"
+
+msgctxt "field:stock.shipment.internal,reference:0"
+msgid "Reference"
+msgstr "Referencia"
+
+msgctxt "field:stock.shipment.internal,state:0"
+msgid "State"
+msgstr "Estado"
+
+msgctxt "field:stock.shipment.internal,to_location:0"
+msgid "To Location"
+msgstr "Al Lugar:"
+
+msgctxt "field:stock.shipment.internal.assign.assign_failed,moves:0"
+msgid "Moves"
+msgstr "Movimientos"
+
+msgctxt "field:stock.shipment.out,code:0"
+msgid "Code"
+msgstr "Código"
+
+#, fuzzy
+msgctxt "field:stock.shipment.out,company:0"
+msgid "Company"
+msgstr "CompañÃa"
+
+msgctxt "field:stock.shipment.out,customer:0"
+msgid "Customer"
+msgstr "Cliente"
+
+msgctxt "field:stock.shipment.out,delivery_address:0"
+msgid "Delivery Address"
+msgstr "Dirección de EnvÃo"
+
+msgctxt "field:stock.shipment.out,effective_date:0"
+msgid "Effective Date"
+msgstr "Fecha Efectiva"
+
+msgctxt "field:stock.shipment.out,inventory_moves:0"
+msgid "Inventory Moves"
+msgstr "Movimientos de Inventario"
+
+msgctxt "field:stock.shipment.out,moves:0"
+msgid "Moves"
+msgstr "Movimientos"
+
+msgctxt "field:stock.shipment.out,outgoing_moves:0"
+msgid "Outgoing Moves"
+msgstr "Movimientos de Salida"
+
+msgctxt "field:stock.shipment.out,planned_date:0"
+msgid "Planned Date"
+msgstr "Fecha Planeada"
+
+msgctxt "field:stock.shipment.out,rec_name:0"
+msgid "Name"
+msgstr "Nombre"
+
+msgctxt "field:stock.shipment.out,reference:0"
+msgid "Reference"
+msgstr "Referencia"
+
+msgctxt "field:stock.shipment.out,state:0"
+msgid "State"
+msgstr "Estado"
+
+msgctxt "field:stock.shipment.out,warehouse:0"
+msgid "Warehouse"
+msgstr "Depósito"
+
+msgctxt "field:stock.shipment.out.assign.assign_failed,inventory_moves:0"
+msgid "Inventory Moves"
+msgstr "Movimientos de Inventario"
+
+msgctxt "field:stock.shipment.out.return,code:0"
+msgid "Code"
+msgstr "Código"
+
+#, fuzzy
+msgctxt "field:stock.shipment.out.return,company:0"
+msgid "Company"
+msgstr "CompañÃa"
+
+msgctxt "field:stock.shipment.out.return,customer:0"
+msgid "Customer"
+msgstr "Cliente"
+
+msgctxt "field:stock.shipment.out.return,delivery_address:0"
+msgid "Delivery Address"
+msgstr "Dirección de EnvÃo"
+
+msgctxt "field:stock.shipment.out.return,effective_date:0"
+msgid "Effective Date"
+msgstr "Fecha Efectiva"
+
+msgctxt "field:stock.shipment.out.return,incoming_moves:0"
+msgid "Incoming Moves"
+msgstr "Movimientos de Entrada"
+
+msgctxt "field:stock.shipment.out.return,inventory_moves:0"
+msgid "Inventory Moves"
+msgstr "Movimientos de Inventario"
+
+msgctxt "field:stock.shipment.out.return,moves:0"
+msgid "Moves"
+msgstr "Movimientos"
+
+msgctxt "field:stock.shipment.out.return,planned_date:0"
+msgid "Planned Date"
+msgstr "Fecha Planeada"
+
+msgctxt "field:stock.shipment.out.return,rec_name:0"
+msgid "Name"
+msgstr "Nombre"
+
+msgctxt "field:stock.shipment.out.return,reference:0"
+msgid "Reference"
+msgstr "Referencia"
+
+msgctxt "field:stock.shipment.out.return,state:0"
+msgid "State"
+msgstr "Estado"
+
+msgctxt "field:stock.shipment.out.return,warehouse:0"
+msgid "Warehouse"
+msgstr "Depósito"
+
+msgctxt "help:party.party,customer_location:0"
+msgid "The default destination location when sending products to the party."
+msgstr ""
+"El lugar predeterminado destino cuando se envian productos al tercero."
+
+msgctxt "help:party.party,supplier_location:0"
+msgid "The default source location when receiving products from the party."
+msgstr ""
+"El lugar origen predeterminado cuando se reciben productos del tercero."
+
+msgctxt "help:stock.location_stock_date.init,forecast_date:0"
+msgid ""
+"Allow to compute expected stock quantities for this date.\n"
+"* An empty value is an infinite date in the future.\n"
+"* A date in the past will provide historical values."
+msgstr ""
+"Permitir calcular el inventario esperado para esta fecha.\n"
+"* Un valor vacÃoes una fecha infinita en el futuro.\n"
+"* Una fecha en el pasado indicará usar datos históricos."
+
+msgctxt "help:stock.product_stock_date.init,forecast_date:0"
+msgid ""
+"Allow to compute expected stock quantities for this date.\n"
+"* An empty value is an infinite date in the future.\n"
+"* A date in the past will provide historical values."
+msgstr ""
+"Permitir calcular el inventario esperado para esta fecha.\n"
+"* Un valor vacÃoes una fecha infinita en el futuro.\n"
+"* Una fecha en el pasado indicará usar datos históricos."
+
+msgctxt "model:ir.action,name:act_inventory_form"
+msgid "Inventories"
+msgstr "Inventarios"
+
+msgctxt "model:ir.action,name:act_inventory_form_draft"
+msgid "Draft Inventories"
+msgstr "Inventarios de Prueba"
+
+#, fuzzy
+msgctxt "model:ir.action,name:act_location_form"
+msgid "Locations"
+msgstr "Editar Lugares"
+
+msgctxt "model:ir.action,name:act_location_quantity_tree"
+msgid "Product Stock"
+msgstr "Inventario de Producto"
+
+msgctxt "model:ir.action,name:act_location_tree"
+msgid "Locations"
+msgstr "Lugares"
+
+msgctxt "model:ir.action,name:act_move_form"
+msgid "Moves"
+msgstr "Movimientos"
+
+msgctxt "model:ir.action,name:act_move_form_cust"
+msgid "Moves to Customers"
+msgstr "Movimientos hacia Clientes"
+
+msgctxt "model:ir.action,name:act_move_form_supp"
+msgid "Moves from Suppliers"
+msgstr "Movimientos de Proveedores"
+
+msgctxt "model:ir.action,name:act_move_form_supp_proceed"
+msgid "Moves from Suppliers Waiting Arrival"
+msgstr "Movimientos de Proveedores en espera de Arrivo"
+
+#, fuzzy
+msgctxt "model:ir.action,name:act_period_list"
+msgid "Periods"
+msgstr "PerÃodos"
+
+msgctxt "model:ir.action,name:act_product_by_location"
+msgid "Products by Locations"
+msgstr "Productos por Lugares"
+
+msgctxt "model:ir.action,name:act_shipment_in_draft"
+msgid "Draft Supplier Shipment"
+msgstr ""
+
+msgctxt "model:ir.action,name:act_shipment_in_form"
+msgid "Supplier Shipments"
+msgstr "EnvÃos del Proveedor"
+
+msgctxt "model:ir.action,name:act_shipment_in_form_received"
+msgid "Received Supplier shipments"
+msgstr "Empaques de Proveedores recibidos"
+
+msgctxt "model:ir.action,name:act_shipment_in_return_form"
+msgid "Supplier Return Shipments"
+msgstr "Devolución al Proveedor"
+
+msgctxt "model:ir.action,name:act_shipment_internal_assigned_form"
+msgid "Assigned Internal Shipments"
+msgstr "EnvÃos internos asignados"
+
+msgctxt "model:ir.action,name:act_shipment_internal_draft_form"
+msgid "Draft Internal Shipments"
+msgstr "EnvÃos Internos en Borrador"
+
+msgctxt "model:ir.action,name:act_shipment_internal_form"
+msgid "Internal Shipments"
+msgstr "EnvÃos Internos"
+
+msgctxt "model:ir.action,name:act_shipment_internal_waiting_form"
+msgid "Internal Shipments Waiting Assignation"
+msgstr "EnvÃos Internos esperando Asignación"
+
+msgctxt "model:ir.action,name:act_shipment_out_form"
+msgid "Customer Shipments"
+msgstr "EnvÃos a Cliente"
+
+msgctxt "model:ir.action,name:act_shipment_out_form2"
+msgid "Customer Shipments"
+msgstr "EnvÃos a Cliente"
+
+msgctxt "model:ir.action,name:act_shipment_out_form3"
+msgid "Supplier Shipments"
+msgstr "EnvÃos del Proveedor"
+
+msgctxt "model:ir.action,name:act_shipment_out_form_assigned"
+msgid "Assigned Customer Shipments"
+msgstr "EnvÃos a Clientes asignados"
+
+msgctxt "model:ir.action,name:act_shipment_out_form_ready"
+msgid "Customer Shipments Ready for Shipping"
+msgstr "EnvÃos de Cliente listos para Enviar"
+
+msgctxt "model:ir.action,name:act_shipment_out_form_waiting"
+msgid "Customer Shipments Waiting Assignation"
+msgstr "EnvÃos de Cliente esperando Asignación"
+
+msgctxt "model:ir.action,name:act_shipment_out_return_form"
+msgid "Customer Return Shipments"
+msgstr "Devolución al Cliente"
+
+msgctxt "model:ir.action,name:act_stock_configuration_form"
+msgid "Stock Configuration"
+msgstr "Configuración del inventario"
+
+msgctxt "model:ir.action,name:create_shipment_out_return"
+msgid "Create Return Shipment"
+msgstr "Crear Devolución"
+
+msgctxt "model:ir.action,name:report_shipment_in_restocking_list"
+msgid "Restocking List"
+msgstr "Lista de Renovación de Inventario"
+
+msgctxt "model:ir.action,name:report_shipment_internal"
+msgid "Internal Shipment"
+msgstr "EnvÃo Interno"
+
+msgctxt "model:ir.action,name:report_shipment_out_delivery_note"
+msgid "Delivery Note"
+msgstr "Nota de EnvÃo"
+
+msgctxt "model:ir.action,name:report_shipment_out_picking_list"
+msgid "Picking List"
+msgstr "Lista de Recogida"
+
+msgctxt "model:ir.action,name:report_shipment_out_return_restocking_list"
+msgid "Restocking List"
+msgstr "Lista de Renovación de Inventario"
+
+msgctxt "model:ir.action,name:wizard_complete_inventory"
+msgid "Complete Inventory"
+msgstr "Inventario Completo"
+
+msgctxt "model:ir.action,name:wizard_location_open"
+msgid "Product by Location"
+msgstr "Producto por Lugar"
+
+msgctxt "model:ir.action,name:wizard_product_open"
+msgid "Product Quantities"
+msgstr "Cantidades de Producto"
+
+msgctxt "model:ir.action,name:wizard_shipment_in_return_assign"
+msgid "Assign Purchase Return Shipment"
+msgstr "Asigne Devolución de Compra"
+
+msgctxt "model:ir.action,name:wizard_shipment_internal_assign"
+msgid "Assign Shipment Internal"
+msgstr "Asigne EnvÃo Interno"
+
+msgctxt "model:ir.action,name:wizard_shipment_out_assign"
+msgid "Assign Shipment Out"
+msgstr "Asignación de EnvÃo"
+
+msgctxt "model:ir.sequence,name:sequence_shipment_in"
+msgid "Supplier Shipment"
+msgstr "EnvÃo del Proveedor"
+
+msgctxt "model:ir.sequence,name:sequence_shipment_in_return"
+msgid "Supplier Return Shipment"
+msgstr "Devolución al Proveedor"
+
+msgctxt "model:ir.sequence,name:sequence_shipment_internal"
+msgid "Internal Shipment"
+msgstr "EnvÃo Interno"
+
+msgctxt "model:ir.sequence,name:sequence_shipment_out"
+msgid "Customer Shipment"
+msgstr "EnvÃo a Cliente"
+
+msgctxt "model:ir.sequence,name:sequence_shipment_out_return"
+msgid "Customer Return Shipment"
+msgstr "Devolución al Cliente"
+
+msgctxt "model:ir.sequence.type,name:sequence_type_shipment_in"
+msgid "Supplier Shipment"
+msgstr "EnvÃo del Proveedor"
+
+msgctxt "model:ir.sequence.type,name:sequence_type_shipment_in_return"
+msgid "Supplier Return Shipment"
+msgstr "Devolución al Proveedor"
+
+msgctxt "model:ir.sequence.type,name:sequence_type_shipment_internal"
+msgid "Internal Shipment"
+msgstr "EnvÃo Interno"
+
+msgctxt "model:ir.sequence.type,name:sequence_type_shipment_out"
+msgid "Customer Shipment"
+msgstr "EnvÃo a Cliente"
+
+msgctxt "model:ir.sequence.type,name:sequence_type_shipment_out_return"
+msgid "Customer Return Shipment"
+msgstr "Devolución al Cliente"
+
+msgctxt "model:ir.ui.menu,name:menu_configuration"
+msgid "Configuration"
+msgstr "Configuración"
+
+msgctxt "model:ir.ui.menu,name:menu_inventory_form"
+msgid "Inventories"
+msgstr "Inventarios"
+
+msgctxt "model:ir.ui.menu,name:menu_inventory_form_draft"
+msgid "Draft Inventories"
+msgstr "Inventarios de prueba"
+
+#, fuzzy
+msgctxt "model:ir.ui.menu,name:menu_location_form"
+msgid "Locations"
+msgstr "Editar Lugares"
+
+msgctxt "model:ir.ui.menu,name:menu_location_tree"
+msgid "Locations"
+msgstr "Lugares"
+
+msgctxt "model:ir.ui.menu,name:menu_move_form"
+msgid "Moves"
+msgstr "Movimientos"
+
+msgctxt "model:ir.ui.menu,name:menu_move_form_cust"
+msgid "Moves to Customers"
+msgstr "Movimientos hacia Clientes"
+
+msgctxt "model:ir.ui.menu,name:menu_move_form_supp"
+msgid "Moves from Suppliers"
+msgstr "Movimientos de Proveedores"
+
+msgctxt "model:ir.ui.menu,name:menu_move_form_supp_proceed"
+msgid "Moves from Suppliers Waiting Arrival"
+msgstr "Movimientos de Proveedores en espera de Arrivo"
+
+#, fuzzy
+msgctxt "model:ir.ui.menu,name:menu_period_list"
+msgid "Periods"
+msgstr "PerÃodos"
+
+msgctxt "model:ir.ui.menu,name:menu_reporting"
+msgid "Reporting"
+msgstr "Reportes"
+
+msgctxt "model:ir.ui.menu,name:menu_shipment_in_draft"
+msgid "Draft Supplier Shipment"
+msgstr ""
+
+msgctxt "model:ir.ui.menu,name:menu_shipment_in_form"
+msgid "Supplier Shipments"
+msgstr "EnvÃo del Proveedor"
+
+msgctxt "model:ir.ui.menu,name:menu_shipment_in_received"
+msgid "Received Supplier shipments"
+msgstr "Empaques de Proveedores recibidos"
+
+msgctxt "model:ir.ui.menu,name:menu_shipment_in_return_form"
+msgid "Supplier Return Shipments"
+msgstr "Devolución al Proveedor"
+
+msgctxt "model:ir.ui.menu,name:menu_shipment_internal_assigned_form"
+msgid "Assigned Internal Shipments"
+msgstr "EnvÃos asignados internamente"
+
+msgctxt "model:ir.ui.menu,name:menu_shipment_internal_draft_form"
+msgid "Draft Internal Shipments"
+msgstr "EnvÃos Internos en Borrador"
+
+msgctxt "model:ir.ui.menu,name:menu_shipment_internal_form"
+msgid "Internal Shipments"
+msgstr "EnvÃo Internos"
+
+msgctxt "model:ir.ui.menu,name:menu_shipment_internal_waiting_form"
+msgid "Internal Shipments Waiting Assignation"
+msgstr "EnvÃo Internos esperando Asignación"
+
+msgctxt "model:ir.ui.menu,name:menu_shipment_out_assigned"
+msgid "Assigned Customer Shipments"
+msgstr "EnvÃos asignados a Clientes"
+
+msgctxt "model:ir.ui.menu,name:menu_shipment_out_form"
+msgid "Customer Shipments"
+msgstr "EnvÃos al Cliente"
+
+msgctxt "model:ir.ui.menu,name:menu_shipment_out_ready"
+msgid "Customer Shipments Ready for Shipping"
+msgstr "EnvÃos de Cliente listos para EnvÃo"
+
+msgctxt "model:ir.ui.menu,name:menu_shipment_out_return_form"
+msgid "Customer Return Shipments"
+msgstr "Devolución al Cliente"
+
+msgctxt "model:ir.ui.menu,name:menu_shipment_out_waiting"
+msgid "Customer Shipments Waiting Assignation"
+msgstr "EnvÃos de Cliente listos esperando Asignación"
+
+#, fuzzy
+msgctxt "model:ir.ui.menu,name:menu_stock"
+msgid "Inventory & Stock"
+msgstr "Gestión de Inventarios"
+
+msgctxt "model:ir.ui.menu,name:menu_stock_configuration"
+msgid "Stock Configuration"
+msgstr "Configuración de Inventario"
+
+msgctxt "model:res.group,name:group_stock"
+msgid "Stock"
+msgstr "Stock"
+
+msgctxt "model:res.group,name:group_stock_admin"
+msgid "Stock Administration"
+msgstr "Administración de existencia"
+
+msgctxt "model:res.group,name:group_stock_force_assignment"
+msgid "Stock Force Assignment"
+msgstr ""
+
+#, fuzzy
+msgctxt "model:stock.configuration,name:0"
+msgid "Stock Configuration"
+msgstr "Configuración del inventario"
+
+msgctxt "model:stock.inventory,name:0"
+msgid "Stock Inventory"
+msgstr "Inventario de Existencia"
+
+msgctxt "model:stock.inventory.line,name:0"
+msgid "Stock Inventory Line"
+msgstr "LÃnea de existencia en Inventario "
+
+msgctxt "model:stock.location,name:0"
+msgid "Stock Location"
+msgstr "Lugar de Existencia"
+
+msgctxt "model:stock.location,name:location_customer"
+msgid "Customer"
+msgstr "Cliente"
+
+msgctxt "model:stock.location,name:location_input"
+msgid "Input Zone"
+msgstr "Zona de Entrada"
+
+msgctxt "model:stock.location,name:location_lost_found"
+msgid "Lost and Found"
+msgstr "Perdido y Encontrado"
+
+msgctxt "model:stock.location,name:location_output"
+msgid "Output Zone"
+msgstr "Zona de Salida"
+
+msgctxt "model:stock.location,name:location_storage"
+msgid "Storage Zone"
+msgstr "Zona de Almacén"
+
+msgctxt "model:stock.location,name:location_supplier"
+msgid "Supplier"
+msgstr "Proveedor"
+
+msgctxt "model:stock.location,name:location_warehouse"
+msgid "Warehouse"
+msgstr "Depósito"
+
+msgctxt "model:stock.location_stock_date.init,name:0"
+msgid "Compute stock quantities"
+msgstr "Calcule cantidad existencia"
+
+msgctxt "model:stock.move,name:0"
+msgid "Stock Move"
+msgstr "Movimiento de Existencias"
+
+msgctxt "model:stock.period,name:0"
+msgid "Stock Period"
+msgstr ""
+
+msgctxt "model:stock.period.cache,name:0"
+msgid ""
+"\n"
+" Stock Period Cache\n"
+"\n"
+" It is used to store cached computation of stock quantities.\n"
+" "
+msgstr ""
+
+msgctxt "model:stock.product_stock_date.init,name:0"
+msgid "Compute stock quantities"
+msgstr "Calcule cantidad de existencia"
+
+msgctxt "model:stock.shipment.in,name:0"
+msgid "Supplier Shipment"
+msgstr "EnvÃo del Proveedor"
+
+msgctxt "model:stock.shipment.in.return,name:0"
+msgid "Supplier Return Shipment"
+msgstr "Devolución a Proveedor"
+
+#, fuzzy
+msgctxt "model:stock.shipment.in.return.assign.assign_failed,name:0"
+msgid "Assign Supplier Return Shipment Assign Failed"
+msgstr "Fuerce Pregunta de Asigne Devolución a Proveedor"
+
+msgctxt "model:stock.shipment.internal,name:0"
+msgid "Internal Shipment"
+msgstr "EnvÃo Interno"
+
+#, fuzzy
+msgctxt "model:stock.shipment.internal.assign.assign_failed,name:0"
+msgid "Assign Shipment Internal Assign Failed"
+msgstr "Fuerce Pregunta de Asigne EnvÃo Interno"
+
+msgctxt "model:stock.shipment.out,name:0"
+msgid "Customer Shipment"
+msgstr "EnvÃo de Cliente"
+
+#, fuzzy
+msgctxt "model:stock.shipment.out.assign.assign_failed,name:0"
+msgid "Assign Shipment Out Assign Failed"
+msgstr "Fuerce Pregunta de Asigne EnvÃo"
+
+msgctxt "model:stock.shipment.out.return,name:0"
+msgid "Customer Return Shipment"
+msgstr "Devolución a Cliente"
+
+msgctxt "model:workflow,name:wkf_inventory"
+msgid "Inventory"
+msgstr "Inventario"
+
+msgctxt "model:workflow,name:wkf_shipment_in_return"
+msgid "Supplier Return Shipment"
+msgstr "Devolución a Proveedor"
+
+msgctxt "model:workflow,name:wkf_shipment_out_return"
+msgid "Customer Return Shipment"
+msgstr "Devolución a Cliente"
+
+msgctxt "model:workflow,name:wkf_shipmentin"
+msgid "Supplier Shipment"
+msgstr "EnvÃo del Proveedor"
+
+msgctxt "model:workflow,name:wkf_shipmentinternal"
+msgid "Internal Shipment"
+msgstr "EnvÃo Interno"
+
+msgctxt "model:workflow,name:wkf_shipmentout"
+msgid "Customer Shipment"
+msgstr "EnvÃo de Cliente"
+
+msgctxt "model:workflow.activity,name:inventory_act_cancel"
+msgid "Canceled"
+msgstr "Cancelado"
+
+msgctxt "model:workflow.activity,name:inventory_act_done"
+msgid "Done"
+msgstr "Hecho"
+
+msgctxt "model:workflow.activity,name:inventory_act_draft"
+msgid "Draft"
+msgstr "Borrador"
+
+msgctxt "model:workflow.activity,name:shipment_in_return_act_assigned"
+msgid "Assigned"
+msgstr "Asignado"
+
+msgctxt "model:workflow.activity,name:shipment_in_return_act_cancel"
+msgid "Canceled"
+msgstr "Cancelado"
+
+msgctxt "model:workflow.activity,name:shipment_in_return_act_done"
+msgid "Done"
+msgstr "Hecho"
+
+msgctxt "model:workflow.activity,name:shipment_in_return_act_draft"
+msgid "Draft"
+msgstr "Borrador"
+
+msgctxt "model:workflow.activity,name:shipment_in_return_act_waiting"
+msgid "Waiting"
+msgstr "En Espera"
+
+msgctxt "model:workflow.activity,name:shipment_out_return_act_cancel"
+msgid "Canceled"
+msgstr "Cancelado"
+
+msgctxt "model:workflow.activity,name:shipment_out_return_act_done"
+msgid "Done"
+msgstr "Hecho"
+
+msgctxt "model:workflow.activity,name:shipment_out_return_act_draft"
+msgid "Draft"
+msgstr "Borrador"
+
+msgctxt "model:workflow.activity,name:shipment_out_return_act_received"
+msgid "Received"
+msgstr "Recibido"
+
+msgctxt "model:workflow.activity,name:shipmentin_act_cancel"
+msgid "Canceled"
+msgstr "Cancelado"
+
+msgctxt "model:workflow.activity,name:shipmentin_act_done"
+msgid "Done"
+msgstr "Hecho"
+
+msgctxt "model:workflow.activity,name:shipmentin_act_draft"
+msgid "Draft"
+msgstr "Borrador"
+
+msgctxt "model:workflow.activity,name:shipmentin_act_received"
+msgid "Received"
+msgstr "Recibido"
+
+msgctxt "model:workflow.activity,name:shipmentinternal_act_assigned"
+msgid "Assigned"
+msgstr "Asignado"
+
+msgctxt "model:workflow.activity,name:shipmentinternal_act_cancel"
+msgid "Canceled"
+msgstr "Cancelado"
+
+msgctxt "model:workflow.activity,name:shipmentinternal_act_done"
+msgid "Done"
+msgstr "Hecho"
+
+msgctxt "model:workflow.activity,name:shipmentinternal_act_draft"
+msgid "Draft"
+msgstr "Borrador"
+
+msgctxt "model:workflow.activity,name:shipmentinternal_act_waiting"
+msgid "Waiting"
+msgstr "En Espera"
+
+msgctxt "model:workflow.activity,name:shipmentout_act_assigned"
+msgid "Assigned"
+msgstr "Asignado"
+
+msgctxt "model:workflow.activity,name:shipmentout_act_cancel"
+msgid "Canceled"
+msgstr "Cancelado"
+
+msgctxt "model:workflow.activity,name:shipmentout_act_done"
+msgid "Done"
+msgstr "Hecho"
+
+msgctxt "model:workflow.activity,name:shipmentout_act_draft"
+msgid "Draft"
+msgstr "Borrador"
+
+msgctxt "model:workflow.activity,name:shipmentout_act_packed"
+msgid "Packed"
+msgstr "Empacado"
+
+msgctxt "model:workflow.activity,name:shipmentout_act_waiting"
+msgid "Waiting"
+msgstr "En Espera"
+
+msgctxt "odt:stock.shipment.in.restocking_list:0"
+msgid "/"
+msgstr "/"
+
+msgctxt "odt:stock.shipment.in.restocking_list:0"
+msgid "Code:"
+msgstr "Código:"
+
+msgctxt "odt:stock.shipment.in.restocking_list:0"
+msgid "E-Mail:"
+msgstr "Correo electrónico:"
+
+msgctxt "odt:stock.shipment.in.restocking_list:0"
+msgid "From Location"
+msgstr "Lugar Inicial"
+
+msgctxt "odt:stock.shipment.in.restocking_list:0"
+msgid "Phone:"
+msgstr "Teléfono:"
+
+msgctxt "odt:stock.shipment.in.restocking_list:0"
+msgid "Planned Date:"
+msgstr "Fecha Planeada:"
+
+msgctxt "odt:stock.shipment.in.restocking_list:0"
+msgid "Product"
+msgstr "Producto"
+
+msgctxt "odt:stock.shipment.in.restocking_list:0"
+msgid "Quantity"
+msgstr "Cantidad"
+
+msgctxt "odt:stock.shipment.in.restocking_list:0"
+msgid "Reference:"
+msgstr "Referencia:"
+
+msgctxt "odt:stock.shipment.in.restocking_list:0"
+msgid "Restocking List"
+msgstr "Lista de Renovación de Inventario"
+
+msgctxt "odt:stock.shipment.in.restocking_list:0"
+msgid "Supplier:"
+msgstr "Proveedor:"
+
+msgctxt "odt:stock.shipment.in.restocking_list:0"
+msgid "To Location"
+msgstr "Al Lugar:"
+
+msgctxt "odt:stock.shipment.in.restocking_list:0"
+msgid "VAT Number:"
+msgstr ""
+
+msgctxt "odt:stock.shipment.in.restocking_list:0"
+msgid "Warehouse:"
+msgstr "Bodega:"
+
+msgctxt "odt:stock.shipment.internal.report:0"
+msgid "/"
+msgstr "/"
+
+msgctxt "odt:stock.shipment.internal.report:0"
+msgid "Code:"
+msgstr "Código:"
+
+msgctxt "odt:stock.shipment.internal.report:0"
+msgid "E-Mail:"
+msgstr "Correo electrónico:"
+
+msgctxt "odt:stock.shipment.internal.report:0"
+msgid "From Location"
+msgstr "Lugar Inicial"
+
+msgctxt "odt:stock.shipment.internal.report:0"
+msgid "From Location:"
+msgstr "Origen:"
+
+msgctxt "odt:stock.shipment.internal.report:0"
+msgid "Internal Shipment"
+msgstr "EnvÃo Interno"
+
+msgctxt "odt:stock.shipment.internal.report:0"
+msgid "Phone:"
+msgstr "Teléfono:"
+
+msgctxt "odt:stock.shipment.internal.report:0"
+msgid "Planned Date:"
+msgstr "Fecha Planeada:"
+
+msgctxt "odt:stock.shipment.internal.report:0"
+msgid "Product"
+msgstr "Producto"
+
+msgctxt "odt:stock.shipment.internal.report:0"
+msgid "Quantity"
+msgstr "Cantidad"
+
+msgctxt "odt:stock.shipment.internal.report:0"
+msgid "Reference:"
+msgstr "Referencia:"
+
+msgctxt "odt:stock.shipment.internal.report:0"
+msgid "To Location"
+msgstr "Al Lugar:"
+
+msgctxt "odt:stock.shipment.internal.report:0"
+msgid "To Location:"
+msgstr "Destino:"
+
+msgctxt "odt:stock.shipment.internal.report:0"
+msgid "VAT Number:"
+msgstr ""
+
+msgctxt "odt:stock.shipment.out.delivery_note:0"
+msgid "/"
+msgstr "/"
+
+msgctxt "odt:stock.shipment.out.delivery_note:0"
+msgid "Customer Code:"
+msgstr "Código de Cliente:"
+
+msgctxt "odt:stock.shipment.out.delivery_note:0"
+msgid "Date:"
+msgstr "Fecha:"
+
+msgctxt "odt:stock.shipment.out.delivery_note:0"
+msgid "Delivery Note"
+msgstr "Nota de EnvÃo"
+
+msgctxt "odt:stock.shipment.out.delivery_note:0"
+msgid "E-Mail:"
+msgstr "Correo electrónico:"
+
+msgctxt "odt:stock.shipment.out.delivery_note:0"
+msgid "Phone:"
+msgstr "Teléfono:"
+
+msgctxt "odt:stock.shipment.out.delivery_note:0"
+msgid "Product"
+msgstr "Producto"
+
+msgctxt "odt:stock.shipment.out.delivery_note:0"
+msgid "Quantity"
+msgstr "Cantidad"
+
+msgctxt "odt:stock.shipment.out.delivery_note:0"
+msgid "Reference:"
+msgstr "Referencia:"
+
+msgctxt "odt:stock.shipment.out.delivery_note:0"
+msgid "Shipment Number:"
+msgstr "Número de EnvÃo"
+
+msgctxt "odt:stock.shipment.out.delivery_note:0"
+msgid "VAT Number:"
+msgstr ""
+
+msgctxt "odt:stock.shipment.out.picking_list:0"
+msgid "/"
+msgstr "/"
+
+msgctxt "odt:stock.shipment.out.picking_list:0"
+msgid "Code:"
+msgstr "Código:"
+
+msgctxt "odt:stock.shipment.out.picking_list:0"
+msgid "Customer:"
+msgstr "Cliente:"
+
+msgctxt "odt:stock.shipment.out.picking_list:0"
+msgid "E-Mail:"
+msgstr "Correo electrónico:"
+
+msgctxt "odt:stock.shipment.out.picking_list:0"
+msgid "From Location"
+msgstr "Lugar Inicial"
+
+msgctxt "odt:stock.shipment.out.picking_list:0"
+msgid "Phone:"
+msgstr "Teléfono:"
+
+msgctxt "odt:stock.shipment.out.picking_list:0"
+msgid "Picking List"
+msgstr "Lista de Elección"
+
+msgctxt "odt:stock.shipment.out.picking_list:0"
+msgid "Planned Date:"
+msgstr "Fecha Planeada:"
+
+msgctxt "odt:stock.shipment.out.picking_list:0"
+msgid "Product"
+msgstr "Producto"
+
+msgctxt "odt:stock.shipment.out.picking_list:0"
+msgid "Quantity"
+msgstr "Cantidad"
+
+msgctxt "odt:stock.shipment.out.picking_list:0"
+msgid "Reference:"
+msgstr "Referencia:"
+
+msgctxt "odt:stock.shipment.out.picking_list:0"
+msgid "To Location"
+msgstr "Al Lugar:"
+
+msgctxt "odt:stock.shipment.out.picking_list:0"
+msgid "VAT Number:"
+msgstr ""
+
+msgctxt "odt:stock.shipment.out.picking_list:0"
+msgid "Warehouse:"
+msgstr "Bodega:"
+
+msgctxt "odt:stock.shipment.out.return.restocking_list:0"
+msgid "/"
+msgstr "/"
+
+msgctxt "odt:stock.shipment.out.return.restocking_list:0"
+msgid "Code:"
+msgstr "Código:"
+
+msgctxt "odt:stock.shipment.out.return.restocking_list:0"
+msgid "E-Mail:"
+msgstr "Correo electrónico:"
+
+msgctxt "odt:stock.shipment.out.return.restocking_list:0"
+msgid "From Location"
+msgstr "Lugar Inicial"
+
+msgctxt "odt:stock.shipment.out.return.restocking_list:0"
+msgid "Phone:"
+msgstr "Teléfono:"
+
+msgctxt "odt:stock.shipment.out.return.restocking_list:0"
+msgid "Planned Date:"
+msgstr "Fecha Planeada:"
+
+msgctxt "odt:stock.shipment.out.return.restocking_list:0"
+msgid "Product"
+msgstr "Producto"
+
+msgctxt "odt:stock.shipment.out.return.restocking_list:0"
+msgid "Quantity"
+msgstr "Cantidad"
+
+msgctxt "odt:stock.shipment.out.return.restocking_list:0"
+msgid "Reference:"
+msgstr "Referencia:"
+
+msgctxt "odt:stock.shipment.out.return.restocking_list:0"
+msgid "Restocking List"
+msgstr "Lista de reposición de existencias"
+
+msgctxt "odt:stock.shipment.out.return.restocking_list:0"
+msgid "Supplier:"
+msgstr "Proveedor:"
+
+msgctxt "odt:stock.shipment.out.return.restocking_list:0"
+msgid "To Location"
+msgstr "Al Lugar:"
+
+msgctxt "odt:stock.shipment.out.return.restocking_list:0"
+msgid "VAT Number:"
+msgstr ""
+
+msgctxt "odt:stock.shipment.out.return.restocking_list:0"
+msgid "Warehouse:"
+msgstr "Bodega:"
+
+msgctxt "selection:stock.inventory,state:0"
+msgid "Canceled"
+msgstr "Cancelado"
+
+msgctxt "selection:stock.inventory,state:0"
+msgid "Done"
+msgstr "Hecho"
+
+msgctxt "selection:stock.inventory,state:0"
+msgid "Draft"
+msgstr "Borrador"
+
+msgctxt "selection:stock.location,type:0"
+msgid "Customer"
+msgstr "Cliente"
+
+msgctxt "selection:stock.location,type:0"
+msgid "Lost and Found"
+msgstr "Perdido y Encontrado"
+
+msgctxt "selection:stock.location,type:0"
+msgid "Production"
+msgstr "Producción"
+
+msgctxt "selection:stock.location,type:0"
+msgid "Storage"
+msgstr "Almacén"
+
+msgctxt "selection:stock.location,type:0"
+msgid "Supplier"
+msgstr "Proveedor"
+
+msgctxt "selection:stock.location,type:0"
+msgid "View"
+msgstr "Vista"
+
+msgctxt "selection:stock.location,type:0"
+msgid "Warehouse"
+msgstr "Depósito"
+
+msgctxt "selection:stock.move,state:0"
+msgid "Assigned"
+msgstr "Asignado"
+
+msgctxt "selection:stock.move,state:0"
+msgid "Canceled"
+msgstr "Cancelado"
+
+msgctxt "selection:stock.move,state:0"
+msgid "Done"
+msgstr "Hecho"
+
+msgctxt "selection:stock.move,state:0"
+msgid "Draft"
+msgstr "Borrador"
+
+#, fuzzy
+msgctxt "selection:stock.period,state:0"
+msgid "Closed"
+msgstr "Cerrado"
+
+#, fuzzy
+msgctxt "selection:stock.period,state:0"
+msgid "Draft"
+msgstr "Borrador"
+
+msgctxt "selection:stock.shipment.in,state:0"
+msgid "Canceled"
+msgstr "Cancelado"
+
+msgctxt "selection:stock.shipment.in,state:0"
+msgid "Done"
+msgstr "Hecho"
+
+msgctxt "selection:stock.shipment.in,state:0"
+msgid "Draft"
+msgstr "Borrador"
+
+msgctxt "selection:stock.shipment.in,state:0"
+msgid "Received"
+msgstr "Recibido"
+
+msgctxt "selection:stock.shipment.in.return,state:0"
+msgid "Assigned"
+msgstr "Asignado"
+
+msgctxt "selection:stock.shipment.in.return,state:0"
+msgid "Canceled"
+msgstr "Cancelado"
+
+msgctxt "selection:stock.shipment.in.return,state:0"
+msgid "Done"
+msgstr "Hecho"
+
+msgctxt "selection:stock.shipment.in.return,state:0"
+msgid "Draft"
+msgstr "Borrador"
+
+msgctxt "selection:stock.shipment.in.return,state:0"
+msgid "Waiting"
+msgstr "En Espera"
+
+msgctxt "selection:stock.shipment.internal,state:0"
+msgid "Assigned"
+msgstr "Asignado"
+
+msgctxt "selection:stock.shipment.internal,state:0"
+msgid "Canceled"
+msgstr "Cancelado"
+
+msgctxt "selection:stock.shipment.internal,state:0"
+msgid "Done"
+msgstr "Hecho"
+
+msgctxt "selection:stock.shipment.internal,state:0"
+msgid "Draft"
+msgstr "Borrador"
+
+msgctxt "selection:stock.shipment.internal,state:0"
+msgid "Waiting"
+msgstr "En Espera"
+
+msgctxt "selection:stock.shipment.out,state:0"
+msgid "Assigned"
+msgstr "Asignado"
+
+msgctxt "selection:stock.shipment.out,state:0"
+msgid "Canceled"
+msgstr "Cancelado"
+
+msgctxt "selection:stock.shipment.out,state:0"
+msgid "Done"
+msgstr "Hecho"
+
+msgctxt "selection:stock.shipment.out,state:0"
+msgid "Draft"
+msgstr "Borrador"
+
+msgctxt "selection:stock.shipment.out,state:0"
+msgid "Packed"
+msgstr "Empacado"
+
+msgctxt "selection:stock.shipment.out,state:0"
+msgid "Waiting"
+msgstr "En Espera"
+
+msgctxt "selection:stock.shipment.out.return,state:0"
+msgid "Canceled"
+msgstr "Cancelado"
+
+msgctxt "selection:stock.shipment.out.return,state:0"
+msgid "Done"
+msgstr "Hecho"
+
+msgctxt "selection:stock.shipment.out.return,state:0"
+msgid "Draft"
+msgstr "Borrador"
+
+msgctxt "selection:stock.shipment.out.return,state:0"
+msgid "Received"
+msgstr "Recibido"
+
+msgctxt "view:party.party:0"
+msgid "Stock"
+msgstr "Stock"
+
+msgctxt "view:party.party:0"
+msgid "_Stock"
+msgstr "_Existencias"
+
+msgctxt "view:product.product:0"
+msgid "Products"
+msgstr "Productos"
+
+msgctxt "view:stock.configuration:0"
+msgid "Stock Configuration"
+msgstr "Configuración del Inventario"
+
+msgctxt "view:stock.inventory.line:0"
+msgid "Inventory Line"
+msgstr "LÃnea de Inventario"
+
+msgctxt "view:stock.inventory.line:0"
+msgid "Inventory Lines"
+msgstr "LÃneas de Inventario"
+
+msgctxt "view:stock.inventory:0"
+msgid "Add an inventory line for each missing products"
+msgstr "Adicione una lÃnea de inventario para cada producto faltante"
+
+msgctxt "view:stock.inventory:0"
+msgid "All generated moves will be cancelled!"
+msgstr "Se cancelarán todos los movimientos generados!"
+
+msgctxt "view:stock.inventory:0"
+msgid "Cancel"
+msgstr "Cancelar"
+
+msgctxt "view:stock.inventory:0"
+msgid "Complete Inventory"
+msgstr "Inventario Completo"
+
+msgctxt "view:stock.inventory:0"
+msgid "Confirm"
+msgstr "Confirmar"
+
+msgctxt "view:stock.inventory:0"
+msgid "Inventories"
+msgstr "Inventarios"
+
+msgctxt "view:stock.inventory:0"
+msgid "Inventory"
+msgstr "Inventario"
+
+msgctxt "view:stock.inventory:0"
+msgid "Re-Open"
+msgstr "Re-abrir"
+
+msgctxt "view:stock.location:0"
+msgid "Location"
+msgstr "Lugar"
+
+msgctxt "view:stock.location:0"
+msgid "Locations"
+msgstr "Lugares"
+
+msgctxt "view:stock.location:0"
+msgid "Product Stock"
+msgstr "Inventario de Producto"
+
+msgctxt "view:stock.location_stock_date.init:0"
+msgid "Product Quantity."
+msgstr "Cantidad de Producto."
+
+msgctxt "view:stock.move:0"
+msgid "Cancel"
+msgstr "Cancelar"
+
+msgctxt "view:stock.move:0"
+msgid "Move"
+msgstr "Movimiento"
+
+msgctxt "view:stock.move:0"
+msgid "Moves"
+msgstr "Movimientos"
+
+msgctxt "view:stock.move:0"
+msgid "Set Done"
+msgstr "Marcar como Hecho"
+
+msgctxt "view:stock.move:0"
+msgid "Set Draft"
+msgstr "Marcar como Borrador"
+
+msgctxt "view:stock.period.cache:0"
+msgid "Period Cache"
+msgstr ""
+
+msgctxt "view:stock.period.cache:0"
+msgid "Period Caches"
+msgstr ""
+
+#, fuzzy
+msgctxt "view:stock.period:0"
+msgid "Close"
+msgstr "Cerrar"
+
+#, fuzzy
+msgctxt "view:stock.period:0"
+msgid "Draft"
+msgstr "Borrador"
+
+#, fuzzy
+msgctxt "view:stock.period:0"
+msgid "Period"
+msgstr "PerÃodo"
+
+#, fuzzy
+msgctxt "view:stock.period:0"
+msgid "Periods"
+msgstr "PerÃodos"
+
+msgctxt "view:stock.product_stock_date.init:0"
+msgid "Product Quantity."
+msgstr "Cantidad de Producto."
+
+msgctxt "view:stock.shipment.in.return.assign.assign_failed:0"
+msgid "Moves"
+msgstr "Movimientos"
+
+msgctxt "view:stock.shipment.in.return.assign.assign_failed:0"
+msgid "Unable to Assign"
+msgstr "No es posible asignar"
+
+msgctxt "view:stock.shipment.in.return.assign.assign_failed:0"
+msgid "Unable to assign those products:"
+msgstr "No es posible asignar esos productos:"
+
+msgctxt "view:stock.shipment.in.return:0"
+msgid "Assign"
+msgstr "Asignar"
+
+msgctxt "view:stock.shipment.in.return:0"
+msgid "Cancel"
+msgstr "Cancelar"
+
+msgctxt "view:stock.shipment.in.return:0"
+msgid "Done"
+msgstr "Hecho"
+
+msgctxt "view:stock.shipment.in.return:0"
+msgid "Draft"
+msgstr "Borrador"
+
+msgctxt "view:stock.shipment.in.return:0"
+msgid "Reset to Draft"
+msgstr "Revertir a Borrador"
+
+msgctxt "view:stock.shipment.in.return:0"
+msgid "Supplier Return Shipment"
+msgstr "Devolución de Proveedor"
+
+msgctxt "view:stock.shipment.in.return:0"
+msgid "Supplier Return Shipments"
+msgstr "Devoluciones de Proveedor"
+
+msgctxt "view:stock.shipment.in.return:0"
+msgid "Waiting"
+msgstr "En Espera"
+
+msgctxt "view:stock.shipment.in:0"
+msgid "Cancel"
+msgstr "Cancelar"
+
+msgctxt "view:stock.shipment.in:0"
+msgid "Done"
+msgstr "Hecho"
+
+msgctxt "view:stock.shipment.in:0"
+msgid "Draft"
+msgstr "Borrador"
+
+msgctxt "view:stock.shipment.in:0"
+msgid "Incoming Moves"
+msgstr "Movimientos de Entrada"
+
+msgctxt "view:stock.shipment.in:0"
+msgid "Inventory Moves"
+msgstr "Movimientos de Inventario"
+
+msgctxt "view:stock.shipment.in:0"
+msgid "Moves"
+msgstr "Movimientos"
+
+msgctxt "view:stock.shipment.in:0"
+msgid "Received"
+msgstr "Recibido"
+
+msgctxt "view:stock.shipment.in:0"
+msgid "Reset to Draft"
+msgstr "Revertir a Borrador"
+
+msgctxt "view:stock.shipment.in:0"
+msgid "Supplier Shipment"
+msgstr "EnvÃo del Proveedor"
+
+msgctxt "view:stock.shipment.in:0"
+msgid "Supplier Shipments"
+msgstr "EnvÃos del Proveedor"
+
+msgctxt "view:stock.shipment.internal.assign.assign_failed:0"
+msgid "Moves"
+msgstr "Movimientos"
+
+msgctxt "view:stock.shipment.internal.assign.assign_failed:0"
+msgid "Unable to Assign"
+msgstr "No es posible asignar"
+
+msgctxt "view:stock.shipment.internal.assign.assign_failed:0"
+msgid "Unable to assign those products:"
+msgstr "No es posible asignar esos productos:"
+
+msgctxt "view:stock.shipment.internal:0"
+msgid "Assign"
+msgstr "Asignar"
+
+msgctxt "view:stock.shipment.internal:0"
+msgid "Cancel"
+msgstr "Cancelar"
+
+msgctxt "view:stock.shipment.internal:0"
+msgid "Done"
+msgstr "Hecho"
+
+msgctxt "view:stock.shipment.internal:0"
+msgid "Draft"
+msgstr "Borrador"
+
+msgctxt "view:stock.shipment.internal:0"
+msgid "Force Assign"
+msgstr "Forzar Asignación"
+
+msgctxt "view:stock.shipment.internal:0"
+msgid "Internal Shipment"
+msgstr "EnvÃo Interno"
+
+msgctxt "view:stock.shipment.internal:0"
+msgid "Internal Shipments"
+msgstr "EnvÃos Internos"
+
+msgctxt "view:stock.shipment.internal:0"
+msgid "Reset to Draft"
+msgstr "Revertir a Borrador"
+
+msgctxt "view:stock.shipment.internal:0"
+msgid "Set Done"
+msgstr "Marcar como Hecho"
+
+msgctxt "view:stock.shipment.internal:0"
+msgid "Set Waiting"
+msgstr "Colocar en Espera"
+
+msgctxt "view:stock.shipment.internal:0"
+msgid "Waiting"
+msgstr "En espera"
+
+msgctxt "view:stock.shipment.out.assign.assign_failed:0"
+msgid "Inventory Moves"
+msgstr "Movimientos de Inventario"
+
+msgctxt "view:stock.shipment.out.assign.assign_failed:0"
+msgid "Unable to Assign"
+msgstr "No es posible asignar"
+
+msgctxt "view:stock.shipment.out.assign.assign_failed:0"
+msgid "Unable to assign those products:"
+msgstr "No es posible asignar esos productos:"
+
+msgctxt "view:stock.shipment.out.return:0"
+msgid "Cancel"
+msgstr "Cancelar"
+
+msgctxt "view:stock.shipment.out.return:0"
+msgid "Customer Return Shipment"
+msgstr "Devolución a Cliente"
+
+msgctxt "view:stock.shipment.out.return:0"
+msgid "Customer Return Shipments"
+msgstr "Devolución a Cliente"
+
+msgctxt "view:stock.shipment.out.return:0"
+msgid "Done"
+msgstr "Hecho"
+
+msgctxt "view:stock.shipment.out.return:0"
+msgid "Incoming Moves"
+msgstr "Movimientos de Entrada"
+
+msgctxt "view:stock.shipment.out.return:0"
+msgid "Inventory Moves"
+msgstr "Movimientos de Inventario"
+
+msgctxt "view:stock.shipment.out.return:0"
+msgid "Moves"
+msgstr "Movimientos"
+
+msgctxt "view:stock.shipment.out.return:0"
+msgid "Received"
+msgstr "Recibido"
+
+msgctxt "view:stock.shipment.out.return:0"
+msgid "Reset to Draft"
+msgstr "Revertir a Borrador"
+
+msgctxt "view:stock.shipment.out:0"
+msgid "Assign"
+msgstr "Asignar"
+
+msgctxt "view:stock.shipment.out:0"
+msgid "Cancel"
+msgstr "Cancelar"
+
+msgctxt "view:stock.shipment.out:0"
+msgid "Customer Shipment"
+msgstr "EnvÃo de Cliente"
+
+msgctxt "view:stock.shipment.out:0"
+msgid "Customer Shipments"
+msgstr "EnvÃos de Cliente"
+
+msgctxt "view:stock.shipment.out:0"
+msgid "Done"
+msgstr "Hecho"
+
+msgctxt "view:stock.shipment.out:0"
+msgid "Draft"
+msgstr "Borrador"
+
+msgctxt "view:stock.shipment.out:0"
+msgid "Force Assign"
+msgstr "Forzar Asignación"
+
+msgctxt "view:stock.shipment.out:0"
+msgid "Inventory Moves"
+msgstr "Movimientos de Inventario"
+
+msgctxt "view:stock.shipment.out:0"
+msgid "Make shipment"
+msgstr "Hacer Empaque"
+
+msgctxt "view:stock.shipment.out:0"
+msgid "Outgoing Moves"
+msgstr "Movimientos de Salida"
+
+msgctxt "view:stock.shipment.out:0"
+msgid "Reset to Draft"
+msgstr "Revertir a Borrador"
+
+msgctxt "view:stock.shipment.out:0"
+msgid "Set Done"
+msgstr "Marcar como Hecho"
+
+msgctxt "view:stock.shipment.out:0"
+msgid "Set Waiting"
+msgstr "Colocar en Espera"
+
+msgctxt "view:stock.shipment.out:0"
+msgid "Unpack"
+msgstr "Sin empaque"
+
+msgctxt "view:stock.shipment.out:0"
+msgid "Waiting"
+msgstr "En espera"
+
+msgctxt "wizard_button:stock.location.open,init,end:0"
+msgid "Cancel"
+msgstr "Cancelar"
+
+msgctxt "wizard_button:stock.location.open,init,open:0"
+msgid "Open"
+msgstr "Abrir"
+
+msgctxt "wizard_button:stock.product.open,init,end:0"
+msgid "Cancel"
+msgstr "Cancelar"
+
+msgctxt "wizard_button:stock.product.open,init,open:0"
+msgid "Open"
+msgstr "Abrir"
+
+msgctxt "wizard_button:stock.shipment.in.return.assign,ask_force,end:0"
+msgid "Ok"
+msgstr "Aceptar"
+
+msgctxt "wizard_button:stock.shipment.in.return.assign,ask_force,force:0"
+msgid "Force Assign"
+msgstr "Forzar Asignación"
+
+msgctxt "wizard_button:stock.shipment.in.return.assign,assign_failed,end:0"
+msgid "Ok"
+msgstr "Aceptar"
+
+msgctxt "wizard_button:stock.shipment.internal.assign,ask_force,end:0"
+msgid "Ok"
+msgstr "Aceptar"
+
+msgctxt "wizard_button:stock.shipment.internal.assign,ask_force,force:0"
+msgid "Force Assign"
+msgstr "Forzar Asignación"
+
+msgctxt "wizard_button:stock.shipment.internal.assign,assign_failed,end:0"
+msgid "Ok"
+msgstr "Aceptar"
+
+msgctxt "wizard_button:stock.shipment.out.assign,ask_force,end:0"
+msgid "Ok"
+msgstr "Aceptar"
+
+msgctxt "wizard_button:stock.shipment.out.assign,ask_force,force:0"
+msgid "Force Assign"
+msgstr "Forzar Asignación"
+
+msgctxt "wizard_button:stock.shipment.out.assign,assign_failed,end:0"
+msgid "Ok"
+msgstr "Aceptar"
diff --git a/locale/es_ES.po b/locale/es_ES.po
new file mode 100644
index 0000000..209eb81
--- /dev/null
+++ b/locale/es_ES.po
@@ -0,0 +1,2140 @@
+#
+msgid ""
+msgstr "Content-Type: text/plain; charset=utf-8\n"
+
+msgctxt "error:product.template:0"
+msgid ""
+"You cannot change the default uom for a product which is associated to stock"
+" moves."
+msgstr ""
+"No puede cambiar la UdM predeterminada de un producto que está asociado con "
+"movimientos de existencias."
+
+msgctxt "error:stock.inventory.line:0"
+msgid "Line quantity must be positive!"
+msgstr "La cantidad de la lÃnea debe ser positiva"
+
+msgctxt "error:stock.inventory.line:0"
+msgid "Product must be unique by inventory!"
+msgstr "El producto debe ser único por inventario"
+
+msgctxt "error:stock.location:0"
+msgid ""
+"A location with existing moves cannot be changed to a type that does not "
+"support moves."
+msgstr ""
+"Una ubicación con movimientos no puede ser cambiado a un tipo que no soporte"
+" movimientos."
+
+msgctxt "error:stock.location:0"
+msgid "Location \"%s\" must be a child of warehouse \"%s\"!"
+msgstr "La ubicación «%s» debe ser hijo del almacén «%s»"
+
+msgctxt "error:stock.location:0"
+msgid "You can not create recursive locations!"
+msgstr "No puede crear ubicaciones recursivas"
+
+msgctxt "error:stock.move:0"
+msgid "Internal move quantity must be positive"
+msgstr ""
+
+msgctxt "error:stock.move:0"
+msgid "Move can be on only one Shipment"
+msgstr "Un movimiento solo puede hacerse con un envio."
+
+msgctxt "error:stock.move:0"
+msgid "Move quantity must be positive"
+msgstr "La cantidad a mover tiene que ser positiva"
+
+msgctxt "error:stock.move:0"
+msgid "Source and destination location must be different"
+msgstr "Los lugares origen y destino deben ser distintos"
+
+msgctxt "error:stock.move:0"
+msgid "You can not modify a move in the state: \"Assigned\", \"Done\" or \"Cancel\""
+msgstr ""
+
+msgctxt "error:stock.move:0"
+msgid "You can not modify move in closed period!"
+msgstr ""
+
+msgctxt "error:stock.move:0"
+msgid "You can not set state to assigned!"
+msgstr "No puede establecer el estado como asignado"
+
+msgctxt "error:stock.move:0"
+msgid "You can not set state to done!"
+msgstr "No puede establecer el estado como terminado"
+
+msgctxt "error:stock.move:0"
+msgid "You can not set state to draft!"
+msgstr "No puede establecer el estado como borrador"
+
+msgctxt "error:stock.move:0"
+msgid "You can not use service products for a move!"
+msgstr "No puede usar productos de servicio para un movimiento"
+
+msgctxt "error:stock.move:0"
+msgid "You can only delete draft or cancelled moves!"
+msgstr "Solamente puede borrar movimientos en borrador o cancelados"
+
+msgctxt "error:stock.period:0"
+msgid "You can not close a period in the future or today!"
+msgstr ""
+
+msgctxt "error:stock.period:0"
+msgid "You can not close a period when there is still assigned moves!"
+msgstr ""
+
+msgctxt "error:stock.shipment.in:0"
+msgid ""
+"Incoming Moves must have the warehouse input location as destination "
+"location!"
+msgstr ""
+"Los movimientos de entrada deben tener la ubicación del almacén de entrada "
+"como la ubicación de destino"
+
+msgctxt "error:stock.shipment.in:0"
+msgid ""
+"Inventory Moves must have the warehouse input location as source location!"
+msgstr ""
+"Los movimientos de inventario deben tener la ubicación del almacén de "
+"entrada como la ubicación de origen"
+
+msgctxt "error:stock.shipment.out.return.create:0"
+msgid "The shipment with code %s is not yet sent."
+msgstr "El paquete con código %s no ha sido enviado aún."
+
+msgctxt "error:stock.shipment.out.return.create:0"
+msgid "You can not create return shipment"
+msgstr "No puede crear paquetes de retorno"
+
+msgctxt "error:stock.shipment.out.return:0"
+msgid ""
+"Incoming Moves must have the warehouse input location as destination "
+"location!"
+msgstr ""
+"Los movimientos de entrada deben tener la ubicación del almacén de entrada "
+"como la ubicación de destino"
+
+msgctxt "error:stock.shipment.out.return:0"
+msgid ""
+"Inventory Moves must have the warehouse input location as source location!"
+msgstr ""
+"Los movimientos de inventario deben tener la ubicación del almacén de "
+"entrada como la ubicación de origen"
+
+msgctxt "error:stock.shipment.out:0"
+msgid ""
+"Inventory Moves must have the warehouse output location as destination "
+"location!"
+msgstr ""
+
+msgctxt "error:stock.shipment.out:0"
+msgid ""
+"Outgoing Moves must have the warehouse output location as source location!"
+msgstr ""
+
+msgctxt "field:party.address,delivery:0"
+msgid "Delivery"
+msgstr "EnvÃo"
+
+msgctxt "field:party.party,customer_location:0"
+msgid "Customer Location"
+msgstr "Ubicación del cliente"
+
+msgctxt "field:party.party,supplier_location:0"
+msgid "Supplier Location"
+msgstr "Ubicación del proveedor"
+
+msgctxt "field:product.product,forecast_quantity:0"
+msgid "Forecast Quantity"
+msgstr "Cantidad prevista"
+
+msgctxt "field:product.product,quantity:0"
+msgid "Quantity"
+msgstr "Cantidad"
+
+msgctxt "field:product.template,forecast_quantity:0"
+msgid "Forecast Quantity"
+msgstr "Cantidad prevista"
+
+msgctxt "field:product.template,quantity:0"
+msgid "Quantity"
+msgstr "Cantidad"
+
+#, fuzzy
+msgctxt "field:stock.configuration,rec_name:0"
+msgid "Name"
+msgstr "Nombre del campo"
+
+msgctxt "field:stock.configuration,shipment_in_return_sequence:0"
+msgid "Supplier Return Shipment Sequence"
+msgstr ""
+
+msgctxt "field:stock.configuration,shipment_in_sequence:0"
+msgid "Supplier Shipment Sequence"
+msgstr ""
+
+msgctxt "field:stock.configuration,shipment_internal_sequence:0"
+msgid "Internal Shipment Sequence"
+msgstr ""
+
+msgctxt "field:stock.configuration,shipment_out_return_sequence:0"
+msgid "Customer Return Shipment Sequence"
+msgstr ""
+
+msgctxt "field:stock.configuration,shipment_out_sequence:0"
+msgid "Customer Shipment Sequence"
+msgstr ""
+
+msgctxt "field:stock.inventory,company:0"
+msgid "Company"
+msgstr "Empresa"
+
+msgctxt "field:stock.inventory,date:0"
+msgid "Date"
+msgstr "Fecha"
+
+msgctxt "field:stock.inventory,lines:0"
+msgid "Lines"
+msgstr "LÃneas"
+
+msgctxt "field:stock.inventory,location:0"
+msgid "Location"
+msgstr "Ubicación"
+
+msgctxt "field:stock.inventory,lost_found:0"
+msgid "Lost and Found"
+msgstr "Perdido y encontrado"
+
+msgctxt "field:stock.inventory,rec_name:0"
+msgid "Name"
+msgstr "Nombre"
+
+msgctxt "field:stock.inventory,state:0"
+msgid "State"
+msgstr "Estado"
+
+msgctxt "field:stock.inventory.line,expected_quantity:0"
+msgid "Expected Quantity"
+msgstr "Cantidad esperada"
+
+msgctxt "field:stock.inventory.line,inventory:0"
+msgid "Inventory"
+msgstr "Inventario"
+
+msgctxt "field:stock.inventory.line,move:0"
+msgid "Move"
+msgstr "Movimiento"
+
+msgctxt "field:stock.inventory.line,product:0"
+msgid "Product"
+msgstr "Producto"
+
+msgctxt "field:stock.inventory.line,quantity:0"
+msgid "Quantity"
+msgstr "Cantidad"
+
+msgctxt "field:stock.inventory.line,rec_name:0"
+msgid "Name"
+msgstr "Nombre"
+
+msgctxt "field:stock.inventory.line,unit_digits:0"
+msgid "Unit Digits"
+msgstr "DÃgitos de la unidad"
+
+msgctxt "field:stock.inventory.line,uom:0"
+msgid "UOM"
+msgstr "UdM"
+
+msgctxt "field:stock.location,active:0"
+msgid "Active"
+msgstr "Activo"
+
+msgctxt "field:stock.location,address:0"
+msgid "Address"
+msgstr "Direcciones"
+
+msgctxt "field:stock.location,childs:0"
+msgid "Children"
+msgstr "Hijos"
+
+msgctxt "field:stock.location,code:0"
+msgid "Code"
+msgstr "Código"
+
+msgctxt "field:stock.location,forecast_quantity:0"
+msgid "Forecast Quantity"
+msgstr "Cantidad prevista"
+
+msgctxt "field:stock.location,input_location:0"
+msgid "Input"
+msgstr "Entrada"
+
+msgctxt "field:stock.location,left:0"
+msgid "Left"
+msgstr "Izquierda"
+
+msgctxt "field:stock.location,name:0"
+msgid "Name"
+msgstr "Nombre"
+
+msgctxt "field:stock.location,output_location:0"
+msgid "Output"
+msgstr "Salida"
+
+msgctxt "field:stock.location,parent:0"
+msgid "Parent"
+msgstr "Padre"
+
+msgctxt "field:stock.location,quantity:0"
+msgid "Quantity"
+msgstr "Cantidad"
+
+msgctxt "field:stock.location,rec_name:0"
+msgid "Name"
+msgstr "Nombre"
+
+msgctxt "field:stock.location,right:0"
+msgid "Right"
+msgstr "Derecha"
+
+msgctxt "field:stock.location,storage_location:0"
+msgid "Storage"
+msgstr "Almacén"
+
+msgctxt "field:stock.location,type:0"
+msgid "Location type"
+msgstr "Tipo de ubicación"
+
+msgctxt "field:stock.location_stock_date.init,forecast_date:0"
+msgid "At Date"
+msgstr "En la fecha"
+
+msgctxt "field:stock.move,company:0"
+msgid "Company"
+msgstr "Empresa"
+
+msgctxt "field:stock.move,cost_price:0"
+msgid "Cost Price"
+msgstr "Precio de coste"
+
+msgctxt "field:stock.move,currency:0"
+msgid "Currency"
+msgstr "Divisa"
+
+msgctxt "field:stock.move,effective_date:0"
+msgid "Effective Date"
+msgstr "Fecha efectiva"
+
+msgctxt "field:stock.move,from_location:0"
+msgid "From Location"
+msgstr "Desde ubicación"
+
+msgctxt "field:stock.move,internal_quantity:0"
+msgid "Internal Quantity"
+msgstr ""
+
+msgctxt "field:stock.move,planned_date:0"
+msgid "Planned Date"
+msgstr "Fecha estimada"
+
+msgctxt "field:stock.move,product:0"
+msgid "Product"
+msgstr "Producto"
+
+msgctxt "field:stock.move,quantity:0"
+msgid "Quantity"
+msgstr "Cantidad"
+
+msgctxt "field:stock.move,rec_name:0"
+msgid "Name"
+msgstr "Nombre"
+
+msgctxt "field:stock.move,shipment_in:0"
+msgid "Supplier Shipment"
+msgstr "EnvÃo del proveedor"
+
+msgctxt "field:stock.move,shipment_in_return:0"
+msgid "Supplier Return Shipment"
+msgstr "Envio de devolución a proveedor"
+
+msgctxt "field:stock.move,shipment_internal:0"
+msgid "Internal Shipment"
+msgstr "EnvÃo interno"
+
+msgctxt "field:stock.move,shipment_out:0"
+msgid "Customer Shipment"
+msgstr "EnvÃo a cliente"
+
+msgctxt "field:stock.move,shipment_out_return:0"
+msgid "Customer Return Shipment"
+msgstr "Envio de devolución de cliente"
+
+msgctxt "field:stock.move,state:0"
+msgid "State"
+msgstr "Estado"
+
+msgctxt "field:stock.move,to_location:0"
+msgid "To Location"
+msgstr "A ubicación"
+
+msgctxt "field:stock.move,unit_digits:0"
+msgid "Unit Digits"
+msgstr "DÃgitos de unidad"
+
+msgctxt "field:stock.move,unit_price:0"
+msgid "Unit Price"
+msgstr "Precio unitario"
+
+msgctxt "field:stock.move,unit_price_required:0"
+msgid "Unit Price Required"
+msgstr "Requiere precio unitario"
+
+msgctxt "field:stock.move,uom:0"
+msgid "Uom"
+msgstr "UdM"
+
+msgctxt "field:stock.period,caches:0"
+msgid "Caches"
+msgstr ""
+
+#, fuzzy
+msgctxt "field:stock.period,company:0"
+msgid "Company"
+msgstr "Empresa"
+
+#, fuzzy
+msgctxt "field:stock.period,date:0"
+msgid "Date"
+msgstr "Fecha"
+
+#, fuzzy
+msgctxt "field:stock.period,rec_name:0"
+msgid "Name"
+msgstr "Nombre del campo"
+
+#, fuzzy
+msgctxt "field:stock.period,state:0"
+msgid "State"
+msgstr "Estado"
+
+msgctxt "field:stock.period.cache,internal_quantity:0"
+msgid "Internal Quantity"
+msgstr ""
+
+#, fuzzy
+msgctxt "field:stock.period.cache,location:0"
+msgid "Location"
+msgstr "Ubicación"
+
+#, fuzzy
+msgctxt "field:stock.period.cache,period:0"
+msgid "Period"
+msgstr "PerÃodo"
+
+#, fuzzy
+msgctxt "field:stock.period.cache,product:0"
+msgid "Product"
+msgstr "Producto"
+
+#, fuzzy
+msgctxt "field:stock.period.cache,rec_name:0"
+msgid "Name"
+msgstr "Nombre del campo"
+
+msgctxt "field:stock.product_stock_date.init,forecast_date:0"
+msgid "At Date"
+msgstr "En la fecha"
+
+msgctxt "field:stock.shipment.in,code:0"
+msgid "Code"
+msgstr "Código"
+
+#, fuzzy
+msgctxt "field:stock.shipment.in,company:0"
+msgid "Company"
+msgstr "Empresa"
+
+msgctxt "field:stock.shipment.in,contact_address:0"
+msgid "Contact Address"
+msgstr "Dirección de contacto"
+
+msgctxt "field:stock.shipment.in,effective_date:0"
+msgid "Effective Date"
+msgstr "Fecha efectiva"
+
+msgctxt "field:stock.shipment.in,incoming_moves:0"
+msgid "Incoming Moves"
+msgstr "Movimientos de entrada"
+
+msgctxt "field:stock.shipment.in,inventory_moves:0"
+msgid "Inventory Moves"
+msgstr "Movimientos de inventario"
+
+msgctxt "field:stock.shipment.in,moves:0"
+msgid "Moves"
+msgstr "Movimientos"
+
+msgctxt "field:stock.shipment.in,planned_date:0"
+msgid "Planned Date"
+msgstr "Fecha estimada"
+
+msgctxt "field:stock.shipment.in,rec_name:0"
+msgid "Name"
+msgstr "Nombre"
+
+msgctxt "field:stock.shipment.in,reference:0"
+msgid "Reference"
+msgstr "Referencia"
+
+msgctxt "field:stock.shipment.in,state:0"
+msgid "State"
+msgstr "Estado"
+
+msgctxt "field:stock.shipment.in,supplier:0"
+msgid "Supplier"
+msgstr "Proveedor"
+
+msgctxt "field:stock.shipment.in,warehouse:0"
+msgid "Warehouse"
+msgstr "Almacén"
+
+msgctxt "field:stock.shipment.in.return,code:0"
+msgid "Code"
+msgstr "Código"
+
+#, fuzzy
+msgctxt "field:stock.shipment.in.return,company:0"
+msgid "Company"
+msgstr "Empresa"
+
+msgctxt "field:stock.shipment.in.return,effective_date:0"
+msgid "Effective Date"
+msgstr "Fecha efectiva"
+
+msgctxt "field:stock.shipment.in.return,from_location:0"
+msgid "From Location"
+msgstr "Desde ubicación"
+
+msgctxt "field:stock.shipment.in.return,moves:0"
+msgid "Moves"
+msgstr "Movimientos"
+
+msgctxt "field:stock.shipment.in.return,planned_date:0"
+msgid "Planned Date"
+msgstr "Fecha estimada"
+
+msgctxt "field:stock.shipment.in.return,rec_name:0"
+msgid "Name"
+msgstr "Nombre"
+
+msgctxt "field:stock.shipment.in.return,reference:0"
+msgid "Reference"
+msgstr "Referencia"
+
+msgctxt "field:stock.shipment.in.return,state:0"
+msgid "State"
+msgstr "Estado"
+
+msgctxt "field:stock.shipment.in.return,to_location:0"
+msgid "To Location"
+msgstr "A ubicación"
+
+msgctxt "field:stock.shipment.in.return.assign.assign_failed,moves:0"
+msgid "Moves"
+msgstr "Movimientos"
+
+msgctxt "field:stock.shipment.internal,code:0"
+msgid "Code"
+msgstr "Código"
+
+#, fuzzy
+msgctxt "field:stock.shipment.internal,company:0"
+msgid "Company"
+msgstr "Empresa"
+
+msgctxt "field:stock.shipment.internal,effective_date:0"
+msgid "Effective Date"
+msgstr "Fecha efectiva"
+
+msgctxt "field:stock.shipment.internal,from_location:0"
+msgid "From Location"
+msgstr "Desde ubicación"
+
+msgctxt "field:stock.shipment.internal,moves:0"
+msgid "Moves"
+msgstr "Movimientos"
+
+msgctxt "field:stock.shipment.internal,planned_date:0"
+msgid "Planned Date"
+msgstr "Fecha estimada"
+
+msgctxt "field:stock.shipment.internal,rec_name:0"
+msgid "Name"
+msgstr "Nombre"
+
+msgctxt "field:stock.shipment.internal,reference:0"
+msgid "Reference"
+msgstr "Referencia"
+
+msgctxt "field:stock.shipment.internal,state:0"
+msgid "State"
+msgstr "Estado"
+
+msgctxt "field:stock.shipment.internal,to_location:0"
+msgid "To Location"
+msgstr "A ubicación"
+
+msgctxt "field:stock.shipment.internal.assign.assign_failed,moves:0"
+msgid "Moves"
+msgstr "Movimientos"
+
+msgctxt "field:stock.shipment.out,code:0"
+msgid "Code"
+msgstr "Código"
+
+#, fuzzy
+msgctxt "field:stock.shipment.out,company:0"
+msgid "Company"
+msgstr "Empresa"
+
+msgctxt "field:stock.shipment.out,customer:0"
+msgid "Customer"
+msgstr "Cliente"
+
+msgctxt "field:stock.shipment.out,delivery_address:0"
+msgid "Delivery Address"
+msgstr "Dirección de envÃo"
+
+msgctxt "field:stock.shipment.out,effective_date:0"
+msgid "Effective Date"
+msgstr "Fecha efectiva"
+
+msgctxt "field:stock.shipment.out,inventory_moves:0"
+msgid "Inventory Moves"
+msgstr "Movimientos de inventario"
+
+msgctxt "field:stock.shipment.out,moves:0"
+msgid "Moves"
+msgstr "Movimientos"
+
+msgctxt "field:stock.shipment.out,outgoing_moves:0"
+msgid "Outgoing Moves"
+msgstr "Movimientos de salida"
+
+msgctxt "field:stock.shipment.out,planned_date:0"
+msgid "Planned Date"
+msgstr "Fecha estimada"
+
+msgctxt "field:stock.shipment.out,rec_name:0"
+msgid "Name"
+msgstr "Nombre"
+
+msgctxt "field:stock.shipment.out,reference:0"
+msgid "Reference"
+msgstr "Referencia"
+
+msgctxt "field:stock.shipment.out,state:0"
+msgid "State"
+msgstr "Estado"
+
+msgctxt "field:stock.shipment.out,warehouse:0"
+msgid "Warehouse"
+msgstr "Almacén"
+
+msgctxt "field:stock.shipment.out.assign.assign_failed,inventory_moves:0"
+msgid "Inventory Moves"
+msgstr "Movimientos de inventario"
+
+msgctxt "field:stock.shipment.out.return,code:0"
+msgid "Code"
+msgstr "Código"
+
+#, fuzzy
+msgctxt "field:stock.shipment.out.return,company:0"
+msgid "Company"
+msgstr "Empresa"
+
+msgctxt "field:stock.shipment.out.return,customer:0"
+msgid "Customer"
+msgstr "Cliente"
+
+msgctxt "field:stock.shipment.out.return,delivery_address:0"
+msgid "Delivery Address"
+msgstr "Dirección de envÃo"
+
+msgctxt "field:stock.shipment.out.return,effective_date:0"
+msgid "Effective Date"
+msgstr "Fecha efectiva"
+
+msgctxt "field:stock.shipment.out.return,incoming_moves:0"
+msgid "Incoming Moves"
+msgstr "Movimientos de entrada"
+
+msgctxt "field:stock.shipment.out.return,inventory_moves:0"
+msgid "Inventory Moves"
+msgstr "Movimientos de inventario"
+
+msgctxt "field:stock.shipment.out.return,moves:0"
+msgid "Moves"
+msgstr "Movimientos"
+
+msgctxt "field:stock.shipment.out.return,planned_date:0"
+msgid "Planned Date"
+msgstr "Fecha estimada"
+
+msgctxt "field:stock.shipment.out.return,rec_name:0"
+msgid "Name"
+msgstr "Nombre"
+
+msgctxt "field:stock.shipment.out.return,reference:0"
+msgid "Reference"
+msgstr "Referencia"
+
+msgctxt "field:stock.shipment.out.return,state:0"
+msgid "State"
+msgstr "Estado"
+
+msgctxt "field:stock.shipment.out.return,warehouse:0"
+msgid "Warehouse"
+msgstr "Almacén"
+
+msgctxt "help:party.party,customer_location:0"
+msgid "The default destination location when sending products to the party."
+msgstr ""
+"El lugar de destino predeterminado cuando se envian productos al tercero."
+
+msgctxt "help:party.party,supplier_location:0"
+msgid "The default source location when receiving products from the party."
+msgstr ""
+"La ubicación de origen predeterminado cuando se reciben productos del "
+"tercero."
+
+msgctxt "help:stock.location_stock_date.init,forecast_date:0"
+msgid ""
+"Allow to compute expected stock quantities for this date.\n"
+"* An empty value is an infinite date in the future.\n"
+"* A date in the past will provide historical values."
+msgstr ""
+"Permite calcular las existencias esperadas para esta fecha.\n"
+"* Un valor vacÃo es una fecha infinita en el futuro.\n"
+"* Una fecha pasada proveerá de datos históricos."
+
+msgctxt "help:stock.product_stock_date.init,forecast_date:0"
+msgid ""
+"Allow to compute expected stock quantities for this date.\n"
+"* An empty value is an infinite date in the future.\n"
+"* A date in the past will provide historical values."
+msgstr ""
+"Permite calcular las existencias esperadas para esta fecha.\n"
+"* Un valor vacÃo es una fecha infinita en el futuro.\n"
+"* Una fecha pasada proveerá de datos históricos."
+
+msgctxt "model:ir.action,name:act_inventory_form"
+msgid "Inventories"
+msgstr "Inventarios"
+
+msgctxt "model:ir.action,name:act_inventory_form_draft"
+msgid "Draft Inventories"
+msgstr ""
+
+#, fuzzy
+msgctxt "model:ir.action,name:act_location_form"
+msgid "Locations"
+msgstr "Editar ubicaciones"
+
+msgctxt "model:ir.action,name:act_location_quantity_tree"
+msgid "Product Stock"
+msgstr "Existencias de producto"
+
+msgctxt "model:ir.action,name:act_location_tree"
+msgid "Locations"
+msgstr "Ubicaciones"
+
+msgctxt "model:ir.action,name:act_move_form"
+msgid "Moves"
+msgstr "Movimientos"
+
+msgctxt "model:ir.action,name:act_move_form_cust"
+msgid "Moves to Customers"
+msgstr "Movimientos hacia clientes"
+
+msgctxt "model:ir.action,name:act_move_form_supp"
+msgid "Moves from Suppliers"
+msgstr "Movimientos de proveedores"
+
+msgctxt "model:ir.action,name:act_move_form_supp_proceed"
+msgid "Moves from Suppliers Waiting Arrival"
+msgstr "Movimientos de proveedores en espera de llegada"
+
+#, fuzzy
+msgctxt "model:ir.action,name:act_period_list"
+msgid "Periods"
+msgstr "PerÃodos"
+
+msgctxt "model:ir.action,name:act_product_by_location"
+msgid "Products by Locations"
+msgstr "Productos por Ubicaciones"
+
+msgctxt "model:ir.action,name:act_shipment_in_draft"
+msgid "Draft Supplier Shipment"
+msgstr ""
+
+msgctxt "model:ir.action,name:act_shipment_in_form"
+msgid "Supplier Shipments"
+msgstr "EnvÃos del proveedor"
+
+msgctxt "model:ir.action,name:act_shipment_in_form_received"
+msgid "Received Supplier shipments"
+msgstr "Paquetes recibidos de proveedores"
+
+msgctxt "model:ir.action,name:act_shipment_in_return_form"
+msgid "Supplier Return Shipments"
+msgstr "Envios de devolución a proveedor"
+
+msgctxt "model:ir.action,name:act_shipment_internal_assigned_form"
+msgid "Assigned Internal Shipments"
+msgstr "EnvÃos internos asignados"
+
+msgctxt "model:ir.action,name:act_shipment_internal_draft_form"
+msgid "Draft Internal Shipments"
+msgstr "EnvÃos internos en borrador"
+
+msgctxt "model:ir.action,name:act_shipment_internal_form"
+msgid "Internal Shipments"
+msgstr "EnvÃos internos"
+
+msgctxt "model:ir.action,name:act_shipment_internal_waiting_form"
+msgid "Internal Shipments Waiting Assignation"
+msgstr "EnvÃos internos esperando asignación"
+
+msgctxt "model:ir.action,name:act_shipment_out_form"
+msgid "Customer Shipments"
+msgstr "EnvÃos a cliente"
+
+msgctxt "model:ir.action,name:act_shipment_out_form2"
+msgid "Customer Shipments"
+msgstr "EnvÃos de cliente"
+
+msgctxt "model:ir.action,name:act_shipment_out_form3"
+msgid "Supplier Shipments"
+msgstr "Envios a proveedor"
+
+msgctxt "model:ir.action,name:act_shipment_out_form_assigned"
+msgid "Assigned Customer Shipments"
+msgstr "EnvÃos a clientes asignados"
+
+msgctxt "model:ir.action,name:act_shipment_out_form_ready"
+msgid "Customer Shipments Ready for Shipping"
+msgstr "EnvÃos a cliente listos para ser enviados"
+
+msgctxt "model:ir.action,name:act_shipment_out_form_waiting"
+msgid "Customer Shipments Waiting Assignation"
+msgstr "EnvÃos a cliente esperando asignación"
+
+msgctxt "model:ir.action,name:act_shipment_out_return_form"
+msgid "Customer Return Shipments"
+msgstr "Envios de devoluciones de cliente"
+
+msgctxt "model:ir.action,name:act_stock_configuration_form"
+msgid "Stock Configuration"
+msgstr ""
+
+msgctxt "model:ir.action,name:create_shipment_out_return"
+msgid "Create Return Shipment"
+msgstr "Crear envio de devolución"
+
+msgctxt "model:ir.action,name:report_shipment_in_restocking_list"
+msgid "Restocking List"
+msgstr "Lista de renovación de inventario"
+
+msgctxt "model:ir.action,name:report_shipment_internal"
+msgid "Internal Shipment"
+msgstr "EnvÃo interno"
+
+msgctxt "model:ir.action,name:report_shipment_out_delivery_note"
+msgid "Delivery Note"
+msgstr "Albarán de envÃo"
+
+msgctxt "model:ir.action,name:report_shipment_out_picking_list"
+msgid "Picking List"
+msgstr "Lista de selección"
+
+msgctxt "model:ir.action,name:report_shipment_out_return_restocking_list"
+msgid "Restocking List"
+msgstr "Lista de renovación de inventario"
+
+msgctxt "model:ir.action,name:wizard_complete_inventory"
+msgid "Complete Inventory"
+msgstr "Inventario completo"
+
+msgctxt "model:ir.action,name:wizard_location_open"
+msgid "Product by Location"
+msgstr "Producto por ubicación"
+
+msgctxt "model:ir.action,name:wizard_product_open"
+msgid "Product Quantities"
+msgstr "Cantidades de producto"
+
+msgctxt "model:ir.action,name:wizard_shipment_in_return_assign"
+msgid "Assign Purchase Return Shipment"
+msgstr "Asignar envio de devolución de compra"
+
+msgctxt "model:ir.action,name:wizard_shipment_internal_assign"
+msgid "Assign Shipment Internal"
+msgstr "Asignar envÃo interno"
+
+msgctxt "model:ir.action,name:wizard_shipment_out_assign"
+msgid "Assign Shipment Out"
+msgstr "Asignación de salida de envÃo"
+
+msgctxt "model:ir.sequence,name:sequence_shipment_in"
+msgid "Supplier Shipment"
+msgstr "EnvÃo de proveedor"
+
+msgctxt "model:ir.sequence,name:sequence_shipment_in_return"
+msgid "Supplier Return Shipment"
+msgstr "Envio de devolución a proveedor"
+
+msgctxt "model:ir.sequence,name:sequence_shipment_internal"
+msgid "Internal Shipment"
+msgstr "EnvÃo interno"
+
+msgctxt "model:ir.sequence,name:sequence_shipment_out"
+msgid "Customer Shipment"
+msgstr "EnvÃo a cliente"
+
+msgctxt "model:ir.sequence,name:sequence_shipment_out_return"
+msgid "Customer Return Shipment"
+msgstr "Envio de devolución de cliente"
+
+msgctxt "model:ir.sequence.type,name:sequence_type_shipment_in"
+msgid "Supplier Shipment"
+msgstr "EnvÃo de proveedor"
+
+msgctxt "model:ir.sequence.type,name:sequence_type_shipment_in_return"
+msgid "Supplier Return Shipment"
+msgstr "Envio de devolución a proveedor"
+
+msgctxt "model:ir.sequence.type,name:sequence_type_shipment_internal"
+msgid "Internal Shipment"
+msgstr "EnvÃo interno"
+
+msgctxt "model:ir.sequence.type,name:sequence_type_shipment_out"
+msgid "Customer Shipment"
+msgstr "EnvÃo a cliente"
+
+msgctxt "model:ir.sequence.type,name:sequence_type_shipment_out_return"
+msgid "Customer Return Shipment"
+msgstr "Envio de devolución de cliente"
+
+msgctxt "model:ir.ui.menu,name:menu_configuration"
+msgid "Configuration"
+msgstr "Configuración"
+
+msgctxt "model:ir.ui.menu,name:menu_inventory_form"
+msgid "Inventories"
+msgstr "Inventarios"
+
+msgctxt "model:ir.ui.menu,name:menu_inventory_form_draft"
+msgid "Draft Inventories"
+msgstr ""
+
+#, fuzzy
+msgctxt "model:ir.ui.menu,name:menu_location_form"
+msgid "Locations"
+msgstr "Editar ubicaciones"
+
+msgctxt "model:ir.ui.menu,name:menu_location_tree"
+msgid "Locations"
+msgstr "Ubicaciones"
+
+msgctxt "model:ir.ui.menu,name:menu_move_form"
+msgid "Moves"
+msgstr "Movimientos"
+
+msgctxt "model:ir.ui.menu,name:menu_move_form_cust"
+msgid "Moves to Customers"
+msgstr "Movimientos hacia clientes"
+
+msgctxt "model:ir.ui.menu,name:menu_move_form_supp"
+msgid "Moves from Suppliers"
+msgstr "Movimientos de proveedores"
+
+msgctxt "model:ir.ui.menu,name:menu_move_form_supp_proceed"
+msgid "Moves from Suppliers Waiting Arrival"
+msgstr "Movimientos de proveedores en espera de llegada"
+
+#, fuzzy
+msgctxt "model:ir.ui.menu,name:menu_period_list"
+msgid "Periods"
+msgstr "PerÃodos"
+
+msgctxt "model:ir.ui.menu,name:menu_reporting"
+msgid "Reporting"
+msgstr "Informes"
+
+msgctxt "model:ir.ui.menu,name:menu_shipment_in_draft"
+msgid "Draft Supplier Shipment"
+msgstr ""
+
+msgctxt "model:ir.ui.menu,name:menu_shipment_in_form"
+msgid "Supplier Shipments"
+msgstr "EnvÃos del proveedor"
+
+msgctxt "model:ir.ui.menu,name:menu_shipment_in_received"
+msgid "Received Supplier shipments"
+msgstr "Paquetes de proveedores recibidos"
+
+msgctxt "model:ir.ui.menu,name:menu_shipment_in_return_form"
+msgid "Supplier Return Shipments"
+msgstr "Envios de devolución a proveedor"
+
+msgctxt "model:ir.ui.menu,name:menu_shipment_internal_assigned_form"
+msgid "Assigned Internal Shipments"
+msgstr "EnvÃos internos asignados"
+
+msgctxt "model:ir.ui.menu,name:menu_shipment_internal_draft_form"
+msgid "Draft Internal Shipments"
+msgstr "EnvÃos Internos en borrador"
+
+msgctxt "model:ir.ui.menu,name:menu_shipment_internal_form"
+msgid "Internal Shipments"
+msgstr "EnvÃos internos"
+
+msgctxt "model:ir.ui.menu,name:menu_shipment_internal_waiting_form"
+msgid "Internal Shipments Waiting Assignation"
+msgstr "EnvÃo internos esperando asignación"
+
+msgctxt "model:ir.ui.menu,name:menu_shipment_out_assigned"
+msgid "Assigned Customer Shipments"
+msgstr "EnvÃos a clientes asignados"
+
+msgctxt "model:ir.ui.menu,name:menu_shipment_out_form"
+msgid "Customer Shipments"
+msgstr "EnvÃos al cliente"
+
+msgctxt "model:ir.ui.menu,name:menu_shipment_out_ready"
+msgid "Customer Shipments Ready for Shipping"
+msgstr "EnvÃos al cliente listos para su envio"
+
+msgctxt "model:ir.ui.menu,name:menu_shipment_out_return_form"
+msgid "Customer Return Shipments"
+msgstr "Envio de devolución de cliente"
+
+msgctxt "model:ir.ui.menu,name:menu_shipment_out_waiting"
+msgid "Customer Shipments Waiting Assignation"
+msgstr "EnvÃos a cliente esperando asignación"
+
+#, fuzzy
+msgctxt "model:ir.ui.menu,name:menu_stock"
+msgid "Inventory & Stock"
+msgstr "Gestión de Inventarios"
+
+msgctxt "model:ir.ui.menu,name:menu_stock_configuration"
+msgid "Stock Configuration"
+msgstr ""
+
+msgctxt "model:res.group,name:group_stock"
+msgid "Stock"
+msgstr "Existencias"
+
+msgctxt "model:res.group,name:group_stock_admin"
+msgid "Stock Administration"
+msgstr "Administración de existencias"
+
+msgctxt "model:res.group,name:group_stock_force_assignment"
+msgid "Stock Force Assignment"
+msgstr "Asignación forzada de existencias"
+
+msgctxt "model:stock.configuration,name:0"
+msgid "Stock Configuration"
+msgstr ""
+
+msgctxt "model:stock.inventory,name:0"
+msgid "Stock Inventory"
+msgstr "Inventario de existencia"
+
+msgctxt "model:stock.inventory.line,name:0"
+msgid "Stock Inventory Line"
+msgstr "LÃnea de existencia en Inventario "
+
+msgctxt "model:stock.location,name:0"
+msgid "Stock Location"
+msgstr "Ubicación de existencia"
+
+msgctxt "model:stock.location,name:location_customer"
+msgid "Customer"
+msgstr "Cliente"
+
+msgctxt "model:stock.location,name:location_input"
+msgid "Input Zone"
+msgstr "Zona de entrada"
+
+msgctxt "model:stock.location,name:location_lost_found"
+msgid "Lost and Found"
+msgstr "Perdido y encontrado"
+
+msgctxt "model:stock.location,name:location_output"
+msgid "Output Zone"
+msgstr "Zona de salida"
+
+msgctxt "model:stock.location,name:location_storage"
+msgid "Storage Zone"
+msgstr "Zona de almacenamiento"
+
+msgctxt "model:stock.location,name:location_supplier"
+msgid "Supplier"
+msgstr "Proveedor"
+
+msgctxt "model:stock.location,name:location_warehouse"
+msgid "Warehouse"
+msgstr "Almacén"
+
+msgctxt "model:stock.location_stock_date.init,name:0"
+msgid "Compute stock quantities"
+msgstr "Calcular cantidades de existencias"
+
+msgctxt "model:stock.move,name:0"
+msgid "Stock Move"
+msgstr "Movimiento de existencias"
+
+msgctxt "model:stock.period,name:0"
+msgid "Stock Period"
+msgstr ""
+
+msgctxt "model:stock.period.cache,name:0"
+msgid ""
+"\n"
+" Stock Period Cache\n"
+"\n"
+" It is used to store cached computation of stock quantities.\n"
+" "
+msgstr ""
+
+msgctxt "model:stock.product_stock_date.init,name:0"
+msgid "Compute stock quantities"
+msgstr "Calcular cantidades de existencias"
+
+msgctxt "model:stock.shipment.in,name:0"
+msgid "Supplier Shipment"
+msgstr "EnvÃo de proveedor"
+
+msgctxt "model:stock.shipment.in.return,name:0"
+msgid "Supplier Return Shipment"
+msgstr "Envio de devolución a proveedor"
+
+#, fuzzy
+msgctxt "model:stock.shipment.in.return.assign.assign_failed,name:0"
+msgid "Assign Supplier Return Shipment Assign Failed"
+msgstr "Asignar envio interno de proveedor - Solicitud forzosa"
+
+msgctxt "model:stock.shipment.internal,name:0"
+msgid "Internal Shipment"
+msgstr "EnvÃo interno"
+
+#, fuzzy
+msgctxt "model:stock.shipment.internal.assign.assign_failed,name:0"
+msgid "Assign Shipment Internal Assign Failed"
+msgstr "Asignar envio interno - Solicitud forzosa"
+
+msgctxt "model:stock.shipment.out,name:0"
+msgid "Customer Shipment"
+msgstr "EnvÃo a cliente"
+
+#, fuzzy
+msgctxt "model:stock.shipment.out.assign.assign_failed,name:0"
+msgid "Assign Shipment Out Assign Failed"
+msgstr "Asignar envio de salida - Solicitud forzosa"
+
+msgctxt "model:stock.shipment.out.return,name:0"
+msgid "Customer Return Shipment"
+msgstr "Envio de devolución de cliente"
+
+msgctxt "model:workflow,name:wkf_inventory"
+msgid "Inventory"
+msgstr "Inventario"
+
+msgctxt "model:workflow,name:wkf_shipment_in_return"
+msgid "Supplier Return Shipment"
+msgstr "Envio de devolución a proveedor"
+
+msgctxt "model:workflow,name:wkf_shipment_out_return"
+msgid "Customer Return Shipment"
+msgstr "Envio de devolución de Cliente"
+
+msgctxt "model:workflow,name:wkf_shipmentin"
+msgid "Supplier Shipment"
+msgstr "EnvÃo de proveedor"
+
+msgctxt "model:workflow,name:wkf_shipmentinternal"
+msgid "Internal Shipment"
+msgstr "EnvÃo interno"
+
+msgctxt "model:workflow,name:wkf_shipmentout"
+msgid "Customer Shipment"
+msgstr "EnvÃo a cliente"
+
+msgctxt "model:workflow.activity,name:inventory_act_cancel"
+msgid "Canceled"
+msgstr "Cancelado"
+
+msgctxt "model:workflow.activity,name:inventory_act_done"
+msgid "Done"
+msgstr "Terminado"
+
+msgctxt "model:workflow.activity,name:inventory_act_draft"
+msgid "Draft"
+msgstr "Borrador"
+
+msgctxt "model:workflow.activity,name:shipment_in_return_act_assigned"
+msgid "Assigned"
+msgstr "Asignado"
+
+msgctxt "model:workflow.activity,name:shipment_in_return_act_cancel"
+msgid "Canceled"
+msgstr "Cancelado"
+
+msgctxt "model:workflow.activity,name:shipment_in_return_act_done"
+msgid "Done"
+msgstr "Terminado"
+
+msgctxt "model:workflow.activity,name:shipment_in_return_act_draft"
+msgid "Draft"
+msgstr "Borrador"
+
+msgctxt "model:workflow.activity,name:shipment_in_return_act_waiting"
+msgid "Waiting"
+msgstr "En espera"
+
+msgctxt "model:workflow.activity,name:shipment_out_return_act_cancel"
+msgid "Canceled"
+msgstr "Cancelado"
+
+msgctxt "model:workflow.activity,name:shipment_out_return_act_done"
+msgid "Done"
+msgstr "Terminado"
+
+msgctxt "model:workflow.activity,name:shipment_out_return_act_draft"
+msgid "Draft"
+msgstr "Borrador"
+
+msgctxt "model:workflow.activity,name:shipment_out_return_act_received"
+msgid "Received"
+msgstr "Recibido"
+
+msgctxt "model:workflow.activity,name:shipmentin_act_cancel"
+msgid "Canceled"
+msgstr "Cancelado"
+
+msgctxt "model:workflow.activity,name:shipmentin_act_done"
+msgid "Done"
+msgstr "Terminado"
+
+msgctxt "model:workflow.activity,name:shipmentin_act_draft"
+msgid "Draft"
+msgstr "Borrador"
+
+msgctxt "model:workflow.activity,name:shipmentin_act_received"
+msgid "Received"
+msgstr "Recibido"
+
+msgctxt "model:workflow.activity,name:shipmentinternal_act_assigned"
+msgid "Assigned"
+msgstr "Asignado"
+
+msgctxt "model:workflow.activity,name:shipmentinternal_act_cancel"
+msgid "Canceled"
+msgstr "Cancelado"
+
+msgctxt "model:workflow.activity,name:shipmentinternal_act_done"
+msgid "Done"
+msgstr "Terminado"
+
+msgctxt "model:workflow.activity,name:shipmentinternal_act_draft"
+msgid "Draft"
+msgstr "Borrador"
+
+msgctxt "model:workflow.activity,name:shipmentinternal_act_waiting"
+msgid "Waiting"
+msgstr "En espera"
+
+msgctxt "model:workflow.activity,name:shipmentout_act_assigned"
+msgid "Assigned"
+msgstr "Asignado"
+
+msgctxt "model:workflow.activity,name:shipmentout_act_cancel"
+msgid "Canceled"
+msgstr "Cancelado"
+
+msgctxt "model:workflow.activity,name:shipmentout_act_done"
+msgid "Done"
+msgstr "Terminado"
+
+msgctxt "model:workflow.activity,name:shipmentout_act_draft"
+msgid "Draft"
+msgstr "Borrador"
+
+msgctxt "model:workflow.activity,name:shipmentout_act_packed"
+msgid "Packed"
+msgstr "Empaquetado"
+
+msgctxt "model:workflow.activity,name:shipmentout_act_waiting"
+msgid "Waiting"
+msgstr "En espera"
+
+msgctxt "odt:stock.shipment.in.restocking_list:0"
+msgid "/"
+msgstr "/"
+
+msgctxt "odt:stock.shipment.in.restocking_list:0"
+msgid "Code:"
+msgstr "Código:"
+
+msgctxt "odt:stock.shipment.in.restocking_list:0"
+msgid "E-Mail:"
+msgstr "Correo electrónico:"
+
+msgctxt "odt:stock.shipment.in.restocking_list:0"
+msgid "From Location"
+msgstr "Desde ubicación"
+
+msgctxt "odt:stock.shipment.in.restocking_list:0"
+msgid "Phone:"
+msgstr "Teléfono:"
+
+msgctxt "odt:stock.shipment.in.restocking_list:0"
+msgid "Planned Date:"
+msgstr "Fecha planeada:"
+
+msgctxt "odt:stock.shipment.in.restocking_list:0"
+msgid "Product"
+msgstr "Producto"
+
+msgctxt "odt:stock.shipment.in.restocking_list:0"
+msgid "Quantity"
+msgstr "Cantidad"
+
+msgctxt "odt:stock.shipment.in.restocking_list:0"
+msgid "Reference:"
+msgstr "Referencia:"
+
+msgctxt "odt:stock.shipment.in.restocking_list:0"
+msgid "Restocking List"
+msgstr "Lista de renovación de existencias"
+
+msgctxt "odt:stock.shipment.in.restocking_list:0"
+msgid "Supplier:"
+msgstr "Proveedor:"
+
+msgctxt "odt:stock.shipment.in.restocking_list:0"
+msgid "To Location"
+msgstr "A ubicación"
+
+msgctxt "odt:stock.shipment.in.restocking_list:0"
+msgid "VAT Number:"
+msgstr ""
+
+msgctxt "odt:stock.shipment.in.restocking_list:0"
+msgid "Warehouse:"
+msgstr "Almacén:"
+
+msgctxt "odt:stock.shipment.internal.report:0"
+msgid "/"
+msgstr "/"
+
+msgctxt "odt:stock.shipment.internal.report:0"
+msgid "Code:"
+msgstr "Código:"
+
+msgctxt "odt:stock.shipment.internal.report:0"
+msgid "E-Mail:"
+msgstr "Correo electrónico:"
+
+msgctxt "odt:stock.shipment.internal.report:0"
+msgid "From Location"
+msgstr "Desde ubicación"
+
+msgctxt "odt:stock.shipment.internal.report:0"
+msgid "From Location:"
+msgstr "Desde ubicación:"
+
+msgctxt "odt:stock.shipment.internal.report:0"
+msgid "Internal Shipment"
+msgstr "EnvÃo interno"
+
+msgctxt "odt:stock.shipment.internal.report:0"
+msgid "Phone:"
+msgstr "Teléfono:"
+
+msgctxt "odt:stock.shipment.internal.report:0"
+msgid "Planned Date:"
+msgstr "Fecha estimada:"
+
+msgctxt "odt:stock.shipment.internal.report:0"
+msgid "Product"
+msgstr "Producto"
+
+msgctxt "odt:stock.shipment.internal.report:0"
+msgid "Quantity"
+msgstr "Cantidad"
+
+msgctxt "odt:stock.shipment.internal.report:0"
+msgid "Reference:"
+msgstr "Referencia:"
+
+msgctxt "odt:stock.shipment.internal.report:0"
+msgid "To Location"
+msgstr "A ubicación"
+
+msgctxt "odt:stock.shipment.internal.report:0"
+msgid "To Location:"
+msgstr "A ubicación:"
+
+msgctxt "odt:stock.shipment.internal.report:0"
+msgid "VAT Number:"
+msgstr ""
+
+msgctxt "odt:stock.shipment.out.delivery_note:0"
+msgid "/"
+msgstr "/"
+
+msgctxt "odt:stock.shipment.out.delivery_note:0"
+msgid "Customer Code:"
+msgstr "Código de cliente:"
+
+msgctxt "odt:stock.shipment.out.delivery_note:0"
+msgid "Date:"
+msgstr "Fecha:"
+
+msgctxt "odt:stock.shipment.out.delivery_note:0"
+msgid "Delivery Note"
+msgstr "Albarán de envio"
+
+msgctxt "odt:stock.shipment.out.delivery_note:0"
+msgid "E-Mail:"
+msgstr "Correo electrónico:"
+
+msgctxt "odt:stock.shipment.out.delivery_note:0"
+msgid "Phone:"
+msgstr "Teléfono:"
+
+msgctxt "odt:stock.shipment.out.delivery_note:0"
+msgid "Product"
+msgstr "Producto"
+
+msgctxt "odt:stock.shipment.out.delivery_note:0"
+msgid "Quantity"
+msgstr "Cantidad"
+
+msgctxt "odt:stock.shipment.out.delivery_note:0"
+msgid "Reference:"
+msgstr "Referencia:"
+
+msgctxt "odt:stock.shipment.out.delivery_note:0"
+msgid "Shipment Number:"
+msgstr "Número de envÃo:"
+
+msgctxt "odt:stock.shipment.out.delivery_note:0"
+msgid "VAT Number:"
+msgstr ""
+
+msgctxt "odt:stock.shipment.out.picking_list:0"
+msgid "/"
+msgstr "/"
+
+msgctxt "odt:stock.shipment.out.picking_list:0"
+msgid "Code:"
+msgstr "Código:"
+
+msgctxt "odt:stock.shipment.out.picking_list:0"
+msgid "Customer:"
+msgstr "Cliente:"
+
+msgctxt "odt:stock.shipment.out.picking_list:0"
+msgid "E-Mail:"
+msgstr "Correo electrónico:"
+
+msgctxt "odt:stock.shipment.out.picking_list:0"
+msgid "From Location"
+msgstr "Desde ubicación"
+
+msgctxt "odt:stock.shipment.out.picking_list:0"
+msgid "Phone:"
+msgstr "Teléfono:"
+
+msgctxt "odt:stock.shipment.out.picking_list:0"
+msgid "Picking List"
+msgstr "Lista de selección"
+
+msgctxt "odt:stock.shipment.out.picking_list:0"
+msgid "Planned Date:"
+msgstr "Fecha estimada:"
+
+msgctxt "odt:stock.shipment.out.picking_list:0"
+msgid "Product"
+msgstr "Producto"
+
+msgctxt "odt:stock.shipment.out.picking_list:0"
+msgid "Quantity"
+msgstr "Cantidad"
+
+msgctxt "odt:stock.shipment.out.picking_list:0"
+msgid "Reference:"
+msgstr "Referencia:"
+
+msgctxt "odt:stock.shipment.out.picking_list:0"
+msgid "To Location"
+msgstr "A ubicación"
+
+msgctxt "odt:stock.shipment.out.picking_list:0"
+msgid "VAT Number:"
+msgstr ""
+
+msgctxt "odt:stock.shipment.out.picking_list:0"
+msgid "Warehouse:"
+msgstr "Almacén:"
+
+msgctxt "odt:stock.shipment.out.return.restocking_list:0"
+msgid "/"
+msgstr "/"
+
+msgctxt "odt:stock.shipment.out.return.restocking_list:0"
+msgid "Code:"
+msgstr "Código:"
+
+msgctxt "odt:stock.shipment.out.return.restocking_list:0"
+msgid "E-Mail:"
+msgstr "Correo electrónico:"
+
+msgctxt "odt:stock.shipment.out.return.restocking_list:0"
+msgid "From Location"
+msgstr "De ubicación"
+
+msgctxt "odt:stock.shipment.out.return.restocking_list:0"
+msgid "Phone:"
+msgstr "Teléfono:"
+
+msgctxt "odt:stock.shipment.out.return.restocking_list:0"
+msgid "Planned Date:"
+msgstr "Fecha estimada:"
+
+msgctxt "odt:stock.shipment.out.return.restocking_list:0"
+msgid "Product"
+msgstr "Producto"
+
+msgctxt "odt:stock.shipment.out.return.restocking_list:0"
+msgid "Quantity"
+msgstr "Cantidad"
+
+msgctxt "odt:stock.shipment.out.return.restocking_list:0"
+msgid "Reference:"
+msgstr "Referencia:"
+
+msgctxt "odt:stock.shipment.out.return.restocking_list:0"
+msgid "Restocking List"
+msgstr "Lista de renovación de existencias"
+
+msgctxt "odt:stock.shipment.out.return.restocking_list:0"
+msgid "Supplier:"
+msgstr "Proveedor:"
+
+msgctxt "odt:stock.shipment.out.return.restocking_list:0"
+msgid "To Location"
+msgstr "A ubicación"
+
+msgctxt "odt:stock.shipment.out.return.restocking_list:0"
+msgid "VAT Number:"
+msgstr ""
+
+msgctxt "odt:stock.shipment.out.return.restocking_list:0"
+msgid "Warehouse:"
+msgstr "Almacén:"
+
+msgctxt "selection:stock.inventory,state:0"
+msgid "Canceled"
+msgstr "Cancelado"
+
+msgctxt "selection:stock.inventory,state:0"
+msgid "Done"
+msgstr "Terminado"
+
+msgctxt "selection:stock.inventory,state:0"
+msgid "Draft"
+msgstr "Borrador"
+
+msgctxt "selection:stock.location,type:0"
+msgid "Customer"
+msgstr "Cliente"
+
+msgctxt "selection:stock.location,type:0"
+msgid "Lost and Found"
+msgstr "Perdido y encontrado"
+
+msgctxt "selection:stock.location,type:0"
+msgid "Production"
+msgstr "Producción"
+
+msgctxt "selection:stock.location,type:0"
+msgid "Storage"
+msgstr "Almacén"
+
+msgctxt "selection:stock.location,type:0"
+msgid "Supplier"
+msgstr "Proveedor"
+
+msgctxt "selection:stock.location,type:0"
+msgid "View"
+msgstr "Vista"
+
+msgctxt "selection:stock.location,type:0"
+msgid "Warehouse"
+msgstr "Almacén"
+
+msgctxt "selection:stock.move,state:0"
+msgid "Assigned"
+msgstr "Asignado"
+
+msgctxt "selection:stock.move,state:0"
+msgid "Canceled"
+msgstr "Cancelado"
+
+msgctxt "selection:stock.move,state:0"
+msgid "Done"
+msgstr "Terminado"
+
+msgctxt "selection:stock.move,state:0"
+msgid "Draft"
+msgstr "Borrador"
+
+#, fuzzy
+msgctxt "selection:stock.period,state:0"
+msgid "Closed"
+msgstr "Cerrado"
+
+#, fuzzy
+msgctxt "selection:stock.period,state:0"
+msgid "Draft"
+msgstr "Borrador"
+
+msgctxt "selection:stock.shipment.in,state:0"
+msgid "Canceled"
+msgstr "Cancelado"
+
+msgctxt "selection:stock.shipment.in,state:0"
+msgid "Done"
+msgstr "Terminado"
+
+msgctxt "selection:stock.shipment.in,state:0"
+msgid "Draft"
+msgstr "Borrador"
+
+msgctxt "selection:stock.shipment.in,state:0"
+msgid "Received"
+msgstr "Recibido"
+
+msgctxt "selection:stock.shipment.in.return,state:0"
+msgid "Assigned"
+msgstr "Asignado"
+
+msgctxt "selection:stock.shipment.in.return,state:0"
+msgid "Canceled"
+msgstr "Cancelado"
+
+msgctxt "selection:stock.shipment.in.return,state:0"
+msgid "Done"
+msgstr "Terminado"
+
+msgctxt "selection:stock.shipment.in.return,state:0"
+msgid "Draft"
+msgstr "Borrador"
+
+msgctxt "selection:stock.shipment.in.return,state:0"
+msgid "Waiting"
+msgstr "En espera"
+
+msgctxt "selection:stock.shipment.internal,state:0"
+msgid "Assigned"
+msgstr "Asignado"
+
+msgctxt "selection:stock.shipment.internal,state:0"
+msgid "Canceled"
+msgstr "Cancelado"
+
+msgctxt "selection:stock.shipment.internal,state:0"
+msgid "Done"
+msgstr "Terminado"
+
+msgctxt "selection:stock.shipment.internal,state:0"
+msgid "Draft"
+msgstr "Borrador"
+
+msgctxt "selection:stock.shipment.internal,state:0"
+msgid "Waiting"
+msgstr "En espera"
+
+msgctxt "selection:stock.shipment.out,state:0"
+msgid "Assigned"
+msgstr "Asignado"
+
+msgctxt "selection:stock.shipment.out,state:0"
+msgid "Canceled"
+msgstr "Cancelado"
+
+msgctxt "selection:stock.shipment.out,state:0"
+msgid "Done"
+msgstr "Terminado"
+
+msgctxt "selection:stock.shipment.out,state:0"
+msgid "Draft"
+msgstr "Borrador"
+
+msgctxt "selection:stock.shipment.out,state:0"
+msgid "Packed"
+msgstr "Empaquetado"
+
+msgctxt "selection:stock.shipment.out,state:0"
+msgid "Waiting"
+msgstr "En espera"
+
+msgctxt "selection:stock.shipment.out.return,state:0"
+msgid "Canceled"
+msgstr "Cancelado"
+
+msgctxt "selection:stock.shipment.out.return,state:0"
+msgid "Done"
+msgstr "Terminado"
+
+msgctxt "selection:stock.shipment.out.return,state:0"
+msgid "Draft"
+msgstr "Borrador"
+
+msgctxt "selection:stock.shipment.out.return,state:0"
+msgid "Received"
+msgstr "Recibido"
+
+msgctxt "view:party.party:0"
+msgid "Stock"
+msgstr "Existencias"
+
+msgctxt "view:party.party:0"
+msgid "_Stock"
+msgstr "_Existencias"
+
+msgctxt "view:product.product:0"
+msgid "Products"
+msgstr "Productos"
+
+msgctxt "view:stock.configuration:0"
+msgid "Stock Configuration"
+msgstr ""
+
+msgctxt "view:stock.inventory.line:0"
+msgid "Inventory Line"
+msgstr "LÃnea de inventario"
+
+msgctxt "view:stock.inventory.line:0"
+msgid "Inventory Lines"
+msgstr "LÃneas de inventario"
+
+msgctxt "view:stock.inventory:0"
+msgid "Add an inventory line for each missing products"
+msgstr "Añadir una lÃnea de inventario por cada producto que falta"
+
+msgctxt "view:stock.inventory:0"
+msgid "All generated moves will be cancelled!"
+msgstr "Se cancelarán todos los movimientos generados"
+
+msgctxt "view:stock.inventory:0"
+msgid "Cancel"
+msgstr "Cancelar"
+
+msgctxt "view:stock.inventory:0"
+msgid "Complete Inventory"
+msgstr "Inventario completo"
+
+msgctxt "view:stock.inventory:0"
+msgid "Confirm"
+msgstr "Confirmar"
+
+msgctxt "view:stock.inventory:0"
+msgid "Inventories"
+msgstr "Inventarios"
+
+msgctxt "view:stock.inventory:0"
+msgid "Inventory"
+msgstr "Inventario"
+
+msgctxt "view:stock.inventory:0"
+msgid "Re-Open"
+msgstr "Reabrir"
+
+msgctxt "view:stock.location:0"
+msgid "Location"
+msgstr "Ubicación"
+
+msgctxt "view:stock.location:0"
+msgid "Locations"
+msgstr "Ubicaciones"
+
+msgctxt "view:stock.location:0"
+msgid "Product Stock"
+msgstr "Existencias del producto"
+
+msgctxt "view:stock.location_stock_date.init:0"
+msgid "Product Quantity."
+msgstr "Cantidad de producto."
+
+msgctxt "view:stock.move:0"
+msgid "Cancel"
+msgstr "Cancelar"
+
+msgctxt "view:stock.move:0"
+msgid "Move"
+msgstr "Movimiento"
+
+msgctxt "view:stock.move:0"
+msgid "Moves"
+msgstr "Movimientos"
+
+msgctxt "view:stock.move:0"
+msgid "Set Done"
+msgstr "Marcar como terminado"
+
+msgctxt "view:stock.move:0"
+msgid "Set Draft"
+msgstr "Marcar como borrador"
+
+msgctxt "view:stock.period.cache:0"
+msgid "Period Cache"
+msgstr ""
+
+msgctxt "view:stock.period.cache:0"
+msgid "Period Caches"
+msgstr ""
+
+#, fuzzy
+msgctxt "view:stock.period:0"
+msgid "Close"
+msgstr "Cerrar"
+
+#, fuzzy
+msgctxt "view:stock.period:0"
+msgid "Draft"
+msgstr "Borrador"
+
+#, fuzzy
+msgctxt "view:stock.period:0"
+msgid "Period"
+msgstr "PerÃodo"
+
+#, fuzzy
+msgctxt "view:stock.period:0"
+msgid "Periods"
+msgstr "PerÃodos"
+
+msgctxt "view:stock.product_stock_date.init:0"
+msgid "Product Quantity."
+msgstr "Cantidad de producto."
+
+msgctxt "view:stock.shipment.in.return.assign.assign_failed:0"
+msgid "Moves"
+msgstr "Movimientos"
+
+msgctxt "view:stock.shipment.in.return.assign.assign_failed:0"
+msgid "Unable to Assign"
+msgstr "No es posible asignar"
+
+msgctxt "view:stock.shipment.in.return.assign.assign_failed:0"
+msgid "Unable to assign those products:"
+msgstr "No es posible asignar esos productos:"
+
+msgctxt "view:stock.shipment.in.return:0"
+msgid "Assign"
+msgstr "Asignar"
+
+msgctxt "view:stock.shipment.in.return:0"
+msgid "Cancel"
+msgstr "Cancelar"
+
+msgctxt "view:stock.shipment.in.return:0"
+msgid "Done"
+msgstr "Terminado"
+
+msgctxt "view:stock.shipment.in.return:0"
+msgid "Draft"
+msgstr "Borrador"
+
+msgctxt "view:stock.shipment.in.return:0"
+msgid "Reset to Draft"
+msgstr "Restablecer a borrador"
+
+msgctxt "view:stock.shipment.in.return:0"
+msgid "Supplier Return Shipment"
+msgstr "Envio de devolución a proveedor"
+
+msgctxt "view:stock.shipment.in.return:0"
+msgid "Supplier Return Shipments"
+msgstr "Envios de devolución a proveedor"
+
+msgctxt "view:stock.shipment.in.return:0"
+msgid "Waiting"
+msgstr "En espera"
+
+msgctxt "view:stock.shipment.in:0"
+msgid "Cancel"
+msgstr "Cancelar"
+
+msgctxt "view:stock.shipment.in:0"
+msgid "Done"
+msgstr "Terminado"
+
+msgctxt "view:stock.shipment.in:0"
+msgid "Draft"
+msgstr "Borrador"
+
+msgctxt "view:stock.shipment.in:0"
+msgid "Incoming Moves"
+msgstr "Movimientos de entrada"
+
+msgctxt "view:stock.shipment.in:0"
+msgid "Inventory Moves"
+msgstr "Movimientos de inventario"
+
+msgctxt "view:stock.shipment.in:0"
+msgid "Moves"
+msgstr "Movimientos"
+
+msgctxt "view:stock.shipment.in:0"
+msgid "Received"
+msgstr "Recibido"
+
+msgctxt "view:stock.shipment.in:0"
+msgid "Reset to Draft"
+msgstr "Restablecer a borrador"
+
+msgctxt "view:stock.shipment.in:0"
+msgid "Supplier Shipment"
+msgstr "EnvÃo de proveedor"
+
+msgctxt "view:stock.shipment.in:0"
+msgid "Supplier Shipments"
+msgstr "EnvÃos de proveedor"
+
+msgctxt "view:stock.shipment.internal.assign.assign_failed:0"
+msgid "Moves"
+msgstr "Movimientos"
+
+msgctxt "view:stock.shipment.internal.assign.assign_failed:0"
+msgid "Unable to Assign"
+msgstr "No es posible asignar"
+
+msgctxt "view:stock.shipment.internal.assign.assign_failed:0"
+msgid "Unable to assign those products:"
+msgstr "No es posible asignar esos productos:"
+
+msgctxt "view:stock.shipment.internal:0"
+msgid "Assign"
+msgstr "Asignar"
+
+msgctxt "view:stock.shipment.internal:0"
+msgid "Cancel"
+msgstr "Cancelar"
+
+msgctxt "view:stock.shipment.internal:0"
+msgid "Done"
+msgstr "Terminado"
+
+msgctxt "view:stock.shipment.internal:0"
+msgid "Draft"
+msgstr "Borrador"
+
+msgctxt "view:stock.shipment.internal:0"
+msgid "Force Assign"
+msgstr "Forzar asignación"
+
+msgctxt "view:stock.shipment.internal:0"
+msgid "Internal Shipment"
+msgstr "EnvÃo interno"
+
+msgctxt "view:stock.shipment.internal:0"
+msgid "Internal Shipments"
+msgstr "EnvÃos internos"
+
+msgctxt "view:stock.shipment.internal:0"
+msgid "Reset to Draft"
+msgstr "Restablecer a borrador"
+
+msgctxt "view:stock.shipment.internal:0"
+msgid "Set Done"
+msgstr "Marcar como terminado"
+
+msgctxt "view:stock.shipment.internal:0"
+msgid "Set Waiting"
+msgstr "Colocar en espera"
+
+msgctxt "view:stock.shipment.internal:0"
+msgid "Waiting"
+msgstr "En espera"
+
+msgctxt "view:stock.shipment.out.assign.assign_failed:0"
+msgid "Inventory Moves"
+msgstr "Movimientos de inventario"
+
+msgctxt "view:stock.shipment.out.assign.assign_failed:0"
+msgid "Unable to Assign"
+msgstr "No es posible asignar"
+
+msgctxt "view:stock.shipment.out.assign.assign_failed:0"
+msgid "Unable to assign those products:"
+msgstr "No es posible asignar esos productos:"
+
+msgctxt "view:stock.shipment.out.return:0"
+msgid "Cancel"
+msgstr "Cancelar"
+
+msgctxt "view:stock.shipment.out.return:0"
+msgid "Customer Return Shipment"
+msgstr "Envio de devolución de cliente"
+
+msgctxt "view:stock.shipment.out.return:0"
+msgid "Customer Return Shipments"
+msgstr "Envios de devolución de cliente"
+
+msgctxt "view:stock.shipment.out.return:0"
+msgid "Done"
+msgstr "Terminado"
+
+msgctxt "view:stock.shipment.out.return:0"
+msgid "Incoming Moves"
+msgstr "Movimientos de entrada"
+
+msgctxt "view:stock.shipment.out.return:0"
+msgid "Inventory Moves"
+msgstr "Movimientos de inventario"
+
+msgctxt "view:stock.shipment.out.return:0"
+msgid "Moves"
+msgstr "Movimientos"
+
+msgctxt "view:stock.shipment.out.return:0"
+msgid "Received"
+msgstr "Recibido"
+
+msgctxt "view:stock.shipment.out.return:0"
+msgid "Reset to Draft"
+msgstr "Restablecer a borrador"
+
+msgctxt "view:stock.shipment.out:0"
+msgid "Assign"
+msgstr "Asignar"
+
+msgctxt "view:stock.shipment.out:0"
+msgid "Cancel"
+msgstr "Cancelar"
+
+msgctxt "view:stock.shipment.out:0"
+msgid "Customer Shipment"
+msgstr "EnvÃo a cliente"
+
+msgctxt "view:stock.shipment.out:0"
+msgid "Customer Shipments"
+msgstr "EnvÃos a clientes"
+
+msgctxt "view:stock.shipment.out:0"
+msgid "Done"
+msgstr "Terminado"
+
+msgctxt "view:stock.shipment.out:0"
+msgid "Draft"
+msgstr "Borrador"
+
+msgctxt "view:stock.shipment.out:0"
+msgid "Force Assign"
+msgstr "Forzar asignación"
+
+msgctxt "view:stock.shipment.out:0"
+msgid "Inventory Moves"
+msgstr "Movimientos de inventario"
+
+msgctxt "view:stock.shipment.out:0"
+msgid "Make shipment"
+msgstr "Hacer empaquetado"
+
+msgctxt "view:stock.shipment.out:0"
+msgid "Outgoing Moves"
+msgstr "Movimientos de salida"
+
+msgctxt "view:stock.shipment.out:0"
+msgid "Reset to Draft"
+msgstr "Restablecer a borrador"
+
+msgctxt "view:stock.shipment.out:0"
+msgid "Set Done"
+msgstr "Marcar como terminado"
+
+msgctxt "view:stock.shipment.out:0"
+msgid "Set Waiting"
+msgstr "Colocar en espera"
+
+msgctxt "view:stock.shipment.out:0"
+msgid "Unpack"
+msgstr "Desempaquetar"
+
+msgctxt "view:stock.shipment.out:0"
+msgid "Waiting"
+msgstr "En espera"
+
+msgctxt "wizard_button:stock.location.open,init,end:0"
+msgid "Cancel"
+msgstr "Cancelar"
+
+msgctxt "wizard_button:stock.location.open,init,open:0"
+msgid "Open"
+msgstr "Abrir"
+
+msgctxt "wizard_button:stock.product.open,init,end:0"
+msgid "Cancel"
+msgstr "Cancelar"
+
+msgctxt "wizard_button:stock.product.open,init,open:0"
+msgid "Open"
+msgstr "Abrir"
+
+msgctxt "wizard_button:stock.shipment.in.return.assign,ask_force,end:0"
+msgid "Ok"
+msgstr "Aceptar"
+
+msgctxt "wizard_button:stock.shipment.in.return.assign,ask_force,force:0"
+msgid "Force Assign"
+msgstr "Forzar asignación"
+
+msgctxt "wizard_button:stock.shipment.in.return.assign,assign_failed,end:0"
+msgid "Ok"
+msgstr "Aceptar"
+
+msgctxt "wizard_button:stock.shipment.internal.assign,ask_force,end:0"
+msgid "Ok"
+msgstr "Aceptar"
+
+msgctxt "wizard_button:stock.shipment.internal.assign,ask_force,force:0"
+msgid "Force Assign"
+msgstr "Forzar asignación"
+
+msgctxt "wizard_button:stock.shipment.internal.assign,assign_failed,end:0"
+msgid "Ok"
+msgstr "Aceptar"
+
+msgctxt "wizard_button:stock.shipment.out.assign,ask_force,end:0"
+msgid "Ok"
+msgstr "Aceptar"
+
+msgctxt "wizard_button:stock.shipment.out.assign,ask_force,force:0"
+msgid "Force Assign"
+msgstr "Forzar asignación"
+
+msgctxt "wizard_button:stock.shipment.out.assign,assign_failed,end:0"
+msgid "Ok"
+msgstr "Aceptar"
diff --git a/locale/fr_FR.po b/locale/fr_FR.po
new file mode 100644
index 0000000..a80455b
--- /dev/null
+++ b/locale/fr_FR.po
@@ -0,0 +1,2106 @@
+#
+msgid ""
+msgstr "Content-Type: text/plain; charset=utf-8\n"
+
+msgctxt "error:product.template:0"
+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:0"
+msgid "Line quantity must be positive!"
+msgstr "Les quantités sur les lignes doivent être positives!"
+
+msgctxt "error:stock.inventory.line:0"
+msgid "Product must be unique by inventory!"
+msgstr "Chaque produit ne peut apparaître qu'une seule fois par inventaire"
+
+msgctxt "error:stock.location:0"
+msgid ""
+"A location with existing moves cannot be changed to a type that does not "
+"support moves."
+msgstr ""
+"Un emplacement avec des mouvements ne peut pas être changé en un type qui ne"
+" supporte pas les mouvements."
+
+msgctxt "error:stock.location:0"
+msgid "Location \"%s\" must be a child of warehouse \"%s\"!"
+msgstr "L'emplacement \"%s\" doit être un sous-emplacement de l'entrepôt \"%s\" !"
+
+msgctxt "error:stock.location:0"
+msgid "You can not create recursive locations!"
+msgstr "Vous ne pouvez pas créer des emplacements récursifs !"
+
+msgctxt "error:stock.move:0"
+msgid "Internal move quantity must be positive"
+msgstr "La quantité interne doit être positive"
+
+msgctxt "error:stock.move:0"
+msgid "Move can be on only one Shipment"
+msgstr "Un mouvement ne peut être que sur une seule expédition"
+
+msgctxt "error:stock.move:0"
+msgid "Move quantity must be positive"
+msgstr "La quantité sur le mouvement doit être positive."
+
+msgctxt "error:stock.move:0"
+msgid "Source and destination location must be different"
+msgstr "Les emplacements d'origine et de destination doivent être distincts"
+
+msgctxt "error:stock.move:0"
+msgid "You can not modify a move in the state: \"Assigned\", \"Done\" or \"Cancel\""
+msgstr ""
+"Vous ne pouvez modifier un mouvement dans un des états : \"Assigné\", "
+"\"Terminé\" ou \"Annulé\""
+
+msgctxt "error:stock.move:0"
+msgid "You can not modify move in closed period!"
+msgstr "Vous ne pouvez modifier un mouvement d'une période fermée !"
+
+msgctxt "error:stock.move:0"
+msgid "You can not set state to assigned!"
+msgstr "Vous ne pouvez pas mettre l'état à assigné !"
+
+msgctxt "error:stock.move:0"
+msgid "You can not set state to done!"
+msgstr "Vous ne pouvez pas mettre l'état à fait !"
+
+msgctxt "error:stock.move:0"
+msgid "You can not set state to draft!"
+msgstr "Vous ne pouvez pas mettre l'état à brouillon !"
+
+msgctxt "error:stock.move:0"
+msgid "You can not use service products for a move!"
+msgstr ""
+"Vous ne pouvez pas utiliser un produit de type service sur un mouvement !"
+
+msgctxt "error:stock.move:0"
+msgid "You can only delete draft or cancelled moves!"
+msgstr ""
+"Vous pouvez supprimer que des mouvements qui sont annulés ou a l'état de "
+"brouillon !"
+
+msgctxt "error:stock.period:0"
+msgid "You can not close a period in the future or today!"
+msgstr ""
+"Vous ne pouvez fermer une période qui se termine aujourd'hui ou dans le "
+"futur !"
+
+msgctxt "error:stock.period:0"
+msgid "You can not close a period when there is still assigned moves!"
+msgstr ""
+"Vous ne pouvez fermer une période alors que des mouvements sont toujours "
+"assignés !"
+
+msgctxt "error:stock.shipment.in:0"
+msgid ""
+"Incoming Moves must have the warehouse input location as destination "
+"location!"
+msgstr ""
+"Les mouvements d'entrée doivent avoir l'emplacement d'entrée de l'entrepôt "
+"comme destination !"
+
+msgctxt "error:stock.shipment.in:0"
+msgid ""
+"Inventory Moves must have the warehouse input location as source location!"
+msgstr ""
+"Les mouvements d'inventaire doivent avoir l'emplacement d'entrée de "
+"l'entrepôt comme source !"
+
+msgctxt "error:stock.shipment.out.return.create:0"
+msgid "The shipment with code %s is not yet sent."
+msgstr "L'emballage avec le code %s n'est pas encore envoyé."
+
+msgctxt "error:stock.shipment.out.return.create:0"
+msgid "You can not create return shipment"
+msgstr "Vous ne pouvez pas créer d'expédition retour"
+
+msgctxt "error:stock.shipment.out.return:0"
+msgid ""
+"Incoming Moves must have the warehouse input location as destination "
+"location!"
+msgstr ""
+"Les mouvements d'entrée doivent avoir l'emplacement d'entrée de l'entrepôt "
+"comme destination !"
+
+msgctxt "error:stock.shipment.out.return:0"
+msgid ""
+"Inventory Moves must have the warehouse input location as source location!"
+msgstr ""
+"Les mouvements d'inventaire doivent avoir l'emplacement d'entrée de "
+"l'entrepôt comme source !"
+
+msgctxt "error:stock.shipment.out:0"
+msgid ""
+"Inventory Moves must have the warehouse output location as destination "
+"location!"
+msgstr ""
+"Les mouvements d'inventaires doivent avoir une sortie d'entrepôt comme "
+"location de destination."
+
+msgctxt "error:stock.shipment.out:0"
+msgid ""
+"Outgoing Moves must have the warehouse output location as source location!"
+msgstr ""
+"Les mouvements de sortie doivent avoir une sortie d'entrepôt comme location "
+"source !"
+
+msgctxt "field:party.address,delivery:0"
+msgid "Delivery"
+msgstr "Livraison"
+
+msgctxt "field:party.party,customer_location:0"
+msgid "Customer Location"
+msgstr "Emplacement client"
+
+msgctxt "field:party.party,supplier_location:0"
+msgid "Supplier Location"
+msgstr "Emplacement fournisseur"
+
+msgctxt "field:product.product,forecast_quantity:0"
+msgid "Forecast Quantity"
+msgstr "Quantités prévisionnelles"
+
+msgctxt "field:product.product,quantity:0"
+msgid "Quantity"
+msgstr "Quantité"
+
+msgctxt "field:product.template,forecast_quantity:0"
+msgid "Forecast Quantity"
+msgstr "Quantité prévue"
+
+msgctxt "field:product.template,quantity:0"
+msgid "Quantity"
+msgstr "Quantité"
+
+msgctxt "field:stock.configuration,rec_name:0"
+msgid "Name"
+msgstr "Nom"
+
+msgctxt "field:stock.configuration,shipment_in_return_sequence:0"
+msgid "Supplier Return Shipment Sequence"
+msgstr "Séquence des retours expédition fournisseur"
+
+msgctxt "field:stock.configuration,shipment_in_sequence:0"
+msgid "Supplier Shipment Sequence"
+msgstr "Séquence des expédition fournisseur"
+
+msgctxt "field:stock.configuration,shipment_internal_sequence:0"
+msgid "Internal Shipment Sequence"
+msgstr "Séquence des expédition interne"
+
+msgctxt "field:stock.configuration,shipment_out_return_sequence:0"
+msgid "Customer Return Shipment Sequence"
+msgstr "Séquence des retours d'expédition client"
+
+msgctxt "field:stock.configuration,shipment_out_sequence:0"
+msgid "Customer Shipment Sequence"
+msgstr "Séquence des expéditions client"
+
+msgctxt "field:stock.inventory,company:0"
+msgid "Company"
+msgstr "Société"
+
+msgctxt "field:stock.inventory,date:0"
+msgid "Date"
+msgstr "Date"
+
+msgctxt "field:stock.inventory,lines:0"
+msgid "Lines"
+msgstr "Lignes"
+
+msgctxt "field:stock.inventory,location:0"
+msgid "Location"
+msgstr "Emplacement"
+
+msgctxt "field:stock.inventory,lost_found:0"
+msgid "Lost and Found"
+msgstr "Pertes et surplus"
+
+msgctxt "field:stock.inventory,rec_name:0"
+msgid "Name"
+msgstr "Nom"
+
+msgctxt "field:stock.inventory,state:0"
+msgid "State"
+msgstr "Ãtat"
+
+msgctxt "field:stock.inventory.line,expected_quantity:0"
+msgid "Expected Quantity"
+msgstr "Quantité attendue"
+
+msgctxt "field:stock.inventory.line,inventory:0"
+msgid "Inventory"
+msgstr "Inventaire"
+
+msgctxt "field:stock.inventory.line,move:0"
+msgid "Move"
+msgstr "Mouvement"
+
+msgctxt "field:stock.inventory.line,product:0"
+msgid "Product"
+msgstr "Produit"
+
+msgctxt "field:stock.inventory.line,quantity:0"
+msgid "Quantity"
+msgstr "Quantité"
+
+msgctxt "field:stock.inventory.line,rec_name:0"
+msgid "Name"
+msgstr "Nom"
+
+msgctxt "field:stock.inventory.line,unit_digits:0"
+msgid "Unit Digits"
+msgstr "Décimales de l'unité"
+
+msgctxt "field:stock.inventory.line,uom:0"
+msgid "UOM"
+msgstr "UDM"
+
+msgctxt "field:stock.location,active:0"
+msgid "Active"
+msgstr "Actif"
+
+msgctxt "field:stock.location,address:0"
+msgid "Address"
+msgstr "Adresse"
+
+msgctxt "field:stock.location,childs:0"
+msgid "Children"
+msgstr "Enfants"
+
+msgctxt "field:stock.location,code:0"
+msgid "Code"
+msgstr "Code"
+
+msgctxt "field:stock.location,forecast_quantity:0"
+msgid "Forecast Quantity"
+msgstr "Quantité prévisionnelle"
+
+msgctxt "field:stock.location,input_location:0"
+msgid "Input"
+msgstr "Réception"
+
+msgctxt "field:stock.location,left:0"
+msgid "Left"
+msgstr "Gauche"
+
+msgctxt "field:stock.location,name:0"
+msgid "Name"
+msgstr "Nom"
+
+msgctxt "field:stock.location,output_location:0"
+msgid "Output"
+msgstr "Expédition"
+
+msgctxt "field:stock.location,parent:0"
+msgid "Parent"
+msgstr "Parent"
+
+msgctxt "field:stock.location,quantity:0"
+msgid "Quantity"
+msgstr "Quantité"
+
+msgctxt "field:stock.location,rec_name:0"
+msgid "Name"
+msgstr "Nom"
+
+msgctxt "field:stock.location,right:0"
+msgid "Right"
+msgstr "Droit"
+
+msgctxt "field:stock.location,storage_location:0"
+msgid "Storage"
+msgstr "Magasin"
+
+msgctxt "field:stock.location,type:0"
+msgid "Location type"
+msgstr "Type d'emplacement"
+
+msgctxt "field:stock.location_stock_date.init,forecast_date:0"
+msgid "At Date"
+msgstr "Ã la date"
+
+msgctxt "field:stock.move,company:0"
+msgid "Company"
+msgstr "Société"
+
+msgctxt "field:stock.move,cost_price:0"
+msgid "Cost Price"
+msgstr "Prix de revient"
+
+msgctxt "field:stock.move,currency:0"
+msgid "Currency"
+msgstr "Devise"
+
+msgctxt "field:stock.move,effective_date:0"
+msgid "Effective Date"
+msgstr "Date effective"
+
+msgctxt "field:stock.move,from_location:0"
+msgid "From Location"
+msgstr "Emplacement d'origine"
+
+msgctxt "field:stock.move,internal_quantity:0"
+msgid "Internal Quantity"
+msgstr "Quantité interne"
+
+msgctxt "field:stock.move,planned_date:0"
+msgid "Planned Date"
+msgstr "Date planifiée"
+
+msgctxt "field:stock.move,product:0"
+msgid "Product"
+msgstr "Produit"
+
+msgctxt "field:stock.move,quantity:0"
+msgid "Quantity"
+msgstr "Quantité"
+
+msgctxt "field:stock.move,rec_name:0"
+msgid "Name"
+msgstr "Nom"
+
+msgctxt "field:stock.move,shipment_in:0"
+msgid "Supplier Shipment"
+msgstr "Expédition fournisseur"
+
+msgctxt "field:stock.move,shipment_in_return:0"
+msgid "Supplier Return Shipment"
+msgstr "Retour expédition fournisseur"
+
+msgctxt "field:stock.move,shipment_internal:0"
+msgid "Internal Shipment"
+msgstr "Expédition interne"
+
+msgctxt "field:stock.move,shipment_out:0"
+msgid "Customer Shipment"
+msgstr "Expédition client"
+
+msgctxt "field:stock.move,shipment_out_return:0"
+msgid "Customer Return Shipment"
+msgstr "Retour d'expédition client"
+
+msgctxt "field:stock.move,state:0"
+msgid "State"
+msgstr "Etat"
+
+msgctxt "field:stock.move,to_location:0"
+msgid "To Location"
+msgstr "Emplacement de destination"
+
+msgctxt "field:stock.move,unit_digits:0"
+msgid "Unit Digits"
+msgstr "Décimales de l'unité"
+
+msgctxt "field:stock.move,unit_price:0"
+msgid "Unit Price"
+msgstr "Prix unitaire"
+
+msgctxt "field:stock.move,unit_price_required:0"
+msgid "Unit Price Required"
+msgstr "Prix unitaire requis"
+
+msgctxt "field:stock.move,uom:0"
+msgid "Uom"
+msgstr "UDM"
+
+msgctxt "field:stock.period,caches:0"
+msgid "Caches"
+msgstr "Caches"
+
+msgctxt "field:stock.period,company:0"
+msgid "Company"
+msgstr "Société"
+
+msgctxt "field:stock.period,date:0"
+msgid "Date"
+msgstr "Date"
+
+msgctxt "field:stock.period,rec_name:0"
+msgid "Name"
+msgstr "Nom"
+
+msgctxt "field:stock.period,state:0"
+msgid "State"
+msgstr "Ãtat"
+
+msgctxt "field:stock.period.cache,internal_quantity:0"
+msgid "Internal Quantity"
+msgstr "Quantité interne"
+
+msgctxt "field:stock.period.cache,location:0"
+msgid "Location"
+msgstr "Emplacement"
+
+msgctxt "field:stock.period.cache,period:0"
+msgid "Period"
+msgstr "Période"
+
+msgctxt "field:stock.period.cache,product:0"
+msgid "Product"
+msgstr "Produit"
+
+msgctxt "field:stock.period.cache,rec_name:0"
+msgid "Name"
+msgstr "Nom"
+
+msgctxt "field:stock.product_stock_date.init,forecast_date:0"
+msgid "At Date"
+msgstr "Ã la date"
+
+msgctxt "field:stock.shipment.in,code:0"
+msgid "Code"
+msgstr "Code"
+
+msgctxt "field:stock.shipment.in,company:0"
+msgid "Company"
+msgstr "Société"
+
+msgctxt "field:stock.shipment.in,contact_address:0"
+msgid "Contact Address"
+msgstr "Adresse de contact"
+
+msgctxt "field:stock.shipment.in,effective_date:0"
+msgid "Effective Date"
+msgstr "Date effective"
+
+msgctxt "field:stock.shipment.in,incoming_moves:0"
+msgid "Incoming Moves"
+msgstr "Mouvements entrants"
+
+msgctxt "field:stock.shipment.in,inventory_moves:0"
+msgid "Inventory Moves"
+msgstr "Mouvement internes"
+
+msgctxt "field:stock.shipment.in,moves:0"
+msgid "Moves"
+msgstr "Mouvements"
+
+msgctxt "field:stock.shipment.in,planned_date:0"
+msgid "Planned Date"
+msgstr "Date planifiée"
+
+msgctxt "field:stock.shipment.in,rec_name:0"
+msgid "Name"
+msgstr "Nom"
+
+msgctxt "field:stock.shipment.in,reference:0"
+msgid "Reference"
+msgstr "Référence"
+
+msgctxt "field:stock.shipment.in,state:0"
+msgid "State"
+msgstr "Ãtat"
+
+msgctxt "field:stock.shipment.in,supplier:0"
+msgid "Supplier"
+msgstr "Fournisseur"
+
+msgctxt "field:stock.shipment.in,warehouse:0"
+msgid "Warehouse"
+msgstr "Entrepôt"
+
+msgctxt "field:stock.shipment.in.return,code:0"
+msgid "Code"
+msgstr "Code"
+
+msgctxt "field:stock.shipment.in.return,company:0"
+msgid "Company"
+msgstr "Société"
+
+msgctxt "field:stock.shipment.in.return,effective_date:0"
+msgid "Effective Date"
+msgstr "Date effective"
+
+msgctxt "field:stock.shipment.in.return,from_location:0"
+msgid "From Location"
+msgstr "Emplacement d'origine"
+
+msgctxt "field:stock.shipment.in.return,moves:0"
+msgid "Moves"
+msgstr "Mouvements"
+
+msgctxt "field:stock.shipment.in.return,planned_date:0"
+msgid "Planned Date"
+msgstr "Date planifiée"
+
+msgctxt "field:stock.shipment.in.return,rec_name:0"
+msgid "Name"
+msgstr "Nom"
+
+msgctxt "field:stock.shipment.in.return,reference:0"
+msgid "Reference"
+msgstr "Référence"
+
+msgctxt "field:stock.shipment.in.return,state:0"
+msgid "State"
+msgstr "Ãtat"
+
+msgctxt "field:stock.shipment.in.return,to_location:0"
+msgid "To Location"
+msgstr "Emplacement de destination"
+
+msgctxt "field:stock.shipment.in.return.assign.assign_failed,moves:0"
+msgid "Moves"
+msgstr "Mouvements"
+
+msgctxt "field:stock.shipment.internal,code:0"
+msgid "Code"
+msgstr "Code"
+
+msgctxt "field:stock.shipment.internal,company:0"
+msgid "Company"
+msgstr "Société"
+
+msgctxt "field:stock.shipment.internal,effective_date:0"
+msgid "Effective Date"
+msgstr "Date effective"
+
+msgctxt "field:stock.shipment.internal,from_location:0"
+msgid "From Location"
+msgstr "Emplacement d'origine"
+
+msgctxt "field:stock.shipment.internal,moves:0"
+msgid "Moves"
+msgstr "Mouvements"
+
+msgctxt "field:stock.shipment.internal,planned_date:0"
+msgid "Planned Date"
+msgstr "Date planifiée"
+
+msgctxt "field:stock.shipment.internal,rec_name:0"
+msgid "Name"
+msgstr "Nom"
+
+msgctxt "field:stock.shipment.internal,reference:0"
+msgid "Reference"
+msgstr "Référence"
+
+msgctxt "field:stock.shipment.internal,state:0"
+msgid "State"
+msgstr "Ãtat"
+
+msgctxt "field:stock.shipment.internal,to_location:0"
+msgid "To Location"
+msgstr "Emplacement de destination"
+
+msgctxt "field:stock.shipment.internal.assign.assign_failed,moves:0"
+msgid "Moves"
+msgstr "Mouvements"
+
+msgctxt "field:stock.shipment.out,code:0"
+msgid "Code"
+msgstr "Code"
+
+msgctxt "field:stock.shipment.out,company:0"
+msgid "Company"
+msgstr "Société"
+
+msgctxt "field:stock.shipment.out,customer:0"
+msgid "Customer"
+msgstr "Client"
+
+msgctxt "field:stock.shipment.out,delivery_address:0"
+msgid "Delivery Address"
+msgstr "Adresse de livraison"
+
+msgctxt "field:stock.shipment.out,effective_date:0"
+msgid "Effective Date"
+msgstr "Date effective"
+
+msgctxt "field:stock.shipment.out,inventory_moves:0"
+msgid "Inventory Moves"
+msgstr "Mouvements internes"
+
+msgctxt "field:stock.shipment.out,moves:0"
+msgid "Moves"
+msgstr "Mouvements"
+
+msgctxt "field:stock.shipment.out,outgoing_moves:0"
+msgid "Outgoing Moves"
+msgstr "Mouvements de sortie"
+
+msgctxt "field:stock.shipment.out,planned_date:0"
+msgid "Planned Date"
+msgstr "Date planifiée"
+
+msgctxt "field:stock.shipment.out,rec_name:0"
+msgid "Name"
+msgstr "Nom"
+
+msgctxt "field:stock.shipment.out,reference:0"
+msgid "Reference"
+msgstr "Référence"
+
+msgctxt "field:stock.shipment.out,state:0"
+msgid "State"
+msgstr "Ãtat"
+
+msgctxt "field:stock.shipment.out,warehouse:0"
+msgid "Warehouse"
+msgstr "Entrepôt"
+
+msgctxt "field:stock.shipment.out.assign.assign_failed,inventory_moves:0"
+msgid "Inventory Moves"
+msgstr "Mouvements internes"
+
+msgctxt "field:stock.shipment.out.return,code:0"
+msgid "Code"
+msgstr "Code"
+
+msgctxt "field:stock.shipment.out.return,company:0"
+msgid "Company"
+msgstr "Société"
+
+msgctxt "field:stock.shipment.out.return,customer:0"
+msgid "Customer"
+msgstr "Client"
+
+msgctxt "field:stock.shipment.out.return,delivery_address:0"
+msgid "Delivery Address"
+msgstr "Adresse de livraison"
+
+msgctxt "field:stock.shipment.out.return,effective_date:0"
+msgid "Effective Date"
+msgstr "Date effective"
+
+msgctxt "field:stock.shipment.out.return,incoming_moves:0"
+msgid "Incoming Moves"
+msgstr "Mouvements entrants"
+
+msgctxt "field:stock.shipment.out.return,inventory_moves:0"
+msgid "Inventory Moves"
+msgstr "Mouvements internes"
+
+msgctxt "field:stock.shipment.out.return,moves:0"
+msgid "Moves"
+msgstr "Mouvements"
+
+msgctxt "field:stock.shipment.out.return,planned_date:0"
+msgid "Planned Date"
+msgstr "Date planifiée"
+
+msgctxt "field:stock.shipment.out.return,rec_name:0"
+msgid "Name"
+msgstr "Nom"
+
+msgctxt "field:stock.shipment.out.return,reference:0"
+msgid "Reference"
+msgstr "Référence"
+
+msgctxt "field:stock.shipment.out.return,state:0"
+msgid "State"
+msgstr "Ãtat"
+
+msgctxt "field:stock.shipment.out.return,warehouse:0"
+msgid "Warehouse"
+msgstr "Entrepôt"
+
+msgctxt "help:party.party,customer_location:0"
+msgid "The default destination location when sending products to the party."
+msgstr ""
+"L'emplacement de destination par défaut quand des produits sont envoyés vers"
+" ce tiers."
+
+msgctxt "help:party.party,supplier_location:0"
+msgid "The default source location when receiving products from the party."
+msgstr ""
+"L'emplacement d'origine par défaut quand des produits sont reçus depuis ce "
+"tiers."
+
+msgctxt "help:stock.location_stock_date.init,forecast_date:0"
+msgid ""
+"Allow to compute expected stock quantities for this date.\n"
+"* An empty value is an infinite date in the future.\n"
+"* A date in the past will provide historical values."
+msgstr ""
+"Permet de calculer les quantités en stock attendues pour cette date.\n"
+"* Une valeur vide correspond à une date infinie dans le futur.\n"
+"* Une date dans le passé retournera des données historiques."
+
+msgctxt "help:stock.product_stock_date.init,forecast_date:0"
+msgid ""
+"Allow to compute expected stock quantities for this date.\n"
+"* An empty value is an infinite date in the future.\n"
+"* A date in the past will provide historical values."
+msgstr ""
+"Permet de calculer les quantités en stock attendues pour cette date.\n"
+"* Une valeur vide correspond à une date infinie dans le futur.\n"
+"* Une date dans le passé retournera des données historiques."
+
+msgctxt "model:ir.action,name:act_inventory_form"
+msgid "Inventories"
+msgstr "Inventaires"
+
+msgctxt "model:ir.action,name:act_inventory_form_draft"
+msgid "Draft Inventories"
+msgstr "Inventaires brouillons"
+
+msgctxt "model:ir.action,name:act_location_form"
+msgid "Locations"
+msgstr "Ãditer les emplacements"
+
+msgctxt "model:ir.action,name:act_location_quantity_tree"
+msgid "Product Stock"
+msgstr "Quantités en stock"
+
+msgctxt "model:ir.action,name:act_location_tree"
+msgid "Locations"
+msgstr "Emplacements"
+
+msgctxt "model:ir.action,name:act_move_form"
+msgid "Moves"
+msgstr "Mouvements"
+
+msgctxt "model:ir.action,name:act_move_form_cust"
+msgid "Moves to Customers"
+msgstr "Mouvements clients"
+
+msgctxt "model:ir.action,name:act_move_form_supp"
+msgid "Moves from Suppliers"
+msgstr "Mouvements fournisseurs"
+
+msgctxt "model:ir.action,name:act_move_form_supp_proceed"
+msgid "Moves from Suppliers Waiting Arrival"
+msgstr "Mouvement fournisseur en attente de réception"
+
+msgctxt "model:ir.action,name:act_period_list"
+msgid "Periods"
+msgstr "Périodes"
+
+msgctxt "model:ir.action,name:act_product_by_location"
+msgid "Products by Locations"
+msgstr "Produits par emplacements"
+
+msgctxt "model:ir.action,name:act_shipment_in_draft"
+msgid "Draft Supplier Shipment"
+msgstr "Expédition fournisseur en brouillon"
+
+msgctxt "model:ir.action,name:act_shipment_in_form"
+msgid "Supplier Shipments"
+msgstr "Expéditions fournisseur"
+
+msgctxt "model:ir.action,name:act_shipment_in_form_received"
+msgid "Received Supplier shipments"
+msgstr "Expéditions fournisseur reçues"
+
+msgctxt "model:ir.action,name:act_shipment_in_return_form"
+msgid "Supplier Return Shipments"
+msgstr "Retour d'expéditions fournisseur"
+
+msgctxt "model:ir.action,name:act_shipment_internal_assigned_form"
+msgid "Assigned Internal Shipments"
+msgstr "Expédition internes assignées"
+
+msgctxt "model:ir.action,name:act_shipment_internal_draft_form"
+msgid "Draft Internal Shipments"
+msgstr "Expéditions internes brouillon"
+
+msgctxt "model:ir.action,name:act_shipment_internal_form"
+msgid "Internal Shipments"
+msgstr "Expédition interne"
+
+msgctxt "model:ir.action,name:act_shipment_internal_waiting_form"
+msgid "Internal Shipments Waiting Assignation"
+msgstr "Expéditions internes en attente d'assignation"
+
+msgctxt "model:ir.action,name:act_shipment_out_form"
+msgid "Customer Shipments"
+msgstr "Expéditions client"
+
+msgctxt "model:ir.action,name:act_shipment_out_form2"
+msgid "Customer Shipments"
+msgstr "Expéditions client"
+
+msgctxt "model:ir.action,name:act_shipment_out_form3"
+msgid "Supplier Shipments"
+msgstr "Expéditions fournisseur"
+
+msgctxt "model:ir.action,name:act_shipment_out_form_assigned"
+msgid "Assigned Customer Shipments"
+msgstr "Expéditions client assignées"
+
+msgctxt "model:ir.action,name:act_shipment_out_form_ready"
+msgid "Customer Shipments Ready for Shipping"
+msgstr "Expéditions client prêtes à livrer"
+
+msgctxt "model:ir.action,name:act_shipment_out_form_waiting"
+msgid "Customer Shipments Waiting Assignation"
+msgstr "Expéditions client en attente d'assignation"
+
+msgctxt "model:ir.action,name:act_shipment_out_return_form"
+msgid "Customer Return Shipments"
+msgstr "Retour d'expéditions client"
+
+msgctxt "model:ir.action,name:act_stock_configuration_form"
+msgid "Stock Configuration"
+msgstr "Configuration des stocks"
+
+msgctxt "model:ir.action,name:create_shipment_out_return"
+msgid "Create Return Shipment"
+msgstr "Créer l'expédition de retour"
+
+msgctxt "model:ir.action,name:report_shipment_in_restocking_list"
+msgid "Restocking List"
+msgstr "Liste de restockage"
+
+msgctxt "model:ir.action,name:report_shipment_internal"
+msgid "Internal Shipment"
+msgstr "Expédition interne"
+
+msgctxt "model:ir.action,name:report_shipment_out_delivery_note"
+msgid "Delivery Note"
+msgstr "Bon de livraison"
+
+msgctxt "model:ir.action,name:report_shipment_out_picking_list"
+msgid "Picking List"
+msgstr "Liste de prélèvement"
+
+msgctxt "model:ir.action,name:report_shipment_out_return_restocking_list"
+msgid "Restocking List"
+msgstr "Liste de restockage"
+
+msgctxt "model:ir.action,name:wizard_complete_inventory"
+msgid "Complete Inventory"
+msgstr "Compléter l'inventaire"
+
+msgctxt "model:ir.action,name:wizard_location_open"
+msgid "Product by Location"
+msgstr "Produits par emplacement"
+
+msgctxt "model:ir.action,name:wizard_product_open"
+msgid "Product Quantities"
+msgstr "Quantités de produit"
+
+msgctxt "model:ir.action,name:wizard_shipment_in_return_assign"
+msgid "Assign Purchase Return Shipment"
+msgstr "Assigner le retour d'expédition fournisseur"
+
+msgctxt "model:ir.action,name:wizard_shipment_internal_assign"
+msgid "Assign Shipment Internal"
+msgstr "Assigner l'expédition interne"
+
+msgctxt "model:ir.action,name:wizard_shipment_out_assign"
+msgid "Assign Shipment Out"
+msgstr "Assigner l'expédition de sortie"
+
+msgctxt "model:ir.sequence,name:sequence_shipment_in"
+msgid "Supplier Shipment"
+msgstr "Expédition fournisseur"
+
+msgctxt "model:ir.sequence,name:sequence_shipment_in_return"
+msgid "Supplier Return Shipment"
+msgstr "Retour d'expédition fournisseur"
+
+msgctxt "model:ir.sequence,name:sequence_shipment_internal"
+msgid "Internal Shipment"
+msgstr "Expédition Interne"
+
+msgctxt "model:ir.sequence,name:sequence_shipment_out"
+msgid "Customer Shipment"
+msgstr "Expédition client"
+
+msgctxt "model:ir.sequence,name:sequence_shipment_out_return"
+msgid "Customer Return Shipment"
+msgstr "Retour d'expédition client"
+
+msgctxt "model:ir.sequence.type,name:sequence_type_shipment_in"
+msgid "Supplier Shipment"
+msgstr "Expédition fournisseur"
+
+msgctxt "model:ir.sequence.type,name:sequence_type_shipment_in_return"
+msgid "Supplier Return Shipment"
+msgstr "Retour d'expédition fournisseur"
+
+msgctxt "model:ir.sequence.type,name:sequence_type_shipment_internal"
+msgid "Internal Shipment"
+msgstr "Expédition interne"
+
+msgctxt "model:ir.sequence.type,name:sequence_type_shipment_out"
+msgid "Customer Shipment"
+msgstr "Expédition client"
+
+msgctxt "model:ir.sequence.type,name:sequence_type_shipment_out_return"
+msgid "Customer Return Shipment"
+msgstr "Retour d'expédition client"
+
+msgctxt "model:ir.ui.menu,name:menu_configuration"
+msgid "Configuration"
+msgstr "Configuration"
+
+msgctxt "model:ir.ui.menu,name:menu_inventory_form"
+msgid "Inventories"
+msgstr "Inventaires"
+
+msgctxt "model:ir.ui.menu,name:menu_inventory_form_draft"
+msgid "Draft Inventories"
+msgstr "Inventaires brouillons"
+
+msgctxt "model:ir.ui.menu,name:menu_location_form"
+msgid "Locations"
+msgstr "Ãditer les emplacements"
+
+msgctxt "model:ir.ui.menu,name:menu_location_tree"
+msgid "Locations"
+msgstr "Emplacements"
+
+msgctxt "model:ir.ui.menu,name:menu_move_form"
+msgid "Moves"
+msgstr "Mouvements"
+
+msgctxt "model:ir.ui.menu,name:menu_move_form_cust"
+msgid "Moves to Customers"
+msgstr "Mouvements clients"
+
+msgctxt "model:ir.ui.menu,name:menu_move_form_supp"
+msgid "Moves from Suppliers"
+msgstr "Mouvements fournisseurs"
+
+msgctxt "model:ir.ui.menu,name:menu_move_form_supp_proceed"
+msgid "Moves from Suppliers Waiting Arrival"
+msgstr "Mouvements fournisseur en attente de réception"
+
+msgctxt "model:ir.ui.menu,name:menu_period_list"
+msgid "Periods"
+msgstr "Périodes"
+
+msgctxt "model:ir.ui.menu,name:menu_reporting"
+msgid "Reporting"
+msgstr "Rapports"
+
+msgctxt "model:ir.ui.menu,name:menu_shipment_in_draft"
+msgid "Draft Supplier Shipment"
+msgstr "Expédition fournisseur en brouillon"
+
+msgctxt "model:ir.ui.menu,name:menu_shipment_in_form"
+msgid "Supplier Shipments"
+msgstr "Expéditions fournisseur"
+
+msgctxt "model:ir.ui.menu,name:menu_shipment_in_received"
+msgid "Received Supplier shipments"
+msgstr "Expéditions fournisseur reçues"
+
+msgctxt "model:ir.ui.menu,name:menu_shipment_in_return_form"
+msgid "Supplier Return Shipments"
+msgstr "Retour d'expédition fournisseur"
+
+msgctxt "model:ir.ui.menu,name:menu_shipment_internal_assigned_form"
+msgid "Assigned Internal Shipments"
+msgstr "Expéditions internes assignées"
+
+msgctxt "model:ir.ui.menu,name:menu_shipment_internal_draft_form"
+msgid "Draft Internal Shipments"
+msgstr "Expéditions internes brouillons"
+
+msgctxt "model:ir.ui.menu,name:menu_shipment_internal_form"
+msgid "Internal Shipments"
+msgstr "Expéditions internes"
+
+msgctxt "model:ir.ui.menu,name:menu_shipment_internal_waiting_form"
+msgid "Internal Shipments Waiting Assignation"
+msgstr "Expéditions internes en attente d'assignation"
+
+msgctxt "model:ir.ui.menu,name:menu_shipment_out_assigned"
+msgid "Assigned Customer Shipments"
+msgstr "Expéditions client assignées"
+
+msgctxt "model:ir.ui.menu,name:menu_shipment_out_form"
+msgid "Customer Shipments"
+msgstr "Expéditions client"
+
+msgctxt "model:ir.ui.menu,name:menu_shipment_out_ready"
+msgid "Customer Shipments Ready for Shipping"
+msgstr "Expéditions client prêtes pour la livraison"
+
+msgctxt "model:ir.ui.menu,name:menu_shipment_out_return_form"
+msgid "Customer Return Shipments"
+msgstr "Retour d'expédition client"
+
+msgctxt "model:ir.ui.menu,name:menu_shipment_out_waiting"
+msgid "Customer Shipments Waiting Assignation"
+msgstr "Expéditions client en attente d'assignation"
+
+msgctxt "model:ir.ui.menu,name:menu_stock"
+msgid "Inventory & Stock"
+msgstr "Stocks & inventaires"
+
+msgctxt "model:ir.ui.menu,name:menu_stock_configuration"
+msgid "Stock Configuration"
+msgstr "Configuration des stocks"
+
+msgctxt "model:res.group,name:group_stock"
+msgid "Stock"
+msgstr "Stock"
+
+msgctxt "model:res.group,name:group_stock_admin"
+msgid "Stock Administration"
+msgstr "Administration des stocks"
+
+msgctxt "model:res.group,name:group_stock_force_assignment"
+msgid "Stock Force Assignment"
+msgstr "Stock forcer assignation"
+
+msgctxt "model:stock.configuration,name:0"
+msgid "Stock Configuration"
+msgstr "Configuration des stocks"
+
+msgctxt "model:stock.inventory,name:0"
+msgid "Stock Inventory"
+msgstr "Inventaire du stock"
+
+msgctxt "model:stock.inventory.line,name:0"
+msgid "Stock Inventory Line"
+msgstr "Ligne d'inventaire de stock"
+
+msgctxt "model:stock.location,name:0"
+msgid "Stock Location"
+msgstr "Lieu de Stockage"
+
+msgctxt "model:stock.location,name:location_customer"
+msgid "Customer"
+msgstr "Client"
+
+msgctxt "model:stock.location,name:location_input"
+msgid "Input Zone"
+msgstr "Zone d'entrée"
+
+msgctxt "model:stock.location,name:location_lost_found"
+msgid "Lost and Found"
+msgstr "Pertes et surplus"
+
+msgctxt "model:stock.location,name:location_output"
+msgid "Output Zone"
+msgstr "Zone de sortie"
+
+msgctxt "model:stock.location,name:location_storage"
+msgid "Storage Zone"
+msgstr "Zone de stockage"
+
+msgctxt "model:stock.location,name:location_supplier"
+msgid "Supplier"
+msgstr "Fournisseur"
+
+msgctxt "model:stock.location,name:location_warehouse"
+msgid "Warehouse"
+msgstr "Entrepôt"
+
+msgctxt "model:stock.location_stock_date.init,name:0"
+msgid "Compute stock quantities"
+msgstr "Quantité de stock calculées"
+
+msgctxt "model:stock.move,name:0"
+msgid "Stock Move"
+msgstr "Mouvement de stock"
+
+msgctxt "model:stock.period,name:0"
+msgid "Stock Period"
+msgstr "Période de stock"
+
+msgctxt "model:stock.period.cache,name:0"
+msgid ""
+"\n"
+" Stock Period Cache\n"
+"\n"
+" It is used to store cached computation of stock quantities.\n"
+" "
+msgstr ""
+"\n"
+"Cache de période de stock\n"
+"\n"
+"C'est utilisé pour stocker en cache les calculs de quantités de stock."
+
+msgctxt "model:stock.product_stock_date.init,name:0"
+msgid "Compute stock quantities"
+msgstr "Quantités de stock calculées"
+
+msgctxt "model:stock.shipment.in,name:0"
+msgid "Supplier Shipment"
+msgstr "Expédition fournisseur"
+
+msgctxt "model:stock.shipment.in.return,name:0"
+msgid "Supplier Return Shipment"
+msgstr "Retour d'expédition fournisseur"
+
+msgctxt "model:stock.shipment.in.return.assign.assign_failed,name:0"
+msgid "Assign Supplier Return Shipment Assign Failed"
+msgstr "Assigner le retour d'expédition fournisseur - Demande forcée"
+
+msgctxt "model:stock.shipment.internal,name:0"
+msgid "Internal Shipment"
+msgstr "Expédition interne"
+
+msgctxt "model:stock.shipment.internal.assign.assign_failed,name:0"
+msgid "Assign Shipment Internal Assign Failed"
+msgstr "Assigner l'expédition interne - Demande forcée"
+
+msgctxt "model:stock.shipment.out,name:0"
+msgid "Customer Shipment"
+msgstr "Expédition Client"
+
+msgctxt "model:stock.shipment.out.assign.assign_failed,name:0"
+msgid "Assign Shipment Out Assign Failed"
+msgstr "Assigner l'expédition de sortie - Demande forcée"
+
+msgctxt "model:stock.shipment.out.return,name:0"
+msgid "Customer Return Shipment"
+msgstr "Retour d'expédition client"
+
+msgctxt "model:workflow,name:wkf_inventory"
+msgid "Inventory"
+msgstr "Inventaire"
+
+msgctxt "model:workflow,name:wkf_shipment_in_return"
+msgid "Supplier Return Shipment"
+msgstr "Retour d'expédition fournisseur"
+
+msgctxt "model:workflow,name:wkf_shipment_out_return"
+msgid "Customer Return Shipment"
+msgstr "Retour d'expédition client"
+
+msgctxt "model:workflow,name:wkf_shipmentin"
+msgid "Supplier Shipment"
+msgstr "Expédition fournisseur"
+
+msgctxt "model:workflow,name:wkf_shipmentinternal"
+msgid "Internal Shipment"
+msgstr "Expédition interne"
+
+msgctxt "model:workflow,name:wkf_shipmentout"
+msgid "Customer Shipment"
+msgstr "Expédition client"
+
+msgctxt "model:workflow.activity,name:inventory_act_cancel"
+msgid "Canceled"
+msgstr "Annulé"
+
+msgctxt "model:workflow.activity,name:inventory_act_done"
+msgid "Done"
+msgstr "Fait"
+
+msgctxt "model:workflow.activity,name:inventory_act_draft"
+msgid "Draft"
+msgstr "Brouillon"
+
+msgctxt "model:workflow.activity,name:shipment_in_return_act_assigned"
+msgid "Assigned"
+msgstr "Assigné"
+
+msgctxt "model:workflow.activity,name:shipment_in_return_act_cancel"
+msgid "Canceled"
+msgstr "Annuler"
+
+msgctxt "model:workflow.activity,name:shipment_in_return_act_done"
+msgid "Done"
+msgstr "Fait"
+
+msgctxt "model:workflow.activity,name:shipment_in_return_act_draft"
+msgid "Draft"
+msgstr "Brouillon"
+
+msgctxt "model:workflow.activity,name:shipment_in_return_act_waiting"
+msgid "Waiting"
+msgstr "En attente"
+
+msgctxt "model:workflow.activity,name:shipment_out_return_act_cancel"
+msgid "Canceled"
+msgstr "Annuler"
+
+msgctxt "model:workflow.activity,name:shipment_out_return_act_done"
+msgid "Done"
+msgstr "Fait"
+
+msgctxt "model:workflow.activity,name:shipment_out_return_act_draft"
+msgid "Draft"
+msgstr "Brouillon"
+
+msgctxt "model:workflow.activity,name:shipment_out_return_act_received"
+msgid "Received"
+msgstr "Reçu"
+
+msgctxt "model:workflow.activity,name:shipmentin_act_cancel"
+msgid "Canceled"
+msgstr "Annulé"
+
+msgctxt "model:workflow.activity,name:shipmentin_act_done"
+msgid "Done"
+msgstr "Fait"
+
+msgctxt "model:workflow.activity,name:shipmentin_act_draft"
+msgid "Draft"
+msgstr "Brouillon"
+
+msgctxt "model:workflow.activity,name:shipmentin_act_received"
+msgid "Received"
+msgstr "Reçu"
+
+msgctxt "model:workflow.activity,name:shipmentinternal_act_assigned"
+msgid "Assigned"
+msgstr "Assigné"
+
+msgctxt "model:workflow.activity,name:shipmentinternal_act_cancel"
+msgid "Canceled"
+msgstr "Annulé"
+
+msgctxt "model:workflow.activity,name:shipmentinternal_act_done"
+msgid "Done"
+msgstr "Fait"
+
+msgctxt "model:workflow.activity,name:shipmentinternal_act_draft"
+msgid "Draft"
+msgstr "Brouillon"
+
+msgctxt "model:workflow.activity,name:shipmentinternal_act_waiting"
+msgid "Waiting"
+msgstr "En attente"
+
+msgctxt "model:workflow.activity,name:shipmentout_act_assigned"
+msgid "Assigned"
+msgstr "Assigné"
+
+msgctxt "model:workflow.activity,name:shipmentout_act_cancel"
+msgid "Canceled"
+msgstr "Annulé"
+
+msgctxt "model:workflow.activity,name:shipmentout_act_done"
+msgid "Done"
+msgstr "Fait"
+
+msgctxt "model:workflow.activity,name:shipmentout_act_draft"
+msgid "Draft"
+msgstr "Brouillon"
+
+msgctxt "model:workflow.activity,name:shipmentout_act_packed"
+msgid "Packed"
+msgstr "Emballé"
+
+msgctxt "model:workflow.activity,name:shipmentout_act_waiting"
+msgid "Waiting"
+msgstr "En attente"
+
+msgctxt "odt:stock.shipment.in.restocking_list:0"
+msgid "/"
+msgstr "/"
+
+msgctxt "odt:stock.shipment.in.restocking_list:0"
+msgid "Code:"
+msgstr "Code :"
+
+msgctxt "odt:stock.shipment.in.restocking_list:0"
+msgid "E-Mail:"
+msgstr "E-Mail :"
+
+msgctxt "odt:stock.shipment.in.restocking_list:0"
+msgid "From Location"
+msgstr "Emplacement d'origine"
+
+msgctxt "odt:stock.shipment.in.restocking_list:0"
+msgid "Phone:"
+msgstr "Téléphone :"
+
+msgctxt "odt:stock.shipment.in.restocking_list:0"
+msgid "Planned Date:"
+msgstr "Date planifiée :"
+
+msgctxt "odt:stock.shipment.in.restocking_list:0"
+msgid "Product"
+msgstr "Produit"
+
+msgctxt "odt:stock.shipment.in.restocking_list:0"
+msgid "Quantity"
+msgstr "Quantité"
+
+msgctxt "odt:stock.shipment.in.restocking_list:0"
+msgid "Reference:"
+msgstr "Référence :"
+
+msgctxt "odt:stock.shipment.in.restocking_list:0"
+msgid "Restocking List"
+msgstr "Liste de restockage"
+
+msgctxt "odt:stock.shipment.in.restocking_list:0"
+msgid "Supplier:"
+msgstr "Fournisseur :"
+
+msgctxt "odt:stock.shipment.in.restocking_list:0"
+msgid "To Location"
+msgstr "Emplacement de destination"
+
+msgctxt "odt:stock.shipment.in.restocking_list:0"
+msgid "VAT Number:"
+msgstr "Numéro TVA :"
+
+msgctxt "odt:stock.shipment.in.restocking_list:0"
+msgid "Warehouse:"
+msgstr "Entrepôt :"
+
+msgctxt "odt:stock.shipment.internal.report:0"
+msgid "/"
+msgstr "/"
+
+msgctxt "odt:stock.shipment.internal.report:0"
+msgid "Code:"
+msgstr "Code :"
+
+msgctxt "odt:stock.shipment.internal.report:0"
+msgid "E-Mail:"
+msgstr "E-Mail :"
+
+msgctxt "odt:stock.shipment.internal.report:0"
+msgid "From Location"
+msgstr "Emplacement d'origine"
+
+msgctxt "odt:stock.shipment.internal.report:0"
+msgid "From Location:"
+msgstr "Emplacement d'origine :"
+
+msgctxt "odt:stock.shipment.internal.report:0"
+msgid "Internal Shipment"
+msgstr "Expédition interne"
+
+msgctxt "odt:stock.shipment.internal.report:0"
+msgid "Phone:"
+msgstr "Téléphone :"
+
+msgctxt "odt:stock.shipment.internal.report:0"
+msgid "Planned Date:"
+msgstr "Date planifiée :"
+
+msgctxt "odt:stock.shipment.internal.report:0"
+msgid "Product"
+msgstr "Produit"
+
+msgctxt "odt:stock.shipment.internal.report:0"
+msgid "Quantity"
+msgstr "Quantité"
+
+msgctxt "odt:stock.shipment.internal.report:0"
+msgid "Reference:"
+msgstr "Référence :"
+
+msgctxt "odt:stock.shipment.internal.report:0"
+msgid "To Location"
+msgstr "Emplacement de destination"
+
+msgctxt "odt:stock.shipment.internal.report:0"
+msgid "To Location:"
+msgstr "Emplacement de destination :"
+
+msgctxt "odt:stock.shipment.internal.report:0"
+msgid "VAT Number:"
+msgstr "Numéro TVA :"
+
+msgctxt "odt:stock.shipment.out.delivery_note:0"
+msgid "/"
+msgstr "/"
+
+msgctxt "odt:stock.shipment.out.delivery_note:0"
+msgid "Customer Code:"
+msgstr "Code client :"
+
+msgctxt "odt:stock.shipment.out.delivery_note:0"
+msgid "Date:"
+msgstr "Date :"
+
+msgctxt "odt:stock.shipment.out.delivery_note:0"
+msgid "Delivery Note"
+msgstr "Bon de livraison"
+
+msgctxt "odt:stock.shipment.out.delivery_note:0"
+msgid "E-Mail:"
+msgstr "E-Mail :"
+
+msgctxt "odt:stock.shipment.out.delivery_note:0"
+msgid "Phone:"
+msgstr "Téléphone :"
+
+msgctxt "odt:stock.shipment.out.delivery_note:0"
+msgid "Product"
+msgstr "Produit"
+
+msgctxt "odt:stock.shipment.out.delivery_note:0"
+msgid "Quantity"
+msgstr "Quantité"
+
+msgctxt "odt:stock.shipment.out.delivery_note:0"
+msgid "Reference:"
+msgstr "Référence :"
+
+msgctxt "odt:stock.shipment.out.delivery_note:0"
+msgid "Shipment Number:"
+msgstr "Numéro d'expédition :"
+
+msgctxt "odt:stock.shipment.out.delivery_note:0"
+msgid "VAT Number:"
+msgstr "Numéro TVA :"
+
+msgctxt "odt:stock.shipment.out.picking_list:0"
+msgid "/"
+msgstr "/"
+
+msgctxt "odt:stock.shipment.out.picking_list:0"
+msgid "Code:"
+msgstr "Code :"
+
+msgctxt "odt:stock.shipment.out.picking_list:0"
+msgid "Customer:"
+msgstr "Client :"
+
+msgctxt "odt:stock.shipment.out.picking_list:0"
+msgid "E-Mail:"
+msgstr "E-Mail:"
+
+msgctxt "odt:stock.shipment.out.picking_list:0"
+msgid "From Location"
+msgstr "Emplacement d'origine"
+
+msgctxt "odt:stock.shipment.out.picking_list:0"
+msgid "Phone:"
+msgstr "Téléphone :"
+
+msgctxt "odt:stock.shipment.out.picking_list:0"
+msgid "Picking List"
+msgstr "Liste de prélèvement"
+
+msgctxt "odt:stock.shipment.out.picking_list:0"
+msgid "Planned Date:"
+msgstr "Date planifiée :"
+
+msgctxt "odt:stock.shipment.out.picking_list:0"
+msgid "Product"
+msgstr "Produit"
+
+msgctxt "odt:stock.shipment.out.picking_list:0"
+msgid "Quantity"
+msgstr "Quantité"
+
+msgctxt "odt:stock.shipment.out.picking_list:0"
+msgid "Reference:"
+msgstr "Référence :"
+
+msgctxt "odt:stock.shipment.out.picking_list:0"
+msgid "To Location"
+msgstr "Emplacement de destination"
+
+msgctxt "odt:stock.shipment.out.picking_list:0"
+msgid "VAT Number:"
+msgstr "Numéro TVA :"
+
+msgctxt "odt:stock.shipment.out.picking_list:0"
+msgid "Warehouse:"
+msgstr "Entrepôt :"
+
+msgctxt "odt:stock.shipment.out.return.restocking_list:0"
+msgid "/"
+msgstr "/"
+
+msgctxt "odt:stock.shipment.out.return.restocking_list:0"
+msgid "Code:"
+msgstr "Code :"
+
+msgctxt "odt:stock.shipment.out.return.restocking_list:0"
+msgid "E-Mail:"
+msgstr "E-Mail :"
+
+msgctxt "odt:stock.shipment.out.return.restocking_list:0"
+msgid "From Location"
+msgstr "Emplacement d'origine"
+
+msgctxt "odt:stock.shipment.out.return.restocking_list:0"
+msgid "Phone:"
+msgstr "Téléphone :"
+
+msgctxt "odt:stock.shipment.out.return.restocking_list:0"
+msgid "Planned Date:"
+msgstr "Date planifiée :"
+
+msgctxt "odt:stock.shipment.out.return.restocking_list:0"
+msgid "Product"
+msgstr "Produit"
+
+msgctxt "odt:stock.shipment.out.return.restocking_list:0"
+msgid "Quantity"
+msgstr "Quantité"
+
+msgctxt "odt:stock.shipment.out.return.restocking_list:0"
+msgid "Reference:"
+msgstr "Référence :"
+
+msgctxt "odt:stock.shipment.out.return.restocking_list:0"
+msgid "Restocking List"
+msgstr "Liste de restockage"
+
+msgctxt "odt:stock.shipment.out.return.restocking_list:0"
+msgid "Supplier:"
+msgstr "Fournisseur :"
+
+msgctxt "odt:stock.shipment.out.return.restocking_list:0"
+msgid "To Location"
+msgstr "Emplacement de destination"
+
+msgctxt "odt:stock.shipment.out.return.restocking_list:0"
+msgid "VAT Number:"
+msgstr "Numéro TVA :"
+
+msgctxt "odt:stock.shipment.out.return.restocking_list:0"
+msgid "Warehouse:"
+msgstr "Entrepôt :"
+
+msgctxt "selection:stock.inventory,state:0"
+msgid "Canceled"
+msgstr "Annulé"
+
+msgctxt "selection:stock.inventory,state:0"
+msgid "Done"
+msgstr "Fait"
+
+msgctxt "selection:stock.inventory,state:0"
+msgid "Draft"
+msgstr "Brouillon"
+
+msgctxt "selection:stock.location,type:0"
+msgid "Customer"
+msgstr "Client"
+
+msgctxt "selection:stock.location,type:0"
+msgid "Lost and Found"
+msgstr "Pertes et surplus"
+
+msgctxt "selection:stock.location,type:0"
+msgid "Production"
+msgstr "Production"
+
+msgctxt "selection:stock.location,type:0"
+msgid "Storage"
+msgstr "Magasin"
+
+msgctxt "selection:stock.location,type:0"
+msgid "Supplier"
+msgstr "Fournisseur"
+
+msgctxt "selection:stock.location,type:0"
+msgid "View"
+msgstr "Vue"
+
+msgctxt "selection:stock.location,type:0"
+msgid "Warehouse"
+msgstr "Entrepôt"
+
+msgctxt "selection:stock.move,state:0"
+msgid "Assigned"
+msgstr "Assigné"
+
+msgctxt "selection:stock.move,state:0"
+msgid "Canceled"
+msgstr "Annulé"
+
+msgctxt "selection:stock.move,state:0"
+msgid "Done"
+msgstr "Fait"
+
+msgctxt "selection:stock.move,state:0"
+msgid "Draft"
+msgstr "Brouillon"
+
+msgctxt "selection:stock.period,state:0"
+msgid "Closed"
+msgstr "Fermé"
+
+msgctxt "selection:stock.period,state:0"
+msgid "Draft"
+msgstr "Brouillon"
+
+msgctxt "selection:stock.shipment.in,state:0"
+msgid "Canceled"
+msgstr "Annulé"
+
+msgctxt "selection:stock.shipment.in,state:0"
+msgid "Done"
+msgstr "Fait"
+
+msgctxt "selection:stock.shipment.in,state:0"
+msgid "Draft"
+msgstr "Brouillon"
+
+msgctxt "selection:stock.shipment.in,state:0"
+msgid "Received"
+msgstr "Reçu"
+
+msgctxt "selection:stock.shipment.in.return,state:0"
+msgid "Assigned"
+msgstr "Assigné"
+
+msgctxt "selection:stock.shipment.in.return,state:0"
+msgid "Canceled"
+msgstr "Annuler"
+
+msgctxt "selection:stock.shipment.in.return,state:0"
+msgid "Done"
+msgstr "Fait"
+
+msgctxt "selection:stock.shipment.in.return,state:0"
+msgid "Draft"
+msgstr "Brouillon"
+
+msgctxt "selection:stock.shipment.in.return,state:0"
+msgid "Waiting"
+msgstr "En attente"
+
+msgctxt "selection:stock.shipment.internal,state:0"
+msgid "Assigned"
+msgstr "Assigné"
+
+msgctxt "selection:stock.shipment.internal,state:0"
+msgid "Canceled"
+msgstr "Annulé"
+
+msgctxt "selection:stock.shipment.internal,state:0"
+msgid "Done"
+msgstr "Fait"
+
+msgctxt "selection:stock.shipment.internal,state:0"
+msgid "Draft"
+msgstr "Brouillon"
+
+msgctxt "selection:stock.shipment.internal,state:0"
+msgid "Waiting"
+msgstr "En attente"
+
+msgctxt "selection:stock.shipment.out,state:0"
+msgid "Assigned"
+msgstr "Assigné"
+
+msgctxt "selection:stock.shipment.out,state:0"
+msgid "Canceled"
+msgstr "Annulé"
+
+msgctxt "selection:stock.shipment.out,state:0"
+msgid "Done"
+msgstr "Fait"
+
+msgctxt "selection:stock.shipment.out,state:0"
+msgid "Draft"
+msgstr "Brouillon"
+
+msgctxt "selection:stock.shipment.out,state:0"
+msgid "Packed"
+msgstr "Emballé"
+
+msgctxt "selection:stock.shipment.out,state:0"
+msgid "Waiting"
+msgstr "En attente"
+
+msgctxt "selection:stock.shipment.out.return,state:0"
+msgid "Canceled"
+msgstr "Annulé"
+
+msgctxt "selection:stock.shipment.out.return,state:0"
+msgid "Done"
+msgstr "Fait"
+
+msgctxt "selection:stock.shipment.out.return,state:0"
+msgid "Draft"
+msgstr "Brouillon"
+
+msgctxt "selection:stock.shipment.out.return,state:0"
+msgid "Received"
+msgstr "Reçu"
+
+msgctxt "view:party.party:0"
+msgid "Stock"
+msgstr "Stock"
+
+msgctxt "view:party.party:0"
+msgid "_Stock"
+msgstr "_Stocks"
+
+msgctxt "view:product.product:0"
+msgid "Products"
+msgstr "Produits"
+
+msgctxt "view:stock.configuration:0"
+msgid "Stock Configuration"
+msgstr "Configuration des stocks"
+
+msgctxt "view:stock.inventory.line:0"
+msgid "Inventory Line"
+msgstr "Ligne d'inventaire"
+
+msgctxt "view:stock.inventory.line:0"
+msgid "Inventory Lines"
+msgstr "Lignes d'inventaire"
+
+msgctxt "view:stock.inventory:0"
+msgid "Add an inventory line for each missing products"
+msgstr "Ajouter une ligne d'inventaire pour chaque produit manquant"
+
+msgctxt "view:stock.inventory:0"
+msgid "All generated moves will be cancelled!"
+msgstr "Tous les mouvements générés vont être annulés"
+
+msgctxt "view:stock.inventory:0"
+msgid "Cancel"
+msgstr "Annuler"
+
+msgctxt "view:stock.inventory:0"
+msgid "Complete Inventory"
+msgstr "Compléter l'inventaire"
+
+msgctxt "view:stock.inventory:0"
+msgid "Confirm"
+msgstr "Confirmer"
+
+msgctxt "view:stock.inventory:0"
+msgid "Inventories"
+msgstr "Inventaires"
+
+msgctxt "view:stock.inventory:0"
+msgid "Inventory"
+msgstr "Inventaire"
+
+msgctxt "view:stock.inventory:0"
+msgid "Re-Open"
+msgstr "Ré-Ouvrir"
+
+msgctxt "view:stock.location:0"
+msgid "Location"
+msgstr "Emplacement"
+
+msgctxt "view:stock.location:0"
+msgid "Locations"
+msgstr "Emplacements"
+
+msgctxt "view:stock.location:0"
+msgid "Product Stock"
+msgstr "Quantités en stock"
+
+msgctxt "view:stock.location_stock_date.init:0"
+msgid "Product Quantity."
+msgstr "Quantité de produit"
+
+msgctxt "view:stock.move:0"
+msgid "Move"
+msgstr "Mouvement"
+
+msgctxt "view:stock.move:0"
+msgid "Moves"
+msgstr "Mouvements"
+
+msgctxt "view:stock.period.cache:0"
+msgid "Period Cache"
+msgstr "Cache de la période"
+
+msgctxt "view:stock.period.cache:0"
+msgid "Period Caches"
+msgstr "Caches des périodes"
+
+msgctxt "view:stock.period:0"
+msgid "Close"
+msgstr "Fermer"
+
+msgctxt "view:stock.period:0"
+msgid "Draft"
+msgstr "Brouillon"
+
+msgctxt "view:stock.period:0"
+msgid "Period"
+msgstr "Période"
+
+msgctxt "view:stock.period:0"
+msgid "Periods"
+msgstr "Périodes"
+
+msgctxt "view:stock.product_stock_date.init:0"
+msgid "Product Quantity."
+msgstr "Quantité Produit :"
+
+msgctxt "view:stock.shipment.in.return.assign.assign_failed:0"
+msgid "Moves"
+msgstr "Mouvements"
+
+msgctxt "view:stock.shipment.in.return.assign.assign_failed:0"
+msgid "Unable to Assign"
+msgstr "Impossible d'assigner"
+
+msgctxt "view:stock.shipment.in.return.assign.assign_failed:0"
+msgid "Unable to assign those products:"
+msgstr "Impossible d'assigner ces produits :"
+
+msgctxt "view:stock.shipment.in.return:0"
+msgid "Assign"
+msgstr "Assigner"
+
+msgctxt "view:stock.shipment.in.return:0"
+msgid "Cancel"
+msgstr "Annuler"
+
+msgctxt "view:stock.shipment.in.return:0"
+msgid "Done"
+msgstr "Fait"
+
+msgctxt "view:stock.shipment.in.return:0"
+msgid "Draft"
+msgstr "Brouillon"
+
+msgctxt "view:stock.shipment.in.return:0"
+msgid "Reset to Draft"
+msgstr "Remettre en brouillon"
+
+msgctxt "view:stock.shipment.in.return:0"
+msgid "Supplier Return Shipment"
+msgstr "Retour d'expédition fournisseur"
+
+msgctxt "view:stock.shipment.in.return:0"
+msgid "Supplier Return Shipments"
+msgstr "Retours d'expédition fournisseur"
+
+msgctxt "view:stock.shipment.in.return:0"
+msgid "Waiting"
+msgstr "En attente"
+
+msgctxt "view:stock.shipment.in:0"
+msgid "Cancel"
+msgstr "Annuler"
+
+msgctxt "view:stock.shipment.in:0"
+msgid "Done"
+msgstr "Fait"
+
+msgctxt "view:stock.shipment.in:0"
+msgid "Draft"
+msgstr "Brouillon"
+
+msgctxt "view:stock.shipment.in:0"
+msgid "Incoming Moves"
+msgstr "Mouvements en entrée"
+
+msgctxt "view:stock.shipment.in:0"
+msgid "Inventory Moves"
+msgstr "Mouvements internes"
+
+msgctxt "view:stock.shipment.in:0"
+msgid "Moves"
+msgstr "Mouvements"
+
+msgctxt "view:stock.shipment.in:0"
+msgid "Received"
+msgstr "Réception"
+
+msgctxt "view:stock.shipment.in:0"
+msgid "Reset to Draft"
+msgstr "Remettre en brouillon"
+
+msgctxt "view:stock.shipment.in:0"
+msgid "Supplier Shipment"
+msgstr "Expédition fournisseur"
+
+msgctxt "view:stock.shipment.in:0"
+msgid "Supplier Shipments"
+msgstr "Expéditions fournisseur"
+
+msgctxt "view:stock.shipment.internal.assign.assign_failed:0"
+msgid "Moves"
+msgstr "Mouvements"
+
+msgctxt "view:stock.shipment.internal.assign.assign_failed:0"
+msgid "Unable to Assign"
+msgstr "Impossible d'assigner"
+
+msgctxt "view:stock.shipment.internal.assign.assign_failed:0"
+msgid "Unable to assign those products:"
+msgstr "Impossible d'assigner ces produits :"
+
+msgctxt "view:stock.shipment.internal:0"
+msgid "Assign"
+msgstr "Assigner"
+
+msgctxt "view:stock.shipment.internal:0"
+msgid "Cancel"
+msgstr "Annuler"
+
+msgctxt "view:stock.shipment.internal:0"
+msgid "Done"
+msgstr "Fait"
+
+msgctxt "view:stock.shipment.internal:0"
+msgid "Draft"
+msgstr "Brouillon"
+
+msgctxt "view:stock.shipment.internal:0"
+msgid "Force Assign"
+msgstr "Forcer l'assignation"
+
+msgctxt "view:stock.shipment.internal:0"
+msgid "Internal Shipment"
+msgstr "Expédition interne"
+
+msgctxt "view:stock.shipment.internal:0"
+msgid "Internal Shipments"
+msgstr "Expéditions internes"
+
+msgctxt "view:stock.shipment.internal:0"
+msgid "Reset to Draft"
+msgstr "Remettre en brouillon"
+
+msgctxt "view:stock.shipment.internal:0"
+msgid "Waiting"
+msgstr "En attente"
+
+msgctxt "view:stock.shipment.out.assign.assign_failed:0"
+msgid "Inventory Moves"
+msgstr "Mouvements internes"
+
+msgctxt "view:stock.shipment.out.assign.assign_failed:0"
+msgid "Unable to Assign"
+msgstr "Impossible d'assigner"
+
+msgctxt "view:stock.shipment.out.assign.assign_failed:0"
+msgid "Unable to assign those products:"
+msgstr "Impossible d'assigner ces produits :"
+
+msgctxt "view:stock.shipment.out.return:0"
+msgid "Cancel"
+msgstr "Annuler"
+
+msgctxt "view:stock.shipment.out.return:0"
+msgid "Customer Return Shipment"
+msgstr "Retour d'expédition client"
+
+msgctxt "view:stock.shipment.out.return:0"
+msgid "Customer Return Shipments"
+msgstr "Retours d'expédition client"
+
+msgctxt "view:stock.shipment.out.return:0"
+msgid "Done"
+msgstr "Fait"
+
+msgctxt "view:stock.shipment.out.return:0"
+msgid "Incoming Moves"
+msgstr "Mouvements entrants"
+
+msgctxt "view:stock.shipment.out.return:0"
+msgid "Inventory Moves"
+msgstr "Mouvements internes"
+
+msgctxt "view:stock.shipment.out.return:0"
+msgid "Moves"
+msgstr "Mouvements"
+
+msgctxt "view:stock.shipment.out.return:0"
+msgid "Received"
+msgstr "Reçu"
+
+msgctxt "view:stock.shipment.out.return:0"
+msgid "Reset to Draft"
+msgstr "Remettre en brouillon"
+
+msgctxt "view:stock.shipment.out:0"
+msgid "Are you sure to force assignation?"
+msgstr "Ãtes-vous sûr de forcer l'assignation ?"
+
+msgctxt "view:stock.shipment.out:0"
+msgid "Assign"
+msgstr "Assigner"
+
+msgctxt "view:stock.shipment.out:0"
+msgid "Cancel"
+msgstr "Annuler"
+
+msgctxt "view:stock.shipment.out:0"
+msgid "Customer Shipment"
+msgstr "Expédition client"
+
+msgctxt "view:stock.shipment.out:0"
+msgid "Customer Shipments"
+msgstr "Expéditions client"
+
+msgctxt "view:stock.shipment.out:0"
+msgid "Done"
+msgstr "Fait"
+
+msgctxt "view:stock.shipment.out:0"
+msgid "Draft"
+msgstr "Brouillon"
+
+msgctxt "view:stock.shipment.out:0"
+msgid "Force Assign"
+msgstr "Forcer l'assignation"
+
+msgctxt "view:stock.shipment.out:0"
+msgid "Inventory Moves"
+msgstr "Mouvements internes"
+
+msgctxt "view:stock.shipment.out:0"
+msgid "Make shipment"
+msgstr "Faire l'expédition"
+
+msgctxt "view:stock.shipment.out:0"
+msgid "Outgoing Moves"
+msgstr "Mouvements en sortie"
+
+msgctxt "view:stock.shipment.out:0"
+msgid "Reset to Draft"
+msgstr "Remettre en brouillon"
+
+msgctxt "view:stock.shipment.out:0"
+msgid "Unpack"
+msgstr "Déballer"
+
+msgctxt "view:stock.shipment.out:0"
+msgid "Waiting"
+msgstr "En attente"
+
+msgctxt "wizard_button:stock.location.open,init,end:0"
+msgid "Cancel"
+msgstr "Annuler"
+
+msgctxt "wizard_button:stock.location.open,init,open:0"
+msgid "Open"
+msgstr "Ouvrir"
+
+msgctxt "wizard_button:stock.product.open,init,end:0"
+msgid "Cancel"
+msgstr "Annuler"
+
+msgctxt "wizard_button:stock.product.open,init,open:0"
+msgid "Open"
+msgstr "Ouvrir"
+
+msgctxt "wizard_button:stock.shipment.in.return.assign,ask_force,end:0"
+msgid "Ok"
+msgstr "Ok"
+
+msgctxt "wizard_button:stock.shipment.in.return.assign,ask_force,force:0"
+msgid "Force Assign"
+msgstr "Forcer l'assignation"
+
+msgctxt "wizard_button:stock.shipment.in.return.assign,assign_failed,end:0"
+msgid "Ok"
+msgstr "Ok"
+
+msgctxt "wizard_button:stock.shipment.internal.assign,ask_force,end:0"
+msgid "Ok"
+msgstr "Ok"
+
+msgctxt "wizard_button:stock.shipment.internal.assign,ask_force,force:0"
+msgid "Force Assign"
+msgstr "Forcer l'assignation"
+
+msgctxt "wizard_button:stock.shipment.internal.assign,assign_failed,end:0"
+msgid "Ok"
+msgstr "Ok"
+
+msgctxt "wizard_button:stock.shipment.out.assign,ask_force,end:0"
+msgid "Ok"
+msgstr "Ok"
+
+msgctxt "wizard_button:stock.shipment.out.assign,ask_force,force:0"
+msgid "Force Assign"
+msgstr "Forcer l'assignation"
+
+msgctxt "wizard_button:stock.shipment.out.assign,assign_failed,end:0"
+msgid "Ok"
+msgstr "Ok"
diff --git a/locale/nl_NL.po b/locale/nl_NL.po
new file mode 100644
index 0000000..4eb6b2d
--- /dev/null
+++ b/locale/nl_NL.po
@@ -0,0 +1,2254 @@
+#
+msgid ""
+msgstr "Content-Type: text/plain; charset=utf-8\n"
+
+msgctxt "error:product.template:0"
+msgid ""
+"You cannot change the default uom for a product which is associated to stock"
+" moves."
+msgstr ""
+
+msgctxt "error:stock.inventory.line:0"
+msgid "Line quantity must be positive!"
+msgstr ""
+
+msgctxt "error:stock.inventory.line:0"
+msgid "Product must be unique by inventory!"
+msgstr ""
+
+msgctxt "error:stock.location:0"
+msgid ""
+"A location with existing moves cannot be changed to a type that does not "
+"support moves."
+msgstr ""
+
+msgctxt "error:stock.location:0"
+msgid "Location \"%s\" must be a child of warehouse \"%s\"!"
+msgstr ""
+
+msgctxt "error:stock.location:0"
+msgid "You can not create recursive locations!"
+msgstr ""
+
+msgctxt "error:stock.move:0"
+msgid "Internal move quantity must be positive"
+msgstr ""
+
+msgctxt "error:stock.move:0"
+msgid "Move can be on only one Shipment"
+msgstr ""
+
+msgctxt "error:stock.move:0"
+msgid "Move quantity must be positive"
+msgstr ""
+
+msgctxt "error:stock.move:0"
+msgid "Source and destination location must be different"
+msgstr ""
+
+msgctxt "error:stock.move:0"
+msgid "You can not modify a move in the state: \"Assigned\", \"Done\" or \"Cancel\""
+msgstr ""
+
+msgctxt "error:stock.move:0"
+msgid "You can not modify move in closed period!"
+msgstr ""
+
+msgctxt "error:stock.move:0"
+msgid "You can not set state to assigned!"
+msgstr ""
+
+msgctxt "error:stock.move:0"
+msgid "You can not set state to done!"
+msgstr ""
+
+msgctxt "error:stock.move:0"
+msgid "You can not set state to draft!"
+msgstr ""
+
+msgctxt "error:stock.move:0"
+msgid "You can not use service products for a move!"
+msgstr ""
+
+msgctxt "error:stock.move:0"
+msgid "You can only delete draft or cancelled moves!"
+msgstr ""
+
+msgctxt "error:stock.period:0"
+msgid "You can not close a period in the future or today!"
+msgstr ""
+
+msgctxt "error:stock.period:0"
+msgid "You can not close a period when there is still assigned moves!"
+msgstr ""
+
+msgctxt "error:stock.shipment.in:0"
+msgid ""
+"Incoming Moves must have the warehouse input location as destination "
+"location!"
+msgstr ""
+
+msgctxt "error:stock.shipment.in:0"
+msgid ""
+"Inventory Moves must have the warehouse input location as source location!"
+msgstr ""
+
+msgctxt "error:stock.shipment.out.return.create:0"
+msgid "The shipment with code %s is not yet sent."
+msgstr ""
+
+msgctxt "error:stock.shipment.out.return.create:0"
+msgid "You can not create return shipment"
+msgstr ""
+
+msgctxt "error:stock.shipment.out.return:0"
+msgid ""
+"Incoming Moves must have the warehouse input location as destination "
+"location!"
+msgstr ""
+
+msgctxt "error:stock.shipment.out.return:0"
+msgid ""
+"Inventory Moves must have the warehouse input location as source location!"
+msgstr ""
+
+msgctxt "error:stock.shipment.out:0"
+msgid ""
+"Inventory Moves must have the warehouse output location as destination "
+"location!"
+msgstr ""
+
+msgctxt "error:stock.shipment.out:0"
+msgid ""
+"Outgoing Moves must have the warehouse output location as source location!"
+msgstr ""
+
+msgctxt "field:party.address,delivery:0"
+msgid "Delivery"
+msgstr ""
+
+msgctxt "field:party.party,customer_location:0"
+msgid "Customer Location"
+msgstr ""
+
+msgctxt "field:party.party,supplier_location:0"
+msgid "Supplier Location"
+msgstr ""
+
+msgctxt "field:product.product,forecast_quantity:0"
+msgid "Forecast Quantity"
+msgstr ""
+
+#, fuzzy
+msgctxt "field:product.product,quantity:0"
+msgid "Quantity"
+msgstr "Hoeveelheid"
+
+msgctxt "field:product.template,forecast_quantity:0"
+msgid "Forecast Quantity"
+msgstr ""
+
+#, fuzzy
+msgctxt "field:product.template,quantity:0"
+msgid "Quantity"
+msgstr "Hoeveelheid"
+
+#, fuzzy
+msgctxt "field:stock.configuration,rec_name:0"
+msgid "Name"
+msgstr "Naam bijlage"
+
+msgctxt "field:stock.configuration,shipment_in_return_sequence:0"
+msgid "Supplier Return Shipment Sequence"
+msgstr ""
+
+msgctxt "field:stock.configuration,shipment_in_sequence:0"
+msgid "Supplier Shipment Sequence"
+msgstr ""
+
+msgctxt "field:stock.configuration,shipment_internal_sequence:0"
+msgid "Internal Shipment Sequence"
+msgstr ""
+
+msgctxt "field:stock.configuration,shipment_out_return_sequence:0"
+msgid "Customer Return Shipment Sequence"
+msgstr ""
+
+msgctxt "field:stock.configuration,shipment_out_sequence:0"
+msgid "Customer Shipment Sequence"
+msgstr ""
+
+#, fuzzy
+msgctxt "field:stock.inventory,company:0"
+msgid "Company"
+msgstr "Bedrijf"
+
+#, fuzzy
+msgctxt "field:stock.inventory,date:0"
+msgid "Date"
+msgstr "Vervaldatum"
+
+#, fuzzy
+msgctxt "field:stock.inventory,lines:0"
+msgid "Lines"
+msgstr "Regels"
+
+msgctxt "field:stock.inventory,location:0"
+msgid "Location"
+msgstr ""
+
+msgctxt "field:stock.inventory,lost_found:0"
+msgid "Lost and Found"
+msgstr ""
+
+#, fuzzy
+msgctxt "field:stock.inventory,rec_name:0"
+msgid "Name"
+msgstr "Naam bijlage"
+
+#, fuzzy
+msgctxt "field:stock.inventory,state:0"
+msgid "State"
+msgstr "Status"
+
+msgctxt "field:stock.inventory.line,expected_quantity:0"
+msgid "Expected Quantity"
+msgstr ""
+
+msgctxt "field:stock.inventory.line,inventory:0"
+msgid "Inventory"
+msgstr ""
+
+#, fuzzy
+msgctxt "field:stock.inventory.line,move:0"
+msgid "Move"
+msgstr "Boeking"
+
+#, fuzzy
+msgctxt "field:stock.inventory.line,product:0"
+msgid "Product"
+msgstr "Producten"
+
+#, fuzzy
+msgctxt "field:stock.inventory.line,quantity:0"
+msgid "Quantity"
+msgstr "Hoeveelheid"
+
+#, fuzzy
+msgctxt "field:stock.inventory.line,rec_name:0"
+msgid "Name"
+msgstr "Naam bijlage"
+
+#, fuzzy
+msgctxt "field:stock.inventory.line,unit_digits:0"
+msgid "Unit Digits"
+msgstr "Decimalen eenheid"
+
+msgctxt "field:stock.inventory.line,uom:0"
+msgid "UOM"
+msgstr ""
+
+#, fuzzy
+msgctxt "field:stock.location,active:0"
+msgid "Active"
+msgstr "Actief"
+
+#, fuzzy
+msgctxt "field:stock.location,address:0"
+msgid "Address"
+msgstr "Adres"
+
+#, fuzzy
+msgctxt "field:stock.location,childs:0"
+msgid "Children"
+msgstr "Onderliggende niveaus"
+
+#, fuzzy
+msgctxt "field:stock.location,code:0"
+msgid "Code"
+msgstr "Code"
+
+msgctxt "field:stock.location,forecast_quantity:0"
+msgid "Forecast Quantity"
+msgstr ""
+
+msgctxt "field:stock.location,input_location:0"
+msgid "Input"
+msgstr ""
+
+#, fuzzy
+msgctxt "field:stock.location,left:0"
+msgid "Left"
+msgstr "Links"
+
+#, fuzzy
+msgctxt "field:stock.location,name:0"
+msgid "Name"
+msgstr "Naam bijlage"
+
+msgctxt "field:stock.location,output_location:0"
+msgid "Output"
+msgstr ""
+
+#, fuzzy
+msgctxt "field:stock.location,parent:0"
+msgid "Parent"
+msgstr "Bovenliggend niveau"
+
+#, fuzzy
+msgctxt "field:stock.location,quantity:0"
+msgid "Quantity"
+msgstr "Hoeveelheid"
+
+#, fuzzy
+msgctxt "field:stock.location,rec_name:0"
+msgid "Name"
+msgstr "Naam bijlage"
+
+#, fuzzy
+msgctxt "field:stock.location,right:0"
+msgid "Right"
+msgstr "Rechts"
+
+msgctxt "field:stock.location,storage_location:0"
+msgid "Storage"
+msgstr ""
+
+msgctxt "field:stock.location,type:0"
+msgid "Location type"
+msgstr ""
+
+msgctxt "field:stock.location_stock_date.init,forecast_date:0"
+msgid "At Date"
+msgstr ""
+
+#, fuzzy
+msgctxt "field:stock.move,company:0"
+msgid "Company"
+msgstr "Bedrijf"
+
+#, fuzzy
+msgctxt "field:stock.move,cost_price:0"
+msgid "Cost Price"
+msgstr "Kostprijs"
+
+#, fuzzy
+msgctxt "field:stock.move,currency:0"
+msgid "Currency"
+msgstr "Valuta"
+
+#, fuzzy
+msgctxt "field:stock.move,effective_date:0"
+msgid "Effective Date"
+msgstr "Effectieve datum"
+
+msgctxt "field:stock.move,from_location:0"
+msgid "From Location"
+msgstr ""
+
+msgctxt "field:stock.move,internal_quantity:0"
+msgid "Internal Quantity"
+msgstr ""
+
+msgctxt "field:stock.move,planned_date:0"
+msgid "Planned Date"
+msgstr ""
+
+#, fuzzy
+msgctxt "field:stock.move,product:0"
+msgid "Product"
+msgstr "Producten"
+
+#, fuzzy
+msgctxt "field:stock.move,quantity:0"
+msgid "Quantity"
+msgstr "Hoeveelheid"
+
+#, fuzzy
+msgctxt "field:stock.move,rec_name:0"
+msgid "Name"
+msgstr "Naam bijlage"
+
+msgctxt "field:stock.move,shipment_in:0"
+msgid "Supplier Shipment"
+msgstr ""
+
+msgctxt "field:stock.move,shipment_in_return:0"
+msgid "Supplier Return Shipment"
+msgstr ""
+
+msgctxt "field:stock.move,shipment_internal:0"
+msgid "Internal Shipment"
+msgstr ""
+
+msgctxt "field:stock.move,shipment_out:0"
+msgid "Customer Shipment"
+msgstr ""
+
+msgctxt "field:stock.move,shipment_out_return:0"
+msgid "Customer Return Shipment"
+msgstr ""
+
+#, fuzzy
+msgctxt "field:stock.move,state:0"
+msgid "State"
+msgstr "Status"
+
+msgctxt "field:stock.move,to_location:0"
+msgid "To Location"
+msgstr ""
+
+#, fuzzy
+msgctxt "field:stock.move,unit_digits:0"
+msgid "Unit Digits"
+msgstr "Decimalen eenheid"
+
+#, fuzzy
+msgctxt "field:stock.move,unit_price:0"
+msgid "Unit Price"
+msgstr "Eenheidsprijs"
+
+msgctxt "field:stock.move,unit_price_required:0"
+msgid "Unit Price Required"
+msgstr ""
+
+msgctxt "field:stock.move,uom:0"
+msgid "Uom"
+msgstr ""
+
+msgctxt "field:stock.period,caches:0"
+msgid "Caches"
+msgstr ""
+
+#, fuzzy
+msgctxt "field:stock.period,company:0"
+msgid "Company"
+msgstr "Bedrijf"
+
+#, fuzzy
+msgctxt "field:stock.period,date:0"
+msgid "Date"
+msgstr "Vervaldatum"
+
+#, fuzzy
+msgctxt "field:stock.period,rec_name:0"
+msgid "Name"
+msgstr "Naam bijlage"
+
+#, fuzzy
+msgctxt "field:stock.period,state:0"
+msgid "State"
+msgstr "Status"
+
+msgctxt "field:stock.period.cache,internal_quantity:0"
+msgid "Internal Quantity"
+msgstr ""
+
+msgctxt "field:stock.period.cache,location:0"
+msgid "Location"
+msgstr ""
+
+#, fuzzy
+msgctxt "field:stock.period.cache,period:0"
+msgid "Period"
+msgstr "Periode"
+
+#, fuzzy
+msgctxt "field:stock.period.cache,product:0"
+msgid "Product"
+msgstr "Producten"
+
+#, fuzzy
+msgctxt "field:stock.period.cache,rec_name:0"
+msgid "Name"
+msgstr "Naam bijlage"
+
+msgctxt "field:stock.product_stock_date.init,forecast_date:0"
+msgid "At Date"
+msgstr ""
+
+#, fuzzy
+msgctxt "field:stock.shipment.in,code:0"
+msgid "Code"
+msgstr "Code"
+
+#, fuzzy
+msgctxt "field:stock.shipment.in,company:0"
+msgid "Company"
+msgstr "Bedrijf"
+
+msgctxt "field:stock.shipment.in,contact_address:0"
+msgid "Contact Address"
+msgstr ""
+
+#, fuzzy
+msgctxt "field:stock.shipment.in,effective_date:0"
+msgid "Effective Date"
+msgstr "Effectieve datum"
+
+msgctxt "field:stock.shipment.in,incoming_moves:0"
+msgid "Incoming Moves"
+msgstr ""
+
+msgctxt "field:stock.shipment.in,inventory_moves:0"
+msgid "Inventory Moves"
+msgstr ""
+
+#, fuzzy
+msgctxt "field:stock.shipment.in,moves:0"
+msgid "Moves"
+msgstr "Boekingen"
+
+msgctxt "field:stock.shipment.in,planned_date:0"
+msgid "Planned Date"
+msgstr ""
+
+#, fuzzy
+msgctxt "field:stock.shipment.in,rec_name:0"
+msgid "Name"
+msgstr "Naam bijlage"
+
+#, fuzzy
+msgctxt "field:stock.shipment.in,reference:0"
+msgid "Reference"
+msgstr "Referentie"
+
+#, fuzzy
+msgctxt "field:stock.shipment.in,state:0"
+msgid "State"
+msgstr "Status"
+
+#, fuzzy
+msgctxt "field:stock.shipment.in,supplier:0"
+msgid "Supplier"
+msgstr "Leverancier"
+
+#, fuzzy
+msgctxt "field:stock.shipment.in,warehouse:0"
+msgid "Warehouse"
+msgstr "Magazijn"
+
+#, fuzzy
+msgctxt "field:stock.shipment.in.return,code:0"
+msgid "Code"
+msgstr "Code"
+
+#, fuzzy
+msgctxt "field:stock.shipment.in.return,company:0"
+msgid "Company"
+msgstr "Bedrijf"
+
+#, fuzzy
+msgctxt "field:stock.shipment.in.return,effective_date:0"
+msgid "Effective Date"
+msgstr "Effectieve datum"
+
+msgctxt "field:stock.shipment.in.return,from_location:0"
+msgid "From Location"
+msgstr ""
+
+#, fuzzy
+msgctxt "field:stock.shipment.in.return,moves:0"
+msgid "Moves"
+msgstr "Boekingen"
+
+msgctxt "field:stock.shipment.in.return,planned_date:0"
+msgid "Planned Date"
+msgstr ""
+
+#, fuzzy
+msgctxt "field:stock.shipment.in.return,rec_name:0"
+msgid "Name"
+msgstr "Naam bijlage"
+
+#, fuzzy
+msgctxt "field:stock.shipment.in.return,reference:0"
+msgid "Reference"
+msgstr "Referentie"
+
+#, fuzzy
+msgctxt "field:stock.shipment.in.return,state:0"
+msgid "State"
+msgstr "Status"
+
+msgctxt "field:stock.shipment.in.return,to_location:0"
+msgid "To Location"
+msgstr ""
+
+#, fuzzy
+msgctxt "field:stock.shipment.in.return.assign.assign_failed,moves:0"
+msgid "Moves"
+msgstr "Boekingen"
+
+#, fuzzy
+msgctxt "field:stock.shipment.internal,code:0"
+msgid "Code"
+msgstr "Code"
+
+#, fuzzy
+msgctxt "field:stock.shipment.internal,company:0"
+msgid "Company"
+msgstr "Bedrijf"
+
+#, fuzzy
+msgctxt "field:stock.shipment.internal,effective_date:0"
+msgid "Effective Date"
+msgstr "Effectieve datum"
+
+msgctxt "field:stock.shipment.internal,from_location:0"
+msgid "From Location"
+msgstr ""
+
+#, fuzzy
+msgctxt "field:stock.shipment.internal,moves:0"
+msgid "Moves"
+msgstr "Boekingen"
+
+msgctxt "field:stock.shipment.internal,planned_date:0"
+msgid "Planned Date"
+msgstr ""
+
+#, fuzzy
+msgctxt "field:stock.shipment.internal,rec_name:0"
+msgid "Name"
+msgstr "Naam bijlage"
+
+#, fuzzy
+msgctxt "field:stock.shipment.internal,reference:0"
+msgid "Reference"
+msgstr "Referentie"
+
+#, fuzzy
+msgctxt "field:stock.shipment.internal,state:0"
+msgid "State"
+msgstr "Status"
+
+msgctxt "field:stock.shipment.internal,to_location:0"
+msgid "To Location"
+msgstr ""
+
+#, fuzzy
+msgctxt "field:stock.shipment.internal.assign.assign_failed,moves:0"
+msgid "Moves"
+msgstr "Boekingen"
+
+#, fuzzy
+msgctxt "field:stock.shipment.out,code:0"
+msgid "Code"
+msgstr "Code"
+
+#, fuzzy
+msgctxt "field:stock.shipment.out,company:0"
+msgid "Company"
+msgstr "Bedrijf"
+
+#, fuzzy
+msgctxt "field:stock.shipment.out,customer:0"
+msgid "Customer"
+msgstr "Klant"
+
+msgctxt "field:stock.shipment.out,delivery_address:0"
+msgid "Delivery Address"
+msgstr ""
+
+#, fuzzy
+msgctxt "field:stock.shipment.out,effective_date:0"
+msgid "Effective Date"
+msgstr "Effectieve datum"
+
+msgctxt "field:stock.shipment.out,inventory_moves:0"
+msgid "Inventory Moves"
+msgstr ""
+
+#, fuzzy
+msgctxt "field:stock.shipment.out,moves:0"
+msgid "Moves"
+msgstr "Boekingen"
+
+msgctxt "field:stock.shipment.out,outgoing_moves:0"
+msgid "Outgoing Moves"
+msgstr ""
+
+msgctxt "field:stock.shipment.out,planned_date:0"
+msgid "Planned Date"
+msgstr ""
+
+#, fuzzy
+msgctxt "field:stock.shipment.out,rec_name:0"
+msgid "Name"
+msgstr "Naam bijlage"
+
+#, fuzzy
+msgctxt "field:stock.shipment.out,reference:0"
+msgid "Reference"
+msgstr "Referentie"
+
+#, fuzzy
+msgctxt "field:stock.shipment.out,state:0"
+msgid "State"
+msgstr "Status"
+
+#, fuzzy
+msgctxt "field:stock.shipment.out,warehouse:0"
+msgid "Warehouse"
+msgstr "Magazijn"
+
+msgctxt "field:stock.shipment.out.assign.assign_failed,inventory_moves:0"
+msgid "Inventory Moves"
+msgstr ""
+
+#, fuzzy
+msgctxt "field:stock.shipment.out.return,code:0"
+msgid "Code"
+msgstr "Code"
+
+#, fuzzy
+msgctxt "field:stock.shipment.out.return,company:0"
+msgid "Company"
+msgstr "Bedrijf"
+
+#, fuzzy
+msgctxt "field:stock.shipment.out.return,customer:0"
+msgid "Customer"
+msgstr "Klant"
+
+msgctxt "field:stock.shipment.out.return,delivery_address:0"
+msgid "Delivery Address"
+msgstr ""
+
+#, fuzzy
+msgctxt "field:stock.shipment.out.return,effective_date:0"
+msgid "Effective Date"
+msgstr "Effectieve datum"
+
+msgctxt "field:stock.shipment.out.return,incoming_moves:0"
+msgid "Incoming Moves"
+msgstr ""
+
+msgctxt "field:stock.shipment.out.return,inventory_moves:0"
+msgid "Inventory Moves"
+msgstr ""
+
+#, fuzzy
+msgctxt "field:stock.shipment.out.return,moves:0"
+msgid "Moves"
+msgstr "Boekingen"
+
+msgctxt "field:stock.shipment.out.return,planned_date:0"
+msgid "Planned Date"
+msgstr ""
+
+#, fuzzy
+msgctxt "field:stock.shipment.out.return,rec_name:0"
+msgid "Name"
+msgstr "Naam bijlage"
+
+#, fuzzy
+msgctxt "field:stock.shipment.out.return,reference:0"
+msgid "Reference"
+msgstr "Referentie"
+
+#, fuzzy
+msgctxt "field:stock.shipment.out.return,state:0"
+msgid "State"
+msgstr "Status"
+
+#, fuzzy
+msgctxt "field:stock.shipment.out.return,warehouse:0"
+msgid "Warehouse"
+msgstr "Magazijn"
+
+msgctxt "help:party.party,customer_location:0"
+msgid "The default destination location when sending products to the party."
+msgstr ""
+
+msgctxt "help:party.party,supplier_location:0"
+msgid "The default source location when receiving products from the party."
+msgstr ""
+
+msgctxt "help:stock.location_stock_date.init,forecast_date:0"
+msgid ""
+"Allow to compute expected stock quantities for this date.\n"
+"* An empty value is an infinite date in the future.\n"
+"* A date in the past will provide historical values."
+msgstr ""
+
+msgctxt "help:stock.product_stock_date.init,forecast_date:0"
+msgid ""
+"Allow to compute expected stock quantities for this date.\n"
+"* An empty value is an infinite date in the future.\n"
+"* A date in the past will provide historical values."
+msgstr ""
+
+msgctxt "model:ir.action,name:act_inventory_form"
+msgid "Inventories"
+msgstr ""
+
+msgctxt "model:ir.action,name:act_inventory_form_draft"
+msgid "Draft Inventories"
+msgstr ""
+
+msgctxt "model:ir.action,name:act_location_form"
+msgid "Locations"
+msgstr ""
+
+msgctxt "model:ir.action,name:act_location_quantity_tree"
+msgid "Product Stock"
+msgstr ""
+
+msgctxt "model:ir.action,name:act_location_tree"
+msgid "Locations"
+msgstr ""
+
+#, fuzzy
+msgctxt "model:ir.action,name:act_move_form"
+msgid "Moves"
+msgstr "Boekingen"
+
+msgctxt "model:ir.action,name:act_move_form_cust"
+msgid "Moves to Customers"
+msgstr ""
+
+msgctxt "model:ir.action,name:act_move_form_supp"
+msgid "Moves from Suppliers"
+msgstr ""
+
+msgctxt "model:ir.action,name:act_move_form_supp_proceed"
+msgid "Moves from Suppliers Waiting Arrival"
+msgstr ""
+
+#, fuzzy
+msgctxt "model:ir.action,name:act_period_list"
+msgid "Periods"
+msgstr "Perioden"
+
+msgctxt "model:ir.action,name:act_product_by_location"
+msgid "Products by Locations"
+msgstr ""
+
+msgctxt "model:ir.action,name:act_shipment_in_draft"
+msgid "Draft Supplier Shipment"
+msgstr ""
+
+msgctxt "model:ir.action,name:act_shipment_in_form"
+msgid "Supplier Shipments"
+msgstr ""
+
+msgctxt "model:ir.action,name:act_shipment_in_form_received"
+msgid "Received Supplier shipments"
+msgstr ""
+
+msgctxt "model:ir.action,name:act_shipment_in_return_form"
+msgid "Supplier Return Shipments"
+msgstr ""
+
+msgctxt "model:ir.action,name:act_shipment_internal_assigned_form"
+msgid "Assigned Internal Shipments"
+msgstr ""
+
+msgctxt "model:ir.action,name:act_shipment_internal_draft_form"
+msgid "Draft Internal Shipments"
+msgstr ""
+
+msgctxt "model:ir.action,name:act_shipment_internal_form"
+msgid "Internal Shipments"
+msgstr ""
+
+msgctxt "model:ir.action,name:act_shipment_internal_waiting_form"
+msgid "Internal Shipments Waiting Assignation"
+msgstr ""
+
+msgctxt "model:ir.action,name:act_shipment_out_form"
+msgid "Customer Shipments"
+msgstr ""
+
+msgctxt "model:ir.action,name:act_shipment_out_form2"
+msgid "Customer Shipments"
+msgstr ""
+
+msgctxt "model:ir.action,name:act_shipment_out_form3"
+msgid "Supplier Shipments"
+msgstr ""
+
+msgctxt "model:ir.action,name:act_shipment_out_form_assigned"
+msgid "Assigned Customer Shipments"
+msgstr ""
+
+msgctxt "model:ir.action,name:act_shipment_out_form_ready"
+msgid "Customer Shipments Ready for Shipping"
+msgstr ""
+
+msgctxt "model:ir.action,name:act_shipment_out_form_waiting"
+msgid "Customer Shipments Waiting Assignation"
+msgstr ""
+
+msgctxt "model:ir.action,name:act_shipment_out_return_form"
+msgid "Customer Return Shipments"
+msgstr ""
+
+msgctxt "model:ir.action,name:act_stock_configuration_form"
+msgid "Stock Configuration"
+msgstr ""
+
+msgctxt "model:ir.action,name:create_shipment_out_return"
+msgid "Create Return Shipment"
+msgstr ""
+
+msgctxt "model:ir.action,name:report_shipment_in_restocking_list"
+msgid "Restocking List"
+msgstr ""
+
+msgctxt "model:ir.action,name:report_shipment_internal"
+msgid "Internal Shipment"
+msgstr ""
+
+msgctxt "model:ir.action,name:report_shipment_out_delivery_note"
+msgid "Delivery Note"
+msgstr ""
+
+msgctxt "model:ir.action,name:report_shipment_out_picking_list"
+msgid "Picking List"
+msgstr ""
+
+msgctxt "model:ir.action,name:report_shipment_out_return_restocking_list"
+msgid "Restocking List"
+msgstr ""
+
+msgctxt "model:ir.action,name:wizard_complete_inventory"
+msgid "Complete Inventory"
+msgstr ""
+
+msgctxt "model:ir.action,name:wizard_location_open"
+msgid "Product by Location"
+msgstr ""
+
+msgctxt "model:ir.action,name:wizard_product_open"
+msgid "Product Quantities"
+msgstr ""
+
+msgctxt "model:ir.action,name:wizard_shipment_in_return_assign"
+msgid "Assign Purchase Return Shipment"
+msgstr ""
+
+msgctxt "model:ir.action,name:wizard_shipment_internal_assign"
+msgid "Assign Shipment Internal"
+msgstr ""
+
+msgctxt "model:ir.action,name:wizard_shipment_out_assign"
+msgid "Assign Shipment Out"
+msgstr ""
+
+msgctxt "model:ir.sequence,name:sequence_shipment_in"
+msgid "Supplier Shipment"
+msgstr ""
+
+msgctxt "model:ir.sequence,name:sequence_shipment_in_return"
+msgid "Supplier Return Shipment"
+msgstr ""
+
+msgctxt "model:ir.sequence,name:sequence_shipment_internal"
+msgid "Internal Shipment"
+msgstr ""
+
+msgctxt "model:ir.sequence,name:sequence_shipment_out"
+msgid "Customer Shipment"
+msgstr ""
+
+msgctxt "model:ir.sequence,name:sequence_shipment_out_return"
+msgid "Customer Return Shipment"
+msgstr ""
+
+msgctxt "model:ir.sequence.type,name:sequence_type_shipment_in"
+msgid "Supplier Shipment"
+msgstr ""
+
+msgctxt "model:ir.sequence.type,name:sequence_type_shipment_in_return"
+msgid "Supplier Return Shipment"
+msgstr ""
+
+msgctxt "model:ir.sequence.type,name:sequence_type_shipment_internal"
+msgid "Internal Shipment"
+msgstr ""
+
+msgctxt "model:ir.sequence.type,name:sequence_type_shipment_out"
+msgid "Customer Shipment"
+msgstr ""
+
+msgctxt "model:ir.sequence.type,name:sequence_type_shipment_out_return"
+msgid "Customer Return Shipment"
+msgstr ""
+
+#, fuzzy
+msgctxt "model:ir.ui.menu,name:menu_configuration"
+msgid "Configuration"
+msgstr "Instellingen"
+
+msgctxt "model:ir.ui.menu,name:menu_inventory_form"
+msgid "Inventories"
+msgstr ""
+
+msgctxt "model:ir.ui.menu,name:menu_inventory_form_draft"
+msgid "Draft Inventories"
+msgstr ""
+
+msgctxt "model:ir.ui.menu,name:menu_location_form"
+msgid "Locations"
+msgstr ""
+
+msgctxt "model:ir.ui.menu,name:menu_location_tree"
+msgid "Locations"
+msgstr ""
+
+#, fuzzy
+msgctxt "model:ir.ui.menu,name:menu_move_form"
+msgid "Moves"
+msgstr "Boekingen"
+
+msgctxt "model:ir.ui.menu,name:menu_move_form_cust"
+msgid "Moves to Customers"
+msgstr ""
+
+msgctxt "model:ir.ui.menu,name:menu_move_form_supp"
+msgid "Moves from Suppliers"
+msgstr ""
+
+msgctxt "model:ir.ui.menu,name:menu_move_form_supp_proceed"
+msgid "Moves from Suppliers Waiting Arrival"
+msgstr ""
+
+#, fuzzy
+msgctxt "model:ir.ui.menu,name:menu_period_list"
+msgid "Periods"
+msgstr "Perioden"
+
+#, fuzzy
+msgctxt "model:ir.ui.menu,name:menu_reporting"
+msgid "Reporting"
+msgstr "Rapportage"
+
+msgctxt "model:ir.ui.menu,name:menu_shipment_in_draft"
+msgid "Draft Supplier Shipment"
+msgstr ""
+
+msgctxt "model:ir.ui.menu,name:menu_shipment_in_form"
+msgid "Supplier Shipments"
+msgstr ""
+
+msgctxt "model:ir.ui.menu,name:menu_shipment_in_received"
+msgid "Received Supplier shipments"
+msgstr ""
+
+msgctxt "model:ir.ui.menu,name:menu_shipment_in_return_form"
+msgid "Supplier Return Shipments"
+msgstr ""
+
+msgctxt "model:ir.ui.menu,name:menu_shipment_internal_assigned_form"
+msgid "Assigned Internal Shipments"
+msgstr ""
+
+msgctxt "model:ir.ui.menu,name:menu_shipment_internal_draft_form"
+msgid "Draft Internal Shipments"
+msgstr ""
+
+msgctxt "model:ir.ui.menu,name:menu_shipment_internal_form"
+msgid "Internal Shipments"
+msgstr ""
+
+msgctxt "model:ir.ui.menu,name:menu_shipment_internal_waiting_form"
+msgid "Internal Shipments Waiting Assignation"
+msgstr ""
+
+msgctxt "model:ir.ui.menu,name:menu_shipment_out_assigned"
+msgid "Assigned Customer Shipments"
+msgstr ""
+
+msgctxt "model:ir.ui.menu,name:menu_shipment_out_form"
+msgid "Customer Shipments"
+msgstr ""
+
+msgctxt "model:ir.ui.menu,name:menu_shipment_out_ready"
+msgid "Customer Shipments Ready for Shipping"
+msgstr ""
+
+msgctxt "model:ir.ui.menu,name:menu_shipment_out_return_form"
+msgid "Customer Return Shipments"
+msgstr ""
+
+msgctxt "model:ir.ui.menu,name:menu_shipment_out_waiting"
+msgid "Customer Shipments Waiting Assignation"
+msgstr ""
+
+msgctxt "model:ir.ui.menu,name:menu_stock"
+msgid "Inventory & Stock"
+msgstr ""
+
+msgctxt "model:ir.ui.menu,name:menu_stock_configuration"
+msgid "Stock Configuration"
+msgstr ""
+
+#, fuzzy
+msgctxt "model:res.group,name:group_stock"
+msgid "Stock"
+msgstr "Voorraad"
+
+msgctxt "model:res.group,name:group_stock_admin"
+msgid "Stock Administration"
+msgstr ""
+
+msgctxt "model:res.group,name:group_stock_force_assignment"
+msgid "Stock Force Assignment"
+msgstr ""
+
+msgctxt "model:stock.configuration,name:0"
+msgid "Stock Configuration"
+msgstr ""
+
+msgctxt "model:stock.inventory,name:0"
+msgid "Stock Inventory"
+msgstr ""
+
+msgctxt "model:stock.inventory.line,name:0"
+msgid "Stock Inventory Line"
+msgstr ""
+
+msgctxt "model:stock.location,name:0"
+msgid "Stock Location"
+msgstr ""
+
+#, fuzzy
+msgctxt "model:stock.location,name:location_customer"
+msgid "Customer"
+msgstr "Klant"
+
+msgctxt "model:stock.location,name:location_input"
+msgid "Input Zone"
+msgstr ""
+
+msgctxt "model:stock.location,name:location_lost_found"
+msgid "Lost and Found"
+msgstr ""
+
+msgctxt "model:stock.location,name:location_output"
+msgid "Output Zone"
+msgstr ""
+
+msgctxt "model:stock.location,name:location_storage"
+msgid "Storage Zone"
+msgstr ""
+
+#, fuzzy
+msgctxt "model:stock.location,name:location_supplier"
+msgid "Supplier"
+msgstr "Leverancier"
+
+#, fuzzy
+msgctxt "model:stock.location,name:location_warehouse"
+msgid "Warehouse"
+msgstr "Magazijn"
+
+msgctxt "model:stock.location_stock_date.init,name:0"
+msgid "Compute stock quantities"
+msgstr ""
+
+msgctxt "model:stock.move,name:0"
+msgid "Stock Move"
+msgstr ""
+
+msgctxt "model:stock.period,name:0"
+msgid "Stock Period"
+msgstr ""
+
+msgctxt "model:stock.period.cache,name:0"
+msgid ""
+"\n"
+" Stock Period Cache\n"
+"\n"
+" It is used to store cached computation of stock quantities.\n"
+" "
+msgstr ""
+
+msgctxt "model:stock.product_stock_date.init,name:0"
+msgid "Compute stock quantities"
+msgstr ""
+
+msgctxt "model:stock.shipment.in,name:0"
+msgid "Supplier Shipment"
+msgstr ""
+
+msgctxt "model:stock.shipment.in.return,name:0"
+msgid "Supplier Return Shipment"
+msgstr ""
+
+msgctxt "model:stock.shipment.in.return.assign.assign_failed,name:0"
+msgid "Assign Supplier Return Shipment Assign Failed"
+msgstr ""
+
+msgctxt "model:stock.shipment.internal,name:0"
+msgid "Internal Shipment"
+msgstr ""
+
+msgctxt "model:stock.shipment.internal.assign.assign_failed,name:0"
+msgid "Assign Shipment Internal Assign Failed"
+msgstr ""
+
+msgctxt "model:stock.shipment.out,name:0"
+msgid "Customer Shipment"
+msgstr ""
+
+msgctxt "model:stock.shipment.out.assign.assign_failed,name:0"
+msgid "Assign Shipment Out Assign Failed"
+msgstr ""
+
+msgctxt "model:stock.shipment.out.return,name:0"
+msgid "Customer Return Shipment"
+msgstr ""
+
+msgctxt "model:workflow,name:wkf_inventory"
+msgid "Inventory"
+msgstr ""
+
+msgctxt "model:workflow,name:wkf_shipment_in_return"
+msgid "Supplier Return Shipment"
+msgstr ""
+
+msgctxt "model:workflow,name:wkf_shipment_out_return"
+msgid "Customer Return Shipment"
+msgstr ""
+
+msgctxt "model:workflow,name:wkf_shipmentin"
+msgid "Supplier Shipment"
+msgstr ""
+
+msgctxt "model:workflow,name:wkf_shipmentinternal"
+msgid "Internal Shipment"
+msgstr ""
+
+msgctxt "model:workflow,name:wkf_shipmentout"
+msgid "Customer Shipment"
+msgstr ""
+
+#, fuzzy
+msgctxt "model:workflow.activity,name:inventory_act_cancel"
+msgid "Canceled"
+msgstr "Geannuleerd"
+
+#, fuzzy
+msgctxt "model:workflow.activity,name:inventory_act_done"
+msgid "Done"
+msgstr "Klaar"
+
+#, fuzzy
+msgctxt "model:workflow.activity,name:inventory_act_draft"
+msgid "Draft"
+msgstr "Concept"
+
+msgctxt "model:workflow.activity,name:shipment_in_return_act_assigned"
+msgid "Assigned"
+msgstr ""
+
+#, fuzzy
+msgctxt "model:workflow.activity,name:shipment_in_return_act_cancel"
+msgid "Canceled"
+msgstr "Geannuleerd"
+
+#, fuzzy
+msgctxt "model:workflow.activity,name:shipment_in_return_act_done"
+msgid "Done"
+msgstr "Klaar"
+
+#, fuzzy
+msgctxt "model:workflow.activity,name:shipment_in_return_act_draft"
+msgid "Draft"
+msgstr "Concept"
+
+#, fuzzy
+msgctxt "model:workflow.activity,name:shipment_in_return_act_waiting"
+msgid "Waiting"
+msgstr "In afwachting"
+
+#, fuzzy
+msgctxt "model:workflow.activity,name:shipment_out_return_act_cancel"
+msgid "Canceled"
+msgstr "Geannuleerd"
+
+#, fuzzy
+msgctxt "model:workflow.activity,name:shipment_out_return_act_done"
+msgid "Done"
+msgstr "Klaar"
+
+#, fuzzy
+msgctxt "model:workflow.activity,name:shipment_out_return_act_draft"
+msgid "Draft"
+msgstr "Concept"
+
+msgctxt "model:workflow.activity,name:shipment_out_return_act_received"
+msgid "Received"
+msgstr ""
+
+#, fuzzy
+msgctxt "model:workflow.activity,name:shipmentin_act_cancel"
+msgid "Canceled"
+msgstr "Geannuleerd"
+
+#, fuzzy
+msgctxt "model:workflow.activity,name:shipmentin_act_done"
+msgid "Done"
+msgstr "Klaar"
+
+#, fuzzy
+msgctxt "model:workflow.activity,name:shipmentin_act_draft"
+msgid "Draft"
+msgstr "Concept"
+
+msgctxt "model:workflow.activity,name:shipmentin_act_received"
+msgid "Received"
+msgstr ""
+
+msgctxt "model:workflow.activity,name:shipmentinternal_act_assigned"
+msgid "Assigned"
+msgstr ""
+
+#, fuzzy
+msgctxt "model:workflow.activity,name:shipmentinternal_act_cancel"
+msgid "Canceled"
+msgstr "Geannuleerd"
+
+#, fuzzy
+msgctxt "model:workflow.activity,name:shipmentinternal_act_done"
+msgid "Done"
+msgstr "Klaar"
+
+#, fuzzy
+msgctxt "model:workflow.activity,name:shipmentinternal_act_draft"
+msgid "Draft"
+msgstr "Concept"
+
+#, fuzzy
+msgctxt "model:workflow.activity,name:shipmentinternal_act_waiting"
+msgid "Waiting"
+msgstr "In afwachting"
+
+msgctxt "model:workflow.activity,name:shipmentout_act_assigned"
+msgid "Assigned"
+msgstr ""
+
+#, fuzzy
+msgctxt "model:workflow.activity,name:shipmentout_act_cancel"
+msgid "Canceled"
+msgstr "Geannuleerd"
+
+#, fuzzy
+msgctxt "model:workflow.activity,name:shipmentout_act_done"
+msgid "Done"
+msgstr "Klaar"
+
+#, fuzzy
+msgctxt "model:workflow.activity,name:shipmentout_act_draft"
+msgid "Draft"
+msgstr "Concept"
+
+msgctxt "model:workflow.activity,name:shipmentout_act_packed"
+msgid "Packed"
+msgstr ""
+
+#, fuzzy
+msgctxt "model:workflow.activity,name:shipmentout_act_waiting"
+msgid "Waiting"
+msgstr "In afwachting"
+
+msgctxt "odt:stock.shipment.in.restocking_list:0"
+msgid "/"
+msgstr ""
+
+msgctxt "odt:stock.shipment.in.restocking_list:0"
+msgid "Code:"
+msgstr ""
+
+#, fuzzy
+msgctxt "odt:stock.shipment.in.restocking_list:0"
+msgid "E-Mail:"
+msgstr "E-mail:"
+
+msgctxt "odt:stock.shipment.in.restocking_list:0"
+msgid "From Location"
+msgstr ""
+
+#, fuzzy
+msgctxt "odt:stock.shipment.in.restocking_list:0"
+msgid "Phone:"
+msgstr "Telefoon:"
+
+msgctxt "odt:stock.shipment.in.restocking_list:0"
+msgid "Planned Date:"
+msgstr ""
+
+#, fuzzy
+msgctxt "odt:stock.shipment.in.restocking_list:0"
+msgid "Product"
+msgstr "Producten"
+
+#, fuzzy
+msgctxt "odt:stock.shipment.in.restocking_list:0"
+msgid "Quantity"
+msgstr "Hoeveelheid"
+
+#, fuzzy
+msgctxt "odt:stock.shipment.in.restocking_list:0"
+msgid "Reference:"
+msgstr "Referentie:"
+
+msgctxt "odt:stock.shipment.in.restocking_list:0"
+msgid "Restocking List"
+msgstr ""
+
+msgctxt "odt:stock.shipment.in.restocking_list:0"
+msgid "Supplier:"
+msgstr ""
+
+msgctxt "odt:stock.shipment.in.restocking_list:0"
+msgid "To Location"
+msgstr ""
+
+#, fuzzy
+msgctxt "odt:stock.shipment.in.restocking_list:0"
+msgid "VAT Number:"
+msgstr "BTW-nummer:"
+
+msgctxt "odt:stock.shipment.in.restocking_list:0"
+msgid "Warehouse:"
+msgstr ""
+
+msgctxt "odt:stock.shipment.internal.report:0"
+msgid "/"
+msgstr ""
+
+msgctxt "odt:stock.shipment.internal.report:0"
+msgid "Code:"
+msgstr ""
+
+#, fuzzy
+msgctxt "odt:stock.shipment.internal.report:0"
+msgid "E-Mail:"
+msgstr "E-mail:"
+
+msgctxt "odt:stock.shipment.internal.report:0"
+msgid "From Location"
+msgstr ""
+
+msgctxt "odt:stock.shipment.internal.report:0"
+msgid "From Location:"
+msgstr ""
+
+msgctxt "odt:stock.shipment.internal.report:0"
+msgid "Internal Shipment"
+msgstr ""
+
+#, fuzzy
+msgctxt "odt:stock.shipment.internal.report:0"
+msgid "Phone:"
+msgstr "Telefoon:"
+
+msgctxt "odt:stock.shipment.internal.report:0"
+msgid "Planned Date:"
+msgstr ""
+
+#, fuzzy
+msgctxt "odt:stock.shipment.internal.report:0"
+msgid "Product"
+msgstr "Producten"
+
+#, fuzzy
+msgctxt "odt:stock.shipment.internal.report:0"
+msgid "Quantity"
+msgstr "Hoeveelheid"
+
+#, fuzzy
+msgctxt "odt:stock.shipment.internal.report:0"
+msgid "Reference:"
+msgstr "Referentie:"
+
+msgctxt "odt:stock.shipment.internal.report:0"
+msgid "To Location"
+msgstr ""
+
+msgctxt "odt:stock.shipment.internal.report:0"
+msgid "To Location:"
+msgstr ""
+
+#, fuzzy
+msgctxt "odt:stock.shipment.internal.report:0"
+msgid "VAT Number:"
+msgstr "BTW-nummer:"
+
+msgctxt "odt:stock.shipment.out.delivery_note:0"
+msgid "/"
+msgstr ""
+
+msgctxt "odt:stock.shipment.out.delivery_note:0"
+msgid "Customer Code:"
+msgstr ""
+
+#, fuzzy
+msgctxt "odt:stock.shipment.out.delivery_note:0"
+msgid "Date:"
+msgstr "Datum:"
+
+msgctxt "odt:stock.shipment.out.delivery_note:0"
+msgid "Delivery Note"
+msgstr ""
+
+#, fuzzy
+msgctxt "odt:stock.shipment.out.delivery_note:0"
+msgid "E-Mail:"
+msgstr "E-mail:"
+
+#, fuzzy
+msgctxt "odt:stock.shipment.out.delivery_note:0"
+msgid "Phone:"
+msgstr "Telefoon:"
+
+#, fuzzy
+msgctxt "odt:stock.shipment.out.delivery_note:0"
+msgid "Product"
+msgstr "Producten"
+
+#, fuzzy
+msgctxt "odt:stock.shipment.out.delivery_note:0"
+msgid "Quantity"
+msgstr "Hoeveelheid"
+
+#, fuzzy
+msgctxt "odt:stock.shipment.out.delivery_note:0"
+msgid "Reference:"
+msgstr "Referentie:"
+
+msgctxt "odt:stock.shipment.out.delivery_note:0"
+msgid "Shipment Number:"
+msgstr ""
+
+#, fuzzy
+msgctxt "odt:stock.shipment.out.delivery_note:0"
+msgid "VAT Number:"
+msgstr "BTW-nummer:"
+
+msgctxt "odt:stock.shipment.out.picking_list:0"
+msgid "/"
+msgstr ""
+
+msgctxt "odt:stock.shipment.out.picking_list:0"
+msgid "Code:"
+msgstr ""
+
+msgctxt "odt:stock.shipment.out.picking_list:0"
+msgid "Customer:"
+msgstr ""
+
+#, fuzzy
+msgctxt "odt:stock.shipment.out.picking_list:0"
+msgid "E-Mail:"
+msgstr "E-mail:"
+
+msgctxt "odt:stock.shipment.out.picking_list:0"
+msgid "From Location"
+msgstr ""
+
+#, fuzzy
+msgctxt "odt:stock.shipment.out.picking_list:0"
+msgid "Phone:"
+msgstr "Telefoon:"
+
+msgctxt "odt:stock.shipment.out.picking_list:0"
+msgid "Picking List"
+msgstr ""
+
+msgctxt "odt:stock.shipment.out.picking_list:0"
+msgid "Planned Date:"
+msgstr ""
+
+#, fuzzy
+msgctxt "odt:stock.shipment.out.picking_list:0"
+msgid "Product"
+msgstr "Producten"
+
+#, fuzzy
+msgctxt "odt:stock.shipment.out.picking_list:0"
+msgid "Quantity"
+msgstr "Hoeveelheid"
+
+#, fuzzy
+msgctxt "odt:stock.shipment.out.picking_list:0"
+msgid "Reference:"
+msgstr "Referentie:"
+
+msgctxt "odt:stock.shipment.out.picking_list:0"
+msgid "To Location"
+msgstr ""
+
+#, fuzzy
+msgctxt "odt:stock.shipment.out.picking_list:0"
+msgid "VAT Number:"
+msgstr "BTW-nummer:"
+
+msgctxt "odt:stock.shipment.out.picking_list:0"
+msgid "Warehouse:"
+msgstr ""
+
+msgctxt "odt:stock.shipment.out.return.restocking_list:0"
+msgid "/"
+msgstr ""
+
+msgctxt "odt:stock.shipment.out.return.restocking_list:0"
+msgid "Code:"
+msgstr ""
+
+#, fuzzy
+msgctxt "odt:stock.shipment.out.return.restocking_list:0"
+msgid "E-Mail:"
+msgstr "E-mail:"
+
+msgctxt "odt:stock.shipment.out.return.restocking_list:0"
+msgid "From Location"
+msgstr ""
+
+#, fuzzy
+msgctxt "odt:stock.shipment.out.return.restocking_list:0"
+msgid "Phone:"
+msgstr "Telefoon:"
+
+msgctxt "odt:stock.shipment.out.return.restocking_list:0"
+msgid "Planned Date:"
+msgstr ""
+
+#, fuzzy
+msgctxt "odt:stock.shipment.out.return.restocking_list:0"
+msgid "Product"
+msgstr "Producten"
+
+#, fuzzy
+msgctxt "odt:stock.shipment.out.return.restocking_list:0"
+msgid "Quantity"
+msgstr "Hoeveelheid"
+
+#, fuzzy
+msgctxt "odt:stock.shipment.out.return.restocking_list:0"
+msgid "Reference:"
+msgstr "Referentie:"
+
+msgctxt "odt:stock.shipment.out.return.restocking_list:0"
+msgid "Restocking List"
+msgstr ""
+
+msgctxt "odt:stock.shipment.out.return.restocking_list:0"
+msgid "Supplier:"
+msgstr ""
+
+msgctxt "odt:stock.shipment.out.return.restocking_list:0"
+msgid "To Location"
+msgstr ""
+
+#, fuzzy
+msgctxt "odt:stock.shipment.out.return.restocking_list:0"
+msgid "VAT Number:"
+msgstr "BTW-nummer:"
+
+msgctxt "odt:stock.shipment.out.return.restocking_list:0"
+msgid "Warehouse:"
+msgstr ""
+
+#, fuzzy
+msgctxt "selection:stock.inventory,state:0"
+msgid "Canceled"
+msgstr "Geannuleerd"
+
+#, fuzzy
+msgctxt "selection:stock.inventory,state:0"
+msgid "Done"
+msgstr "Klaar"
+
+#, fuzzy
+msgctxt "selection:stock.inventory,state:0"
+msgid "Draft"
+msgstr "Concept"
+
+#, fuzzy
+msgctxt "selection:stock.location,type:0"
+msgid "Customer"
+msgstr "Klant"
+
+msgctxt "selection:stock.location,type:0"
+msgid "Lost and Found"
+msgstr ""
+
+msgctxt "selection:stock.location,type:0"
+msgid "Production"
+msgstr ""
+
+msgctxt "selection:stock.location,type:0"
+msgid "Storage"
+msgstr ""
+
+#, fuzzy
+msgctxt "selection:stock.location,type:0"
+msgid "Supplier"
+msgstr "Leverancier"
+
+#, fuzzy
+msgctxt "selection:stock.location,type:0"
+msgid "View"
+msgstr "Overzicht"
+
+#, fuzzy
+msgctxt "selection:stock.location,type:0"
+msgid "Warehouse"
+msgstr "Magazijn"
+
+msgctxt "selection:stock.move,state:0"
+msgid "Assigned"
+msgstr ""
+
+#, fuzzy
+msgctxt "selection:stock.move,state:0"
+msgid "Canceled"
+msgstr "Geannuleerd"
+
+#, fuzzy
+msgctxt "selection:stock.move,state:0"
+msgid "Done"
+msgstr "Klaar"
+
+#, fuzzy
+msgctxt "selection:stock.move,state:0"
+msgid "Draft"
+msgstr "Concept"
+
+msgctxt "selection:stock.period,state:0"
+msgid "Closed"
+msgstr ""
+
+#, fuzzy
+msgctxt "selection:stock.period,state:0"
+msgid "Draft"
+msgstr "Concept"
+
+#, fuzzy
+msgctxt "selection:stock.shipment.in,state:0"
+msgid "Canceled"
+msgstr "Geannuleerd"
+
+#, fuzzy
+msgctxt "selection:stock.shipment.in,state:0"
+msgid "Done"
+msgstr "Klaar"
+
+#, fuzzy
+msgctxt "selection:stock.shipment.in,state:0"
+msgid "Draft"
+msgstr "Concept"
+
+msgctxt "selection:stock.shipment.in,state:0"
+msgid "Received"
+msgstr ""
+
+msgctxt "selection:stock.shipment.in.return,state:0"
+msgid "Assigned"
+msgstr ""
+
+#, fuzzy
+msgctxt "selection:stock.shipment.in.return,state:0"
+msgid "Canceled"
+msgstr "Geannuleerd"
+
+#, fuzzy
+msgctxt "selection:stock.shipment.in.return,state:0"
+msgid "Done"
+msgstr "Klaar"
+
+#, fuzzy
+msgctxt "selection:stock.shipment.in.return,state:0"
+msgid "Draft"
+msgstr "Concept"
+
+#, fuzzy
+msgctxt "selection:stock.shipment.in.return,state:0"
+msgid "Waiting"
+msgstr "In afwachting"
+
+msgctxt "selection:stock.shipment.internal,state:0"
+msgid "Assigned"
+msgstr ""
+
+#, fuzzy
+msgctxt "selection:stock.shipment.internal,state:0"
+msgid "Canceled"
+msgstr "Geannuleerd"
+
+#, fuzzy
+msgctxt "selection:stock.shipment.internal,state:0"
+msgid "Done"
+msgstr "Klaar"
+
+#, fuzzy
+msgctxt "selection:stock.shipment.internal,state:0"
+msgid "Draft"
+msgstr "Concept"
+
+#, fuzzy
+msgctxt "selection:stock.shipment.internal,state:0"
+msgid "Waiting"
+msgstr "In afwachting"
+
+msgctxt "selection:stock.shipment.out,state:0"
+msgid "Assigned"
+msgstr ""
+
+#, fuzzy
+msgctxt "selection:stock.shipment.out,state:0"
+msgid "Canceled"
+msgstr "Geannuleerd"
+
+#, fuzzy
+msgctxt "selection:stock.shipment.out,state:0"
+msgid "Done"
+msgstr "Klaar"
+
+#, fuzzy
+msgctxt "selection:stock.shipment.out,state:0"
+msgid "Draft"
+msgstr "Concept"
+
+msgctxt "selection:stock.shipment.out,state:0"
+msgid "Packed"
+msgstr ""
+
+#, fuzzy
+msgctxt "selection:stock.shipment.out,state:0"
+msgid "Waiting"
+msgstr "In afwachting"
+
+#, fuzzy
+msgctxt "selection:stock.shipment.out.return,state:0"
+msgid "Canceled"
+msgstr "Geannuleerd"
+
+#, fuzzy
+msgctxt "selection:stock.shipment.out.return,state:0"
+msgid "Done"
+msgstr "Klaar"
+
+#, fuzzy
+msgctxt "selection:stock.shipment.out.return,state:0"
+msgid "Draft"
+msgstr "Concept"
+
+msgctxt "selection:stock.shipment.out.return,state:0"
+msgid "Received"
+msgstr ""
+
+#, fuzzy
+msgctxt "view:party.party:0"
+msgid "Stock"
+msgstr "Voorraad"
+
+#, fuzzy
+msgctxt "view:product.product:0"
+msgid "Products"
+msgstr "Producten"
+
+msgctxt "view:stock.configuration:0"
+msgid "Stock Configuration"
+msgstr ""
+
+msgctxt "view:stock.inventory.line:0"
+msgid "Inventory Line"
+msgstr ""
+
+msgctxt "view:stock.inventory.line:0"
+msgid "Inventory Lines"
+msgstr ""
+
+msgctxt "view:stock.inventory:0"
+msgid "Add an inventory line for each missing products"
+msgstr ""
+
+#, fuzzy
+msgctxt "view:stock.inventory:0"
+msgid "Cancel"
+msgstr "Annuleren"
+
+msgctxt "view:stock.inventory:0"
+msgid "Complete Inventory"
+msgstr ""
+
+#, fuzzy
+msgctxt "view:stock.inventory:0"
+msgid "Confirm"
+msgstr "Bevestig"
+
+msgctxt "view:stock.inventory:0"
+msgid "Inventories"
+msgstr ""
+
+msgctxt "view:stock.inventory:0"
+msgid "Inventory"
+msgstr ""
+
+msgctxt "view:stock.location:0"
+msgid "Location"
+msgstr ""
+
+msgctxt "view:stock.location:0"
+msgid "Locations"
+msgstr ""
+
+msgctxt "view:stock.location:0"
+msgid "Product Stock"
+msgstr ""
+
+msgctxt "view:stock.location_stock_date.init:0"
+msgid "Product Quantity."
+msgstr ""
+
+#, fuzzy
+msgctxt "view:stock.move:0"
+msgid "Move"
+msgstr "Boeking"
+
+#, fuzzy
+msgctxt "view:stock.move:0"
+msgid "Moves"
+msgstr "Boekingen"
+
+msgctxt "view:stock.period.cache:0"
+msgid "Period Cache"
+msgstr ""
+
+msgctxt "view:stock.period.cache:0"
+msgid "Period Caches"
+msgstr ""
+
+#, fuzzy
+msgctxt "view:stock.period:0"
+msgid "Close"
+msgstr "Sluiten"
+
+#, fuzzy
+msgctxt "view:stock.period:0"
+msgid "Draft"
+msgstr "Concept"
+
+#, fuzzy
+msgctxt "view:stock.period:0"
+msgid "Period"
+msgstr "Periode"
+
+#, fuzzy
+msgctxt "view:stock.period:0"
+msgid "Periods"
+msgstr "Perioden"
+
+msgctxt "view:stock.product_stock_date.init:0"
+msgid "Product Quantity."
+msgstr ""
+
+#, fuzzy
+msgctxt "view:stock.shipment.in.return.assign.assign_failed:0"
+msgid "Moves"
+msgstr "Boekingen"
+
+msgctxt "view:stock.shipment.in.return.assign.assign_failed:0"
+msgid "Unable to Assign"
+msgstr ""
+
+msgctxt "view:stock.shipment.in.return.assign.assign_failed:0"
+msgid "Unable to assign those products:"
+msgstr ""
+
+msgctxt "view:stock.shipment.in.return:0"
+msgid "Assign"
+msgstr ""
+
+#, fuzzy
+msgctxt "view:stock.shipment.in.return:0"
+msgid "Cancel"
+msgstr "Annuleren"
+
+#, fuzzy
+msgctxt "view:stock.shipment.in.return:0"
+msgid "Done"
+msgstr "Klaar"
+
+#, fuzzy
+msgctxt "view:stock.shipment.in.return:0"
+msgid "Draft"
+msgstr "Concept"
+
+#, fuzzy
+msgctxt "view:stock.shipment.in.return:0"
+msgid "Reset to Draft"
+msgstr "Terug naar concept"
+
+msgctxt "view:stock.shipment.in.return:0"
+msgid "Supplier Return Shipment"
+msgstr ""
+
+msgctxt "view:stock.shipment.in.return:0"
+msgid "Supplier Return Shipments"
+msgstr ""
+
+#, fuzzy
+msgctxt "view:stock.shipment.in.return:0"
+msgid "Waiting"
+msgstr "In afwachting"
+
+#, fuzzy
+msgctxt "view:stock.shipment.in:0"
+msgid "Cancel"
+msgstr "Annuleren"
+
+#, fuzzy
+msgctxt "view:stock.shipment.in:0"
+msgid "Done"
+msgstr "Klaar"
+
+msgctxt "view:stock.shipment.in:0"
+msgid "Incoming Moves"
+msgstr ""
+
+msgctxt "view:stock.shipment.in:0"
+msgid "Inventory Moves"
+msgstr ""
+
+#, fuzzy
+msgctxt "view:stock.shipment.in:0"
+msgid "Moves"
+msgstr "Boekingen"
+
+msgctxt "view:stock.shipment.in:0"
+msgid "Received"
+msgstr ""
+
+#, fuzzy
+msgctxt "view:stock.shipment.in:0"
+msgid "Reset to Draft"
+msgstr "Terug naar concept"
+
+msgctxt "view:stock.shipment.in:0"
+msgid "Supplier Shipment"
+msgstr ""
+
+msgctxt "view:stock.shipment.in:0"
+msgid "Supplier Shipments"
+msgstr ""
+
+#, fuzzy
+msgctxt "view:stock.shipment.internal.assign.assign_failed:0"
+msgid "Moves"
+msgstr "Boekingen"
+
+msgctxt "view:stock.shipment.internal.assign.assign_failed:0"
+msgid "Unable to Assign"
+msgstr ""
+
+msgctxt "view:stock.shipment.internal.assign.assign_failed:0"
+msgid "Unable to assign those products:"
+msgstr ""
+
+msgctxt "view:stock.shipment.internal:0"
+msgid "Assign"
+msgstr ""
+
+#, fuzzy
+msgctxt "view:stock.shipment.internal:0"
+msgid "Cancel"
+msgstr "Annuleren"
+
+#, fuzzy
+msgctxt "view:stock.shipment.internal:0"
+msgid "Done"
+msgstr "Klaar"
+
+#, fuzzy
+msgctxt "view:stock.shipment.internal:0"
+msgid "Draft"
+msgstr "Concept"
+
+msgctxt "view:stock.shipment.internal:0"
+msgid "Internal Shipment"
+msgstr ""
+
+msgctxt "view:stock.shipment.internal:0"
+msgid "Internal Shipments"
+msgstr ""
+
+#, fuzzy
+msgctxt "view:stock.shipment.internal:0"
+msgid "Reset to Draft"
+msgstr "Terug naar concept"
+
+#, fuzzy
+msgctxt "view:stock.shipment.internal:0"
+msgid "Waiting"
+msgstr "In afwachting"
+
+msgctxt "view:stock.shipment.out.assign.assign_failed:0"
+msgid "Inventory Moves"
+msgstr ""
+
+msgctxt "view:stock.shipment.out.assign.assign_failed:0"
+msgid "Unable to Assign"
+msgstr ""
+
+msgctxt "view:stock.shipment.out.assign.assign_failed:0"
+msgid "Unable to assign those products:"
+msgstr ""
+
+#, fuzzy
+msgctxt "view:stock.shipment.out.return:0"
+msgid "Cancel"
+msgstr "Annuleren"
+
+msgctxt "view:stock.shipment.out.return:0"
+msgid "Customer Return Shipment"
+msgstr ""
+
+msgctxt "view:stock.shipment.out.return:0"
+msgid "Customer Return Shipments"
+msgstr ""
+
+#, fuzzy
+msgctxt "view:stock.shipment.out.return:0"
+msgid "Done"
+msgstr "Klaar"
+
+msgctxt "view:stock.shipment.out.return:0"
+msgid "Incoming Moves"
+msgstr ""
+
+msgctxt "view:stock.shipment.out.return:0"
+msgid "Inventory Moves"
+msgstr ""
+
+#, fuzzy
+msgctxt "view:stock.shipment.out.return:0"
+msgid "Moves"
+msgstr "Boekingen"
+
+msgctxt "view:stock.shipment.out.return:0"
+msgid "Received"
+msgstr ""
+
+#, fuzzy
+msgctxt "view:stock.shipment.out.return:0"
+msgid "Reset to Draft"
+msgstr "Terug naar concept"
+
+msgctxt "view:stock.shipment.out:0"
+msgid "Assign"
+msgstr ""
+
+#, fuzzy
+msgctxt "view:stock.shipment.out:0"
+msgid "Cancel"
+msgstr "Annuleren"
+
+msgctxt "view:stock.shipment.out:0"
+msgid "Customer Shipment"
+msgstr ""
+
+msgctxt "view:stock.shipment.out:0"
+msgid "Customer Shipments"
+msgstr ""
+
+#, fuzzy
+msgctxt "view:stock.shipment.out:0"
+msgid "Done"
+msgstr "Klaar"
+
+#, fuzzy
+msgctxt "view:stock.shipment.out:0"
+msgid "Draft"
+msgstr "Concept"
+
+msgctxt "view:stock.shipment.out:0"
+msgid "Inventory Moves"
+msgstr ""
+
+msgctxt "view:stock.shipment.out:0"
+msgid "Make shipment"
+msgstr ""
+
+msgctxt "view:stock.shipment.out:0"
+msgid "Outgoing Moves"
+msgstr ""
+
+#, fuzzy
+msgctxt "view:stock.shipment.out:0"
+msgid "Reset to Draft"
+msgstr "Terug naar concept"
+
+#, fuzzy
+msgctxt "view:stock.shipment.out:0"
+msgid "Waiting"
+msgstr "In afwachting"
+
+#, fuzzy
+msgctxt "wizard_button:stock.location.open,init,end:0"
+msgid "Cancel"
+msgstr "Annuleren"
+
+#, fuzzy
+msgctxt "wizard_button:stock.location.open,init,open:0"
+msgid "Open"
+msgstr "Open"
+
+#, fuzzy
+msgctxt "wizard_button:stock.product.open,init,end:0"
+msgid "Cancel"
+msgstr "Annuleren"
+
+#, fuzzy
+msgctxt "wizard_button:stock.product.open,init,open:0"
+msgid "Open"
+msgstr "Open"
+
+#, fuzzy
+msgctxt "wizard_button:stock.shipment.in.return.assign,ask_force,end:0"
+msgid "Ok"
+msgstr "Oké"
+
+msgctxt "wizard_button:stock.shipment.in.return.assign,ask_force,force:0"
+msgid "Force Assign"
+msgstr ""
+
+#, fuzzy
+msgctxt "wizard_button:stock.shipment.in.return.assign,assign_failed,end:0"
+msgid "Ok"
+msgstr "Oké"
+
+#, fuzzy
+msgctxt "wizard_button:stock.shipment.internal.assign,ask_force,end:0"
+msgid "Ok"
+msgstr "Oké"
+
+msgctxt "wizard_button:stock.shipment.internal.assign,ask_force,force:0"
+msgid "Force Assign"
+msgstr ""
+
+#, fuzzy
+msgctxt "wizard_button:stock.shipment.internal.assign,assign_failed,end:0"
+msgid "Ok"
+msgstr "Oké"
+
+#, fuzzy
+msgctxt "wizard_button:stock.shipment.out.assign,ask_force,end:0"
+msgid "Ok"
+msgstr "Oké"
+
+msgctxt "wizard_button:stock.shipment.out.assign,ask_force,force:0"
+msgid "Force Assign"
+msgstr ""
+
+#, fuzzy
+msgctxt "wizard_button:stock.shipment.out.assign,assign_failed,end:0"
+msgid "Ok"
+msgstr "Oké"
diff --git a/locale/ru_RU.po b/locale/ru_RU.po
new file mode 100644
index 0000000..4efa7de
--- /dev/null
+++ b/locale/ru_RU.po
@@ -0,0 +1,2103 @@
+#
+msgid ""
+msgstr "Content-Type: text/plain; charset=utf-8\n"
+
+msgctxt "error:product.template:0"
+msgid ""
+"You cannot change the default uom for a product which is associated to stock"
+" moves."
+msgstr ""
+"ÐÑ Ð½Ðµ можеÑе измениÑÑ ÐµÐ´Ð¸Ð½Ð¸ÑÑ Ð¸Ð·Ð¼ÐµÑÐµÐ½Ð¸Ñ Ð¿Ð¾ ÑмолÑÐ°Ð½Ð¸Ñ Ð´Ð»Ñ Ð¿ÑодÑкÑа, коÑоÑÑй "
+"ÑвÑзан Ñо Ñкладом пеÑемеÑениÑ."
+
+msgctxt "error:stock.inventory.line:0"
+msgid "Line quantity must be positive!"
+msgstr "Ðол-во должно бÑÑÑ Ð¿Ð¾Ð»Ð¾Ð¶Ð¸ÑелÑнÑм"
+
+msgctxt "error:stock.inventory.line:0"
+msgid "Product must be unique by inventory!"
+msgstr "ТÐЦ должен бÑÑÑ ÑникалÑнÑм по инвенÑаÑизаÑии!"
+
+msgctxt "error:stock.location:0"
+msgid ""
+"A location with existing moves cannot be changed to a type that does not "
+"support moves."
+msgstr ""
+
+msgctxt "error:stock.location:0"
+msgid "Location \"%s\" must be a child of warehouse \"%s\"!"
+msgstr "ÐеÑÑо \"%s\" должно бÑÑÑ Ð½Ð° Ñкладе \"%s\"!"
+
+msgctxt "error:stock.location:0"
+msgid "You can not create recursive locations!"
+msgstr "ÐÑ Ð½Ðµ можеÑе ÑоздаваÑÑ ÑекÑÑÑивнÑе меÑÑа!"
+
+msgctxt "error:stock.move:0"
+msgid "Internal move quantity must be positive"
+msgstr ""
+
+msgctxt "error:stock.move:0"
+msgid "Move can be on only one Shipment"
+msgstr "ÐеÑемеÑение Ð¼Ð¾Ð¶ÐµÑ Ð¸Ð¼ÐµÑÑ ÑолÑко Ð¾Ð´Ð½Ñ Ð¾ÑгÑÑзкÑ"
+
+msgctxt "error:stock.move:0"
+msgid "Move quantity must be positive"
+msgstr "Ðол-во должно бÑÑÑ Ð¿Ð¾Ð»Ð¾Ð¶Ð¸ÑелÑнÑм"
+
+msgctxt "error:stock.move:0"
+msgid "Source and destination location must be different"
+msgstr "ÐÑÑоÑник и меÑÑо назнаÑÐµÐ½Ð¸Ñ Ð´Ð¾Ð»Ð¶Ð½Ñ Ð±ÑÑÑ ÑазнÑми"
+
+msgctxt "error:stock.move:0"
+msgid "You can not modify a move in the state: \"Assigned\", \"Done\" or \"Cancel\""
+msgstr ""
+
+msgctxt "error:stock.move:0"
+msgid "You can not modify move in closed period!"
+msgstr ""
+
+msgctxt "error:stock.move:0"
+msgid "You can not set state to assigned!"
+msgstr "ÐÑ Ð½Ðµ можеÑе ÑÑÑановиÑÑ ÑоÑÑоÑние 'пеÑедан'!"
+
+msgctxt "error:stock.move:0"
+msgid "You can not set state to done!"
+msgstr "ÐÑ Ð½Ðµ можеÑе ÑÑÑановиÑÑ ÑоÑÑоÑние 'гоÑово'!"
+
+msgctxt "error:stock.move:0"
+msgid "You can not set state to draft!"
+msgstr "ÐÑ Ð½Ðµ можеÑе ÑÑÑановиÑÑ ÑоÑÑоÑние 'ÑеÑновик'!"
+
+msgctxt "error:stock.move:0"
+msgid "You can not use service products for a move!"
+msgstr "ÐÑ Ð½Ðµ можеÑе вÑбÑаÑÑ ÑÑлÑÐ³Ñ Ð´Ð»Ñ Ð¿ÐµÑемеÑениÑ"
+
+msgctxt "error:stock.move:0"
+msgid "You can only delete draft or cancelled moves!"
+msgstr "ÐÑ Ð¼Ð¾Ð¶ÐµÑе ÑдалÑÑÑ ÑолÑко оÑмененнÑе пеÑемеÑÐµÐ½Ð¸Ñ Ð¸ ÑеÑновики"
+
+msgctxt "error:stock.period:0"
+msgid "You can not close a period in the future or today!"
+msgstr ""
+
+msgctxt "error:stock.period:0"
+msgid "You can not close a period when there is still assigned moves!"
+msgstr ""
+
+msgctxt "error:stock.shipment.in:0"
+msgid ""
+"Incoming Moves must have the warehouse input location as destination "
+"location!"
+msgstr "РпоÑÑÑплениÑÑ
должен бÑÑÑ Ñказан меÑÑом назнаÑÐµÐ½Ð¸Ñ ÑоваÑнÑй Ñклад"
+
+msgctxt "error:stock.shipment.in:0"
+msgid ""
+"Inventory Moves must have the warehouse input location as source location!"
+msgstr ""
+
+msgctxt "error:stock.shipment.out.return.create:0"
+msgid "The shipment with code %s is not yet sent."
+msgstr "ÐÑгÑÑзка Ñ ÐºÐ¾Ð´Ð¾Ð¼ %s еÑе не оÑпÑавлена."
+
+msgctxt "error:stock.shipment.out.return.create:0"
+msgid "You can not create return shipment"
+msgstr "ÐÑ Ð½Ðµ можеÑе ÑоздаÑÑ Ð²Ð¾Ð·Ð²ÑаÑ"
+
+msgctxt "error:stock.shipment.out.return:0"
+msgid ""
+"Incoming Moves must have the warehouse input location as destination "
+"location!"
+msgstr ""
+"РвозвÑаÑаÑ
Ð¾Ñ Ð·Ð°ÐºÐ°Ð·Ñиков должен бÑÑÑ Ñказан меÑÑом назнаÑÐµÐ½Ð¸Ñ ÑоваÑнÑй "
+"Ñклад"
+
+msgctxt "error:stock.shipment.out.return:0"
+msgid ""
+"Inventory Moves must have the warehouse input location as source location!"
+msgstr ""
+
+msgctxt "error:stock.shipment.out:0"
+msgid ""
+"Inventory Moves must have the warehouse output location as destination "
+"location!"
+msgstr ""
+
+msgctxt "error:stock.shipment.out:0"
+msgid ""
+"Outgoing Moves must have the warehouse output location as source location!"
+msgstr ""
+
+msgctxt "field:party.address,delivery:0"
+msgid "Delivery"
+msgstr "ÐоÑÑавка"
+
+msgctxt "field:party.party,customer_location:0"
+msgid "Customer Location"
+msgstr "ÐеÑÑо Ñ
ÑÐ°Ð½ÐµÐ½Ð¸Ñ Ð·Ð°ÐºÐ°Ð·Ñика"
+
+msgctxt "field:party.party,supplier_location:0"
+msgid "Supplier Location"
+msgstr "ÐеÑÑо Ñ
ÑÐ°Ð½ÐµÐ½Ð¸Ñ Ð¿Ð¾ÑÑавÑика"
+
+msgctxt "field:product.product,forecast_quantity:0"
+msgid "Forecast Quantity"
+msgstr "ÐÑогноз ÐолиÑеÑÑво"
+
+msgctxt "field:product.product,quantity:0"
+msgid "Quantity"
+msgstr "Ðол-во"
+
+msgctxt "field:product.template,forecast_quantity:0"
+msgid "Forecast Quantity"
+msgstr "ÐÑогноз ÐолиÑеÑÑво"
+
+msgctxt "field:product.template,quantity:0"
+msgid "Quantity"
+msgstr "Ðол-во"
+
+msgctxt "field:stock.configuration,rec_name:0"
+msgid "Name"
+msgstr "Ðаименование"
+
+msgctxt "field:stock.configuration,shipment_in_return_sequence:0"
+msgid "Supplier Return Shipment Sequence"
+msgstr "ÐозвÑÐ°Ñ Ð¿Ð¾ÑÑавÑÐ¸ÐºÑ Ð¿Ð¾ÑледоваÑелÑноÑÑÑ"
+
+msgctxt "field:stock.configuration,shipment_in_sequence:0"
+msgid "Supplier Shipment Sequence"
+msgstr "ÐÑиÑ
од Ð¾Ñ Ð¿Ð¾ÑÑавÑика поÑледоваÑелÑноÑÑÑ"
+
+msgctxt "field:stock.configuration,shipment_internal_sequence:0"
+msgid "Internal Shipment Sequence"
+msgstr "ÐнÑÑÑенние пеÑемеÑение поÑледоваÑелÑноÑÑÑ"
+
+msgctxt "field:stock.configuration,shipment_out_return_sequence:0"
+msgid "Customer Return Shipment Sequence"
+msgstr "ÐозвÑÐ°Ñ Ð¾Ñ Ð·Ð°ÐºÐ°Ð·Ñика поÑледоваÑелÑноÑÑÑ"
+
+msgctxt "field:stock.configuration,shipment_out_sequence:0"
+msgid "Customer Shipment Sequence"
+msgstr "ÐÑгÑÑзка заказÑÐ¸ÐºÑ Ð¿Ð¾ÑледоваÑелÑноÑÑÑ"
+
+msgctxt "field:stock.inventory,company:0"
+msgid "Company"
+msgstr "ÐомпаниÑ"
+
+msgctxt "field:stock.inventory,date:0"
+msgid "Date"
+msgstr "ÐаÑа"
+
+msgctxt "field:stock.inventory,lines:0"
+msgid "Lines"
+msgstr "СÑÑоки"
+
+msgctxt "field:stock.inventory,location:0"
+msgid "Location"
+msgstr "ÐеÑÑо"
+
+msgctxt "field:stock.inventory,lost_found:0"
+msgid "Lost and Found"
+msgstr "УÑÑаÑеннÑй и обÑеÑеннÑй"
+
+msgctxt "field:stock.inventory,rec_name:0"
+msgid "Name"
+msgstr "Ðаименование"
+
+msgctxt "field:stock.inventory,state:0"
+msgid "State"
+msgstr "СоÑÑоÑние"
+
+msgctxt "field:stock.inventory.line,expected_quantity:0"
+msgid "Expected Quantity"
+msgstr "Ðжидаемое колиÑеÑÑво"
+
+msgctxt "field:stock.inventory.line,inventory:0"
+msgid "Inventory"
+msgstr "ÐнвенÑаÑизаÑиÑ"
+
+msgctxt "field:stock.inventory.line,move:0"
+msgid "Move"
+msgstr "ÐеÑемеÑение"
+
+msgctxt "field:stock.inventory.line,product:0"
+msgid "Product"
+msgstr "ТÐЦ"
+
+msgctxt "field:stock.inventory.line,quantity:0"
+msgid "Quantity"
+msgstr "Ðол-во"
+
+msgctxt "field:stock.inventory.line,rec_name:0"
+msgid "Name"
+msgstr "Ðаименование"
+
+msgctxt "field:stock.inventory.line,unit_digits:0"
+msgid "Unit Digits"
+msgstr "ÐÑÑппа ÑиÑÑ"
+
+msgctxt "field:stock.inventory.line,uom:0"
+msgid "UOM"
+msgstr "Ðд.изм."
+
+msgctxt "field:stock.location,active:0"
+msgid "Active"
+msgstr "ÐейÑÑвиÑелÑннÑй"
+
+msgctxt "field:stock.location,address:0"
+msgid "Address"
+msgstr "ÐдÑеÑ"
+
+msgctxt "field:stock.location,childs:0"
+msgid "Children"
+msgstr "ÐодÑиненÑй"
+
+msgctxt "field:stock.location,code:0"
+msgid "Code"
+msgstr "Ðод локаÑии"
+
+msgctxt "field:stock.location,forecast_quantity:0"
+msgid "Forecast Quantity"
+msgstr "ÐÑогноз ÐолиÑеÑÑво"
+
+msgctxt "field:stock.location,input_location:0"
+msgid "Input"
+msgstr "ÐÑ
одÑÑий"
+
+msgctxt "field:stock.location,left:0"
+msgid "Left"
+msgstr "ÐÐµÐ²Ð°Ñ ÑÑоÑона"
+
+msgctxt "field:stock.location,name:0"
+msgid "Name"
+msgstr "Ðаименование"
+
+msgctxt "field:stock.location,output_location:0"
+msgid "Output"
+msgstr "ÐÑÑ
одÑÑий"
+
+msgctxt "field:stock.location,parent:0"
+msgid "Parent"
+msgstr "ÐÑновной"
+
+msgctxt "field:stock.location,quantity:0"
+msgid "Quantity"
+msgstr "Ðол-во"
+
+msgctxt "field:stock.location,rec_name:0"
+msgid "Name"
+msgstr "Ðаименование"
+
+msgctxt "field:stock.location,right:0"
+msgid "Right"
+msgstr "ÐÑÐ°Ð²Ð°Ñ ÑÑоÑона"
+
+msgctxt "field:stock.location,storage_location:0"
+msgid "Storage"
+msgstr "Ð¥ÑанилиÑе"
+
+msgctxt "field:stock.location,type:0"
+msgid "Location type"
+msgstr "Тип ÑаÑположение"
+
+msgctxt "field:stock.location_stock_date.init,forecast_date:0"
+msgid "At Date"
+msgstr "Ðо даÑе"
+
+msgctxt "field:stock.move,company:0"
+msgid "Company"
+msgstr "ÐомпаниÑ"
+
+msgctxt "field:stock.move,cost_price:0"
+msgid "Cost Price"
+msgstr "СебеÑÑоимоÑÑÑ"
+
+msgctxt "field:stock.move,currency:0"
+msgid "Currency"
+msgstr "ÐалÑÑа"
+
+msgctxt "field:stock.move,effective_date:0"
+msgid "Effective Date"
+msgstr "УÑеÑÐ½Ð°Ñ Ð´Ð°Ñа"
+
+msgctxt "field:stock.move,from_location:0"
+msgid "From Location"
+msgstr "Ðз меÑÑа"
+
+msgctxt "field:stock.move,internal_quantity:0"
+msgid "Internal Quantity"
+msgstr ""
+
+msgctxt "field:stock.move,planned_date:0"
+msgid "Planned Date"
+msgstr "ÐÐ»Ð°Ð½Ð¾Ð²Ð°Ñ Ð´Ð°Ñа"
+
+msgctxt "field:stock.move,product:0"
+msgid "Product"
+msgstr "ТÐЦ"
+
+msgctxt "field:stock.move,quantity:0"
+msgid "Quantity"
+msgstr "Ðол-во"
+
+msgctxt "field:stock.move,rec_name:0"
+msgid "Name"
+msgstr "Ðаименование"
+
+msgctxt "field:stock.move,shipment_in:0"
+msgid "Supplier Shipment"
+msgstr "ÐÑиÑ
од Ð¾Ñ Ð¿Ð¾ÑÑавÑика"
+
+msgctxt "field:stock.move,shipment_in_return:0"
+msgid "Supplier Return Shipment"
+msgstr "ÐозвÑÐ°Ñ Ð¿Ð¾ÑÑавÑикÑ"
+
+msgctxt "field:stock.move,shipment_internal:0"
+msgid "Internal Shipment"
+msgstr "ÐнÑÑÑеннее пеÑемеÑение"
+
+msgctxt "field:stock.move,shipment_out:0"
+msgid "Customer Shipment"
+msgstr "ÐÑгÑÑзка заказÑикÑ"
+
+msgctxt "field:stock.move,shipment_out_return:0"
+msgid "Customer Return Shipment"
+msgstr "ÐозвÑÐ°Ñ Ð¾Ñ Ð·Ð°ÐºÐ°Ð·Ñика"
+
+msgctxt "field:stock.move,state:0"
+msgid "State"
+msgstr "СоÑÑоÑние"
+
+msgctxt "field:stock.move,to_location:0"
+msgid "To Location"
+msgstr "РмеÑÑо"
+
+msgctxt "field:stock.move,unit_digits:0"
+msgid "Unit Digits"
+msgstr "ÐÑÑппа ÑиÑÑ"
+
+msgctxt "field:stock.move,unit_price:0"
+msgid "Unit Price"
+msgstr "Цена за единиÑÑ"
+
+msgctxt "field:stock.move,unit_price_required:0"
+msgid "Unit Price Required"
+msgstr "ТÑебÑеÑÑÑ Ñена за единиÑÑ"
+
+msgctxt "field:stock.move,uom:0"
+msgid "Uom"
+msgstr "Ðд.изм."
+
+msgctxt "field:stock.period,caches:0"
+msgid "Caches"
+msgstr ""
+
+#, fuzzy
+msgctxt "field:stock.period,company:0"
+msgid "Company"
+msgstr "УÑеÑ.оÑг."
+
+#, fuzzy
+msgctxt "field:stock.period,date:0"
+msgid "Date"
+msgstr "ÐаÑа"
+
+#, fuzzy
+msgctxt "field:stock.period,rec_name:0"
+msgid "Name"
+msgstr "Ðаименование"
+
+#, fuzzy
+msgctxt "field:stock.period,state:0"
+msgid "State"
+msgstr "СÑаÑÑÑ"
+
+msgctxt "field:stock.period.cache,internal_quantity:0"
+msgid "Internal Quantity"
+msgstr ""
+
+#, fuzzy
+msgctxt "field:stock.period.cache,location:0"
+msgid "Location"
+msgstr "ÐеÑÑоположение"
+
+msgctxt "field:stock.period.cache,period:0"
+msgid "Period"
+msgstr ""
+
+#, fuzzy
+msgctxt "field:stock.period.cache,product:0"
+msgid "Product"
+msgstr "ТоваÑно маÑеÑиалÑнÑе ÑенноÑÑи (ТÐЦ)"
+
+#, fuzzy
+msgctxt "field:stock.period.cache,rec_name:0"
+msgid "Name"
+msgstr "Ðаименование"
+
+msgctxt "field:stock.product_stock_date.init,forecast_date:0"
+msgid "At Date"
+msgstr "Ðо даÑе"
+
+msgctxt "field:stock.shipment.in,code:0"
+msgid "Code"
+msgstr "Ðод оÑгÑÑзки"
+
+#, fuzzy
+msgctxt "field:stock.shipment.in,company:0"
+msgid "Company"
+msgstr "УÑеÑ.оÑг."
+
+msgctxt "field:stock.shipment.in,contact_address:0"
+msgid "Contact Address"
+msgstr "ÐонÑакÑнÑй адÑеÑ"
+
+msgctxt "field:stock.shipment.in,effective_date:0"
+msgid "Effective Date"
+msgstr "УÑеÑÐ½Ð°Ñ Ð´Ð°Ñа"
+
+msgctxt "field:stock.shipment.in,incoming_moves:0"
+msgid "Incoming Moves"
+msgstr "ÐÑ
одÑÑÐ°Ñ Ð¿Ð¾ÑÑавка"
+
+msgctxt "field:stock.shipment.in,inventory_moves:0"
+msgid "Inventory Moves"
+msgstr "УÑÐµÑ Ð¿ÐµÑемеÑений"
+
+msgctxt "field:stock.shipment.in,moves:0"
+msgid "Moves"
+msgstr "ÐеÑемеÑениÑ"
+
+msgctxt "field:stock.shipment.in,planned_date:0"
+msgid "Planned Date"
+msgstr "ÐÐ»Ð°Ð½Ð¾Ð²Ð°Ñ Ð´Ð°Ñа"
+
+msgctxt "field:stock.shipment.in,rec_name:0"
+msgid "Name"
+msgstr "Ðаименование"
+
+msgctxt "field:stock.shipment.in,reference:0"
+msgid "Reference"
+msgstr "СÑÑлка"
+
+msgctxt "field:stock.shipment.in,state:0"
+msgid "State"
+msgstr "СоÑÑоÑние"
+
+msgctxt "field:stock.shipment.in,supplier:0"
+msgid "Supplier"
+msgstr "ÐоÑÑавÑик"
+
+msgctxt "field:stock.shipment.in,warehouse:0"
+msgid "Warehouse"
+msgstr "ТоваÑнÑй Ñклад"
+
+msgctxt "field:stock.shipment.in.return,code:0"
+msgid "Code"
+msgstr "Ðод возвÑаÑа оÑгÑÑзки"
+
+#, fuzzy
+msgctxt "field:stock.shipment.in.return,company:0"
+msgid "Company"
+msgstr "УÑеÑ.оÑг."
+
+msgctxt "field:stock.shipment.in.return,effective_date:0"
+msgid "Effective Date"
+msgstr "УÑеÑÐ½Ð°Ñ Ð´Ð°Ñа"
+
+msgctxt "field:stock.shipment.in.return,from_location:0"
+msgid "From Location"
+msgstr "Ðз меÑÑа"
+
+msgctxt "field:stock.shipment.in.return,moves:0"
+msgid "Moves"
+msgstr "ÐеÑемеÑениÑ"
+
+msgctxt "field:stock.shipment.in.return,planned_date:0"
+msgid "Planned Date"
+msgstr "ÐÐ»Ð°Ð½Ð¾Ð²Ð°Ñ Ð´Ð°Ñа"
+
+msgctxt "field:stock.shipment.in.return,rec_name:0"
+msgid "Name"
+msgstr "Ðаименование"
+
+msgctxt "field:stock.shipment.in.return,reference:0"
+msgid "Reference"
+msgstr "СÑÑлка"
+
+msgctxt "field:stock.shipment.in.return,state:0"
+msgid "State"
+msgstr "СоÑÑоÑние"
+
+msgctxt "field:stock.shipment.in.return,to_location:0"
+msgid "To Location"
+msgstr "РмеÑÑо"
+
+#, fuzzy
+msgctxt "field:stock.shipment.in.return.assign.assign_failed,moves:0"
+msgid "Moves"
+msgstr "ÐеÑемеÑениÑ"
+
+msgctxt "field:stock.shipment.internal,code:0"
+msgid "Code"
+msgstr "Ðод внÑÑÑенней оÑгÑÑзки"
+
+#, fuzzy
+msgctxt "field:stock.shipment.internal,company:0"
+msgid "Company"
+msgstr "УÑеÑ.оÑг."
+
+msgctxt "field:stock.shipment.internal,effective_date:0"
+msgid "Effective Date"
+msgstr "УÑеÑÐ½Ð°Ñ Ð´Ð°Ñа"
+
+msgctxt "field:stock.shipment.internal,from_location:0"
+msgid "From Location"
+msgstr "Ðз меÑÑа"
+
+msgctxt "field:stock.shipment.internal,moves:0"
+msgid "Moves"
+msgstr "ÐеÑемеÑениÑ"
+
+msgctxt "field:stock.shipment.internal,planned_date:0"
+msgid "Planned Date"
+msgstr "ÐÐ»Ð°Ð½Ð¾Ð²Ð°Ñ Ð´Ð°Ñа"
+
+msgctxt "field:stock.shipment.internal,rec_name:0"
+msgid "Name"
+msgstr "Ðаименование"
+
+msgctxt "field:stock.shipment.internal,reference:0"
+msgid "Reference"
+msgstr "СÑÑлка"
+
+msgctxt "field:stock.shipment.internal,state:0"
+msgid "State"
+msgstr "СоÑÑоÑние"
+
+msgctxt "field:stock.shipment.internal,to_location:0"
+msgid "To Location"
+msgstr "РмеÑÑо"
+
+#, fuzzy
+msgctxt "field:stock.shipment.internal.assign.assign_failed,moves:0"
+msgid "Moves"
+msgstr "ÐеÑемеÑениÑ"
+
+msgctxt "field:stock.shipment.out,code:0"
+msgid "Code"
+msgstr "Ðод иÑÑ
одÑÑей оÑгÑÑзки"
+
+#, fuzzy
+msgctxt "field:stock.shipment.out,company:0"
+msgid "Company"
+msgstr "УÑеÑ.оÑг."
+
+msgctxt "field:stock.shipment.out,customer:0"
+msgid "Customer"
+msgstr "ÐаказÑик"
+
+msgctxt "field:stock.shipment.out,delivery_address:0"
+msgid "Delivery Address"
+msgstr "ÐдÑÐµÑ Ð´Ð¾ÑÑавки"
+
+msgctxt "field:stock.shipment.out,effective_date:0"
+msgid "Effective Date"
+msgstr "УÑеÑÐ½Ð°Ñ Ð´Ð°Ñа"
+
+msgctxt "field:stock.shipment.out,inventory_moves:0"
+msgid "Inventory Moves"
+msgstr "УÑÐµÑ Ð¿ÐµÑемеÑений"
+
+msgctxt "field:stock.shipment.out,moves:0"
+msgid "Moves"
+msgstr "ÐеÑемеÑениÑ"
+
+msgctxt "field:stock.shipment.out,outgoing_moves:0"
+msgid "Outgoing Moves"
+msgstr "ÐнеÑнее пеÑемеÑение"
+
+msgctxt "field:stock.shipment.out,planned_date:0"
+msgid "Planned Date"
+msgstr "ÐÐ»Ð°Ð½Ð¾Ð²Ð°Ñ Ð´Ð°Ñа"
+
+msgctxt "field:stock.shipment.out,rec_name:0"
+msgid "Name"
+msgstr "Ðаименование"
+
+msgctxt "field:stock.shipment.out,reference:0"
+msgid "Reference"
+msgstr "СÑÑлка"
+
+msgctxt "field:stock.shipment.out,state:0"
+msgid "State"
+msgstr "СоÑÑоÑние"
+
+msgctxt "field:stock.shipment.out,warehouse:0"
+msgid "Warehouse"
+msgstr "ТоваÑнÑй Ñклад"
+
+#, fuzzy
+msgctxt "field:stock.shipment.out.assign.assign_failed,inventory_moves:0"
+msgid "Inventory Moves"
+msgstr "УÑÐµÑ Ð¿ÐµÑемеÑений"
+
+msgctxt "field:stock.shipment.out.return,code:0"
+msgid "Code"
+msgstr "Ðод возвÑаÑа оÑгÑÑзки"
+
+#, fuzzy
+msgctxt "field:stock.shipment.out.return,company:0"
+msgid "Company"
+msgstr "УÑеÑ.оÑг."
+
+msgctxt "field:stock.shipment.out.return,customer:0"
+msgid "Customer"
+msgstr "ÐаказÑик"
+
+msgctxt "field:stock.shipment.out.return,delivery_address:0"
+msgid "Delivery Address"
+msgstr "ÐдÑÐµÑ Ð´Ð¾ÑÑавки"
+
+msgctxt "field:stock.shipment.out.return,effective_date:0"
+msgid "Effective Date"
+msgstr "УÑеÑÐ½Ð°Ñ Ð´Ð°Ñа"
+
+msgctxt "field:stock.shipment.out.return,incoming_moves:0"
+msgid "Incoming Moves"
+msgstr "ÐÑ
одÑÑÐ°Ñ Ð¿Ð¾ÑÑавка"
+
+msgctxt "field:stock.shipment.out.return,inventory_moves:0"
+msgid "Inventory Moves"
+msgstr "УÑÐµÑ Ð¿ÐµÑемеÑений"
+
+msgctxt "field:stock.shipment.out.return,moves:0"
+msgid "Moves"
+msgstr "ÐеÑемеÑениÑ"
+
+msgctxt "field:stock.shipment.out.return,planned_date:0"
+msgid "Planned Date"
+msgstr "ÐÐ»Ð°Ð½Ð¾Ð²Ð°Ñ Ð´Ð°Ñа"
+
+msgctxt "field:stock.shipment.out.return,rec_name:0"
+msgid "Name"
+msgstr "Ðаименование"
+
+msgctxt "field:stock.shipment.out.return,reference:0"
+msgid "Reference"
+msgstr "СÑÑлка"
+
+msgctxt "field:stock.shipment.out.return,state:0"
+msgid "State"
+msgstr "СоÑÑоÑние"
+
+msgctxt "field:stock.shipment.out.return,warehouse:0"
+msgid "Warehouse"
+msgstr "ТоваÑнÑй Ñклад"
+
+msgctxt "help:party.party,customer_location:0"
+msgid "The default destination location when sending products to the party."
+msgstr "ÐеÑÑо назнаÑÐµÐ½Ð¸Ñ Ð¿Ð¾ ÑмолÑÐ°Ð½Ð¸Ñ Ð¿Ñи оÑпÑавке пÑодÑкÑии конÑÑагенÑÑ."
+
+msgctxt "help:party.party,supplier_location:0"
+msgid "The default source location when receiving products from the party."
+msgstr "Ðо ÑмолÑаниÑ, меÑÑоположение пÑи полÑÑении пÑодÑкÑии Ð¾Ñ ÐºÐ¾Ð½ÑÑагенÑа."
+
+msgctxt "help:stock.location_stock_date.init,forecast_date:0"
+msgid ""
+"Allow to compute expected stock quantities for this date.\n"
+"* An empty value is an infinite date in the future.\n"
+"* A date in the past will provide historical values."
+msgstr ""
+
+msgctxt "help:stock.product_stock_date.init,forecast_date:0"
+msgid ""
+"Allow to compute expected stock quantities for this date.\n"
+"* An empty value is an infinite date in the future.\n"
+"* A date in the past will provide historical values."
+msgstr ""
+
+msgctxt "model:ir.action,name:act_inventory_form"
+msgid "Inventories"
+msgstr "ÐнвенÑаÑизаÑиÑ"
+
+#, fuzzy
+msgctxt "model:ir.action,name:act_inventory_form_draft"
+msgid "Draft Inventories"
+msgstr "ЧеÑновики инвенÑаÑизаÑий"
+
+#, fuzzy
+msgctxt "model:ir.action,name:act_location_form"
+msgid "Locations"
+msgstr "ÐзмениÑÑ Ð¼ÐµÑÑа Ñ
ÑанениÑ"
+
+msgctxt "model:ir.action,name:act_location_quantity_tree"
+msgid "Product Stock"
+msgstr "Ð¥ÑанилиÑе ТÐЦ"
+
+msgctxt "model:ir.action,name:act_location_tree"
+msgid "Locations"
+msgstr "ÐеÑÑа"
+
+msgctxt "model:ir.action,name:act_move_form"
+msgid "Moves"
+msgstr "ÐеÑемеÑениÑ"
+
+msgctxt "model:ir.action,name:act_move_form_cust"
+msgid "Moves to Customers"
+msgstr "ÐÑгÑÑзка заказÑикам"
+
+msgctxt "model:ir.action,name:act_move_form_supp"
+msgid "Moves from Suppliers"
+msgstr "ÐоÑÑавки Ð¾Ñ Ð¿Ð¾ÑÑавÑиков"
+
+msgctxt "model:ir.action,name:act_move_form_supp_proceed"
+msgid "Moves from Suppliers Waiting Arrival"
+msgstr "ÐжидаÑÑийÑÑ Ð¿ÑиÑ
од Ð¾Ñ Ð¿Ð¾ÑÑавÑика"
+
+msgctxt "model:ir.action,name:act_period_list"
+msgid "Periods"
+msgstr ""
+
+msgctxt "model:ir.action,name:act_product_by_location"
+msgid "Products by Locations"
+msgstr "ТÐЦ по меÑÑонаÑ
ождениÑм"
+
+msgctxt "model:ir.action,name:act_shipment_in_draft"
+msgid "Draft Supplier Shipment"
+msgstr ""
+
+msgctxt "model:ir.action,name:act_shipment_in_form"
+msgid "Supplier Shipments"
+msgstr "ÐÑиÑ
од Ð¾Ñ Ð¿Ð¾ÑÑавÑиков"
+
+msgctxt "model:ir.action,name:act_shipment_in_form_received"
+msgid "Received Supplier shipments"
+msgstr "ÐоÑÑÑÐ¿Ð»ÐµÐ½Ð¸Ñ Ð¾Ñ Ð¿Ð¾ÑÑавÑика"
+
+msgctxt "model:ir.action,name:act_shipment_in_return_form"
+msgid "Supplier Return Shipments"
+msgstr "ÐозвÑаÑÑ Ð¿Ð¾ÑÑавÑикÑ"
+
+msgctxt "model:ir.action,name:act_shipment_internal_assigned_form"
+msgid "Assigned Internal Shipments"
+msgstr "ÐÑполненнÑе внÑÑÑенние пеÑемеÑениÑ"
+
+msgctxt "model:ir.action,name:act_shipment_internal_draft_form"
+msgid "Draft Internal Shipments"
+msgstr "ЧеÑновик внÑÑÑенниÑ
пеÑемеÑений"
+
+msgctxt "model:ir.action,name:act_shipment_internal_form"
+msgid "Internal Shipments"
+msgstr "ÐнÑÑÑенние пеÑемеÑениÑ"
+
+msgctxt "model:ir.action,name:act_shipment_internal_waiting_form"
+msgid "Internal Shipments Waiting Assignation"
+msgstr "ÐнÑÑÑенние пеÑемеÑÐµÐ½Ð¸Ñ Ð² ожидании"
+
+msgctxt "model:ir.action,name:act_shipment_out_form"
+msgid "Customer Shipments"
+msgstr "ÐÑгÑÑзки заказÑикÑ"
+
+msgctxt "model:ir.action,name:act_shipment_out_form2"
+msgid "Customer Shipments"
+msgstr "ÐÑгÑÑзки заказÑикÑ"
+
+msgctxt "model:ir.action,name:act_shipment_out_form3"
+msgid "Supplier Shipments"
+msgstr "ÐÑиÑ
од Ð¾Ñ Ð¿Ð¾ÑÑавÑиков"
+
+msgctxt "model:ir.action,name:act_shipment_out_form_assigned"
+msgid "Assigned Customer Shipments"
+msgstr "ÐÑÑÐ·Ñ Ð¿ÐµÑеданнÑе заказÑикÑ"
+
+msgctxt "model:ir.action,name:act_shipment_out_form_ready"
+msgid "Customer Shipments Ready for Shipping"
+msgstr "ÐÑÑз заказÑика гоÑовÑй к оÑгÑÑзке"
+
+msgctxt "model:ir.action,name:act_shipment_out_form_waiting"
+msgid "Customer Shipments Waiting Assignation"
+msgstr "ÐлиенÑÑкий гÑÑз ожидаÑÑий назнаÑениÑ"
+
+msgctxt "model:ir.action,name:act_shipment_out_return_form"
+msgid "Customer Return Shipments"
+msgstr "ÐозвÑаÑÑ Ð¾Ñ Ð·Ð°ÐºÐ°Ð·Ñика"
+
+#, fuzzy
+msgctxt "model:ir.action,name:act_stock_configuration_form"
+msgid "Stock Configuration"
+msgstr "ÐонÑигÑÑаÑÐ¸Ñ Ñклада"
+
+msgctxt "model:ir.action,name:create_shipment_out_return"
+msgid "Create Return Shipment"
+msgstr "Создание обÑаÑной оÑпÑавки"
+
+msgctxt "model:ir.action,name:report_shipment_in_restocking_list"
+msgid "Restocking List"
+msgstr "СпиÑок пополнениÑ"
+
+msgctxt "model:ir.action,name:report_shipment_internal"
+msgid "Internal Shipment"
+msgstr "ÐнÑÑÑеннее пеÑемеÑение"
+
+msgctxt "model:ir.action,name:report_shipment_out_delivery_note"
+msgid "Delivery Note"
+msgstr "Ðакладной"
+
+msgctxt "model:ir.action,name:report_shipment_out_picking_list"
+msgid "Picking List"
+msgstr "Ð¡Ð±Ð¾Ñ Ð¡Ð¿Ð¸Ñок"
+
+msgctxt "model:ir.action,name:report_shipment_out_return_restocking_list"
+msgid "Restocking List"
+msgstr "СпиÑок пополнениÑ"
+
+msgctxt "model:ir.action,name:wizard_complete_inventory"
+msgid "Complete Inventory"
+msgstr "ÐÐ¾Ð»Ð½Ð°Ñ Ð¸Ð½Ð²ÐµÐ½ÑаÑизаÑиÑ"
+
+msgctxt "model:ir.action,name:wizard_location_open"
+msgid "Product by Location"
+msgstr "ТÐЦ по меÑÑонаÑ
ождениÑ"
+
+msgctxt "model:ir.action,name:wizard_product_open"
+msgid "Product Quantities"
+msgstr "ÐолиÑеÑÑва ТоваÑа"
+
+msgctxt "model:ir.action,name:wizard_shipment_in_return_assign"
+msgid "Assign Purchase Return Shipment"
+msgstr ""
+
+msgctxt "model:ir.action,name:wizard_shipment_internal_assign"
+msgid "Assign Shipment Internal"
+msgstr "ÐнÑÑÑенние назнаÑение поÑÑавки "
+
+msgctxt "model:ir.action,name:wizard_shipment_out_assign"
+msgid "Assign Shipment Out"
+msgstr "ÐнеÑнее назнаÑение гÑÑза"
+
+msgctxt "model:ir.sequence,name:sequence_shipment_in"
+msgid "Supplier Shipment"
+msgstr "ÐÑиÑ
од Ð¾Ñ Ð¿Ð¾ÑÑавÑика"
+
+msgctxt "model:ir.sequence,name:sequence_shipment_in_return"
+msgid "Supplier Return Shipment"
+msgstr "ÐозвÑÐ°Ñ Ð¿Ð¾ÑÑавÑикÑ"
+
+msgctxt "model:ir.sequence,name:sequence_shipment_internal"
+msgid "Internal Shipment"
+msgstr "ÐнÑÑÑеннее пеÑемеÑение"
+
+msgctxt "model:ir.sequence,name:sequence_shipment_out"
+msgid "Customer Shipment"
+msgstr "ÐÑгÑÑзка заказÑикÑ"
+
+msgctxt "model:ir.sequence,name:sequence_shipment_out_return"
+msgid "Customer Return Shipment"
+msgstr "ÐозвÑÐ°Ñ Ð¾Ñ Ð·Ð°ÐºÐ°Ð·Ñика"
+
+msgctxt "model:ir.sequence.type,name:sequence_type_shipment_in"
+msgid "Supplier Shipment"
+msgstr "ÐÑиÑ
од Ð¾Ñ Ð¿Ð¾ÑÑавÑика"
+
+msgctxt "model:ir.sequence.type,name:sequence_type_shipment_in_return"
+msgid "Supplier Return Shipment"
+msgstr "ÐозвÑÐ°Ñ Ð¿Ð¾ÑÑавÑикÑ"
+
+msgctxt "model:ir.sequence.type,name:sequence_type_shipment_internal"
+msgid "Internal Shipment"
+msgstr "ÐнÑÑÑеннее пеÑемеÑение"
+
+msgctxt "model:ir.sequence.type,name:sequence_type_shipment_out"
+msgid "Customer Shipment"
+msgstr "ÐÑгÑÑзка заказÑикÑ"
+
+msgctxt "model:ir.sequence.type,name:sequence_type_shipment_out_return"
+msgid "Customer Return Shipment"
+msgstr "ÐозвÑÐ°Ñ Ð¾Ñ Ð·Ð°ÐºÐ°Ð·Ñика"
+
+msgctxt "model:ir.ui.menu,name:menu_configuration"
+msgid "Configuration"
+msgstr "ÐонÑигÑÑаÑиÑ"
+
+msgctxt "model:ir.ui.menu,name:menu_inventory_form"
+msgid "Inventories"
+msgstr "ÐнвенÑаÑизаÑии"
+
+msgctxt "model:ir.ui.menu,name:menu_inventory_form_draft"
+msgid "Draft Inventories"
+msgstr "ЧеÑновики инвенÑаÑизаÑий"
+
+#, fuzzy
+msgctxt "model:ir.ui.menu,name:menu_location_form"
+msgid "Locations"
+msgstr "ÐзмениÑÑ Ð¼ÐµÑÑа Ñ
ÑанениÑ"
+
+msgctxt "model:ir.ui.menu,name:menu_location_tree"
+msgid "Locations"
+msgstr "ÐеÑÑа Ñ
ÑанениÑ"
+
+msgctxt "model:ir.ui.menu,name:menu_move_form"
+msgid "Moves"
+msgstr "ÐеÑемеÑениÑ"
+
+msgctxt "model:ir.ui.menu,name:menu_move_form_cust"
+msgid "Moves to Customers"
+msgstr "ÐÑгÑÑзки заказÑикам"
+
+msgctxt "model:ir.ui.menu,name:menu_move_form_supp"
+msgid "Moves from Suppliers"
+msgstr "ÐоÑÑавки Ð¾Ñ Ð¿Ð¾ÑÑавÑиков"
+
+msgctxt "model:ir.ui.menu,name:menu_move_form_supp_proceed"
+msgid "Moves from Suppliers Waiting Arrival"
+msgstr "ÐжидаÑÑийÑÑ Ð¿ÑиÑ
од Ð¾Ñ Ð¿Ð¾ÑÑавÑика"
+
+msgctxt "model:ir.ui.menu,name:menu_period_list"
+msgid "Periods"
+msgstr ""
+
+msgctxt "model:ir.ui.menu,name:menu_reporting"
+msgid "Reporting"
+msgstr "ÐÑÑеÑноÑÑÑ"
+
+msgctxt "model:ir.ui.menu,name:menu_shipment_in_draft"
+msgid "Draft Supplier Shipment"
+msgstr ""
+
+msgctxt "model:ir.ui.menu,name:menu_shipment_in_form"
+msgid "Supplier Shipments"
+msgstr "ÐÑиÑ
од Ð¾Ñ Ð¿Ð¾ÑÑавÑиков"
+
+msgctxt "model:ir.ui.menu,name:menu_shipment_in_received"
+msgid "Received Supplier shipments"
+msgstr "ÐоÑÑÑÐ¿Ð»ÐµÐ½Ð¸Ñ Ð¾Ñ Ð¿Ð¾ÑÑавÑика"
+
+msgctxt "model:ir.ui.menu,name:menu_shipment_in_return_form"
+msgid "Supplier Return Shipments"
+msgstr "ÐозвÑаÑÑ Ð¿Ð¾ÑÑавÑикÑ"
+
+msgctxt "model:ir.ui.menu,name:menu_shipment_internal_assigned_form"
+msgid "Assigned Internal Shipments"
+msgstr "ÐÑполненнÑе внÑÑÑенние пеÑемеÑениÑ"
+
+msgctxt "model:ir.ui.menu,name:menu_shipment_internal_draft_form"
+msgid "Draft Internal Shipments"
+msgstr "ЧеÑновик внÑÑÑенниÑ
пеÑемеÑений"
+
+msgctxt "model:ir.ui.menu,name:menu_shipment_internal_form"
+msgid "Internal Shipments"
+msgstr "ÐнÑÑÑенние пеÑемеÑениÑ"
+
+msgctxt "model:ir.ui.menu,name:menu_shipment_internal_waiting_form"
+msgid "Internal Shipments Waiting Assignation"
+msgstr "ÐнÑÑÑенние пеÑемеÑÐµÐ½Ð¸Ñ Ð² ожидании"
+
+msgctxt "model:ir.ui.menu,name:menu_shipment_out_assigned"
+msgid "Assigned Customer Shipments"
+msgstr "ÐодÑвеÑжденнÑе оÑгÑÑзки заказÑикам"
+
+msgctxt "model:ir.ui.menu,name:menu_shipment_out_form"
+msgid "Customer Shipments"
+msgstr "ÐÑгÑÑзки заказÑикам"
+
+msgctxt "model:ir.ui.menu,name:menu_shipment_out_ready"
+msgid "Customer Shipments Ready for Shipping"
+msgstr "ÐÑгÑÑзки заказÑикам гоÑовÑе к оÑпÑавке"
+
+msgctxt "model:ir.ui.menu,name:menu_shipment_out_return_form"
+msgid "Customer Return Shipments"
+msgstr "ÐозвÑаÑÑ Ð¾Ñ Ð·Ð°ÐºÐ°Ð·Ñика"
+
+msgctxt "model:ir.ui.menu,name:menu_shipment_out_waiting"
+msgid "Customer Shipments Waiting Assignation"
+msgstr "ÐÑгÑÑзки заказÑикам в ожидании"
+
+#, fuzzy
+msgctxt "model:ir.ui.menu,name:menu_stock"
+msgid "Inventory & Stock"
+msgstr "УпÑавление Ñкладами"
+
+msgctxt "model:ir.ui.menu,name:menu_stock_configuration"
+msgid "Stock Configuration"
+msgstr "ÐонÑигÑÑаÑÐ¸Ñ Ñклада"
+
+msgctxt "model:res.group,name:group_stock"
+msgid "Stock"
+msgstr "Ð¥ÑанилиÑе"
+
+msgctxt "model:res.group,name:group_stock_admin"
+msgid "Stock Administration"
+msgstr "Ð¥ÑанилиÑе ÐдминиÑÑÑиÑование"
+
+msgctxt "model:res.group,name:group_stock_force_assignment"
+msgid "Stock Force Assignment"
+msgstr "Склад ÑÑкоÑенной погÑÑзки"
+
+msgctxt "model:stock.configuration,name:0"
+msgid "Stock Configuration"
+msgstr "ÐонÑигÑÑаÑÐ¸Ñ Ñклада"
+
+msgctxt "model:stock.inventory,name:0"
+msgid "Stock Inventory"
+msgstr "Ð¥ÑанилиÑе опиÑÑ"
+
+msgctxt "model:stock.inventory.line,name:0"
+msgid "Stock Inventory Line"
+msgstr "Ð¥ÑанилиÑе ÑÑÑока опиÑи"
+
+msgctxt "model:stock.location,name:0"
+msgid "Stock Location"
+msgstr "ÐеÑÑонаÑ
ождение Ñ
ÑанилиÑа"
+
+msgctxt "model:stock.location,name:location_customer"
+msgid "Customer"
+msgstr "ÐаказÑик"
+
+msgctxt "model:stock.location,name:location_input"
+msgid "Input Zone"
+msgstr "Ðона поÑÑавки"
+
+msgctxt "model:stock.location,name:location_lost_found"
+msgid "Lost and Found"
+msgstr "УÑÑаÑеннÑй и обÑеÑеннÑй"
+
+msgctxt "model:stock.location,name:location_output"
+msgid "Output Zone"
+msgstr "Ðона оÑгÑÑзки"
+
+msgctxt "model:stock.location,name:location_storage"
+msgid "Storage Zone"
+msgstr "Ðона Ñ
ÑанениÑ"
+
+msgctxt "model:stock.location,name:location_supplier"
+msgid "Supplier"
+msgstr "ÐоÑÑавÑик"
+
+msgctxt "model:stock.location,name:location_warehouse"
+msgid "Warehouse"
+msgstr "ТоваÑнÑй Ñклад"
+
+msgctxt "model:stock.location_stock_date.init,name:0"
+msgid "Compute stock quantities"
+msgstr "ÐÑÑиÑление колиÑеÑÑво на Ñкладе"
+
+msgctxt "model:stock.move,name:0"
+msgid "Stock Move"
+msgstr "Ð¥ÑанилиÑе пеÑемеÑение ÑоваÑа"
+
+msgctxt "model:stock.period,name:0"
+msgid "Stock Period"
+msgstr ""
+
+msgctxt "model:stock.period.cache,name:0"
+msgid ""
+"\n"
+" Stock Period Cache\n"
+"\n"
+" It is used to store cached computation of stock quantities.\n"
+" "
+msgstr ""
+
+msgctxt "model:stock.product_stock_date.init,name:0"
+msgid "Compute stock quantities"
+msgstr "ÐÑÑиÑление колиÑеÑÑво на Ñкладе"
+
+msgctxt "model:stock.shipment.in,name:0"
+msgid "Supplier Shipment"
+msgstr "ÐÑиÑ
од Ð¾Ñ Ð¿Ð¾ÑÑавÑика"
+
+msgctxt "model:stock.shipment.in.return,name:0"
+msgid "Supplier Return Shipment"
+msgstr "ÐозвÑÐ°Ñ Ð¿Ð¾ÑÑавÑикÑ"
+
+msgctxt "model:stock.shipment.in.return.assign.assign_failed,name:0"
+msgid "Assign Supplier Return Shipment Assign Failed"
+msgstr ""
+
+msgctxt "model:stock.shipment.internal,name:0"
+msgid "Internal Shipment"
+msgstr "ÐнÑÑÑеннее пеÑемеÑение"
+
+msgctxt "model:stock.shipment.internal.assign.assign_failed,name:0"
+msgid "Assign Shipment Internal Assign Failed"
+msgstr ""
+
+msgctxt "model:stock.shipment.out,name:0"
+msgid "Customer Shipment"
+msgstr "ÐÑгÑÑзка заказÑикÑ"
+
+msgctxt "model:stock.shipment.out.assign.assign_failed,name:0"
+msgid "Assign Shipment Out Assign Failed"
+msgstr ""
+
+msgctxt "model:stock.shipment.out.return,name:0"
+msgid "Customer Return Shipment"
+msgstr "ÐозвÑÐ°Ñ Ð¾Ñ Ð·Ð°ÐºÐ°Ð·Ñика"
+
+msgctxt "model:workflow,name:wkf_inventory"
+msgid "Inventory"
+msgstr "ÐнвенÑаÑизаÑиÑ"
+
+msgctxt "model:workflow,name:wkf_shipment_in_return"
+msgid "Supplier Return Shipment"
+msgstr "ÐозвÑÐ°Ñ Ð¿Ð¾ÑÑавÑикÑ"
+
+msgctxt "model:workflow,name:wkf_shipment_out_return"
+msgid "Customer Return Shipment"
+msgstr "ÐозвÑÐ°Ñ Ð¾Ñ Ð·Ð°ÐºÐ°Ð·Ñика"
+
+msgctxt "model:workflow,name:wkf_shipmentin"
+msgid "Supplier Shipment"
+msgstr "ÐÑиÑ
од Ð¾Ñ Ð¿Ð¾ÑÑавÑика"
+
+msgctxt "model:workflow,name:wkf_shipmentinternal"
+msgid "Internal Shipment"
+msgstr "ÐнÑÑÑеннее пеÑемеÑение"
+
+msgctxt "model:workflow,name:wkf_shipmentout"
+msgid "Customer Shipment"
+msgstr "ÐÑгÑÑзка заказÑикÑ"
+
+msgctxt "model:workflow.activity,name:inventory_act_cancel"
+msgid "Canceled"
+msgstr "ÐÑменено"
+
+msgctxt "model:workflow.activity,name:inventory_act_done"
+msgid "Done"
+msgstr "ÐÑполнено"
+
+msgctxt "model:workflow.activity,name:inventory_act_draft"
+msgid "Draft"
+msgstr "ЧеÑновик"
+
+msgctxt "model:workflow.activity,name:shipment_in_return_act_assigned"
+msgid "Assigned"
+msgstr "ÐеÑеданнÑй"
+
+msgctxt "model:workflow.activity,name:shipment_in_return_act_cancel"
+msgid "Canceled"
+msgstr "ÐÑменено"
+
+msgctxt "model:workflow.activity,name:shipment_in_return_act_done"
+msgid "Done"
+msgstr "ÐÑполнено"
+
+msgctxt "model:workflow.activity,name:shipment_in_return_act_draft"
+msgid "Draft"
+msgstr "ЧеÑновик"
+
+msgctxt "model:workflow.activity,name:shipment_in_return_act_waiting"
+msgid "Waiting"
+msgstr "Ðжидание"
+
+msgctxt "model:workflow.activity,name:shipment_out_return_act_cancel"
+msgid "Canceled"
+msgstr "ÐÑменено"
+
+msgctxt "model:workflow.activity,name:shipment_out_return_act_done"
+msgid "Done"
+msgstr "ÐÑполнено"
+
+msgctxt "model:workflow.activity,name:shipment_out_return_act_draft"
+msgid "Draft"
+msgstr "ЧеÑновик"
+
+msgctxt "model:workflow.activity,name:shipment_out_return_act_received"
+msgid "Received"
+msgstr "ÐоÑÑÑпило"
+
+msgctxt "model:workflow.activity,name:shipmentin_act_cancel"
+msgid "Canceled"
+msgstr "ÐÑменено"
+
+msgctxt "model:workflow.activity,name:shipmentin_act_done"
+msgid "Done"
+msgstr "ÐÑполнено"
+
+msgctxt "model:workflow.activity,name:shipmentin_act_draft"
+msgid "Draft"
+msgstr "ЧеÑновик"
+
+msgctxt "model:workflow.activity,name:shipmentin_act_received"
+msgid "Received"
+msgstr "ÐоÑÑÑпило"
+
+msgctxt "model:workflow.activity,name:shipmentinternal_act_assigned"
+msgid "Assigned"
+msgstr "ÐеÑеданнÑй"
+
+msgctxt "model:workflow.activity,name:shipmentinternal_act_cancel"
+msgid "Canceled"
+msgstr "ÐÑменено"
+
+msgctxt "model:workflow.activity,name:shipmentinternal_act_done"
+msgid "Done"
+msgstr "ÐÑполнено"
+
+msgctxt "model:workflow.activity,name:shipmentinternal_act_draft"
+msgid "Draft"
+msgstr "ЧеÑновик"
+
+msgctxt "model:workflow.activity,name:shipmentinternal_act_waiting"
+msgid "Waiting"
+msgstr "Ðжидание"
+
+msgctxt "model:workflow.activity,name:shipmentout_act_assigned"
+msgid "Assigned"
+msgstr "ÐеÑеданнÑй"
+
+msgctxt "model:workflow.activity,name:shipmentout_act_cancel"
+msgid "Canceled"
+msgstr "ÐÑменено"
+
+msgctxt "model:workflow.activity,name:shipmentout_act_done"
+msgid "Done"
+msgstr "ÐÑполнено"
+
+msgctxt "model:workflow.activity,name:shipmentout_act_draft"
+msgid "Draft"
+msgstr "ЧеÑновик"
+
+msgctxt "model:workflow.activity,name:shipmentout_act_packed"
+msgid "Packed"
+msgstr "УпакованнÑй"
+
+msgctxt "model:workflow.activity,name:shipmentout_act_waiting"
+msgid "Waiting"
+msgstr "Ðжидание"
+
+msgctxt "odt:stock.shipment.in.restocking_list:0"
+msgid "/"
+msgstr ""
+
+msgctxt "odt:stock.shipment.in.restocking_list:0"
+msgid "Code:"
+msgstr ""
+
+#, fuzzy
+msgctxt "odt:stock.shipment.in.restocking_list:0"
+msgid "E-Mail:"
+msgstr "E-Mail:"
+
+#, fuzzy
+msgctxt "odt:stock.shipment.in.restocking_list:0"
+msgid "From Location"
+msgstr "Ðз меÑÑа"
+
+#, fuzzy
+msgctxt "odt:stock.shipment.in.restocking_list:0"
+msgid "Phone:"
+msgstr "ТелеÑон:"
+
+msgctxt "odt:stock.shipment.in.restocking_list:0"
+msgid "Planned Date:"
+msgstr ""
+
+#, fuzzy
+msgctxt "odt:stock.shipment.in.restocking_list:0"
+msgid "Product"
+msgstr "ТоваÑно маÑеÑиалÑнÑе ÑенноÑÑи (ТÐЦ)"
+
+#, fuzzy
+msgctxt "odt:stock.shipment.in.restocking_list:0"
+msgid "Quantity"
+msgstr "Ðол-во"
+
+msgctxt "odt:stock.shipment.in.restocking_list:0"
+msgid "Reference:"
+msgstr ""
+
+#, fuzzy
+msgctxt "odt:stock.shipment.in.restocking_list:0"
+msgid "Restocking List"
+msgstr "СпиÑок пополнениÑ"
+
+msgctxt "odt:stock.shipment.in.restocking_list:0"
+msgid "Supplier:"
+msgstr ""
+
+#, fuzzy
+msgctxt "odt:stock.shipment.in.restocking_list:0"
+msgid "To Location"
+msgstr "РмеÑÑо"
+
+msgctxt "odt:stock.shipment.in.restocking_list:0"
+msgid "VAT Number:"
+msgstr ""
+
+msgctxt "odt:stock.shipment.in.restocking_list:0"
+msgid "Warehouse:"
+msgstr ""
+
+msgctxt "odt:stock.shipment.internal.report:0"
+msgid "/"
+msgstr ""
+
+msgctxt "odt:stock.shipment.internal.report:0"
+msgid "Code:"
+msgstr ""
+
+#, fuzzy
+msgctxt "odt:stock.shipment.internal.report:0"
+msgid "E-Mail:"
+msgstr "E-Mail:"
+
+#, fuzzy
+msgctxt "odt:stock.shipment.internal.report:0"
+msgid "From Location"
+msgstr "Ðз меÑÑа"
+
+msgctxt "odt:stock.shipment.internal.report:0"
+msgid "From Location:"
+msgstr ""
+
+#, fuzzy
+msgctxt "odt:stock.shipment.internal.report:0"
+msgid "Internal Shipment"
+msgstr "ÐнÑÑÑеннее пеÑемеÑение"
+
+#, fuzzy
+msgctxt "odt:stock.shipment.internal.report:0"
+msgid "Phone:"
+msgstr "ТелеÑон:"
+
+msgctxt "odt:stock.shipment.internal.report:0"
+msgid "Planned Date:"
+msgstr ""
+
+#, fuzzy
+msgctxt "odt:stock.shipment.internal.report:0"
+msgid "Product"
+msgstr "ТоваÑно маÑеÑиалÑнÑе ÑенноÑÑи (ТÐЦ)"
+
+#, fuzzy
+msgctxt "odt:stock.shipment.internal.report:0"
+msgid "Quantity"
+msgstr "Ðол-во"
+
+msgctxt "odt:stock.shipment.internal.report:0"
+msgid "Reference:"
+msgstr ""
+
+#, fuzzy
+msgctxt "odt:stock.shipment.internal.report:0"
+msgid "To Location"
+msgstr "РмеÑÑо"
+
+msgctxt "odt:stock.shipment.internal.report:0"
+msgid "To Location:"
+msgstr ""
+
+msgctxt "odt:stock.shipment.internal.report:0"
+msgid "VAT Number:"
+msgstr ""
+
+msgctxt "odt:stock.shipment.out.delivery_note:0"
+msgid "/"
+msgstr ""
+
+msgctxt "odt:stock.shipment.out.delivery_note:0"
+msgid "Customer Code:"
+msgstr ""
+
+#, fuzzy
+msgctxt "odt:stock.shipment.out.delivery_note:0"
+msgid "Date:"
+msgstr "ÐаÑа:"
+
+#, fuzzy
+msgctxt "odt:stock.shipment.out.delivery_note:0"
+msgid "Delivery Note"
+msgstr "Ðакладной"
+
+#, fuzzy
+msgctxt "odt:stock.shipment.out.delivery_note:0"
+msgid "E-Mail:"
+msgstr "E-Mail:"
+
+#, fuzzy
+msgctxt "odt:stock.shipment.out.delivery_note:0"
+msgid "Phone:"
+msgstr "ТелеÑон:"
+
+#, fuzzy
+msgctxt "odt:stock.shipment.out.delivery_note:0"
+msgid "Product"
+msgstr "ТоваÑно маÑеÑиалÑнÑе ÑенноÑÑи (ТÐЦ)"
+
+#, fuzzy
+msgctxt "odt:stock.shipment.out.delivery_note:0"
+msgid "Quantity"
+msgstr "Ðол-во"
+
+msgctxt "odt:stock.shipment.out.delivery_note:0"
+msgid "Reference:"
+msgstr ""
+
+msgctxt "odt:stock.shipment.out.delivery_note:0"
+msgid "Shipment Number:"
+msgstr ""
+
+msgctxt "odt:stock.shipment.out.delivery_note:0"
+msgid "VAT Number:"
+msgstr ""
+
+msgctxt "odt:stock.shipment.out.picking_list:0"
+msgid "/"
+msgstr ""
+
+msgctxt "odt:stock.shipment.out.picking_list:0"
+msgid "Code:"
+msgstr ""
+
+msgctxt "odt:stock.shipment.out.picking_list:0"
+msgid "Customer:"
+msgstr ""
+
+#, fuzzy
+msgctxt "odt:stock.shipment.out.picking_list:0"
+msgid "E-Mail:"
+msgstr "E-Mail:"
+
+#, fuzzy
+msgctxt "odt:stock.shipment.out.picking_list:0"
+msgid "From Location"
+msgstr "Ðз меÑÑа"
+
+#, fuzzy
+msgctxt "odt:stock.shipment.out.picking_list:0"
+msgid "Phone:"
+msgstr "ТелеÑон:"
+
+#, fuzzy
+msgctxt "odt:stock.shipment.out.picking_list:0"
+msgid "Picking List"
+msgstr "Ð¡Ð±Ð¾Ñ Ð¡Ð¿Ð¸Ñок"
+
+msgctxt "odt:stock.shipment.out.picking_list:0"
+msgid "Planned Date:"
+msgstr ""
+
+#, fuzzy
+msgctxt "odt:stock.shipment.out.picking_list:0"
+msgid "Product"
+msgstr "ТоваÑно маÑеÑиалÑнÑе ÑенноÑÑи (ТÐЦ)"
+
+#, fuzzy
+msgctxt "odt:stock.shipment.out.picking_list:0"
+msgid "Quantity"
+msgstr "Ðол-во"
+
+msgctxt "odt:stock.shipment.out.picking_list:0"
+msgid "Reference:"
+msgstr ""
+
+#, fuzzy
+msgctxt "odt:stock.shipment.out.picking_list:0"
+msgid "To Location"
+msgstr "РмеÑÑо"
+
+msgctxt "odt:stock.shipment.out.picking_list:0"
+msgid "VAT Number:"
+msgstr ""
+
+msgctxt "odt:stock.shipment.out.picking_list:0"
+msgid "Warehouse:"
+msgstr ""
+
+msgctxt "odt:stock.shipment.out.return.restocking_list:0"
+msgid "/"
+msgstr ""
+
+msgctxt "odt:stock.shipment.out.return.restocking_list:0"
+msgid "Code:"
+msgstr ""
+
+#, fuzzy
+msgctxt "odt:stock.shipment.out.return.restocking_list:0"
+msgid "E-Mail:"
+msgstr "E-Mail:"
+
+#, fuzzy
+msgctxt "odt:stock.shipment.out.return.restocking_list:0"
+msgid "From Location"
+msgstr "Ðз меÑÑа"
+
+#, fuzzy
+msgctxt "odt:stock.shipment.out.return.restocking_list:0"
+msgid "Phone:"
+msgstr "ТелеÑон:"
+
+msgctxt "odt:stock.shipment.out.return.restocking_list:0"
+msgid "Planned Date:"
+msgstr ""
+
+#, fuzzy
+msgctxt "odt:stock.shipment.out.return.restocking_list:0"
+msgid "Product"
+msgstr "ТоваÑно маÑеÑиалÑнÑе ÑенноÑÑи (ТÐЦ)"
+
+#, fuzzy
+msgctxt "odt:stock.shipment.out.return.restocking_list:0"
+msgid "Quantity"
+msgstr "Ðол-во"
+
+msgctxt "odt:stock.shipment.out.return.restocking_list:0"
+msgid "Reference:"
+msgstr ""
+
+#, fuzzy
+msgctxt "odt:stock.shipment.out.return.restocking_list:0"
+msgid "Restocking List"
+msgstr "СпиÑок пополнениÑ"
+
+msgctxt "odt:stock.shipment.out.return.restocking_list:0"
+msgid "Supplier:"
+msgstr ""
+
+#, fuzzy
+msgctxt "odt:stock.shipment.out.return.restocking_list:0"
+msgid "To Location"
+msgstr "РмеÑÑо"
+
+msgctxt "odt:stock.shipment.out.return.restocking_list:0"
+msgid "VAT Number:"
+msgstr ""
+
+msgctxt "odt:stock.shipment.out.return.restocking_list:0"
+msgid "Warehouse:"
+msgstr ""
+
+msgctxt "selection:stock.inventory,state:0"
+msgid "Canceled"
+msgstr "ÐÑменено"
+
+msgctxt "selection:stock.inventory,state:0"
+msgid "Done"
+msgstr "ÐÑполнено"
+
+msgctxt "selection:stock.inventory,state:0"
+msgid "Draft"
+msgstr "ЧеÑновик"
+
+msgctxt "selection:stock.location,type:0"
+msgid "Customer"
+msgstr "ÐаказÑик"
+
+msgctxt "selection:stock.location,type:0"
+msgid "Lost and Found"
+msgstr "УÑÑаÑеннÑй и обÑеÑеннÑй"
+
+msgctxt "selection:stock.location,type:0"
+msgid "Production"
+msgstr "ÐÑоизводÑÑво"
+
+msgctxt "selection:stock.location,type:0"
+msgid "Storage"
+msgstr "Ð¥ÑанилиÑе"
+
+msgctxt "selection:stock.location,type:0"
+msgid "Supplier"
+msgstr "ÐоÑÑавÑик"
+
+msgctxt "selection:stock.location,type:0"
+msgid "View"
+msgstr "ÐÑоÑмоÑÑ"
+
+msgctxt "selection:stock.location,type:0"
+msgid "Warehouse"
+msgstr "ТоваÑнÑй Ñклад"
+
+msgctxt "selection:stock.move,state:0"
+msgid "Assigned"
+msgstr "ÐеÑеданнÑй"
+
+msgctxt "selection:stock.move,state:0"
+msgid "Canceled"
+msgstr "ÐÑменено"
+
+msgctxt "selection:stock.move,state:0"
+msgid "Done"
+msgstr "ÐÑполнено"
+
+msgctxt "selection:stock.move,state:0"
+msgid "Draft"
+msgstr "ЧеÑновик"
+
+#, fuzzy
+msgctxt "selection:stock.period,state:0"
+msgid "Closed"
+msgstr "ÐакÑÑÑо"
+
+#, fuzzy
+msgctxt "selection:stock.period,state:0"
+msgid "Draft"
+msgstr "ЧеÑновик"
+
+msgctxt "selection:stock.shipment.in,state:0"
+msgid "Canceled"
+msgstr "ÐÑменено"
+
+msgctxt "selection:stock.shipment.in,state:0"
+msgid "Done"
+msgstr "ÐÑполнено"
+
+msgctxt "selection:stock.shipment.in,state:0"
+msgid "Draft"
+msgstr "ЧеÑновик"
+
+msgctxt "selection:stock.shipment.in,state:0"
+msgid "Received"
+msgstr "ÐоÑÑÑпило"
+
+msgctxt "selection:stock.shipment.in.return,state:0"
+msgid "Assigned"
+msgstr "ÐеÑеданнÑй"
+
+msgctxt "selection:stock.shipment.in.return,state:0"
+msgid "Canceled"
+msgstr "ÐÑменено"
+
+msgctxt "selection:stock.shipment.in.return,state:0"
+msgid "Done"
+msgstr "ÐÑполнено"
+
+msgctxt "selection:stock.shipment.in.return,state:0"
+msgid "Draft"
+msgstr "ЧеÑновик"
+
+msgctxt "selection:stock.shipment.in.return,state:0"
+msgid "Waiting"
+msgstr "Ðжидание"
+
+msgctxt "selection:stock.shipment.internal,state:0"
+msgid "Assigned"
+msgstr "ÐеÑеданнÑй"
+
+msgctxt "selection:stock.shipment.internal,state:0"
+msgid "Canceled"
+msgstr "ÐÑменено"
+
+msgctxt "selection:stock.shipment.internal,state:0"
+msgid "Done"
+msgstr "ÐÑполнено"
+
+msgctxt "selection:stock.shipment.internal,state:0"
+msgid "Draft"
+msgstr "ЧеÑновик"
+
+msgctxt "selection:stock.shipment.internal,state:0"
+msgid "Waiting"
+msgstr "Ðжидание"
+
+msgctxt "selection:stock.shipment.out,state:0"
+msgid "Assigned"
+msgstr "ÐеÑеданнÑй"
+
+msgctxt "selection:stock.shipment.out,state:0"
+msgid "Canceled"
+msgstr "ÐÑменено"
+
+msgctxt "selection:stock.shipment.out,state:0"
+msgid "Done"
+msgstr "ÐÑполнено"
+
+msgctxt "selection:stock.shipment.out,state:0"
+msgid "Draft"
+msgstr "ЧеÑновик"
+
+msgctxt "selection:stock.shipment.out,state:0"
+msgid "Packed"
+msgstr "УпакованнÑй"
+
+msgctxt "selection:stock.shipment.out,state:0"
+msgid "Waiting"
+msgstr "Ðжидание"
+
+msgctxt "selection:stock.shipment.out.return,state:0"
+msgid "Canceled"
+msgstr "ÐÑменено"
+
+msgctxt "selection:stock.shipment.out.return,state:0"
+msgid "Done"
+msgstr "ÐÑполнено"
+
+msgctxt "selection:stock.shipment.out.return,state:0"
+msgid "Draft"
+msgstr "ЧеÑновик"
+
+msgctxt "selection:stock.shipment.out.return,state:0"
+msgid "Received"
+msgstr "ÐоÑÑÑпило"
+
+msgctxt "view:party.party:0"
+msgid "Stock"
+msgstr "Ð¥ÑанилиÑе"
+
+msgctxt "view:product.product:0"
+msgid "Products"
+msgstr "ТÐЦ"
+
+msgctxt "view:stock.configuration:0"
+msgid "Stock Configuration"
+msgstr "ÐонÑигÑÑаÑÐ¸Ñ Ñклада"
+
+msgctxt "view:stock.inventory.line:0"
+msgid "Inventory Line"
+msgstr "СÑÑока инвенÑаÑизаÑии"
+
+msgctxt "view:stock.inventory.line:0"
+msgid "Inventory Lines"
+msgstr "СÑÑоки инвенÑаÑизаÑии"
+
+msgctxt "view:stock.inventory:0"
+msgid "Add an inventory line for each missing products"
+msgstr "ÐобавиÑÑ ÑÑÑÐ¾ÐºÑ Ð² ÑпиÑок Ð´Ð»Ñ ÐºÐ°Ð¶Ð´Ð¾Ð³Ð¾ оÑÑÑÑÑÑвÑÑÑего ÑоваÑа"
+
+msgctxt "view:stock.inventory:0"
+msgid "Cancel"
+msgstr "ÐÑмениÑÑ"
+
+msgctxt "view:stock.inventory:0"
+msgid "Complete Inventory"
+msgstr "ÐÐ¾Ð»Ð½Ð°Ñ Ð¸Ð½Ð²ÐµÐ½ÑаÑизаÑиÑ"
+
+msgctxt "view:stock.inventory:0"
+msgid "Confirm"
+msgstr "ÐодÑвеÑждаÑÑ"
+
+msgctxt "view:stock.inventory:0"
+msgid "Inventories"
+msgstr "ÐнвенÑаÑизаÑиÑ"
+
+msgctxt "view:stock.inventory:0"
+msgid "Inventory"
+msgstr "ÐнвенÑаÑизаÑиÑ"
+
+msgctxt "view:stock.location:0"
+msgid "Location"
+msgstr "ÐеÑÑо"
+
+msgctxt "view:stock.location:0"
+msgid "Locations"
+msgstr "ÐеÑÑа Ñ
ÑанениÑ"
+
+msgctxt "view:stock.location:0"
+msgid "Product Stock"
+msgstr "Ð¥ÑанилиÑе ТÐЦ"
+
+msgctxt "view:stock.location_stock_date.init:0"
+msgid "Product Quantity."
+msgstr "ÐолиÑеÑÑво ТоваÑов."
+
+msgctxt "view:stock.move:0"
+msgid "Move"
+msgstr "ÐеÑемеÑение"
+
+msgctxt "view:stock.move:0"
+msgid "Moves"
+msgstr "ÐеÑемеÑениÑ"
+
+msgctxt "view:stock.period.cache:0"
+msgid "Period Cache"
+msgstr ""
+
+msgctxt "view:stock.period.cache:0"
+msgid "Period Caches"
+msgstr ""
+
+#, fuzzy
+msgctxt "view:stock.period:0"
+msgid "Close"
+msgstr "ÐакÑÑÑÑ"
+
+#, fuzzy
+msgctxt "view:stock.period:0"
+msgid "Draft"
+msgstr "ЧеÑновик"
+
+msgctxt "view:stock.period:0"
+msgid "Period"
+msgstr ""
+
+msgctxt "view:stock.period:0"
+msgid "Periods"
+msgstr ""
+
+msgctxt "view:stock.product_stock_date.init:0"
+msgid "Product Quantity."
+msgstr "ÐолиÑеÑÑво ТоваÑов."
+
+#, fuzzy
+msgctxt "view:stock.shipment.in.return.assign.assign_failed:0"
+msgid "Moves"
+msgstr "ÐеÑемеÑениÑ"
+
+msgctxt "view:stock.shipment.in.return.assign.assign_failed:0"
+msgid "Unable to Assign"
+msgstr ""
+
+msgctxt "view:stock.shipment.in.return.assign.assign_failed:0"
+msgid "Unable to assign those products:"
+msgstr ""
+
+msgctxt "view:stock.shipment.in.return:0"
+msgid "Assign"
+msgstr "ÐазнаÑение"
+
+msgctxt "view:stock.shipment.in.return:0"
+msgid "Cancel"
+msgstr "ÐÑмениÑÑ"
+
+msgctxt "view:stock.shipment.in.return:0"
+msgid "Done"
+msgstr "ÐÑполнено"
+
+msgctxt "view:stock.shipment.in.return:0"
+msgid "Draft"
+msgstr "ЧеÑновик"
+
+msgctxt "view:stock.shipment.in.return:0"
+msgid "Reset to Draft"
+msgstr "СбÑÐ¾Ñ Ð² ÑеÑновик"
+
+msgctxt "view:stock.shipment.in.return:0"
+msgid "Supplier Return Shipment"
+msgstr "ÐозвÑÐ°Ñ Ð¿Ð¾ÑÑавÑикÑ"
+
+msgctxt "view:stock.shipment.in.return:0"
+msgid "Supplier Return Shipments"
+msgstr "ÐозвÑаÑÑ Ð¿Ð¾ÑÑавÑикÑ"
+
+msgctxt "view:stock.shipment.in.return:0"
+msgid "Waiting"
+msgstr "Ðжидание"
+
+msgctxt "view:stock.shipment.in:0"
+msgid "Cancel"
+msgstr "ÐÑмениÑÑ"
+
+msgctxt "view:stock.shipment.in:0"
+msgid "Done"
+msgstr "ÐÑполнено"
+
+msgctxt "view:stock.shipment.in:0"
+msgid "Incoming Moves"
+msgstr "ÐÑ
одÑÑий гÑÑз"
+
+msgctxt "view:stock.shipment.in:0"
+msgid "Inventory Moves"
+msgstr "УÑÐµÑ Ð¿ÐµÑемеÑений"
+
+msgctxt "view:stock.shipment.in:0"
+msgid "Moves"
+msgstr "ÐеÑемеÑениÑ"
+
+msgctxt "view:stock.shipment.in:0"
+msgid "Received"
+msgstr "ÐоÑÑÑпило"
+
+msgctxt "view:stock.shipment.in:0"
+msgid "Reset to Draft"
+msgstr "СбÑÐ¾Ñ Ð² ÑеÑновик"
+
+msgctxt "view:stock.shipment.in:0"
+msgid "Supplier Shipment"
+msgstr "ÐÑиÑ
од Ð¾Ñ Ð¿Ð¾ÑÑавÑика"
+
+msgctxt "view:stock.shipment.in:0"
+msgid "Supplier Shipments"
+msgstr "ÐÑиÑ
од Ð¾Ñ Ð¿Ð¾ÑÑавÑиков"
+
+#, fuzzy
+msgctxt "view:stock.shipment.internal.assign.assign_failed:0"
+msgid "Moves"
+msgstr "ÐеÑемеÑениÑ"
+
+msgctxt "view:stock.shipment.internal.assign.assign_failed:0"
+msgid "Unable to Assign"
+msgstr ""
+
+msgctxt "view:stock.shipment.internal.assign.assign_failed:0"
+msgid "Unable to assign those products:"
+msgstr ""
+
+msgctxt "view:stock.shipment.internal:0"
+msgid "Assign"
+msgstr "ÐазнаÑение"
+
+msgctxt "view:stock.shipment.internal:0"
+msgid "Cancel"
+msgstr "ÐÑмениÑÑ"
+
+msgctxt "view:stock.shipment.internal:0"
+msgid "Done"
+msgstr "ÐÑполнено"
+
+msgctxt "view:stock.shipment.internal:0"
+msgid "Draft"
+msgstr "ЧеÑновик"
+
+msgctxt "view:stock.shipment.internal:0"
+msgid "Internal Shipment"
+msgstr "ÐнÑÑÑеннее пеÑемеÑение"
+
+msgctxt "view:stock.shipment.internal:0"
+msgid "Internal Shipments"
+msgstr "ÐнÑÑÑенние пеÑемеÑениÑ"
+
+msgctxt "view:stock.shipment.internal:0"
+msgid "Reset to Draft"
+msgstr "СбÑÐ¾Ñ Ð² ÑеÑновик"
+
+msgctxt "view:stock.shipment.internal:0"
+msgid "Waiting"
+msgstr "Ðжидание"
+
+#, fuzzy
+msgctxt "view:stock.shipment.out.assign.assign_failed:0"
+msgid "Inventory Moves"
+msgstr "УÑÐµÑ Ð¿ÐµÑемеÑений"
+
+msgctxt "view:stock.shipment.out.assign.assign_failed:0"
+msgid "Unable to Assign"
+msgstr ""
+
+msgctxt "view:stock.shipment.out.assign.assign_failed:0"
+msgid "Unable to assign those products:"
+msgstr ""
+
+msgctxt "view:stock.shipment.out.return:0"
+msgid "Cancel"
+msgstr "ÐÑмениÑÑ"
+
+msgctxt "view:stock.shipment.out.return:0"
+msgid "Customer Return Shipment"
+msgstr "ÐозвÑÐ°Ñ Ð¾Ñ Ð·Ð°ÐºÐ°Ð·Ñика"
+
+msgctxt "view:stock.shipment.out.return:0"
+msgid "Customer Return Shipments"
+msgstr "ÐозвÑаÑÑ Ð¾Ñ Ð·Ð°ÐºÐ°Ð·Ñиков"
+
+msgctxt "view:stock.shipment.out.return:0"
+msgid "Done"
+msgstr "ÐÑполнено"
+
+msgctxt "view:stock.shipment.out.return:0"
+msgid "Incoming Moves"
+msgstr "ÐÑ
одÑÑий гÑÑз"
+
+msgctxt "view:stock.shipment.out.return:0"
+msgid "Inventory Moves"
+msgstr "УÑÐµÑ Ð¿ÐµÑемеÑений"
+
+msgctxt "view:stock.shipment.out.return:0"
+msgid "Moves"
+msgstr "ÐеÑемеÑениÑ"
+
+msgctxt "view:stock.shipment.out.return:0"
+msgid "Received"
+msgstr "ÐоÑÑÑпило"
+
+msgctxt "view:stock.shipment.out.return:0"
+msgid "Reset to Draft"
+msgstr "СбÑÐ¾Ñ Ð² ÑеÑновики"
+
+msgctxt "view:stock.shipment.out:0"
+msgid "Assign"
+msgstr "ÐазнаÑение"
+
+msgctxt "view:stock.shipment.out:0"
+msgid "Cancel"
+msgstr "ÐÑмениÑÑ"
+
+msgctxt "view:stock.shipment.out:0"
+msgid "Customer Shipment"
+msgstr "ÐÑгÑÑзка заказÑикÑ"
+
+msgctxt "view:stock.shipment.out:0"
+msgid "Customer Shipments"
+msgstr "ÐÑгÑÑзки заказÑикам"
+
+msgctxt "view:stock.shipment.out:0"
+msgid "Done"
+msgstr "ÐÑполнено"
+
+msgctxt "view:stock.shipment.out:0"
+msgid "Draft"
+msgstr "ЧеÑновик"
+
+msgctxt "view:stock.shipment.out:0"
+msgid "Inventory Moves"
+msgstr "УÑÐµÑ Ð¿ÐµÑемеÑений"
+
+msgctxt "view:stock.shipment.out:0"
+msgid "Make shipment"
+msgstr "СделаÑÑ Ð¾ÑгÑÑзкÑ"
+
+msgctxt "view:stock.shipment.out:0"
+msgid "Outgoing Moves"
+msgstr "ÐнеÑнее пеÑемеÑение"
+
+msgctxt "view:stock.shipment.out:0"
+msgid "Reset to Draft"
+msgstr "СбÑÐ¾Ñ Ð² ÑеÑновик"
+
+msgctxt "view:stock.shipment.out:0"
+msgid "Waiting"
+msgstr "Ðжидание"
+
+msgctxt "wizard_button:stock.location.open,init,end:0"
+msgid "Cancel"
+msgstr "ÐÑмениÑÑ"
+
+msgctxt "wizard_button:stock.location.open,init,open:0"
+msgid "Open"
+msgstr "ÐÑкÑÑÑÑ"
+
+msgctxt "wizard_button:stock.product.open,init,end:0"
+msgid "Cancel"
+msgstr "ÐÑмениÑÑ"
+
+msgctxt "wizard_button:stock.product.open,init,open:0"
+msgid "Open"
+msgstr "ÐÑкÑÑÑÑ"
+
+msgctxt "wizard_button:stock.shipment.in.return.assign,ask_force,end:0"
+msgid "Ok"
+msgstr "Ðа"
+
+msgctxt "wizard_button:stock.shipment.in.return.assign,ask_force,force:0"
+msgid "Force Assign"
+msgstr "УÑкоÑÐµÐ½Ð½Ð°Ñ Ð¾ÑгÑÑзка"
+
+#, fuzzy
+msgctxt "wizard_button:stock.shipment.in.return.assign,assign_failed,end:0"
+msgid "Ok"
+msgstr "Ðк"
+
+msgctxt "wizard_button:stock.shipment.internal.assign,ask_force,end:0"
+msgid "Ok"
+msgstr "Ðа"
+
+msgctxt "wizard_button:stock.shipment.internal.assign,ask_force,force:0"
+msgid "Force Assign"
+msgstr "УÑкоÑÐµÐ½Ð½Ð°Ñ Ð¿ÐµÑедаÑа"
+
+#, fuzzy
+msgctxt "wizard_button:stock.shipment.internal.assign,assign_failed,end:0"
+msgid "Ok"
+msgstr "Ðк"
+
+msgctxt "wizard_button:stock.shipment.out.assign,ask_force,end:0"
+msgid "Ok"
+msgstr "Ðа"
+
+msgctxt "wizard_button:stock.shipment.out.assign,ask_force,force:0"
+msgid "Force Assign"
+msgstr "УÑкоÑÐµÐ½Ð½Ð°Ñ Ð¾ÑгÑÑзка"
+
+#, fuzzy
+msgctxt "wizard_button:stock.shipment.out.assign,assign_failed,end:0"
+msgid "Ok"
+msgstr "Ðк"
diff --git a/location.py b/location.py
index 2a74b55..0f14437 100644
--- a/location.py
+++ b/location.py
@@ -1,16 +1,17 @@
#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 __future__ import with_statement
import datetime
from trytond.model import ModelView, ModelSQL, fields
from trytond.wizard import Wizard
from trytond.backend import TableHandler
from trytond.pyson import Not, Bool, Eval, Equal, PYSONEncoder, Date
from trytond.transaction import Transaction
+from trytond.pool import Pool
STATES = {
'readonly': Not(Bool(Eval('active'))),
}
+DEPENDS = ['active']
class Location(ModelSQL, ModelView):
@@ -18,14 +19,16 @@ class Location(ModelSQL, ModelView):
_name = 'stock.location'
_description = __doc__
name = fields.Char("Name", size=None, required=True, states=STATES,
- translate=True)
- code = fields.Char("Code", size=None, states=STATES, select=1)
+ depends=DEPENDS, translate=True)
+ code = fields.Char("Code", size=None, states=STATES, depends=DEPENDS,
+ select=1)
active = fields.Boolean('Active', select=1)
address = fields.Many2One("party.address", "Address",
- states={
- 'invisible': Not(Equal(Eval('type'), 'warehouse')),
- 'readonly': Not(Bool(Eval('active'))),
- })
+ states={
+ 'invisible': Not(Equal(Eval('type'), 'warehouse')),
+ 'readonly': Not(Bool(Eval('active'))),
+ },
+ depends=['type', 'active'])
type = fields.Selection([
('supplier', 'Supplier'),
('customer', 'Customer'),
@@ -34,7 +37,7 @@ class Location(ModelSQL, ModelView):
('storage', 'Storage'),
('production', 'Production'),
('view', 'View'),
- ], 'Location type', states=STATES)
+ ], 'Location type', states=STATES, depends=DEPENDS)
parent = fields.Many2One("stock.location", "Parent", select=1,
left="left", right="right")
left = fields.Integer('Left', required=True, select=1)
@@ -45,14 +48,15 @@ class Location(ModelSQL, ModelView):
'invisible': Not(Equal(Eval('type'), 'warehouse')),
'readonly': Not(Bool(Eval('active'))),
'required': Equal(Eval('type'), 'warehouse'),
- },
+ },
domain=[
('type','=','storage'),
['OR',
- ('parent', 'child_of', [Eval('active_id')]),
+ ('parent', 'child_of', [Eval('id')]),
('parent', '=', False),
+ ],
],
- ])
+ depends=['type', 'active', 'id'])
output_location = fields.Many2One(
"stock.location", "Output", states={
'invisible': Not(Equal(Eval('type'), 'warehouse')),
@@ -61,8 +65,9 @@ class Location(ModelSQL, ModelView):
},
domain=[('type','=','storage'),
['OR',
- ('parent', 'child_of', [Eval('active_id')]),
- ('parent', '=', False)]])
+ ('parent', 'child_of', [Eval('id')]),
+ ('parent', '=', False)]],
+ depends=['type', 'active', 'id'])
storage_location = fields.Many2One(
"stock.location", "Storage", states={
'invisible': Not(Equal(Eval('type'), 'warehouse')),
@@ -71,8 +76,9 @@ class Location(ModelSQL, ModelView):
},
domain=[('type','=','storage'),
['OR',
- ('parent', 'child_of', [Eval('active_id')]),
- ('parent', '=', False)]])
+ ('parent', 'child_of', [Eval('id')]),
+ ('parent', '=', False)]],
+ depends=['type', 'active', 'id'])
quantity = fields.Function(fields.Float('Quantity'), 'get_quantity')
forecast_quantity = fields.Function(fields.Float('Forecast Quantity'),
'get_quantity')
@@ -101,7 +107,7 @@ class Location(ModelSQL, ModelView):
def check_type_for_moves(self, ids):
""" Check locations with moves have types compatible with moves. """
invalid_move_types = ['warehouse', 'view']
- move_obj = self.pool.get('stock.move')
+ move_obj = Pool().get('stock.move')
for location in self.browse(ids):
if location.type in invalid_move_types and \
move_obj.search(['OR',
@@ -135,8 +141,8 @@ class Location(ModelSQL, ModelView):
return [(self._rec_name,) + clause[1:]]
def get_quantity(self, ids, name):
- product_obj = self.pool.get('product.product')
- date_obj = self.pool.get('ir.date')
+ product_obj = Pool().get('product.product')
+ date_obj = Pool().get('ir.date')
if (not Transaction().context.get('product')) \
or not (isinstance(Transaction().context['product'],
@@ -168,7 +174,7 @@ class Location(ModelSQL, ModelView):
return dict([(loc,qty) for (loc,prod), qty in pbl])
def view_header_get(self, value, view_type='form'):
- product_obj = self.pool.get('product.product')
+ product_obj = Pool().get('product.product')
value = super(Location, self).view_header_get(value,
view_type=view_type)
if (Transaction().context.get('product')
@@ -323,7 +329,7 @@ class ChooseStockDateInit(ModelView):
'* A date in the past will provide historical values.')
def default_forecast_date(self):
- date_obj = self.pool.get('ir.date')
+ date_obj = Pool().get('ir.date')
return date_obj.today()
ChooseStockDateInit()
@@ -353,8 +359,8 @@ class OpenProduct(Wizard):
}
def _action_open_product(self, data):
- model_data_obj = self.pool.get('ir.model.data')
- act_window_obj = self.pool.get('ir.action.act_window')
+ model_data_obj = Pool().get('ir.model.data')
+ act_window_obj = Pool().get('ir.action.act_window')
act_window_id = model_data_obj.get_id('stock',
'act_product_by_location')
res = act_window_obj.read(act_window_id)
diff --git a/location.xml b/location.xml
index 5be334d..98a29ee 100644
--- a/location.xml
+++ b/location.xml
@@ -43,10 +43,10 @@ this repository contains the full copyright notices and license terms. -->
<field name="arch" type="xml">
<![CDATA[
<tree string="Locations" keyword_open="1">
- <field name="name" select="1"/>
- <field name="code" select="2"/>
- <field name="type" select="1"/>
- <field name="active" select="2" tree_invisible="1"/>
+ <field name="name"/>
+ <field name="code"/>
+ <field name="type"/>
+ <field name="active" tree_invisible="1"/>
<field name="parent" tree_invisible="1"/>
<field name="childs" tree_invisible="1"/>
</tree>
@@ -60,10 +60,10 @@ this repository contains the full copyright notices and license terms. -->
<field name="arch" type="xml">
<![CDATA[
<tree string="Locations">
- <field name="name" select="1"/>
- <field name="code" select="2"/>
- <field name="type" select="1"/>
- <field name="active" select="2" tree_invisible="1"/>
+ <field name="name"/>
+ <field name="code"/>
+ <field name="type"/>
+ <field name="active" tree_invisible="1"/>
</tree>
]]>
</field>
@@ -129,7 +129,7 @@ this repository contains the full copyright notices and license terms. -->
<record model="ir.action.keyword"
id="act_product_by_location_keyword1">
<field name="keyword">tree_open</field>
- <field name="model">stock.location,0</field>
+ <field name="model">stock.location,-1</field>
<field name="action" ref="wizard_product_open"/>
</record>
diff --git a/move.py b/move.py
index 1922c98..0352926 100644
--- a/move.py
+++ b/move.py
@@ -1,61 +1,79 @@
#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 __future__ import with_statement
from decimal import Decimal
+from functools import reduce
from trytond.model import ModelView, ModelSQL, fields, OPERATORS
from trytond.backend import TableHandler
from trytond.pyson import In, Eval, Not, Equal, If, Get, Bool
from trytond.transaction import Transaction
+from trytond.pool import Pool
STATES = {
'readonly': In(Eval('state'), ['cancel', 'assigned', 'done']),
}
+DEPENDS = ['state']
class Move(ModelSQL, ModelView):
"Stock Move"
_name = 'stock.move'
_description = __doc__
+ _order_name = 'product'
product = fields.Many2One("product.product", "Product", required=True,
- select=1, states=STATES,
- on_change=['product', 'currency', 'uom', 'company',
- 'from_location', 'to_location'],
- domain=[('type', '!=', 'service')])
+ select=1, states=STATES,
+ on_change=['product', 'currency', 'uom', 'company',
+ 'from_location', 'to_location'],
+ domain=[('type', '!=', 'service')],
+ depends=DEPENDS)
uom = fields.Many2One("product.uom", "Uom", required=True, states=STATES,
- domain=[
- ('category', '=',
- (Eval('product'), 'product.default_uom.category')),
+ domain=[
+ ('category', '=',
+ (Eval('product'), 'product.default_uom.category')),
],
- context={
- 'category': (Eval('product'), 'product.default_uom.category'),
+ context={
+ 'category': (Eval('product'), 'product.default_uom.category'),
},
- on_change=['product', 'currency', 'uom', 'company',
- 'from_location', 'to_location'])
+ on_change=['product', 'currency', 'uom', 'company',
+ 'from_location', 'to_location'],
+ depends=['state', 'product'])
unit_digits = fields.Function(fields.Integer('Unit Digits',
on_change_with=['uom']), 'get_unit_digits')
quantity = fields.Float("Quantity", required=True,
- digits=(16, Eval('unit_digits', 2)), states=STATES)
+ digits=(16, Eval('unit_digits', 2)), states=STATES,
+ depends=['state', 'unit_digits'])
internal_quantity = fields.Float('Internal Quantity', readonly=True,
required=True)
from_location = fields.Many2One("stock.location", "From Location", select=1,
- required=True, states=STATES,
- domain=[('type', 'not in', ('warehouse', 'view'))])
+ required=True, states=STATES, depends=DEPENDS,
+ domain=[('type', 'not in', ('warehouse', 'view'))])
to_location = fields.Many2One("stock.location", "To Location", select=1,
- required=True, states=STATES,
- domain=[('type', 'not in', ('warehouse', 'view'))])
+ required=True, states=STATES, depends=DEPENDS,
+ domain=[('type', 'not in', ('warehouse', 'view'))])
shipment_in = fields.Many2One('stock.shipment.in', 'Supplier Shipment',
- readonly=True, select=1, ondelete='CASCADE')
+ domain=[('company', '=', Eval('company'))], depends=['company'],
+ readonly=True, select=1, ondelete='CASCADE')
shipment_out = fields.Many2One('stock.shipment.out', 'Customer Shipment',
- readonly=True, select=1, ondelete='CASCADE')
+ domain=[('company', '=', Eval('company'))], depends=['company'],
+ readonly=True, select=1, ondelete='CASCADE')
shipment_out_return = fields.Many2One('stock.shipment.out.return',
- 'Customer Return Shipment', readonly=True, select=1,
- ondelete='CASCADE')
+ 'Customer Return Shipment', readonly=True, select=1,
+ domain=[('company', '=', Eval('company'))], depends=['company'],
+ ondelete='CASCADE')
shipment_in_return = fields.Many2One('stock.shipment.in.return',
- 'Supplier Return Shipment', readonly=True, select=1,
- ondelete='CASCADE')
+ 'Supplier Return Shipment', readonly=True, select=1,
+ domain=[('company', '=', Eval('company'))], depends=['company'],
+ ondelete='CASCADE')
shipment_internal = fields.Many2One('stock.shipment.internal',
- 'Internal Shipment', readonly=True, select=1, ondelete='CASCADE')
- planned_date = fields.Date("Planned Date", states=STATES, select=2)
+ 'Internal Shipment', readonly=True, select=1, ondelete='CASCADE',
+ domain=[('company', '=', Eval('company'))], depends=['company'])
+ planned_date = fields.Date("Planned Date", states={
+ 'readonly': (In(Eval('state'), ['cancel', 'assigned', 'done'])
+ | Eval('shipment_in') | Eval('shipment_out')
+ | Eval('shipment_in_return') | Eval('shipment_out_return')
+ | Eval('shipment_internal'))
+ }, depends=['state', 'shipment_in', 'shipment_out',
+ 'shipment_in_return', 'shipment_out_return', 'shipment_internal'],
+ select=2)
effective_date = fields.Date("Effective Date", readonly=True, select=2)
state = fields.Selection([
('draft', 'Draft'),
@@ -64,25 +82,29 @@ class Move(ModelSQL, ModelView):
('cancel', 'Canceled'),
], 'State', select=1, readonly=True)
company = fields.Many2One('company.company', 'Company', required=True,
- states={
- 'readonly': Not(Equal(Eval('state'), 'draft')),
- }, domain=[
- ('id', If(In('company', Eval('context', {})), '=', '!='),
- Get(Eval('context', {}), 'company', 0)),
- ])
+ states={
+ 'readonly': Not(Equal(Eval('state'), 'draft')),
+ },
+ domain=[
+ ('id', If(In('company', Eval('context', {})), '=', '!='),
+ Get(Eval('context', {}), 'company', 0)),
+ ],
+ depends=['state'])
unit_price = fields.Numeric('Unit Price', digits=(16, 4),
- states={
- 'invisible': Not(Bool(Eval('unit_price_required'))),
- 'required': Bool(Eval('unit_price_required')),
- 'readonly': Not(Equal(Eval('state'), 'draft')),
- })
+ states={
+ 'invisible': Not(Bool(Eval('unit_price_required'))),
+ 'required': Bool(Eval('unit_price_required')),
+ 'readonly': Not(Equal(Eval('state'), 'draft')),
+ },
+ depends=['unit_price_required', 'state'])
cost_price = fields.Numeric('Cost Price', digits=(16, 4), readonly=True)
currency = fields.Many2One('currency.currency', 'Currency',
- states={
- 'invisible': Not(Bool(Eval('unit_price_required'))),
- 'required': Not(Bool(Eval('unit_price_required'))),
- 'readonly': Not(Equal(Eval('state'), 'draft')),
- })
+ states={
+ 'invisible': Not(Bool(Eval('unit_price_required'))),
+ 'required': Bool(Eval('unit_price_required')),
+ 'readonly': Not(Equal(Eval('state'), 'draft')),
+ },
+ depends=['unit_price_required', 'state'])
unit_price_required = fields.Function(fields.Boolean('Unit Price Required',
on_change_with=['from_location', 'to_location']),
'get_unit_price_required')
@@ -173,8 +195,8 @@ class Move(ModelSQL, ModelView):
return Transaction().context.get('planned_date') or False
def default_to_location(self):
- location_obj = self.pool.get('stock.location')
- party_obj = self.pool.get('party.party')
+ location_obj = Pool().get('stock.location')
+ party_obj = Pool().get('party.party')
res = False
warehouse = None
@@ -200,8 +222,8 @@ class Move(ModelSQL, ModelView):
return res
def default_from_location(self):
- location_obj = self.pool.get('stock.location')
- party_obj = self.pool.get('party.party')
+ location_obj = Pool().get('stock.location')
+ party_obj = Pool().get('party.party')
res = False
warehouse = None
@@ -236,8 +258,8 @@ class Move(ModelSQL, ModelView):
return Transaction().context.get('company') or False
def default_currency(self):
- company_obj = self.pool.get('company.company')
- currency_obj = self.pool.get('currency.currency')
+ company_obj = Pool().get('company.company')
+ currency_obj = Pool().get('currency.currency')
company = Transaction().context.get('company')
if company:
company = company_obj.browse(company)
@@ -245,7 +267,7 @@ class Move(ModelSQL, ModelView):
return False
def on_change_with_unit_digits(self, vals):
- uom_obj = self.pool.get('product.uom')
+ uom_obj = Pool().get('product.uom')
if vals.get('uom'):
uom = uom_obj.browse(vals['uom'])
return uom.digits
@@ -258,11 +280,12 @@ class Move(ModelSQL, ModelView):
return res
def on_change_product(self, vals):
- product_obj = self.pool.get('product.product')
- uom_obj = self.pool.get('product.uom')
- currency_obj = self.pool.get('currency.currency')
- company_obj = self.pool.get('company.company')
- location_obj = self.pool.get('stock.location')
+ pool = Pool()
+ product_obj = pool.get('product.product')
+ uom_obj = pool.get('product.uom')
+ currency_obj = pool.get('currency.currency')
+ company_obj = pool.get('company.company')
+ location_obj = pool.get('stock.location')
res = {
'unit_price': Decimal('0.0'),
@@ -290,11 +313,12 @@ class Move(ModelSQL, ModelView):
return res
def on_change_uom(self, vals):
- product_obj = self.pool.get('product.product')
- uom_obj = self.pool.get('product.uom')
- currency_obj = self.pool.get('currency.currency')
- company_obj = self.pool.get('company.company')
- location_obj = self.pool.get('stock.location')
+ pool = Pool()
+ product_obj = pool.get('product.product')
+ uom_obj = pool.get('product.uom')
+ currency_obj = pool.get('currency.currency')
+ company_obj = pool.get('company.company')
+ location_obj = pool.get('stock.location')
res = {
'unit_price': Decimal('0.0'),
@@ -328,7 +352,7 @@ class Move(ModelSQL, ModelView):
return self.on_change_with_unit_price_required(vals)
def on_change_with_unit_price_required(self, vals):
- location_obj = self.pool.get('stock.location')
+ location_obj = Pool().get('stock.location')
if vals.get('from_location'):
from_location = location_obj.browse(vals['from_location'])
if from_location.type == 'supplier':
@@ -356,7 +380,7 @@ class Move(ModelSQL, ModelView):
return True
def check_period_closed(self, ids):
- period_obj = self.pool.get('stock.period')
+ period_obj = Pool().get('stock.period')
period_ids = period_obj.search([
('state', '=', 'closed'),
], order=[('date', 'DESC')], limit=1)
@@ -383,7 +407,7 @@ class Move(ModelSQL, ModelView):
def search(self, args, offset=0, limit=None, order=None, count=False,
query_string=False):
- location_obj = self.pool.get('stock.location')
+ location_obj = Pool().get('stock.location')
args = args[:]
def process_args(args):
@@ -421,13 +445,14 @@ class Move(ModelSQL, ModelView):
:param company: the company id ot a BrowseRecord of the company
:param date: the date for the currency rate calculation
"""
- uom_obj = self.pool.get('product.uom')
- product_obj = self.pool.get('product.product')
- product_template_obj = self.pool.get('product.template')
- location_obj = self.pool.get('stock.location')
- currency_obj = self.pool.get('currency.currency')
- company_obj = self.pool.get('company.company')
- date_obj = self.pool.get('ir.date')
+ pool = Pool()
+ uom_obj = pool.get('product.uom')
+ product_obj = pool.get('product.product')
+ product_template_obj = pool.get('product.template')
+ location_obj = pool.get('stock.location')
+ currency_obj = pool.get('currency.currency')
+ company_obj = pool.get('company.company')
+ date_obj = pool.get('ir.date')
if isinstance(uom, (int, long)):
uom = uom_obj.browse(uom)
@@ -472,17 +497,18 @@ class Move(ModelSQL, ModelView):
})
def _get_internal_quantity(self, quantity, uom, product):
- uom_obj = self.pool.get('product.uom')
+ uom_obj = Pool().get('product.uom')
internal_quantity = uom_obj.compute_qty(uom, quantity,
product.default_uom, round=True)
return internal_quantity
def create(self, vals):
- location_obj = self.pool.get('stock.location')
- product_obj = self.pool.get('product.product')
- uom_obj = self.pool.get('product.uom')
- date_obj = self.pool.get('ir.date')
+ pool = Pool()
+ location_obj = pool.get('stock.location')
+ product_obj = pool.get('product.product')
+ uom_obj = pool.get('product.uom')
+ date_obj = pool.get('ir.date')
today = date_obj.today()
vals = vals.copy()
@@ -518,7 +544,7 @@ class Move(ModelSQL, ModelView):
return super(Move, self).create(vals)
def write(self, ids, vals):
- date_obj = self.pool.get('ir.date')
+ date_obj = Pool().get('ir.date')
if isinstance(ids, (int, long)):
ids = [ids]
@@ -642,10 +668,11 @@ class Move(ModelSQL, ModelView):
:param moves: a BrowseRecordList of stock.move to assign
:return: True if succeed or False if not
'''
- product_obj = self.pool.get('product.product')
- uom_obj = self.pool.get('product.uom')
- date_obj = self.pool.get('ir.date')
- location_obj = self.pool.get('stock.location')
+ pool = Pool()
+ product_obj = pool.get('product.product')
+ uom_obj = pool.get('product.uom')
+ date_obj = pool.get('ir.date')
+ location_obj = pool.get('stock.location')
Transaction().cursor.lock(self._table)
diff --git a/move.xml b/move.xml
index 2e0419a..b8f83c2 100644
--- a/move.xml
+++ b/move.xml
@@ -44,14 +44,14 @@ this repository contains the full copyright notices and license terms. -->
<field name="arch" type="xml">
<![CDATA[
<tree string="Moves">
- <field name="product" select="1"/>
- <field name="from_location" select="1"/>
- <field name="to_location" select="1"/>
- <field name="quantity" select="2"/>
- <field name="uom" select="2"/>
- <field name="state" select="2"/>
+ <field name="product"/>
+ <field name="from_location"/>
+ <field name="to_location"/>
+ <field name="quantity"/>
+ <field name="uom"/>
+ <field name="state"/>
<field name="unit_digits" tree_invisible="1"/>
- <field name="create_date" tree_invisible="1" select="2"/>
+ <field name="create_date" tree_invisible="1"/>
</tree>
]]>
</field>
@@ -59,7 +59,7 @@ this repository contains the full copyright notices and license terms. -->
<record model="ir.action.act_window" id="act_move_form">
<field name="name">Moves</field>
<field name="res_model">stock.move</field>
- <field name="search_value">{'create_date': ['between', Date(delta_years=-1)]}</field>
+ <field name="search_value">[('create_date', '>=', DateTime(hour=0, minute=0, second=0, microsecond=0, delta_years=-1))]</field>
</record>
<record model="ir.action.act_window.view" id="act_move_form_view1">
<field name="sequence" eval="1"/>
@@ -79,7 +79,7 @@ this repository contains the full copyright notices and license terms. -->
<field name="name">Moves from Suppliers</field>
<field name="res_model">stock.move</field>
<field name="domain">[('from_location.type', '=', 'supplier')]</field>
- <field name="search_value">{'create_date': ['between', Date(delta_years=-1)]}</field>
+ <field name="search_value">[('create_date', '>=', DateTime(hour=0, minute=0, second=0, microsecond=0, delta_years=-1))]</field>
</record>
<record model="ir.action.act_window.view" id="act_move_form_supp_view1">
<field name="sequence" eval="1"/>
@@ -120,7 +120,7 @@ this repository contains the full copyright notices and license terms. -->
<field name="name">Moves to Customers</field>
<field name="res_model">stock.move</field>
<field name="domain">[('to_location.type', '=', 'customer')]</field>
- <field name="search_value">{'create_date': ['between', Date(delta_years=-1)]}</field>
+ <field name="search_value">[('create_date', '>=', DateTime(hour=0, minute=0, second=0, microsecond=0, delta_years=-1))]</field>
</record>
<record model="ir.action.act_window.view"
id="act_move_form_cust_view1">
@@ -150,7 +150,7 @@ this repository contains the full copyright notices and license terms. -->
<record model="ir.model.access" id="access_move">
<field name="model" search="[('model', '=', 'stock.move')]"/>
- <field name="perm_read" eval="True"/>
+ <field name="perm_read" eval="False"/>
<field name="perm_write" eval="False"/>
<field name="perm_create" eval="False"/>
<field name="perm_delete" eval="False"/>
diff --git a/party.xml b/party.xml
index 012728c..4e32c9a 100644
--- a/party.xml
+++ b/party.xml
@@ -11,9 +11,14 @@ this repository contains the full copyright notices and license terms. -->
<record model="ir.action.keyword"
id="act_open_purchase_keyword1">
<field name="keyword">form_relate</field>
- <field name="model">party.party,0</field>
+ <field name="model">party.party,-1</field>
<field name="action" ref="act_shipment_out_form2"/>
</record>
+ <record model="ir.action-res.group"
+ id="act_shipment_out_form2-group_stock">
+ <field name="action" ref="act_shipment_out_form2"/>
+ <field name="group" ref="group_stock"/>
+ </record>
<record model="ir.action.act_window" id="act_shipment_out_form3">
<field name="name">Supplier Shipments</field>
@@ -23,8 +28,13 @@ this repository contains the full copyright notices and license terms. -->
<record model="ir.action.keyword"
id="act_open_purchase_keyword2">
<field name="keyword">form_relate</field>
- <field name="model">party.party,0</field>
+ <field name="model">party.party,-1</field>
+ <field name="action" ref="act_shipment_out_form3"/>
+ </record>
+ <record model="ir.action-res.group"
+ id="act_shipment_out_form3-group_stock">
<field name="action" ref="act_shipment_out_form3"/>
+ <field name="group" ref="group_stock"/>
</record>
</data>
diff --git a/period.py b/period.py
index cb04205..a1b717a 100644
--- a/period.py
+++ b/period.py
@@ -1,10 +1,10 @@
#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 __future__ import with_statement
from itertools import chain
from trytond.model import ModelView, ModelSQL, fields
from trytond.pyson import Equal, Eval, If, In, Get
from trytond.transaction import Transaction
+from trytond.pool import Pool
class Period(ModelSQL, ModelView):
@@ -14,7 +14,7 @@ class Period(ModelSQL, ModelView):
_rec_name = 'date'
date = fields.Date('Date', required=True, states={
'readonly': Equal(Eval('state'), 'closed'),
- })
+ }, depends=['state'])
company = fields.Many2One('company.company', 'Company', required=True,
domain=[
('id', If(In('company', Eval('context', {})), '=', '!='),
@@ -40,7 +40,7 @@ class Period(ModelSQL, ModelView):
})
def button_draft(self, ids):
- cache_obj = self.pool.get('stock.period.cache')
+ cache_obj = Pool().get('stock.period.cache')
cache_ids = []
for i in xrange(0, len(ids), Transaction().cursor.IN_MAX):
cache_ids.append(cache_obj.search([
@@ -53,11 +53,12 @@ class Period(ModelSQL, ModelView):
return True
def button_close(self, ids):
- product_obj = self.pool.get('product.product')
- location_obj = self.pool.get('stock.location')
- cache_obj = self.pool.get('stock.period.cache')
- move_obj = self.pool.get('stock.move')
- date_obj = self.pool.get('ir.date')
+ pool = Pool()
+ product_obj = pool.get('product.product')
+ location_obj = pool.get('stock.location')
+ cache_obj = pool.get('stock.period.cache')
+ move_obj = pool.get('stock.move')
+ date_obj = pool.get('ir.date')
location_ids = location_obj.search([
('type', 'not in', ['warehouse', 'view']),
diff --git a/period.xml b/period.xml
index ec615cb..e46cebd 100644
--- a/period.xml
+++ b/period.xml
@@ -9,17 +9,19 @@ this repository contains the full copyright notices and license terms. -->
<field name="arch" type="xml">
<![CDATA[
<form string="Period">
- <label name="date"/>
- <field name="date"/>
<label name="company"/>
<field name="company"/>
+ <label name="date"/>
+ <field name="date"/>
<label name="state"/>
<field name="state"/>
<group col="2" colspan="2" id="buttons">
<button name="button_draft" type="object" string="Draft"
- states="{'invisible': Equal(Eval('state'), 'draft'), 'readonly': Not(In(%(group_stock_admin)d, Eval('groups', [])))}"/>
+ states="{'invisible': Equal(Eval('state'), 'draft'), 'readonly': Not(In(%(group_stock_admin)d, Eval('groups', [])))}"
+ icon="tryton-clear"/>
<button name="button_close" type="object" string="Close"
- states="{'invisible': Equal(Eval('state'), 'closed'), 'readonly': Not(In(%(group_stock_admin)d, Eval('groups', [])))}"/>
+ states="{'invisible': Equal(Eval('state'), 'closed'), 'readonly': Not(In(%(group_stock_admin)d, Eval('groups', [])))}"
+ icon="tryton-ok"/>
</group>
</form>
]]>
@@ -58,6 +60,14 @@ this repository contains the full copyright notices and license terms. -->
<record model="ir.model.access" id="access_period">
<field name="model" search="[('model', '=', 'stock.period')]"/>
+ <field name="perm_read" eval="False"/>
+ <field name="perm_write" eval="False"/>
+ <field name="perm_create" eval="False"/>
+ <field name="perm_delete" eval="False"/>
+ </record>
+ <record model="ir.model.access" id="access_period_stock">
+ <field name="model" search="[('model', '=', 'stock.period')]"/>
+ <field name="group" ref="group_stock"/>
<field name="perm_read" eval="True"/>
<field name="perm_write" eval="False"/>
<field name="perm_create" eval="False"/>
@@ -107,6 +117,14 @@ this repository contains the full copyright notices and license terms. -->
<record model="ir.model.access" id="access_period_cache_cache">
<field name="model" search="[('model', '=', 'stock.period.cache')]"/>
+ <field name="perm_read" eval="False"/>
+ <field name="perm_write" eval="False"/>
+ <field name="perm_create" eval="False"/>
+ <field name="perm_delete" eval="False"/>
+ </record>
+ <record model="ir.model.access" id="access_period_cache_cache_stock">
+ <field name="model" search="[('model', '=', 'stock.period.cache')]"/>
+ <field name="group" ref="group_stock"/>
<field name="perm_read" eval="True"/>
<field name="perm_write" eval="False"/>
<field name="perm_create" eval="False"/>
diff --git a/product.py b/product.py
index 27a2ad9..ca79200 100644
--- a/product.py
+++ b/product.py
@@ -1,12 +1,12 @@
#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 __future__ import with_statement
import datetime
from trytond.model import ModelView, ModelSQL, fields
from trytond.wizard import Wizard
from trytond.pyson import PYSONEncoder
from trytond.transaction import Transaction
from trytond.tools import safe_eval
+from trytond.pool import Pool
class Template(ModelSQL, ModelView):
@@ -35,7 +35,7 @@ class Template(ModelSQL, ModelView):
})
def write(self, ids, vals):
- move_obj = self.pool.get('stock.move')
+ move_obj = Pool().get('stock.move')
cursor = Transaction().cursor
if not vals.get("default_uom"):
return super(Template, self).write(ids, vals)
@@ -68,7 +68,7 @@ class Product(ModelSQL, ModelView):
'get_quantity', searcher='search_quantity')
def get_quantity(self, ids, name):
- date_obj = self.pool.get('ir.date')
+ date_obj = Pool().get('ir.date')
if not Transaction().context.get('locations'):
return dict((id, 0.0) for id in ids)
@@ -107,7 +107,7 @@ class Product(ModelSQL, ModelView):
return (safe_eval(str(value) + operator + str(operand)))
def search_quantity(self, name, domain=None):
- date_obj = self.pool.get('ir.date')
+ date_obj = Pool().get('ir.date')
if not (Transaction().context.get('locations') and domain):
return []
@@ -168,12 +168,13 @@ class Product(ModelSQL, ModelView):
:return: a dictionary with (location id, product id) as key
and quantity as value
"""
- uom_obj = self.pool.get("product.uom")
- product_obj = self.pool.get("product.product")
- rule_obj = self.pool.get('ir.rule')
- location_obj = self.pool.get('stock.location')
- date_obj = self.pool.get('ir.date')
- period_obj = self.pool.get('stock.period')
+ pool = Pool()
+ uom_obj = pool.get("product.uom")
+ product_obj = pool.get("product.product")
+ rule_obj = pool.get('ir.rule')
+ location_obj = pool.get('stock.location')
+ date_obj = pool.get('ir.date')
+ period_obj = pool.get('stock.period')
today = date_obj.today()
@@ -187,7 +188,7 @@ class Product(ModelSQL, ModelView):
location_ids = set(location_ids)
storage_to_remove = set()
wh_to_add = {}
- for location in location_obj.browse(location_ids):
+ for location in location_obj.browse(list(location_ids)):
if (location.type == 'warehouse'
and Transaction().context.get('stock_skip_warehouse')):
location_ids.remove(location.id)
@@ -500,7 +501,7 @@ class Product(ModelSQL, ModelView):
if product_ids:
all_product_ids = product_ids
else:
- all_product_ids = self.pool.get("product.product").search([])
+ all_product_ids = Pool().get("product.product").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:
@@ -521,7 +522,7 @@ class Product(ModelSQL, ModelView):
view_type=view_type)
if not Transaction().context.get('locations'):
return value
- location_obj = self.pool.get('stock.location')
+ location_obj = Pool().get('stock.location')
locations = location_obj.browse(Transaction().context.get('locations'))
return value + " (" + ",".join(l.name for l in locations) + ")"
@@ -538,7 +539,7 @@ class ChooseStockDateInit(ModelView):
'* A date in the past will provide historical values.')
def default_forecast_date(self):
- date_obj = self.pool.get('ir.date')
+ date_obj = Pool().get('ir.date')
return date_obj.today()
ChooseStockDateInit()
@@ -567,8 +568,8 @@ class OpenLocation(Wizard):
}
def _action_open_location(self, data):
- model_data_obj = self.pool.get('ir.model.data')
- act_window_obj = self.pool.get('ir.action.act_window')
+ model_data_obj = Pool().get('ir.model.data')
+ act_window_obj = Pool().get('ir.action.act_window')
act_window_id = model_data_obj.get_id('stock',
'act_location_quantity_tree')
res = act_window_obj.read(act_window_id)
diff --git a/product.xml b/product.xml
index 4676690..d42437a 100644
--- a/product.xml
+++ b/product.xml
@@ -10,13 +10,13 @@ this repository contains the full copyright notices and license terms. -->
<field name="arch" type="xml">
<![CDATA[
<tree string="Products">
- <field name="name" select="1"/>
- <field name="code" select="1"/>
- <field name="quantity" select="2"/>
- <field name="forecast_quantity" select="2"/>
- <field name="default_uom" select="2"/>
- <field name="type" select="1"/>
- <field name="active" select="2"/>
+ <field name="name"/>
+ <field name="code"/>
+ <field name="quantity"/>
+ <field name="forecast_quantity"/>
+ <field name="default_uom"/>
+ <field name="type"/>
+ <field name="active"/>
</tree>
]]>
</field>
@@ -59,8 +59,13 @@ this repository contains the full copyright notices and license terms. -->
<record model="ir.action.keyword"
id="act_location_quantity_keyword1">
<field name="keyword">form_relate</field>
- <field name="model">product.product,0</field>
+ <field name="model">product.product,-1</field>
+ <field name="action" ref="wizard_location_open"/>
+ </record>
+ <record model="ir.action-res.group"
+ id="wizard_location_open-group_stock">
<field name="action" ref="wizard_location_open"/>
+ <field name="group" ref="group_stock"/>
</record>
<record model="ir.ui.view" id="product_stock_date_init_view_form">
diff --git a/ru_RU.csv b/ru_RU.csv
deleted file mode 100644
index 4cf45ed..0000000
--- a/ru_RU.csv
+++ /dev/null
@@ -1,407 +0,0 @@
-type,name,res_id,src,value,fuzzy
-error,product.template,0,You cannot change the default uom for a product which is associated to stock moves.,"ÐÑ Ð½Ðµ можеÑе измениÑÑ ÐµÐ´Ð¸Ð½Ð¸ÑÑ Ð¸Ð·Ð¼ÐµÑÐµÐ½Ð¸Ñ Ð¿Ð¾ ÑмолÑÐ°Ð½Ð¸Ñ Ð´Ð»Ñ Ð¿ÑодÑкÑа, коÑоÑÑй ÑвÑзан Ñо Ñкладом пеÑемеÑениÑ.",0
-error,stock.inventory.line,0,Line quantity must be positive!,Ðол-во должно бÑÑÑ Ð¿Ð¾Ð»Ð¾Ð¶Ð¸ÑелÑнÑм,0
-error,stock.inventory.line,0,Product must be unique by inventory!,ТÐЦ должен бÑÑÑ ÑникалÑнÑм по инвенÑаÑизаÑии!,0
-error,stock.location,0,A location with existing moves cannot be changed to a type that does not support moves.,,0
-error,stock.location,0,"Location ""%s"" must be a child of warehouse ""%s""!","ÐеÑÑо ""%s"" должно бÑÑÑ Ð½Ð° Ñкладе ""%s""!",0
-error,stock.location,0,You can not create recursive locations!,ÐÑ Ð½Ðµ можеÑе ÑоздаваÑÑ ÑекÑÑÑивнÑе меÑÑа!,0
-error,stock.move,0,Move can be on only one Shipment,ÐеÑемеÑение Ð¼Ð¾Ð¶ÐµÑ Ð¸Ð¼ÐµÑÑ ÑолÑко Ð¾Ð´Ð½Ñ Ð¾ÑгÑÑзкÑ,0
-error,stock.move,0,Move quantity must be positive,Ðол-во должно бÑÑÑ Ð¿Ð¾Ð»Ð¾Ð¶Ð¸ÑелÑнÑм,0
-error,stock.move,0,Source and destination location must be different,ÐÑÑоÑник и меÑÑо назнаÑÐµÐ½Ð¸Ñ Ð´Ð¾Ð»Ð¶Ð½Ñ Ð±ÑÑÑ ÑазнÑми,0
-error,stock.move,0,You can not set state to assigned!,ÐÑ Ð½Ðµ можеÑе ÑÑÑановиÑÑ ÑоÑÑоÑние 'пеÑедан'!,0
-error,stock.move,0,You can not set state to done!,ÐÑ Ð½Ðµ можеÑе ÑÑÑановиÑÑ ÑоÑÑоÑние 'гоÑово'!,0
-error,stock.move,0,You can not set state to draft!,ÐÑ Ð½Ðµ можеÑе ÑÑÑановиÑÑ ÑоÑÑоÑние 'ÑеÑновик'!,0
-error,stock.move,0,You can not use service products for a move!,ÐÑ Ð½Ðµ можеÑе вÑбÑаÑÑ ÑÑлÑÐ³Ñ Ð´Ð»Ñ Ð¿ÐµÑемеÑениÑ,0
-error,stock.move,0,You can only delete draft or cancelled moves!,ÐÑ Ð¼Ð¾Ð¶ÐµÑе ÑдалÑÑÑ ÑолÑко оÑмененнÑе пеÑемеÑÐµÐ½Ð¸Ñ Ð¸ ÑеÑновики,0
-error,stock.shipment.in,0,Incoming Moves must have the warehouse input location as destination location!,РпоÑÑÑплениÑÑ
должен бÑÑÑ Ñказан меÑÑом назнаÑÐµÐ½Ð¸Ñ ÑоваÑнÑй Ñклад,0
-error,stock.shipment.in,0,Inventory Moves must have the warehouse input location as source location!,,0
-error,stock.shipment.out.return,0,Incoming Moves must have the warehouse input location as destination location!,РвозвÑаÑаÑ
Ð¾Ñ Ð·Ð°ÐºÐ°Ð·Ñиков должен бÑÑÑ Ñказан меÑÑом назнаÑÐµÐ½Ð¸Ñ ÑоваÑнÑй Ñклад,0
-error,stock.shipment.out.return,0,Inventory Moves must have the warehouse input location as source location!,,0
-error,stock.shipment.out.return.create,0,The shipment with code %s is not yet sent.,ÐÑгÑÑзка Ñ ÐºÐ¾Ð´Ð¾Ð¼ %s еÑе не оÑпÑавлена.,0
-error,stock.shipment.out.return.create,0,You can not create return shipment,ÐÑ Ð½Ðµ можеÑе ÑоздаÑÑ Ð²Ð¾Ð·Ð²ÑаÑ,0
-field,"party.address,delivery",0,Delivery,ÐоÑÑавка,0
-field,"party.party,customer_location",0,Customer Location,ÐеÑÑо Ñ
ÑÐ°Ð½ÐµÐ½Ð¸Ñ Ð·Ð°ÐºÐ°Ð·Ñика,0
-field,"party.party,supplier_location",0,Supplier Location,ÐеÑÑо Ñ
ÑÐ°Ð½ÐµÐ½Ð¸Ñ Ð¿Ð¾ÑÑавÑика,0
-field,"product.product,forecast_quantity",0,Forecast Quantity,ÐÑогноз ÐолиÑеÑÑво,0
-field,"product.product,quantity",0,Quantity,Ðол-во,0
-field,"product.template,forecast_quantity",0,Forecast Quantity,ÐÑогноз ÐолиÑеÑÑво,0
-field,"product.template,quantity",0,Quantity,Ðол-во,0
-field,"stock.configuration,rec_name",0,Name,Ðаименование,0
-field,"stock.configuration,shipment_in_return_sequence",0,Supplier Return Shipment Sequence,ÐозвÑÐ°Ñ Ð¿Ð¾ÑÑавÑÐ¸ÐºÑ Ð¿Ð¾ÑледоваÑелÑноÑÑÑ,0
-field,"stock.configuration,shipment_in_sequence",0,Supplier Shipment Sequence,ÐÑиÑ
од Ð¾Ñ Ð¿Ð¾ÑÑавÑика поÑледоваÑелÑноÑÑÑ,0
-field,"stock.configuration,shipment_internal_sequence",0,Internal Shipment Sequence,ÐнÑÑÑенние пеÑемеÑение поÑледоваÑелÑноÑÑÑ,0
-field,"stock.configuration,shipment_out_return_sequence",0,Customer Return Shipment Sequence,ÐозвÑÐ°Ñ Ð¾Ñ Ð·Ð°ÐºÐ°Ð·Ñика поÑледоваÑелÑноÑÑÑ,0
-field,"stock.configuration,shipment_out_sequence",0,Customer Shipment Sequence,ÐÑгÑÑзка заказÑÐ¸ÐºÑ Ð¿Ð¾ÑледоваÑелÑноÑÑÑ,0
-field,"stock.inventory,company",0,Company,ÐомпаниÑ,0
-field,"stock.inventory,date",0,Date,ÐаÑа,0
-field,"stock.inventory,lines",0,Lines,СÑÑоки,0
-field,"stock.inventory,location",0,Location,ÐеÑÑо,0
-field,"stock.inventory,lost_found",0,Lost and Found,УÑÑаÑеннÑй и обÑеÑеннÑй,0
-field,"stock.inventory,rec_name",0,Name,Ðаименование,0
-field,"stock.inventory,state",0,State,СоÑÑоÑние,0
-field,"stock.inventory.line,expected_quantity",0,Expected Quantity,Ðжидаемое колиÑеÑÑво,0
-field,"stock.inventory.line,inventory",0,Inventory,ÐнвенÑаÑизаÑиÑ,0
-field,"stock.inventory.line,move",0,Move,ÐеÑемеÑение,0
-field,"stock.inventory.line,product",0,Product,ТÐЦ,0
-field,"stock.inventory.line,quantity",0,Quantity,Ðол-во,0
-field,"stock.inventory.line,rec_name",0,Name,Ðаименование,0
-field,"stock.inventory.line,unit_digits",0,Unit Digits,ÐÑÑппа ÑиÑÑ,0
-field,"stock.inventory.line,uom",0,UOM,Ðд.изм.,0
-field,"stock.location,active",0,Active,ÐейÑÑвиÑелÑннÑй,0
-field,"stock.location,address",0,Address,ÐдÑеÑ,0
-field,"stock.location,childs",0,Children,ÐодÑиненÑй,0
-field,"stock.location,code",0,Code,Ðод локаÑии,0
-field,"stock.location,forecast_quantity",0,Forecast Quantity,ÐÑогноз ÐолиÑеÑÑво,0
-field,"stock.location,input_location",0,Input,ÐÑ
одÑÑий,0
-field,"stock.location,left",0,Left,ÐÐµÐ²Ð°Ñ ÑÑоÑона,0
-field,"stock.location,name",0,Name,Ðаименование,0
-field,"stock.location,output_location",0,Output,ÐÑÑ
одÑÑий,0
-field,"stock.location,parent",0,Parent,ÐÑновной,0
-field,"stock.location,quantity",0,Quantity,Ðол-во,0
-field,"stock.location,rec_name",0,Name,Ðаименование,0
-field,"stock.location,right",0,Right,ÐÑÐ°Ð²Ð°Ñ ÑÑоÑона,0
-field,"stock.location,storage_location",0,Storage,Ð¥ÑанилиÑе,0
-field,"stock.location,type",0,Location type,Тип ÑаÑположение,0
-field,"stock.location_stock_date.init,forecast_date",0,At Date,Ðо даÑе,0
-field,"stock.move,company",0,Company,ÐомпаниÑ,0
-field,"stock.move,cost_price",0,Cost Price,СебеÑÑоимоÑÑÑ,0
-field,"stock.move,currency",0,Currency,ÐалÑÑа,0
-field,"stock.move,effective_date",0,Effective Date,УÑеÑÐ½Ð°Ñ Ð´Ð°Ñа,0
-field,"stock.move,from_location",0,From Location,Ðз меÑÑа,0
-field,"stock.move,planned_date",0,Planned Date,ÐÐ»Ð°Ð½Ð¾Ð²Ð°Ñ Ð´Ð°Ñа,0
-field,"stock.move,product",0,Product,ТÐЦ,0
-field,"stock.move,quantity",0,Quantity,Ðол-во,0
-field,"stock.move,rec_name",0,Name,Ðаименование,0
-field,"stock.move,shipment_in",0,Supplier Shipment,ÐÑиÑ
од Ð¾Ñ Ð¿Ð¾ÑÑавÑика,0
-field,"stock.move,shipment_in_return",0,Supplier Return Shipment,ÐозвÑÐ°Ñ Ð¿Ð¾ÑÑавÑикÑ,0
-field,"stock.move,shipment_internal",0,Internal Shipment,ÐнÑÑÑеннее пеÑемеÑение,0
-field,"stock.move,shipment_out",0,Customer Shipment,ÐÑгÑÑзка заказÑикÑ,0
-field,"stock.move,shipment_out_return",0,Customer Return Shipment,ÐозвÑÐ°Ñ Ð¾Ñ Ð·Ð°ÐºÐ°Ð·Ñика,0
-field,"stock.move,state",0,State,СоÑÑоÑние,0
-field,"stock.move,to_location",0,To Location,РмеÑÑо,0
-field,"stock.move,unit_digits",0,Unit Digits,ÐÑÑппа ÑиÑÑ,0
-field,"stock.move,unit_price",0,Unit Price,Цена за единиÑÑ,0
-field,"stock.move,unit_price_required",0,Unit Price Required,ТÑебÑеÑÑÑ Ñена за единиÑÑ,0
-field,"stock.move,uom",0,Uom,Ðд.изм.,0
-field,"stock.product_stock_date.init,forecast_date",0,At Date,Ðо даÑе,0
-field,"stock.shipment.in,code",0,Code,Ðод оÑгÑÑзки,0
-field,"stock.shipment.in,contact_address",0,Contact Address,ÐонÑакÑнÑй адÑеÑ,0
-field,"stock.shipment.in,effective_date",0,Effective Date,УÑеÑÐ½Ð°Ñ Ð´Ð°Ñа,0
-field,"stock.shipment.in,incoming_moves",0,Incoming Moves,ÐÑ
одÑÑÐ°Ñ Ð¿Ð¾ÑÑавка,0
-field,"stock.shipment.in,inventory_moves",0,Inventory Moves,УÑÐµÑ Ð¿ÐµÑемеÑений,0
-field,"stock.shipment.in,moves",0,Moves,ÐеÑемеÑениÑ,0
-field,"stock.shipment.in,planned_date",0,Planned Date,ÐÐ»Ð°Ð½Ð¾Ð²Ð°Ñ Ð´Ð°Ñа,0
-field,"stock.shipment.in,rec_name",0,Name,Ðаименование,0
-field,"stock.shipment.in,reference",0,Reference,СÑÑлка,0
-field,"stock.shipment.in,state",0,State,СоÑÑоÑние,0
-field,"stock.shipment.in,supplier",0,Supplier,ÐоÑÑавÑик,0
-field,"stock.shipment.in,warehouse",0,Warehouse,ТоваÑнÑй Ñклад,0
-field,"stock.shipment.in.return,code",0,Code,Ðод возвÑаÑа оÑгÑÑзки,0
-field,"stock.shipment.in.return,effective_date",0,Effective Date,УÑеÑÐ½Ð°Ñ Ð´Ð°Ñа,0
-field,"stock.shipment.in.return,from_location",0,From Location,Ðз меÑÑа,0
-field,"stock.shipment.in.return,moves",0,Moves,ÐеÑемеÑениÑ,0
-field,"stock.shipment.in.return,planned_date",0,Planned Date,ÐÐ»Ð°Ð½Ð¾Ð²Ð°Ñ Ð´Ð°Ñа,0
-field,"stock.shipment.in.return,rec_name",0,Name,Ðаименование,0
-field,"stock.shipment.in.return,reference",0,Reference,СÑÑлка,0
-field,"stock.shipment.in.return,state",0,State,СоÑÑоÑние,0
-field,"stock.shipment.in.return,to_location",0,To Location,РмеÑÑо,0
-field,"stock.shipment.in.return.assign.ask_force,moves",0,Moves,ÐеÑемеÑениÑ,0
-field,"stock.shipment.internal,code",0,Code,Ðод внÑÑÑенней оÑгÑÑзки,0
-field,"stock.shipment.internal,effective_date",0,Effective Date,УÑеÑÐ½Ð°Ñ Ð´Ð°Ñа,0
-field,"stock.shipment.internal,from_location",0,From Location,Ðз меÑÑа,0
-field,"stock.shipment.internal,moves",0,Moves,ÐеÑемеÑениÑ,0
-field,"stock.shipment.internal,planned_date",0,Planned Date,ÐÐ»Ð°Ð½Ð¾Ð²Ð°Ñ Ð´Ð°Ñа,0
-field,"stock.shipment.internal,rec_name",0,Name,Ðаименование,0
-field,"stock.shipment.internal,reference",0,Reference,СÑÑлка,0
-field,"stock.shipment.internal,state",0,State,СоÑÑоÑние,0
-field,"stock.shipment.internal,to_location",0,To Location,РмеÑÑо,0
-field,"stock.shipment.internal.assign.ask_force,moves",0,Moves,ÐеÑемеÑениÑ,0
-field,"stock.shipment.out,code",0,Code,Ðод иÑÑ
одÑÑей оÑгÑÑзки,0
-field,"stock.shipment.out,customer",0,Customer,ÐаказÑик,0
-field,"stock.shipment.out,delivery_address",0,Delivery Address,ÐдÑÐµÑ Ð´Ð¾ÑÑавки,0
-field,"stock.shipment.out,effective_date",0,Effective Date,УÑеÑÐ½Ð°Ñ Ð´Ð°Ñа,0
-field,"stock.shipment.out,inventory_moves",0,Inventory Moves,УÑÐµÑ Ð¿ÐµÑемеÑений,0
-field,"stock.shipment.out,moves",0,Moves,ÐеÑемеÑениÑ,0
-field,"stock.shipment.out,outgoing_moves",0,Outgoing Moves,ÐнеÑнее пеÑемеÑение,0
-field,"stock.shipment.out,planned_date",0,Planned Date,ÐÐ»Ð°Ð½Ð¾Ð²Ð°Ñ Ð´Ð°Ñа,0
-field,"stock.shipment.out,rec_name",0,Name,Ðаименование,0
-field,"stock.shipment.out,reference",0,Reference,СÑÑлка,0
-field,"stock.shipment.out,state",0,State,СоÑÑоÑние,0
-field,"stock.shipment.out,warehouse",0,Warehouse,ТоваÑнÑй Ñклад,0
-field,"stock.shipment.out.assign.ask_force,inventory_moves",0,Inventory Moves,УÑÐµÑ Ð¿ÐµÑемеÑений,0
-field,"stock.shipment.out.return,code",0,Code,Ðод возвÑаÑа оÑгÑÑзки,0
-field,"stock.shipment.out.return,customer",0,Customer,ÐаказÑик,0
-field,"stock.shipment.out.return,delivery_address",0,Delivery Address,ÐдÑÐµÑ Ð´Ð¾ÑÑавки,0
-field,"stock.shipment.out.return,effective_date",0,Effective Date,УÑеÑÐ½Ð°Ñ Ð´Ð°Ñа,0
-field,"stock.shipment.out.return,incoming_moves",0,Incoming Moves,ÐÑ
одÑÑÐ°Ñ Ð¿Ð¾ÑÑавка,0
-field,"stock.shipment.out.return,inventory_moves",0,Inventory Moves,УÑÐµÑ Ð¿ÐµÑемеÑений,0
-field,"stock.shipment.out.return,moves",0,Moves,ÐеÑемеÑениÑ,0
-field,"stock.shipment.out.return,planned_date",0,Planned Date,ÐÐ»Ð°Ð½Ð¾Ð²Ð°Ñ Ð´Ð°Ñа,0
-field,"stock.shipment.out.return,rec_name",0,Name,Ðаименование,0
-field,"stock.shipment.out.return,reference",0,Reference,СÑÑлка,0
-field,"stock.shipment.out.return,state",0,State,СоÑÑоÑние,0
-field,"stock.shipment.out.return,warehouse",0,Warehouse,ТоваÑнÑй Ñклад,0
-help,"party.party,customer_location",0,The default destination location when sending products to the party.,ÐеÑÑо назнаÑÐµÐ½Ð¸Ñ Ð¿Ð¾ ÑмолÑÐ°Ð½Ð¸Ñ Ð¿Ñи оÑпÑавке пÑодÑкÑии конÑÑагенÑÑ.,0
-help,"party.party,supplier_location",0,The default source location when receiving products from the party.,"Ðо ÑмолÑаниÑ, меÑÑоположение пÑи полÑÑении пÑодÑкÑии Ð¾Ñ ÐºÐ¾Ð½ÑÑагенÑа.",0
-help,"stock.location_stock_date.init,forecast_date",0,"Allow to compute expected stock quantities for this date.
-* An empty value is an infinite date in the future.
-* A date in the past will provide historical values.",,0
-help,"stock.product_stock_date.init,forecast_date",0,"Allow to compute expected stock quantities for this date.
-* An empty value is an infinite date in the future.
-* A date in the past will provide historical values.",,0
-model,"ir.action,name",act_inventory_form,Inventories,ÐнвенÑаÑизаÑиÑ,0
-model,"ir.action,name",act_location_form,Edit Locations,ÐзмениÑÑ Ð¼ÐµÑÑа Ñ
ÑанениÑ,0
-model,"ir.action,name",act_location_quantity_tree,Product Stock,Ð¥ÑанилиÑе ТÐЦ,0
-model,"ir.action,name",act_location_tree,Locations,ÐеÑÑа,0
-model,"ir.action,name",act_move_form,Moves,ÐеÑемеÑениÑ,0
-model,"ir.action,name",act_move_form_cust,Moves to Customers,ÐÑгÑÑзка заказÑикам,0
-model,"ir.action,name",act_move_form_supp,Moves from Suppliers,ÐоÑÑавки Ð¾Ñ Ð¿Ð¾ÑÑавÑиков,0
-model,"ir.action,name",act_move_form_supp_proceed,Moves from Suppliers Waiting Arrival,ÐжидаÑÑийÑÑ Ð¿ÑиÑ
од Ð¾Ñ Ð¿Ð¾ÑÑавÑика,0
-model,"ir.action,name",act_product_by_location,Products by Locations,ТÐЦ по меÑÑонаÑ
ождениÑм,0
-model,"ir.action,name",act_shipment_in_form,Supplier Shipments,ÐÑиÑ
од Ð¾Ñ Ð¿Ð¾ÑÑавÑиков,0
-model,"ir.action,name",act_shipment_in_form2,New Supplier Shipment,ÐÐ¾Ð²Ð°Ñ Ð¿Ð¾ÑÑавка,0
-model,"ir.action,name",act_shipment_in_form_received,Received Supplier shipments,ÐоÑÑÑÐ¿Ð»ÐµÐ½Ð¸Ñ Ð¾Ñ Ð¿Ð¾ÑÑавÑика,0
-model,"ir.action,name",act_shipment_in_return_form,Supplier Return Shipments,ÐозвÑаÑÑ Ð¿Ð¾ÑÑавÑикÑ,0
-model,"ir.action,name",act_shipment_in_return_new_form,New Supplier Return Shipment,ÐовÑй возвÑÐ°Ñ Ð¿Ð¾ÑÑавÑикÑ,0
-model,"ir.action,name",act_shipment_internal_assigned_form,Assigned Internal Shipments,ÐÑполненнÑе внÑÑÑенние пеÑемеÑениÑ,0
-model,"ir.action,name",act_shipment_internal_draft_form,Draft Internal Shipments,ЧеÑновик внÑÑÑенниÑ
пеÑемеÑений,0
-model,"ir.action,name",act_shipment_internal_form,Internal Shipments,ÐнÑÑÑенние пеÑемеÑениÑ,0
-model,"ir.action,name",act_shipment_internal_new_form,New Internal Shipment,Ðовое внÑÑÑеннее пеÑемеÑение,0
-model,"ir.action,name",act_shipment_internal_waiting_form,Internal Shipments Waiting Assignation,ÐнÑÑÑенние пеÑемеÑÐµÐ½Ð¸Ñ Ð² ожидании,0
-model,"ir.action,name",act_shipment_out_form,Customer Shipments,ÐÑгÑÑзки заказÑикÑ,0
-model,"ir.action,name",act_shipment_out_form2,Customer Shipments,ÐÑгÑÑзки заказÑикÑ,0
-model,"ir.action,name",act_shipment_out_form3,Supplier Shipments,ÐÑиÑ
од Ð¾Ñ Ð¿Ð¾ÑÑавÑиков,0
-model,"ir.action,name",act_shipment_out_form_assigned,Assigned Customer Shipments,ÐÑÑÐ·Ñ Ð¿ÐµÑеданнÑе заказÑикÑ,0
-model,"ir.action,name",act_shipment_out_form_ready,Customer Shipments Ready for Shipping,ÐÑÑз заказÑика гоÑовÑй к оÑгÑÑзке,0
-model,"ir.action,name",act_shipment_out_form_waiting,Customer Shipments Waiting Assignation,ÐлиенÑÑкий гÑÑз ожидаÑÑий назнаÑениÑ,0
-model,"ir.action,name",act_shipment_out_return_form,Customer Return Shipments,ÐозвÑаÑÑ Ð¾Ñ Ð·Ð°ÐºÐ°Ð·Ñика,0
-model,"ir.action,name",act_shipment_out_return_form2,New Customer Return Shipment,ÐовÑй возвÑÐ°Ñ Ð¾Ñ Ð·Ð°ÐºÐ°Ð·Ñика,0
-model,"ir.action,name",create_shipment_out_return,Create Return Shipment,Создание обÑаÑной оÑпÑавки,0
-model,"ir.action,name",report_shipment_in_restocking_list,Restocking List,СпиÑок пополнениÑ,0
-model,"ir.action,name",report_shipment_internal,Internal Shipment,ÐнÑÑÑеннее пеÑемеÑение,0
-model,"ir.action,name",report_shipment_out_delivery_note,Delivery Note,Ðакладной,0
-model,"ir.action,name",report_shipment_out_picking_list,Picking List,Ð¡Ð±Ð¾Ñ Ð¡Ð¿Ð¸Ñок,0
-model,"ir.action,name",report_shipment_out_return_restocking_list,Restocking List,СпиÑок пополнениÑ,0
-model,"ir.action,name",wizard_complete_inventory,Complete Inventory,ÐÐ¾Ð»Ð½Ð°Ñ Ð¸Ð½Ð²ÐµÐ½ÑаÑизаÑиÑ,0
-model,"ir.action,name",wizard_location_open,Product by Location,ТÐЦ по меÑÑонаÑ
ождениÑ,0
-model,"ir.action,name",wizard_product_open,Product Quantities,ÐолиÑеÑÑва ТоваÑа,0
-model,"ir.action,name",wizard_shipment_in_return_assign,Assign Purchase Return Shipment,,0
-model,"ir.action,name",wizard_shipment_internal_assign,Assign Shipment Internal,ÐнÑÑÑенние назнаÑение поÑÑавки ,0
-model,"ir.action,name",wizard_shipment_out_assign,Assign Shipment Out,ÐнеÑнее назнаÑение гÑÑза,0
-model,"ir.sequence,name",sequence_shipment_in,Supplier Shipment,ÐÑиÑ
од Ð¾Ñ Ð¿Ð¾ÑÑавÑика,0
-model,"ir.sequence,name",sequence_shipment_in_return,Supplier Return Shipment,ÐозвÑÐ°Ñ Ð¿Ð¾ÑÑавÑикÑ,0
-model,"ir.sequence,name",sequence_shipment_internal,Internal Shipment,ÐнÑÑÑеннее пеÑемеÑение,0
-model,"ir.sequence,name",sequence_shipment_out,Customer Shipment,ÐÑгÑÑзка заказÑикÑ,0
-model,"ir.sequence,name",sequence_shipment_out_return,Customer Return Shipment,ÐозвÑÐ°Ñ Ð¾Ñ Ð·Ð°ÐºÐ°Ð·Ñика,0
-model,"ir.sequence.type,name",sequence_type_shipment_in,Supplier Shipment,ÐÑиÑ
од Ð¾Ñ Ð¿Ð¾ÑÑавÑика,0
-model,"ir.sequence.type,name",sequence_type_shipment_in_return,Supplier Return Shipment,ÐозвÑÐ°Ñ Ð¿Ð¾ÑÑавÑикÑ,0
-model,"ir.sequence.type,name",sequence_type_shipment_internal,Internal Shipment,ÐнÑÑÑеннее пеÑемеÑение,0
-model,"ir.sequence.type,name",sequence_type_shipment_out,Customer Shipment,ÐÑгÑÑзка заказÑикÑ,0
-model,"ir.sequence.type,name",sequence_type_shipment_out_return,Customer Return Shipment,ÐозвÑÐ°Ñ Ð¾Ñ Ð·Ð°ÐºÐ°Ð·Ñика,0
-model,"ir.ui.menu,name",menu_configuration,Configuration,ÐонÑигÑÑаÑиÑ,0
-model,"ir.ui.menu,name",menu_inventory_form,Inventories,ÐнвенÑаÑизаÑии,0
-model,"ir.ui.menu,name",menu_inventory_form_draft,Draft Inventories,ЧеÑновики инвенÑаÑизаÑий,0
-model,"ir.ui.menu,name",menu_inventory_form_new,New Inventory,ÐÐ¾Ð²Ð°Ñ Ð¸Ð½Ð²ÐµÐ½ÑаÑизаÑиÑ,0
-model,"ir.ui.menu,name",menu_location_form,Edit Locations,ÐзмениÑÑ Ð¼ÐµÑÑа Ñ
ÑанениÑ,0
-model,"ir.ui.menu,name",menu_location_tree,Locations,ÐеÑÑа Ñ
ÑанениÑ,0
-model,"ir.ui.menu,name",menu_move_form,Moves,ÐеÑемеÑениÑ,0
-model,"ir.ui.menu,name",menu_move_form_cust,Moves to Customers,ÐÑгÑÑзки заказÑикам,0
-model,"ir.ui.menu,name",menu_move_form_supp,Moves from Suppliers,ÐоÑÑавки Ð¾Ñ Ð¿Ð¾ÑÑавÑиков,0
-model,"ir.ui.menu,name",menu_move_form_supp_proceed,Moves from Suppliers Waiting Arrival,ÐжидаÑÑийÑÑ Ð¿ÑиÑ
од Ð¾Ñ Ð¿Ð¾ÑÑавÑика,0
-model,"ir.ui.menu,name",menu_reporting,Reporting,ÐÑÑеÑноÑÑÑ,0
-model,"ir.ui.menu,name",menu_shipment_in_form,Supplier Shipments,ÐÑиÑ
од Ð¾Ñ Ð¿Ð¾ÑÑавÑиков,0
-model,"ir.ui.menu,name",menu_shipment_in_form2,New Supplier Shipment,ÐÐ¾Ð²Ð°Ñ Ð¿Ð¾ÑÑака,0
-model,"ir.ui.menu,name",menu_shipment_in_received,Received Supplier shipments,ÐоÑÑÑÐ¿Ð»ÐµÐ½Ð¸Ñ Ð¾Ñ Ð¿Ð¾ÑÑавÑика,0
-model,"ir.ui.menu,name",menu_shipment_in_return_form,Supplier Return Shipments,ÐозвÑаÑÑ Ð¿Ð¾ÑÑавÑикÑ,0
-model,"ir.ui.menu,name",menu_shipment_in_return_new_form,New Supplier Return Shipment,ÐовÑй возвÑÐ°Ñ Ð¿Ð¾ÑÑавÑикÑ,0
-model,"ir.ui.menu,name",menu_shipment_internal_assigned_form,Assigned Internal Shipments,ÐÑполненнÑе внÑÑÑенние пеÑемеÑениÑ,0
-model,"ir.ui.menu,name",menu_shipment_internal_draft_form,Draft Internal Shipments,ЧеÑновик внÑÑÑенниÑ
пеÑемеÑений,0
-model,"ir.ui.menu,name",menu_shipment_internal_form,Internal Shipments,ÐнÑÑÑенние пеÑемеÑениÑ,0
-model,"ir.ui.menu,name",menu_shipment_internal_new_form,New Internal Shipment,Ðовое внÑÑÑеннее пеÑемеÑение,0
-model,"ir.ui.menu,name",menu_shipment_internal_waiting_form,Internal Shipments Waiting Assignation,ÐнÑÑÑенние пеÑемеÑÐµÐ½Ð¸Ñ Ð² ожидании,0
-model,"ir.ui.menu,name",menu_shipment_out_assigned,Assigned Customer Shipments,ÐодÑвеÑжденнÑе оÑгÑÑзки заказÑикам,0
-model,"ir.ui.menu,name",menu_shipment_out_form,Customer Shipments,ÐÑгÑÑзки заказÑикам,0
-model,"ir.ui.menu,name",menu_shipment_out_ready,Customer Shipments Ready for Shipping,ÐÑгÑÑзки заказÑикам гоÑовÑе к оÑпÑавке,0
-model,"ir.ui.menu,name",menu_shipment_out_return_form,Customer Return Shipments,ÐозвÑаÑÑ Ð¾Ñ Ð·Ð°ÐºÐ°Ð·Ñика,0
-model,"ir.ui.menu,name",menu_shipment_out_return_form2,New Customer Return Shipment,ÐовÑй возвÑÐ°Ñ Ð¾Ñ Ð·Ð°ÐºÐ°Ð·Ñика,0
-model,"ir.ui.menu,name",menu_shipment_out_waiting,Customer Shipments Waiting Assignation,ÐÑгÑÑзки заказÑикам в ожидании,0
-model,"ir.ui.menu,name",menu_stock,Inventory Management,УпÑавление Ñкладами,0
-model,"ir.ui.menu,name",menu_stock_configuration,Stock Configuration,ÐонÑигÑÑаÑÐ¸Ñ Ñклада,0
-model,"res.group,name",group_stock,Stock,Ð¥ÑанилиÑе,0
-model,"res.group,name",group_stock_admin,Stock Administration,Ð¥ÑанилиÑе ÐдминиÑÑÑиÑование,0
-model,"res.group,name",group_stock_force_assignment,Stock Force Assignment,Склад ÑÑкоÑенной погÑÑзки,0
-model,"stock.configuration,name",0,Stock Configuration,ÐонÑигÑÑаÑÐ¸Ñ Ñклада,0
-model,"stock.inventory,name",0,Stock Inventory,Ð¥ÑанилиÑе опиÑÑ,0
-model,"stock.inventory.line,name",0,Stock Inventory Line,Ð¥ÑанилиÑе ÑÑÑока опиÑи,0
-model,"stock.location,name",0,Stock Location,ÐеÑÑонаÑ
ождение Ñ
ÑанилиÑа,0
-model,"stock.location,name",location_customer,Customer,ÐаказÑик,0
-model,"stock.location,name",location_input,Input Zone,Ðона поÑÑавки,0
-model,"stock.location,name",location_lost_found,Lost and Found,УÑÑаÑеннÑй и обÑеÑеннÑй,0
-model,"stock.location,name",location_output,Output Zone,Ðона оÑгÑÑзки,0
-model,"stock.location,name",location_storage,Storage Zone,Ðона Ñ
ÑанениÑ,0
-model,"stock.location,name",location_supplier,Supplier,ÐоÑÑавÑик,0
-model,"stock.location,name",location_warehouse,Warehouse,ТоваÑнÑй Ñклад,0
-model,"stock.location_stock_date.init,name",0,Compute stock quantities,ÐÑÑиÑление колиÑеÑÑво на Ñкладе,0
-model,"stock.move,name",0,Stock Move,Ð¥ÑанилиÑе пеÑемеÑение ÑоваÑа,0
-model,"stock.product_stock_date.init,name",0,Compute stock quantities,ÐÑÑиÑление колиÑеÑÑво на Ñкладе,0
-model,"stock.shipment.in,name",0,Supplier Shipment,ÐÑиÑ
од Ð¾Ñ Ð¿Ð¾ÑÑавÑика,0
-model,"stock.shipment.in.return,name",0,Supplier Return Shipment,ÐозвÑÐ°Ñ Ð¿Ð¾ÑÑавÑикÑ,0
-model,"stock.shipment.in.return.assign.ask_force,name",0,Assign Supplier Return Shipment Ask Force,,0
-model,"stock.shipment.internal,name",0,Internal Shipment,ÐнÑÑÑеннее пеÑемеÑение,0
-model,"stock.shipment.internal.assign.ask_force,name",0,Assign Shipment Internal Ask Force,ÐнÑÑÑенние назнаÑение поÑÑавки (УÑкоÑеннÑй),0
-model,"stock.shipment.out,name",0,Customer Shipment,ÐÑгÑÑзка заказÑикÑ,0
-model,"stock.shipment.out.assign.ask_force,name",0,Assign Shipment Out Ask Force,ÐнеÑнее назнаÑение гÑÑза (УÑкоÑеннÑй),0
-model,"stock.shipment.out.return,name",0,Customer Return Shipment,ÐозвÑÐ°Ñ Ð¾Ñ Ð·Ð°ÐºÐ°Ð·Ñика,0
-model,"workflow,name",wkf_inventory,Inventory,ÐнвенÑаÑизаÑиÑ,0
-model,"workflow,name",wkf_shipment_in_return,Supplier Return Shipment,ÐозвÑÐ°Ñ Ð¿Ð¾ÑÑавÑикÑ,0
-model,"workflow,name",wkf_shipment_out_return,Customer Return Shipment,ÐозвÑÐ°Ñ Ð¾Ñ Ð·Ð°ÐºÐ°Ð·Ñика,0
-model,"workflow,name",wkf_shipmentin,Supplier Shipment,ÐÑиÑ
од Ð¾Ñ Ð¿Ð¾ÑÑавÑика,0
-model,"workflow,name",wkf_shipmentinternal,Internal Shipment,ÐнÑÑÑеннее пеÑемеÑение,0
-model,"workflow,name",wkf_shipmentout,Customer Shipment,ÐÑгÑÑзка заказÑикÑ,0
-model,"workflow.activity,name",inventory_act_cancel,Canceled,ÐÑменено,0
-model,"workflow.activity,name",inventory_act_done,Done,ÐÑполнено,0
-model,"workflow.activity,name",inventory_act_draft,Draft,ЧеÑновик,0
-model,"workflow.activity,name",shipment_in_return_act_assigned,Assigned,ÐеÑеданнÑй,0
-model,"workflow.activity,name",shipment_in_return_act_cancel,Canceled,ÐÑменено,0
-model,"workflow.activity,name",shipment_in_return_act_done,Done,ÐÑполнено,0
-model,"workflow.activity,name",shipment_in_return_act_draft,Draft,ЧеÑновик,0
-model,"workflow.activity,name",shipment_in_return_act_waiting,Waiting,Ðжидание,0
-model,"workflow.activity,name",shipment_out_return_act_cancel,Canceled,ÐÑменено,0
-model,"workflow.activity,name",shipment_out_return_act_done,Done,ÐÑполнено,0
-model,"workflow.activity,name",shipment_out_return_act_draft,Draft,ЧеÑновик,0
-model,"workflow.activity,name",shipment_out_return_act_received,Received,ÐоÑÑÑпило,0
-model,"workflow.activity,name",shipmentin_act_cancel,Canceled,ÐÑменено,0
-model,"workflow.activity,name",shipmentin_act_done,Done,ÐÑполнено,0
-model,"workflow.activity,name",shipmentin_act_draft,Draft,ЧеÑновик,0
-model,"workflow.activity,name",shipmentin_act_received,Received,ÐоÑÑÑпило,0
-model,"workflow.activity,name",shipmentinternal_act_assigned,Assigned,ÐеÑеданнÑй,0
-model,"workflow.activity,name",shipmentinternal_act_cancel,Canceled,ÐÑменено,0
-model,"workflow.activity,name",shipmentinternal_act_done,Done,ÐÑполнено,0
-model,"workflow.activity,name",shipmentinternal_act_draft,Draft,ЧеÑновик,0
-model,"workflow.activity,name",shipmentinternal_act_waiting,Waiting,Ðжидание,0
-model,"workflow.activity,name",shipmentout_act_assigned,Assigned,ÐеÑеданнÑй,0
-model,"workflow.activity,name",shipmentout_act_cancel,Canceled,ÐÑменено,0
-model,"workflow.activity,name",shipmentout_act_done,Done,ÐÑполнено,0
-model,"workflow.activity,name",shipmentout_act_draft,Draft,ЧеÑновик,0
-model,"workflow.activity,name",shipmentout_act_packed,Packed,УпакованнÑй,0
-model,"workflow.activity,name",shipmentout_act_waiting,Waiting,Ðжидание,0
-selection,"stock.inventory,state",0,Canceled,ÐÑменено,0
-selection,"stock.inventory,state",0,Done,ÐÑполнено,0
-selection,"stock.inventory,state",0,Draft,ЧеÑновик,0
-selection,"stock.location,type",0,Customer,ÐаказÑик,0
-selection,"stock.location,type",0,Lost and Found,УÑÑаÑеннÑй и обÑеÑеннÑй,0
-selection,"stock.location,type",0,Production,ÐÑоизводÑÑво,0
-selection,"stock.location,type",0,Storage,Ð¥ÑанилиÑе,0
-selection,"stock.location,type",0,Supplier,ÐоÑÑавÑик,0
-selection,"stock.location,type",0,View,ÐÑоÑмоÑÑ,0
-selection,"stock.location,type",0,Warehouse,ТоваÑнÑй Ñклад,0
-selection,"stock.move,state",0,Assigned,ÐеÑеданнÑй,0
-selection,"stock.move,state",0,Canceled,ÐÑменено,0
-selection,"stock.move,state",0,Done,ÐÑполнено,0
-selection,"stock.move,state",0,Draft,ЧеÑновик,0
-selection,"stock.shipment.in,state",0,Canceled,ÐÑменено,0
-selection,"stock.shipment.in,state",0,Done,ÐÑполнено,0
-selection,"stock.shipment.in,state",0,Draft,ЧеÑновик,0
-selection,"stock.shipment.in,state",0,Received,ÐоÑÑÑпило,0
-selection,"stock.shipment.in.return,state",0,Assigned,ÐеÑеданнÑй,0
-selection,"stock.shipment.in.return,state",0,Canceled,ÐÑменено,0
-selection,"stock.shipment.in.return,state",0,Done,ÐÑполнено,0
-selection,"stock.shipment.in.return,state",0,Draft,ЧеÑновик,0
-selection,"stock.shipment.in.return,state",0,Waiting,Ðжидание,0
-selection,"stock.shipment.internal,state",0,Assigned,ÐеÑеданнÑй,0
-selection,"stock.shipment.internal,state",0,Canceled,ÐÑменено,0
-selection,"stock.shipment.internal,state",0,Done,ÐÑполнено,0
-selection,"stock.shipment.internal,state",0,Draft,ЧеÑновик,0
-selection,"stock.shipment.internal,state",0,Waiting,Ðжидание,0
-selection,"stock.shipment.out,state",0,Assigned,ÐеÑеданнÑй,0
-selection,"stock.shipment.out,state",0,Canceled,ÐÑменено,0
-selection,"stock.shipment.out,state",0,Done,ÐÑполнено,0
-selection,"stock.shipment.out,state",0,Draft,ЧеÑновик,0
-selection,"stock.shipment.out,state",0,Packed,УпакованнÑй,0
-selection,"stock.shipment.out,state",0,Waiting,Ðжидание,0
-selection,"stock.shipment.out.return,state",0,Canceled,ÐÑменено,0
-selection,"stock.shipment.out.return,state",0,Done,ÐÑполнено,0
-selection,"stock.shipment.out.return,state",0,Draft,ЧеÑновик,0
-selection,"stock.shipment.out.return,state",0,Received,ÐоÑÑÑпило,0
-view,party.party,0,Stock,Ð¥ÑанилиÑе,0
-view,product.product,0,Products,ТÐЦ,0
-view,stock.configuration,0,Stock Configuration,ÐонÑигÑÑаÑÐ¸Ñ Ñклада,0
-view,stock.inventory,0,Add an inventory line for each missing products,ÐобавиÑÑ ÑÑÑÐ¾ÐºÑ Ð² ÑпиÑок Ð´Ð»Ñ ÐºÐ°Ð¶Ð´Ð¾Ð³Ð¾ оÑÑÑÑÑÑвÑÑÑего ÑоваÑа,0
-view,stock.inventory,0,Cancel,ÐÑмениÑÑ,0
-view,stock.inventory,0,Complete Inventory,ÐÐ¾Ð»Ð½Ð°Ñ Ð¸Ð½Ð²ÐµÐ½ÑаÑизаÑиÑ,0
-view,stock.inventory,0,Confirm,ÐодÑвеÑждаÑÑ,0
-view,stock.inventory,0,Inventories,ÐнвенÑаÑизаÑиÑ,0
-view,stock.inventory,0,Inventory,ÐнвенÑаÑизаÑиÑ,0
-view,stock.inventory.line,0,Inventory Line,СÑÑока инвенÑаÑизаÑии,0
-view,stock.inventory.line,0,Inventory Lines,СÑÑоки инвенÑаÑизаÑии,0
-view,stock.location,0,Location,ÐеÑÑо,0
-view,stock.location,0,Locations,ÐеÑÑа Ñ
ÑанениÑ,0
-view,stock.location,0,Product Stock,Ð¥ÑанилиÑе ТÐЦ,0
-view,stock.location_stock_date.init,0,Product Quantity.,ÐолиÑеÑÑво ТоваÑов.,0
-view,stock.move,0,Move,ÐеÑемеÑение,0
-view,stock.move,0,Moves,ÐеÑемеÑениÑ,0
-view,stock.product_stock_date.init,0,Product Quantity.,ÐолиÑеÑÑво ТоваÑов.,0
-view,stock.shipment.in,0,Cancel,ÐÑмениÑÑ,0
-view,stock.shipment.in,0,Done,ÐÑполнено,0
-view,stock.shipment.in,0,Incoming Moves,ÐÑ
одÑÑий гÑÑз,0
-view,stock.shipment.in,0,Inventory Moves,УÑÐµÑ Ð¿ÐµÑемеÑений,0
-view,stock.shipment.in,0,Moves,ÐеÑемеÑениÑ,0
-view,stock.shipment.in,0,Received,ÐоÑÑÑпило,0
-view,stock.shipment.in,0,Reset to Draft,СбÑÐ¾Ñ Ð² ÑеÑновик,0
-view,stock.shipment.in,0,Supplier Shipment,ÐÑиÑ
од Ð¾Ñ Ð¿Ð¾ÑÑавÑика,0
-view,stock.shipment.in,0,Supplier Shipments,ÐÑиÑ
од Ð¾Ñ Ð¿Ð¾ÑÑавÑиков,0
-view,stock.shipment.in.return,0,Assign,ÐазнаÑение,0
-view,stock.shipment.in.return,0,Cancel,ÐÑмениÑÑ,0
-view,stock.shipment.in.return,0,Done,ÐÑполнено,0
-view,stock.shipment.in.return,0,Draft,ЧеÑновик,0
-view,stock.shipment.in.return,0,Reset to Draft,СбÑÐ¾Ñ Ð² ÑеÑновик,0
-view,stock.shipment.in.return,0,Supplier Return Shipment,ÐозвÑÐ°Ñ Ð¿Ð¾ÑÑавÑикÑ,0
-view,stock.shipment.in.return,0,Supplier Return Shipments,ÐозвÑаÑÑ Ð¿Ð¾ÑÑавÑикÑ,0
-view,stock.shipment.in.return,0,Waiting,Ðжидание,0
-view,stock.shipment.in.return.assign.ask_force,0,Moves,ÐеÑемеÑениÑ,0
-view,stock.shipment.in.return.assign.ask_force,0,Unable to Assign,Ðевозможно ÐазнаÑение,0
-view,stock.shipment.in.return.assign.ask_force,0,Unable to assign those products:,Ðевозможно назнаÑиÑÑ ÑÑи ÑоваÑÑ:,0
-view,stock.shipment.internal,0,Assign,ÐазнаÑение,0
-view,stock.shipment.internal,0,Cancel,ÐÑмениÑÑ,0
-view,stock.shipment.internal,0,Done,ÐÑполнено,0
-view,stock.shipment.internal,0,Draft,ЧеÑновик,0
-view,stock.shipment.internal,0,Internal Shipment,ÐнÑÑÑеннее пеÑемеÑение,0
-view,stock.shipment.internal,0,Internal Shipments,ÐнÑÑÑенние пеÑемеÑениÑ,0
-view,stock.shipment.internal,0,Reset to Draft,СбÑÐ¾Ñ Ð² ÑеÑновик,0
-view,stock.shipment.internal,0,Waiting,Ðжидание,0
-view,stock.shipment.internal.assign.ask_force,0,Moves,ÐеÑемеÑениÑ,0
-view,stock.shipment.internal.assign.ask_force,0,Unable to Assign,Ðевозможно ÐазнаÑение,0
-view,stock.shipment.internal.assign.ask_force,0,Unable to assign those products:,Ðевозможно назнаÑиÑÑ ÑÑи ÑоваÑÑ:,0
-view,stock.shipment.out,0,Assign,ÐазнаÑение,0
-view,stock.shipment.out,0,Cancel,ÐÑмениÑÑ,0
-view,stock.shipment.out,0,Customer Shipment,ÐÑгÑÑзка заказÑикÑ,0
-view,stock.shipment.out,0,Customer Shipments,ÐÑгÑÑзки заказÑикам,0
-view,stock.shipment.out,0,Done,ÐÑполнено,0
-view,stock.shipment.out,0,Draft,ЧеÑновик,0
-view,stock.shipment.out,0,Inventory Moves,УÑÐµÑ Ð¿ÐµÑемеÑений,0
-view,stock.shipment.out,0,Make shipment,СделаÑÑ Ð¾ÑгÑÑзкÑ,0
-view,stock.shipment.out,0,Outgoing Moves,ÐнеÑнее пеÑемеÑение,0
-view,stock.shipment.out,0,Reset to Draft,СбÑÐ¾Ñ Ð² ÑеÑновик,0
-view,stock.shipment.out,0,Waiting,Ðжидание,0
-view,stock.shipment.out.assign.ask_force,0,Inventory Moves,УÑÐµÑ Ð¿ÐµÑемеÑений,0
-view,stock.shipment.out.assign.ask_force,0,Unable to Assign,Ðевозможно ÐазнаÑение,0
-view,stock.shipment.out.assign.ask_force,0,Unable to assign those products:,Ðевозможно назнаÑиÑÑ ÑÑи ÑоваÑÑ:,0
-view,stock.shipment.out.return,0,Cancel,ÐÑмениÑÑ,0
-view,stock.shipment.out.return,0,Customer Return Shipment,ÐозвÑÐ°Ñ Ð¾Ñ Ð·Ð°ÐºÐ°Ð·Ñика,0
-view,stock.shipment.out.return,0,Customer Return Shipments,ÐозвÑаÑÑ Ð¾Ñ Ð·Ð°ÐºÐ°Ð·Ñиков,0
-view,stock.shipment.out.return,0,Done,ÐÑполнено,0
-view,stock.shipment.out.return,0,Incoming Moves,ÐÑ
одÑÑий гÑÑз,0
-view,stock.shipment.out.return,0,Inventory Moves,УÑÐµÑ Ð¿ÐµÑемеÑений,0
-view,stock.shipment.out.return,0,Moves,ÐеÑемеÑениÑ,0
-view,stock.shipment.out.return,0,Received,ÐоÑÑÑпило,0
-view,stock.shipment.out.return,0,Reset to Draft,СбÑÐ¾Ñ Ð² ÑеÑновики,0
-wizard_button,"stock.location.open,init,end",0,Cancel,ÐÑмениÑÑ,0
-wizard_button,"stock.location.open,init,open",0,Open,ÐÑкÑÑÑÑ,0
-wizard_button,"stock.product.open,init,end",0,Cancel,ÐÑмениÑÑ,0
-wizard_button,"stock.product.open,init,open",0,Open,ÐÑкÑÑÑÑ,0
-wizard_button,"stock.shipment.in.return.assign,ask_force,end",0,Ok,Ðа,0
-wizard_button,"stock.shipment.in.return.assign,ask_force,force",0,Force Assign,УÑкоÑÐµÐ½Ð½Ð°Ñ Ð¾ÑгÑÑзка,0
-wizard_button,"stock.shipment.internal.assign,ask_force,end",0,Ok,Ðа,0
-wizard_button,"stock.shipment.internal.assign,ask_force,force",0,Force Assign,УÑкоÑÐµÐ½Ð½Ð°Ñ Ð¿ÐµÑедаÑа,0
-wizard_button,"stock.shipment.out.assign,ask_force,end",0,Ok,Ðа,0
-wizard_button,"stock.shipment.out.assign,ask_force,force",0,Force Assign,УÑкоÑÐµÐ½Ð½Ð°Ñ Ð¾ÑгÑÑзка,0
diff --git a/setup.py b/setup.py
index 90d2835..bbbd07d 100644
--- a/setup.py
+++ b/setup.py
@@ -31,34 +31,30 @@ setup(name='trytond_stock',
packages=[
'trytond.modules.stock',
'trytond.modules.stock.tests',
- 'trytond.modules.stock.icons',
],
package_data={
'trytond.modules.stock': info.get('xml', []) \
+ info.get('translation', []) \
- + ['customer_return_restocking_list.odt',
- 'delivery_note.odt',
- 'internal_shipment.odt',
- 'picking_list.odt',
- 'supplier_restocking_list.odt'],
- 'trytond.modules.stock.icons': ['tryton-inventory.svg'],
+ + ['*.odt', 'icons/*.svg'],
},
classifiers=[
'Development Status :: 5 - Production/Stable',
'Environment :: Plugins',
+ 'Framework :: Tryton',
'Intended Audience :: Developers',
'Intended Audience :: Financial and Insurance Industry',
'Intended Audience :: Legal Industry',
'Intended Audience :: Manufacturing',
'License :: OSI Approved :: GNU General Public License (GPL)',
'Natural Language :: Bulgarian',
+ 'Natural Language :: Czech',
+ 'Natural Language :: Dutch',
'Natural Language :: English',
'Natural Language :: French',
'Natural Language :: German',
'Natural Language :: Russian',
'Natural Language :: Spanish',
'Operating System :: OS Independent',
- 'Programming Language :: Python :: 2.5',
'Programming Language :: Python :: 2.6',
'Programming Language :: Python :: 2.7',
'Topic :: Office/Business',
diff --git a/shipment.py b/shipment.py
index ce5009c..8f322e4 100644
--- a/shipment.py
+++ b/shipment.py
@@ -1,12 +1,14 @@
#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 __future__ import with_statement
+import operator
+import itertools
from trytond.model import ModelWorkflow, ModelView, ModelSQL, fields
from trytond.modules.company import CompanyReport
from trytond.wizard import Wizard
from trytond.backend import TableHandler
-from trytond.pyson import Eval, Not, Equal, If, Or, And, Bool, In
+from trytond.pyson import Eval, Not, Equal, If, Or, And, Bool, In, Get
from trytond.transaction import Transaction
+from trytond.pool import Pool
STATES = {
'readonly': "state in ('cancel', 'done')",
@@ -22,26 +24,37 @@ class ShipmentIn(ModelWorkflow, ModelSQL, ModelView):
effective_date = fields.Date('Effective Date', readonly=True)
planned_date = fields.Date('Planned Date', states={
'readonly': Not(Equal(Eval('state'), 'draft')),
- })
+ }, depends=['state'])
+ company = fields.Many2One('company.company', 'Company', required=True,
+ states={
+ 'readonly': Not(Equal(Eval('state'), 'draft')),
+ },
+ domain=[
+ ('id', If(In('company', Eval('context', {})), '=', '!='),
+ Get(Eval('context', {}), 'company', 0)),
+ ],
+ depends=['state'])
reference = fields.Char("Reference", size=None, select=1,
- states={
- 'readonly': Not(Equal(Eval('state'), 'draft')),
- })
+ states={
+ 'readonly': Not(Equal(Eval('state'), 'draft')),
+ }, depends=['state'])
supplier = fields.Many2One('party.party', 'Supplier',
- states={
- 'readonly': And(Or(Not(Equal(Eval('state'), 'draft')),
+ states={
+ 'readonly': And(Or(Not(Equal(Eval('state'), 'draft')),
Bool(Eval('incoming_moves'))), Bool(Eval('supplier'))),
- }, on_change=['supplier'], required=True)
+ }, on_change=['supplier'], required=True,
+ depends=['state', 'incoming_moves', 'supplier'])
contact_address = fields.Many2One('party.address', 'Contact Address',
- states={
- 'readonly': Not(Equal(Eval('state'), 'draft')),
- }, domain=[('party', '=', Eval('supplier'))])
+ states={
+ 'readonly': Not(Equal(Eval('state'), 'draft')),
+ }, domain=[('party', '=', Eval('supplier'))],
+ depends=['state', 'supplier'])
warehouse = fields.Many2One('stock.location', "Warehouse",
- required=True, domain=[('type', '=', 'warehouse')],
- states={
- 'readonly': Or(In(Eval('state'), ['cancel', 'done']),
- Bool(Eval('incoming_moves'))),
- })
+ required=True, domain=[('type', '=', 'warehouse')],
+ states={
+ 'readonly': Or(In(Eval('state'), ['cancel', 'done']),
+ Bool(Eval('incoming_moves'))),
+ }, depends=['state', 'incoming_moves'])
incoming_moves = fields.Function(fields.One2Many('stock.move', None,
'Incoming Moves', add_remove=[
('shipment_in', '=', False),
@@ -56,16 +69,19 @@ class ShipmentIn(ModelWorkflow, ModelSQL, ModelView):
'warehouse': Eval('warehouse'),
'type': 'incoming',
'supplier': Eval('supplier'),
- }), 'get_incoming_moves', setter='set_incoming_moves')
+ }, depends=['state', 'warehouse']),
+ 'get_incoming_moves', setter='set_incoming_moves')
inventory_moves = fields.Function(fields.One2Many('stock.move', None,
'Inventory Moves', states={
'readonly': In(Eval('state'), ['draft', 'done', 'cancel']),
}, context={
'warehouse': Eval('warehouse'),
'type': 'inventory_in',
- }), 'get_inventory_moves', setter='set_inventory_moves')
+ }, depends=['state', 'warehouse']),
+ 'get_inventory_moves', setter='set_inventory_moves')
moves = fields.One2Many('stock.move', 'shipment_in', 'Moves',
- readonly=True)
+ domain=[('company', '=', Eval('company'))], readonly=True,
+ depends=['company'])
code = fields.Char("Code", size=None, select=1, readonly=True)
state = fields.Selection([
('draft', 'Draft'),
@@ -125,8 +141,27 @@ class ShipmentIn(ModelWorkflow, ModelSQL, ModelView):
for field in ('code', 'reference'):
table.index_action(field, action='remove', table=old_table)
+ # Migration from 2.0:
+ created_company = table.column_exist('company')
+
super(ShipmentIn, self).init(module_name)
+ # Migration from 2.0:
+ move_obj = Pool().get('stock.move')
+ if (not created_company
+ and TableHandler.table_exist(cursor, move_obj._table)):
+ cursor.execute('SELECT shipment.id, MAX(move.company) '
+ 'FROM "%s" AS shipment '
+ 'INNER JOIN "%s" AS move ON shipment.id = move.shipment_in '
+ 'GROUP BY shipment.id '
+ 'ORDER BY MAX(move.company)'
+ % (self._table, move_obj._table))
+ for company_id, values in itertools.groupby(cursor.fetchall(),
+ operator.itemgetter(1)):
+ shipment_ids = [x[0] for x in values]
+ self.write(shipment_ids, {'company': company_id})
+ table.not_null_action('company', action='add')
+
# Add index on create_date
table = TableHandler(cursor, self, module_name)
table.index_action('create_date', action='add')
@@ -135,16 +170,19 @@ class ShipmentIn(ModelWorkflow, ModelSQL, ModelView):
return 'draft'
def default_warehouse(self):
- location_obj = self.pool.get('stock.location')
+ location_obj = Pool().get('stock.location')
location_ids = location_obj.search(self.warehouse.domain)
if len(location_ids) == 1:
return location_ids[0]
return False
+ def default_company(self):
+ return Transaction().context.get('company') or False
+
def on_change_supplier(self, values):
if not values.get('supplier'):
return {'contact_address': False}
- party_obj = self.pool.get("party.party")
+ party_obj = Pool().get("party.party")
address_id = party_obj.address_get(values['supplier'])
return {'contact_address': address_id}
@@ -158,7 +196,7 @@ class ShipmentIn(ModelWorkflow, ModelSQL, ModelView):
return res
def set_incoming_moves(self, ids, name, value):
- move_obj = self.pool.get('stock.move')
+ move_obj = Pool().get('stock.move')
if not value:
return
@@ -207,7 +245,7 @@ class ShipmentIn(ModelWorkflow, ModelSQL, ModelView):
return res
def set_inventory_moves(self, ids, name, value):
- move_obj = self.pool.get('stock.move')
+ move_obj = Pool().get('stock.move')
if not value:
return
@@ -246,64 +284,93 @@ class ShipmentIn(ModelWorkflow, ModelSQL, ModelView):
'moves': value,
})
- def set_state_done(self, shipment_id):
- move_obj = self.pool.get('stock.move')
- date_obj = self.pool.get('ir.date')
+ def wkf_done(self, shipment):
+ move_obj = Pool().get('stock.move')
+ date_obj = Pool().get('ir.date')
- shipment = self.browse(shipment_id)
move_obj.write([m.id for m in shipment.inventory_moves
if m.state not in ('done', 'cancel')], {
'state': 'done',
})
- self.write(shipment_id,{
+ self.write(shipment.id,{
'state': 'done',
'effective_date': date_obj.today(),
})
- def set_state_cancel(self, shipment_id):
- move_obj = self.pool.get('stock.move')
- shipment = self.browse(shipment_id)
+ def wkf_cancel(self, shipment):
+ move_obj = Pool().get('stock.move')
move_obj.write([m.id for m in shipment.incoming_moves
if m.state != 'cancel'] +
[m.id for m in shipment.inventory_moves
if m.state != 'cancel'], {
'state': 'cancel',
})
- self.write(shipment_id, {
+ self.write(shipment.id, {
'state': 'cancel',
})
- def set_state_received(self, shipment_id):
- move_obj = self.pool.get('stock.move')
- shipment = self.browse(shipment_id)
+ def wkf_received(self, shipment):
+ move_obj = Pool().get('stock.move')
move_obj.write([m.id for m in shipment.incoming_moves
if m.state not in ('done', 'cancel')], {
'state': 'done',
})
- self.write(shipment_id, {
+ self.write(shipment.id, {
'state': 'received'
})
+ self.create_inventory_moves(shipment.id)
- def set_state_draft(self, shipment_id):
- move_obj = self.pool.get('stock.move')
- shipment = self.browse(shipment_id)
+ def wkf_draft(self, shipment):
+ move_obj = Pool().get('stock.move')
move_obj.write([m.id for m in shipment.incoming_moves
if m.state != 'draft'], {
'state': 'draft',
})
move_obj.delete([m.id for m in shipment.inventory_moves])
- self.write(shipment_id, {
+ self.write(shipment.id, {
'state': 'draft',
})
+ def _get_move_planned_date(self, shipment):
+ '''
+ Return the planned date for incoming moves and inventory_moves
+ '''
+ return shipment.planned_date, shipment.planned_date
+
+ def _set_move_planned_date(self, shipment_ids):
+ '''
+ Set planned date of moves for the shipments
+ '''
+ move_obj = Pool().get('stock.move')
+ if isinstance(shipment_ids, (int, long)):
+ shipment_ids = [shipment_ids]
+ for shipment in self.browse(shipment_ids):
+ dates = self._get_move_planned_date(shipment)
+ incoming_date, inventory_date = dates
+ move_obj.write([x.id for x in shipment.incoming_moves
+ if x.state not in ('assigned', 'done', 'cancel')], {
+ 'planned_date': incoming_date,
+ })
+ move_obj.write([x.id for x in shipment.inventory_moves
+ if x.state not in ('assigned', 'done', 'cancel')], {
+ 'planned_date': inventory_date,
+ })
+
def create(self, values):
- sequence_obj = self.pool.get('ir.sequence')
- config_obj = self.pool.get('stock.configuration')
+ sequence_obj = Pool().get('ir.sequence')
+ config_obj = Pool().get('stock.configuration')
values = values.copy()
config = config_obj.browse(1)
values['code'] = sequence_obj.get_id(config.shipment_in_sequence.id)
- return super(ShipmentIn, self).create(values)
+ shipment_id = super(ShipmentIn, self).create(values)
+ self._set_move_planned_date(shipment_id)
+ return shipment_id
+
+ def write(self, ids, values):
+ result = super(ShipmentIn, self).write(ids, values)
+ self._set_move_planned_date(ids)
+ return result
def copy(self, ids, default=None):
if default is None:
@@ -354,35 +421,48 @@ class ShipmentInReturn(ModelWorkflow, ModelSQL, ModelView):
effective_date =fields.Date('Effective Date', readonly=True)
planned_date = fields.Date('Planned Date',
- states={
- 'readonly': Not(Equal(Eval('state'), 'draft')),
- })
+ states={
+ 'readonly': Not(Equal(Eval('state'), 'draft')),
+ }, depends=['state'])
+ company = fields.Many2One('company.company', 'Company', required=True,
+ states={
+ 'readonly': Not(Equal(Eval('state'), 'draft')),
+ },
+ domain=[
+ ('id', If(In('company', Eval('context', {})), '=', '!='),
+ Get(Eval('context', {}), 'company', 0)),
+ ],
+ depends=['state'])
code = fields.Char("Code", size=None, select=1, readonly=True)
reference = fields.Char("Reference", size=None, select=1,
- states={
- 'readonly': Not(Equal(Eval('state'), 'draft')),
- })
+ states={
+ 'readonly': Not(Equal(Eval('state'), 'draft')),
+ }, depends=['state'])
from_location = fields.Many2One('stock.location', "From Location",
- required=True, states={
- 'readonly': Or(Not(Equal(Eval('state'), 'draft')),
- Bool(Eval('moves'))),
- }, domain=[('type', '=', 'storage')])
+ required=True, states={
+ 'readonly': Or(Not(Equal(Eval('state'), 'draft')),
+ Bool(Eval('moves'))),
+ }, domain=[('type', '=', 'storage')],
+ depends=['state', 'moves'])
to_location = fields.Many2One('stock.location', "To Location",
- required=True, states={
- 'readonly': Or(Not(Equal(Eval('state'), 'draft')),
- Bool(Eval('moves'))),
- }, domain=[('type', '=', 'supplier')])
+ required=True, states={
+ 'readonly': Or(Not(Equal(Eval('state'), 'draft')),
+ Bool(Eval('moves'))),
+ }, domain=[('type', '=', 'supplier')],
+ depends=['state', 'moves'])
moves = fields.One2Many('stock.move', 'shipment_in_return', 'Moves',
states={
'readonly': And(Or(Not(Equal(Eval('state'), 'draft')),
- Not(Bool(Eval('from_location')))),
+ Not(Bool(Eval('from_location')))),
Bool(Eval('to_location'))),
- },
+ },
+ domain=[('company', '=', Eval('company'))],
context={
'from_location': Eval('from_location'),
'to_location': Eval('to_location'),
'planned_date': Eval('planned_date'),
- })
+ },
+ depends=['state', 'from_location', 'to_location', 'company'])
state = fields.Selection([
('draft', 'Draft'),
('cancel', 'Canceled'),
@@ -421,8 +501,28 @@ class ShipmentInReturn(ModelWorkflow, ModelSQL, ModelView):
for field in ('code', 'reference'):
table.index_action(field, action='remove', table=old_table)
+ # Migration from 2.0:
+ created_company = table.column_exist('company')
+
super(ShipmentInReturn, self).init(module_name)
+ # Migration from 2.0:
+ move_obj = Pool().get('stock.move')
+ if (not created_company
+ and TableHandler.table_exist(cursor, move_obj._table)):
+ cursor.execute('SELECT shipment.id, MAX(move.company) '
+ 'FROM "%s" AS shipment '
+ 'INNER JOIN "%s" AS move '
+ 'ON shipment.id = move.shipment_in_return '
+ 'GROUP BY shipment.id '
+ 'ORDER BY MAX(move.company)'
+ % (self._table, move_obj._table))
+ for company_id, values in itertools.groupby(cursor.fetchall(),
+ operator.itemgetter(1)):
+ shipment_ids = [x[0] for x in values]
+ self.write(shipment_ids, {'company': company_id})
+ table.not_null_action('company', action='add')
+
# Add index on create_date
table = TableHandler(cursor, self, module_name)
table.index_action('create_date', action='add')
@@ -434,75 +534,100 @@ class ShipmentInReturn(ModelWorkflow, ModelSQL, ModelView):
})
self._order[0] = ('id', 'DESC')
+ def _get_move_planned_date(self, shipment):
+ '''
+ Return the planned date for the moves
+ '''
+ return shipment.planned_date
+
+ def _set_move_planned_date(self, shipment_ids):
+ '''
+ Set planned date of moves for the shipments
+ '''
+ move_obj = Pool().get('stock.move')
+ if isinstance(shipment_ids, (int, long)):
+ shipment_ids = [shipment_ids]
+ for shipment in self.browse(shipment_ids):
+ date = self._get_move_planned_date(shipment)
+ move_obj.write([x.id for x in shipment.moves
+ if x.state not in ('assigned', 'done', 'cancel')], {
+ 'planned_date': date,
+ })
+
def create(self, values):
- sequence_obj = self.pool.get('ir.sequence')
- config_obj = self.pool.get('stock.configuration')
+ sequence_obj = Pool().get('ir.sequence')
+ config_obj = Pool().get('stock.configuration')
values = values.copy()
config = config_obj.browse(1)
values['code'] = sequence_obj.get_id(
config.shipment_in_return_sequence.id)
- return super(ShipmentInReturn, self).create(values)
+ shipment_id = super(ShipmentInReturn, self).create(values)
+ self._set_move_planned_date(shipment_id)
+ return shipment_id
- def set_state_draft(self, shipment_id):
- move_obj = self.pool.get('stock.move')
- shipment = self.browse(shipment_id)
- self.write(shipment_id, {
+ def write(self, ids, values):
+ result = super(ShipmentInReturn, self).write(ids, values)
+ self._set_move_planned_date(ids)
+ return result
+
+ def default_company(self):
+ return Transaction().context.get('company') or False
+
+ def wkf_draft(self, shipment):
+ move_obj = Pool().get('stock.move')
+ self.write(shipment.id, {
'state': 'draft',
})
move_obj.write([m.id for m in shipment.moves if m.state != 'draft'], {
'state': 'draft',
})
- def set_state_waiting(self, shipment_id):
- move_obj = self.pool.get('stock.move')
- shipment = self.browse(shipment_id)
+ def wkf_waiting(self, shipment):
+ move_obj = Pool().get('stock.move')
move_obj.write([m.id for m in shipment.moves
if m.state not in ('cancel', 'draft')], {
'state': 'draft',
'planned_date': shipment.planned_date,
})
- self.write(shipment_id, {
+ self.write(shipment.id, {
'state': 'waiting',
})
- def set_state_assigned(self, shipment_id):
- self.write(shipment_id, {
+ def wkf_assigned(self, shipment):
+ self.write(shipment.id, {
'state': 'assigned',
})
- def set_state_done(self, shipment_id):
- move_obj = self.pool.get('stock.move')
- date_obj = self.pool.get('ir.date')
+ def wkf_done(self, shipment):
+ move_obj = Pool().get('stock.move')
+ date_obj = Pool().get('ir.date')
- shipment = self.browse(shipment_id)
move_obj.write([m.id for m in shipment.moves
if m.state not in ('done', 'cancel')], {
'state': 'done',
})
- self.write(shipment_id, {
+ self.write(shipment.id, {
'state': 'done',
'effective_date': date_obj.today(),
})
- def set_state_cancel(self, shipment_id):
- move_obj = self.pool.get('stock.move')
- shipment = self.browse(shipment_id)
+ def wkf_cancel(self, shipment):
+ move_obj = Pool().get('stock.move')
move_obj.write([m.id for m in shipment.moves if m.state != 'cancel'], {
'state': 'cancel',
})
- self.write(shipment_id, {
+ self.write(shipment.id, {
'state': 'cancel',
})
- def assign_try(self, shipment_id):
- product_obj = self.pool.get('product.product')
- uom_obj = self.pool.get('product.uom')
- date_obj = self.pool.get('ir.date')
- move_obj = self.pool.get('stock.move')
-
- shipment = self.browse(shipment_id)
+ def wkf_assign_try(self, shipment):
+ pool = Pool()
+ product_obj = pool.get('product.product')
+ uom_obj = pool.get('product.uom')
+ date_obj = pool.get('ir.date')
+ move_obj = pool.get('stock.move')
Transaction().cursor.lock(move_obj._table)
@@ -532,9 +657,8 @@ class ShipmentInReturn(ModelWorkflow, ModelSQL, ModelView):
})
return True
- def assign_force(self, shipment_id):
- shipment = self.browse(shipment_id)
- move_obj = self.pool.get('stock.move')
+ def wkf_assign_force(self, shipment):
+ move_obj = Pool().get('stock.move')
move_obj.write([m.id for m in shipment.moves], {
'state': 'assigned',
})
@@ -552,46 +676,61 @@ class ShipmentOut(ModelWorkflow, ModelSQL, ModelView):
effective_date = fields.Date('Effective Date', readonly=True)
planned_date = fields.Date('Planned Date',
- states={
- 'readonly': Not(Equal(Eval('state'), 'draft')),
- })
+ states={
+ 'readonly': Not(Equal(Eval('state'), 'draft')),
+ }, depends=['state'])
+ company = fields.Many2One('company.company', 'Company', required=True,
+ states={
+ 'readonly': Not(Equal(Eval('state'), 'draft')),
+ },
+ domain=[
+ ('id', If(In('company', Eval('context', {})), '=', '!='),
+ Get(Eval('context', {}), 'company', 0)),
+ ],
+ depends=['state'])
customer = fields.Many2One('party.party', 'Customer', required=True,
- states={
- 'readonly': Or(Not(Equal(Eval('state'), 'draft')),
- Bool(Eval('outgoing_moves'))),
- }, on_change=['customer'])
+ states={
+ 'readonly': Or(Not(Equal(Eval('state'), 'draft')),
+ Bool(Eval('outgoing_moves'))),
+ }, on_change=['customer'],
+ depends=['state', 'outgoing_moves'])
delivery_address = fields.Many2One('party.address',
- 'Delivery Address', required=True,
- states={
- 'readonly': Not(Equal(Eval('state'), 'draft')),
- }, domain=[('party', '=', Eval('customer'))])
+ 'Delivery Address', required=True,
+ states={
+ 'readonly': Not(Equal(Eval('state'), 'draft')),
+ }, domain=[('party', '=', Eval('customer'))],
+ depends=['state', 'customer'])
reference = fields.Char("Reference", size=None, select=1,
- states={
- 'readonly': Not(Equal(Eval('state'), 'draft')),
- })
+ states={
+ 'readonly': Not(Equal(Eval('state'), 'draft')),
+ }, depends=['state'])
warehouse = fields.Many2One('stock.location', "Warehouse", required=True,
- states={
- 'readonly': Or(Not(Equal(Eval('state'), 'draft')),
- Bool(Eval('outgoing_moves'))),
- }, domain=[('type', '=', 'warehouse')])
- outgoing_moves = fields.Function(fields.One2Many('stock.move', None,
- 'Outgoing Moves', states={
+ states={
'readonly': Or(Not(Equal(Eval('state'), 'draft')),
- Not(Bool(Eval('warehouse')))),
- }, context={
- 'warehouse': Eval('warehouse'),
- 'type': 'outgoing',
- 'customer': Eval('customer'),
- }), 'get_outgoing_moves', setter='set_outgoing_moves')
+ Bool(Eval('outgoing_moves'))),
+ }, domain=[('type', '=', 'warehouse')],
+ depends=['state', 'outgoing_moves'])
+ outgoing_moves = fields.Function(fields.One2Many('stock.move', None,
+ 'Outgoing Moves', states={
+ 'readonly': Or(Not(Equal(Eval('state'), 'draft')),
+ Not(Bool(Eval('warehouse')))),
+ }, context={
+ 'warehouse': Eval('warehouse'),
+ 'type': 'outgoing',
+ 'customer': Eval('customer'),
+ }, depends=['state', 'warehouse', 'customer']),
+ 'get_outgoing_moves', setter='set_outgoing_moves')
inventory_moves = fields.Function(fields.One2Many('stock.move', None,
- 'Inventory Moves', states={
- 'readonly': In(Eval('state'), ['draft', 'packed', 'done']),
- }, context={
- 'warehouse': Eval('warehouse'),
- 'type': 'inventory_out',
- }), 'get_inventory_moves', setter='set_inventory_moves')
+ 'Inventory Moves', states={
+ 'readonly': In(Eval('state'), ['draft', 'packed', 'done']),
+ }, context={
+ 'warehouse': Eval('warehouse'),
+ 'type': 'inventory_out',
+ }, depends=['state', 'warehouse']),
+ 'get_inventory_moves', setter='set_inventory_moves')
moves = fields.One2Many('stock.move', 'shipment_out', 'Moves',
- readonly=True)
+ domain=[('company', '=', Eval('company'))], depends=['company'],
+ readonly=True)
code = fields.Char("Code", size=None, select=1, readonly=True)
state = fields.Selection([
('draft', 'Draft'),
@@ -639,8 +778,28 @@ class ShipmentOut(ModelWorkflow, ModelSQL, ModelView):
for field in ('code', 'reference'):
table.index_action(field, action='remove', table=old_table)
+ # Migration from 2.0:
+ created_company = table.column_exist('company')
+
super(ShipmentOut, self).init(module_name)
+ # Migration from 2.0:
+ move_obj = Pool().get('stock.move')
+ if (not created_company
+ and TableHandler.table_exist(cursor, move_obj._table)):
+ move_obj = Pool().get('stock.move')
+ cursor.execute('SELECT shipment.id, MAX(move.company) '
+ 'FROM "%s" AS shipment '
+ 'INNER JOIN "%s" AS move ON shipment.id = move.shipment_out '
+ 'GROUP BY shipment.id '
+ 'ORDER BY MAX(move.company)'
+ % (self._table, move_obj._table))
+ for company_id, values in itertools.groupby(cursor.fetchall(),
+ operator.itemgetter(1)):
+ shipment_ids = [x[0] for x in values]
+ self.write(shipment_ids, {'company': company_id})
+ table.not_null_action('company', action='add')
+
# Migration from 1.0 customer_location is no more used
table = TableHandler(cursor, self, module_name)
table.drop_column('customer_location', exception=True)
@@ -652,16 +811,19 @@ class ShipmentOut(ModelWorkflow, ModelSQL, ModelView):
return 'draft'
def default_warehouse(self):
- location_obj = self.pool.get('stock.location')
+ location_obj = Pool().get('stock.location')
location_ids = location_obj.search(self.warehouse.domain)
if len(location_ids) == 1:
return location_ids[0]
return False
+ def default_company(self):
+ return Transaction().context.get('company') or False
+
def on_change_customer(self, values):
if not values.get('customer'):
return {'delivery_address': False}
- party_obj = self.pool.get("party.party")
+ party_obj = Pool().get("party.party")
address_id = party_obj.address_get(values['customer'], type='delivery')
return {'delivery_address': address_id}
@@ -676,7 +838,7 @@ class ShipmentOut(ModelWorkflow, ModelSQL, ModelView):
return res
def set_outgoing_moves(self, ids, name, value):
- move_obj = self.pool.get('stock.move')
+ move_obj = Pool().get('stock.move')
if not value:
return
@@ -727,7 +889,7 @@ class ShipmentOut(ModelWorkflow, ModelSQL, ModelView):
return res
def set_inventory_moves(self, ids, name, value):
- move_obj = self.pool.get('stock.move')
+ move_obj = Pool().get('stock.move')
if not value:
return
@@ -767,15 +929,14 @@ class ShipmentOut(ModelWorkflow, ModelSQL, ModelView):
'moves': value,
})
- def set_state_assigned(self, shipment_id):
- self.write(shipment_id, {
+ def wkf_assigned(self, shipment):
+ self.write(shipment.id, {
'state': 'assigned',
})
- def set_state_draft(self, shipment_id):
- move_obj = self.pool.get('stock.move')
- shipment = self.browse(shipment_id)
- self.write(shipment_id, {
+ def wkf_draft(self, shipment):
+ move_obj = Pool().get('stock.move')
+ self.write(shipment.id, {
'state': 'draft',
})
move_obj.write([m.id for m in
@@ -784,29 +945,27 @@ class ShipmentOut(ModelWorkflow, ModelSQL, ModelView):
'state': 'draft',
})
- def set_state_done(self, shipment_id):
- move_obj = self.pool.get('stock.move')
- date_obj = self.pool.get('ir.date')
+ def wkf_done(self, shipment):
+ move_obj = Pool().get('stock.move')
+ date_obj = Pool().get('ir.date')
- shipment = self.browse(shipment_id)
move_obj.write([m.id for m in shipment.outgoing_moves
if m.state not in ('done', 'cancel')], {
'state': 'done',
})
- self.write(shipment_id, {
+ self.write(shipment.id, {
'state': 'done',
'effective_date': date_obj.today(),
})
- def set_state_packed(self, shipment_id):
- move_obj = self.pool.get('stock.move')
- uom_obj = self.pool.get('product.uom')
- shipment = self.browse(shipment_id)
+ def wkf_packed(self, shipment):
+ move_obj = Pool().get('stock.move')
+ uom_obj = Pool().get('product.uom')
move_obj.write([m.id for m in shipment.inventory_moves
if m.state not in ('done', 'cancel')], {
'state': 'done',
})
- self.write(shipment_id, {
+ self.write(shipment.id, {
'state': 'packed',
})
# Sum all outgoing quantities
@@ -854,7 +1013,6 @@ class ShipmentOut(ModelWorkflow, ModelSQL, ModelView):
})
#Re-read the shipment and remove exceeding quantities
- shipment = self.browse(shipment_id)
for move in shipment.outgoing_moves:
if move.state == 'cancel': continue
if outgoing_qty.get(move.product.id, 0.0) > 0.0:
@@ -873,27 +1031,25 @@ class ShipmentOut(ModelWorkflow, ModelSQL, ModelView):
'state': 'assigned',
})
- def set_state_cancel(self, shipment_id):
- move_obj = self.pool.get('stock.move')
- shipment = self.browse(shipment_id)
+ def wkf_cancel(self, shipment):
+ move_obj = Pool().get('stock.move')
move_obj.write([m.id for m in
shipment.outgoing_moves + shipment.inventory_moves
if m.state != 'cancel'], {
'state': 'cancel',
})
- self.write(shipment_id, {
+ self.write(shipment.id, {
'state': 'cancel',
})
- def set_state_waiting(self, shipment_id):
+ def wkf_waiting(self, shipment):
"""
Complete inventory moves to match the products and quantities
that are in the outgoing moves.
"""
- move_obj = self.pool.get('stock.move')
- uom_obj = self.pool.get('product.uom')
- shipment = self.browse(shipment_id)
- self.write(shipment_id, {
+ move_obj = Pool().get('stock.move')
+ uom_obj = Pool().get('product.uom')
+ self.write(shipment.id, {
'state': 'waiting',
})
@@ -904,15 +1060,14 @@ class ShipmentOut(ModelWorkflow, ModelSQL, ModelView):
move_obj.delete([x.id for x in shipment.inventory_moves])
# Re-Browse because moves have been deleted
- shipment = self.browse(shipment_id)
+ shipment = self.browse(shipment.id)
for move in shipment.outgoing_moves:
if move.state in ('cancel', 'done'):
continue
- qty_default_uom = uom_obj.compute_qty(move.uom, move.quantity,
- move.product.default_uom)
move_obj.create({
- 'from_location': move.shipment_out.warehouse.storage_location.id,
+ 'from_location': \
+ move.shipment_out.warehouse.storage_location.id,
'to_location': move.from_location.id,
'product': move.product.id,
'uom': move.uom.id,
@@ -925,14 +1080,46 @@ class ShipmentOut(ModelWorkflow, ModelSQL, ModelView):
'unit_price': move.unit_price,
})
+ def _get_move_planned_date(self, shipment):
+ '''
+ Return the planned date for outgoing moves and inventory moves
+ '''
+ return shipment.planned_date, shipment.planned_date
+
+ def _set_move_planned_date(self, shipment_ids):
+ '''
+ Set planned date of moves for the shipments
+ '''
+ move_obj = Pool().get('stock.move')
+ if isinstance(shipment_ids, (int, long)):
+ shipment_ids = [shipment_ids]
+ for shipment in self.browse(shipment_ids):
+ dates = self._get_move_planned_date(shipment)
+ outgoing_date, inventory_date = dates
+ move_obj.write([x.id for x in shipment.outgoing_moves
+ if x.state not in ('assigned', 'done', 'cancel')], {
+ 'planned_date': outgoing_date,
+ })
+ move_obj.write([x.id for x in shipment.inventory_moves
+ if x.state not in ('assigned', 'done', 'cancel')], {
+ 'planned_date': inventory_date,
+ })
+
def create(self, values):
- sequence_obj = self.pool.get('ir.sequence')
- config_obj = self.pool.get('stock.configuration')
+ sequence_obj = Pool().get('ir.sequence')
+ config_obj = Pool().get('stock.configuration')
values = values.copy()
config = config_obj.browse(1)
values['code'] = sequence_obj.get_id(config.shipment_out_sequence.id)
- return super(ShipmentOut, self).create(values)
+ shipment_id = super(ShipmentOut, self).create(values)
+ self._set_move_planned_date(shipment_id)
+ return shipment_id
+
+ def write(self, ids, values):
+ result = super(ShipmentOut, self).write(ids, values)
+ self._set_move_planned_date(ids)
+ return result
def copy(self, ids, default=None):
if default is None:
@@ -948,21 +1135,19 @@ class ShipmentOut(ModelWorkflow, ModelSQL, ModelView):
Take a raw list of quantities and uom and convert it to
the target uom.
"""
- uom_obj = self.pool.get('product.uom')
+ uom_obj = Pool().get('product.uom')
res = 0
for uom, qty in qty_uom:
res += uom_obj.compute_qty(uom_index[uom], qty,
uom_index[target_uom])
return res
- def assign_try(self, shipment_id):
- move_obj = self.pool.get('stock.move')
- shipment = self.browse(shipment_id)
+ def wkf_assign_try(self, shipment):
+ move_obj = Pool().get('stock.move')
return move_obj.assign_try(shipment.inventory_moves)
- def assign_force(self, shipment_id):
- shipment = self.browse(shipment_id)
- move_obj = self.pool.get('stock.move')
+ def wkf_assign_force(self, shipment):
+ move_obj = Pool().get('stock.move')
move_obj.write([m.id for m in shipment.inventory_moves], {
'state': 'assigned',
})
@@ -983,45 +1168,60 @@ class ShipmentOutReturn(ModelWorkflow, ModelSQL, ModelView):
effective_date = fields.Date('Effective Date', readonly=True)
planned_date = fields.Date('Planned Date',
- states={
- 'readonly': Not(Equal(Eval('state'), 'draft')),
- })
+ states={
+ 'readonly': Not(Equal(Eval('state'), 'draft')),
+ }, depends=['state'])
+ company = fields.Many2One('company.company', 'Company', required=True,
+ states={
+ 'readonly': Not(Equal(Eval('state'), 'draft')),
+ },
+ domain=[
+ ('id', If(In('company', Eval('context', {})), '=', '!='),
+ Get(Eval('context', {}), 'company', 0)),
+ ],
+ depends=['state'])
customer = fields.Many2One('party.party', 'Customer', required=True,
- states={
- 'readonly': Or(Not(Equal(Eval('state'), 'draft')),
- Bool(Eval('incoming_moves'))),
- }, on_change=['customer'])
+ states={
+ 'readonly': Or(Not(Equal(Eval('state'), 'draft')),
+ Bool(Eval('incoming_moves'))),
+ }, on_change=['customer'],
+ depends=['state', 'incoming_moves'])
delivery_address = fields.Many2One('party.address',
- 'Delivery Address', required=True,
- states={
- 'readonly': Not(Equal(Eval('state'), 'draft')),
- }, domain=[('party', '=', Eval('customer'))])
+ 'Delivery Address', required=True,
+ states={
+ 'readonly': Not(Equal(Eval('state'), 'draft')),
+ }, domain=[('party', '=', Eval('customer'))],
+ depends=['state', 'customer'])
reference = fields.Char("Reference", size=None, select=1,
- states={
- 'readonly': Not(Equal(Eval('state'), 'draft')),
- })
+ states={
+ 'readonly': Not(Equal(Eval('state'), 'draft')),
+ }, depends=['state'])
warehouse = fields.Many2One('stock.location', "Warehouse", required=True,
- states={
- 'readonly': Or(Not(Equal(Eval('state'), 'draft')),
- Bool(Eval('incoming_moves'))),
- }, domain=[('type', '=', 'warehouse')])
+ states={
+ 'readonly': Or(Not(Equal(Eval('state'), 'draft')),
+ Bool(Eval('incoming_moves'))),
+ }, domain=[('type', '=', 'warehouse')],
+ depends=['state', 'incoming_moves'])
incoming_moves = fields.Function(fields.One2Many('stock.move', None,
- 'Incoming Moves', states={
- 'readonly': Not(Equal(Eval('state'), 'draft')),
- }, context={
- 'warehouse': Eval('warehouse'),
- 'type': 'incoming',
- 'customer': Eval('customer'),
- }), 'get_incoming_moves', setter='set_incoming_moves')
+ 'Incoming Moves', states={
+ 'readonly': Not(Equal(Eval('state'), 'draft')),
+ }, context={
+ 'warehouse': Eval('warehouse'),
+ 'type': 'incoming',
+ 'customer': Eval('customer'),
+ }, depends=['state', 'warehouse', 'customer']),
+ 'get_incoming_moves', setter='set_incoming_moves')
inventory_moves = fields.Function(fields.One2Many('stock.move', None,
- 'Inventory Moves', states={
- 'readonly': In(Eval('state'), ['draft', 'cancel', 'done']),
- }, context={
- 'warehouse': Eval('warehouse'),
- 'type': 'inventory_out',
- }), 'get_inventory_moves', setter='set_inventory_moves')
+ 'Inventory Moves', states={
+ 'readonly': In(Eval('state'), ['draft', 'cancel', 'done']),
+ }, context={
+ 'warehouse': Eval('warehouse'),
+ 'type': 'inventory_out',
+ }, depends=['state', 'warehouse']),
+ 'get_inventory_moves', setter='set_inventory_moves')
moves = fields.One2Many('stock.move', 'shipment_out_return', 'Moves',
- readonly=True)
+ domain=[('company', '=', Eval('company'))], depends=['company'],
+ readonly=True)
code = fields.Char("Code", size=None, select=1, readonly=True)
state = fields.Selection([
('draft', 'Draft'),
@@ -1067,8 +1267,28 @@ class ShipmentOutReturn(ModelWorkflow, ModelSQL, ModelView):
for field in ('code', 'reference'):
table.index_action(field, action='remove', table=old_table)
+ # Migration from 2.0:
+ created_company = table.column_exist('company')
+
super(ShipmentOutReturn, self).init(module_name)
+ # Migration from 2.0:
+ move_obj = Pool().get('stock.move')
+ if (not created_company
+ and TableHandler.table_exist(cursor, move_obj._table)):
+ cursor.execute('SELECT shipment.id, MAX(move.company) '
+ 'FROM "%s" AS shipment '
+ 'INNER JOIN "%s" AS move '
+ 'ON shipment.id = move.shipment_out_return '
+ 'GROUP BY shipment.id '
+ 'ORDER BY MAX(move.company)'
+ % (self._table, move_obj._table))
+ for company_id, values in itertools.groupby(cursor.fetchall(),
+ operator.itemgetter(1)):
+ shipment_ids = [x[0] for x in values]
+ self.write(shipment_ids, {'company': company_id})
+ table.not_null_action('company', action='add')
+
# Add index on create_date
table = TableHandler(cursor, self, module_name)
table.index_action('create_date', action='add')
@@ -1077,16 +1297,19 @@ class ShipmentOutReturn(ModelWorkflow, ModelSQL, ModelView):
return 'draft'
def default_warehouse(self):
- location_obj = self.pool.get('stock.location')
+ location_obj = Pool().get('stock.location')
location_ids = location_obj.search(self.warehouse.domain)
if len(location_ids) == 1:
return location_ids[0]
return False
+ def default_company(self):
+ return Transaction().context.get('company') or False
+
def on_change_customer(self, values):
if not values.get('customer'):
return {'delivery_address': False}
- party_obj = self.pool.get("party.party")
+ party_obj = Pool().get("party.party")
address_id = party_obj.address_get(values['customer'], type='delivery')
party = party_obj.browse(values['customer'])
return {
@@ -1104,7 +1327,7 @@ class ShipmentOutReturn(ModelWorkflow, ModelSQL, ModelView):
return res
def set_incoming_moves(self, ids, name, value):
- move_obj = self.pool.get('stock.move')
+ move_obj = Pool().get('stock.move')
if not value:
return
@@ -1154,7 +1377,7 @@ class ShipmentOutReturn(ModelWorkflow, ModelSQL, ModelView):
return res
def set_inventory_moves(self, ids, name, value):
- move_obj = self.pool.get('stock.move')
+ move_obj = Pool().get('stock.move')
if not value:
return
@@ -1195,15 +1418,46 @@ class ShipmentOutReturn(ModelWorkflow, ModelSQL, ModelView):
'moves': value,
})
+ def _get_move_planned_date(self, shipment):
+ '''
+ Return the planned date for incoming moves and inventory moves
+ '''
+ return shipment.planned_date, shipment.planned_date
+
+ def _set_move_planned_date(self, shipment_ids):
+ '''
+ Set planned date of moves for the shipments
+ '''
+ move_obj = Pool().get('stock.move')
+ if isinstance(shipment_ids, (int, long)):
+ shipment_ids = [shipment_ids]
+ for shipment in self.browse(shipment_ids):
+ dates = self._get_move_planned_date(shipment)
+ incoming_date, inventory_date = dates
+ move_obj.write([x.id for x in shipment.incoming_moves
+ if x.state not in ('assigned', 'done', 'cancel')], {
+ 'planned_date': incoming_date,
+ })
+ move_obj.write([x.id for x in shipment.inventory_moves], {
+ 'planned_date': inventory_date,
+ })
+
def create(self, values):
- sequence_obj = self.pool.get('ir.sequence')
- config_obj = self.pool.get('stock.configuration')
+ sequence_obj = Pool().get('ir.sequence')
+ config_obj = Pool().get('stock.configuration')
values = values.copy()
config = config_obj.browse(1)
values['code'] = sequence_obj.get_id(
config.shipment_out_return_sequence.id)
- return super(ShipmentOutReturn, self).create(values)
+ shipment_id = super(ShipmentOutReturn, self).create(values)
+ self._set_move_planned_date(shipment_id)
+ return shipment_id
+
+ def write(self, ids, values):
+ result = super(ShipmentOutReturn, self).write(ids, values)
+ self._set_move_planned_date(ids)
+ return result
def copy(self, ids, default=None):
if default is None:
@@ -1217,52 +1471,49 @@ class ShipmentOutReturn(ModelWorkflow, ModelSQL, ModelView):
def button_draft(self, ids):
self.workflow_trigger_create(ids)
- def set_state_done(self, shipment_id):
- move_obj = self.pool.get('stock.move')
- date_obj = self.pool.get('ir.date')
+ def wkf_done(self, shipment):
+ move_obj = Pool().get('stock.move')
+ date_obj = Pool().get('ir.date')
- shipment = self.browse(shipment_id)
move_obj.write([m.id for m in shipment.inventory_moves
if m.state not in ('done', 'cancel')], {
'state': 'done',
})
- self.write(shipment_id,{
+ self.write(shipment.id,{
'state': 'done',
'effective_date': date_obj.today(),
})
- def set_state_cancel(self, shipment_id):
- move_obj = self.pool.get('stock.move')
- shipment = self.browse(shipment_id)
+ def wkf_cancel(self, shipment):
+ move_obj = Pool().get('stock.move')
move_obj.write([m.id for m in
shipment.incoming_moves + shipment.inventory_moves
if m.state != 'cancel'], {
'state': 'cancel',
})
- self.write(shipment_id, {
+ self.write(shipment.id, {
'state': 'cancel',
})
- def set_state_received(self, shipment_id):
- move_obj = self.pool.get('stock.move')
- shipment = self.browse(shipment_id)
+ def wkf_received(self, shipment):
+ move_obj = Pool().get('stock.move')
move_obj.write([m.id for m in shipment.incoming_moves
if m.state not in ('done', 'cancel')], {
'state': 'done',
})
- self.write(shipment_id, {
+ self.write(shipment.id, {
'state': 'received'
})
+ self.create_inventory_moves(shipment.id)
- def set_state_draft(self, shipment_id):
- move_obj = self.pool.get('stock.move')
- shipment = self.browse(shipment_id)
+ def wkf_draft(self, shipment):
+ move_obj = Pool().get('stock.move')
move_obj.write([m.id for m in shipment.incoming_moves
if m.state != 'draft'], {
'state': 'draft',
})
move_obj.delete([m.id for m in shipment.inventory_moves])
- self.write(shipment_id, {
+ self.write(shipment.id, {
'state': 'draft',
})
@@ -1347,10 +1598,11 @@ class AssignShipmentOut(Wizard):
}
def _choice(self, data):
- shipment_out_obj = self.pool.get('stock.shipment.out')
- user_group_obj = self.pool.get('res.user-res.group')
- model_data_obj = self.pool.get('ir.model.data')
- transition_obj = self.pool.get('workflow.transition')
+ pool = Pool()
+ shipment_out_obj = pool.get('stock.shipment.out')
+ user_group_obj = pool.get('res.user-res.group')
+ model_data_obj = pool.get('ir.model.data')
+ transition_obj = pool.get('workflow.transition')
shipment_out_obj.workflow_trigger_validate(data['id'], 'assign')
shipment = shipment_out_obj.browse(data['id'])
@@ -1361,21 +1613,21 @@ class AssignShipmentOut(Wizard):
'shipmentout_trans_waiting_assigned_force')
trans = transition_obj.read(trans_id)
user_in_group = user_group_obj.search([
- ('uid', '=', Transaction().user),
- ('gid', '=', trans['group']),
+ ('user', '=', Transaction().user),
+ ('group', '=', trans['group']),
], limit=1)
if user_in_group:
return 'ask_force'
return 'assign_failed'
def _moves(self, data):
- shipment_out_obj = self.pool.get('stock.shipment.out')
+ shipment_out_obj = Pool().get('stock.shipment.out')
shipment = shipment_out_obj.browse(data['id'])
return {'inventory_moves': [x.id for x in shipment.inventory_moves
if x.state == 'draft']}
def _force(self, data):
- shipment_out_obj = self.pool.get('stock.shipment.out')
+ shipment_out_obj = Pool().get('stock.shipment.out')
shipment_out_obj.workflow_trigger_validate(data['id'], 'force_assign')
return {}
@@ -1391,42 +1643,54 @@ class ShipmentInternal(ModelWorkflow, ModelSQL, ModelView):
effective_date =fields.Date('Effective Date', readonly=True)
planned_date = fields.Date('Planned Date',
- states={
- 'readonly': Not(Equal(Eval('state'), 'draft')),
- })
+ states={
+ 'readonly': Not(Equal(Eval('state'), 'draft')),
+ }, depends=['state'])
+ company = fields.Many2One('company.company', 'Company', required=True,
+ states={
+ 'readonly': Not(Equal(Eval('state'), 'draft')),
+ },
+ domain=[
+ ('id', If(In('company', Eval('context', {})), '=', '!='),
+ Get(Eval('context', {}), 'company', 0)),
+ ],
+ depends=['state'])
code = fields.Char("Code", size=None, select=1, readonly=True)
reference = fields.Char("Reference", size=None, select=1,
- states={
- 'readonly': Not(Equal(Eval('state'), 'draft')),
- })
+ states={
+ 'readonly': Not(Equal(Eval('state'), 'draft')),
+ }, depends=['state'])
from_location = fields.Many2One('stock.location', "From Location",
- required=True, states={
- 'readonly': Or(Not(Equal(Eval('state'), 'draft')),
- Bool(Eval('moves'))),
+ required=True, states={
+ 'readonly': Or(Not(Equal(Eval('state'), 'draft')),
+ Bool(Eval('moves'))),
},
- domain=[
- ('type', 'not in',
- ['supplier', 'customer', 'warehouse', 'view']),
- ])
+ domain=[
+ ('type', 'not in',
+ ['supplier', 'customer', 'warehouse', 'view']),
+ ], depends=['state', 'moves'])
to_location = fields.Many2One('stock.location', "To Location",
- required=True, states={
- 'readonly': Or(Not(Equal(Eval('state'), 'draft')),
- Bool(Eval('moves'))),
+ required=True, states={
+ 'readonly': Or(Not(Equal(Eval('state'), 'draft')),
+ Bool(Eval('moves'))),
}, domain=[
- ('type', 'not in',
- ['supplier', 'customer', 'warehouse', 'view']),
- ])
+ ('type', 'not in',
+ ['supplier', 'customer', 'warehouse', 'view']),
+ ], depends=['state', 'moves'])
moves = fields.One2Many('stock.move', 'shipment_internal', 'Moves',
states={
'readonly': And(Or(Not(Equal(Eval('state'), 'draft')),
- Not(Bool(Eval('from_location')))),
+ Not(Bool(Eval('from_location')))),
Bool(Eval('to_location'))),
- },
+ },
+ domain=[('company', '=', Eval('company'))],
context={
'from_location': Eval('from_location'),
'to_location': Eval('to_location'),
'planned_date': Eval('planned_date'),
- })
+ },
+ depends=['state', 'from_location', 'to_location', 'planned_date',
+ 'company'])
state = fields.Selection([
('draft', 'Draft'),
('cancel', 'Canceled'),
@@ -1458,8 +1722,28 @@ class ShipmentInternal(ModelWorkflow, ModelSQL, ModelView):
for field in ('code', 'reference'):
table.index_action(field, action='remove', table=old_table)
+ # Migration from 2.0:
+ created_company = table.column_exist('company')
+
super(ShipmentInternal, self).init(module_name)
+ # Migration from 2.0:
+ move_obj = Pool().get('stock.move')
+ if (not created_company
+ and TableHandler.table_exist(cursor, move_obj._table)):
+ cursor.execute('SELECT shipment.id, MAX(move.company) '
+ 'FROM "%s" AS shipment '
+ 'INNER JOIN "%s" AS move '
+ 'ON shipment.id = move.shipment_internal '
+ 'GROUP BY shipment.id '
+ 'ORDER BY MAX(move.company)'
+ % (self._table, move_obj._table))
+ for company_id, values in itertools.groupby(cursor.fetchall(),
+ operator.itemgetter(1)):
+ shipment_ids = [x[0] for x in values]
+ self.write(shipment_ids, {'company': company_id})
+ table.not_null_action('company', action='add')
+
# Add index on create_date
table = TableHandler(cursor, self, module_name)
table.index_action('create_date', action='add')
@@ -1467,6 +1751,9 @@ class ShipmentInternal(ModelWorkflow, ModelSQL, ModelView):
def default_state(self):
return 'draft'
+ def default_company(self):
+ return Transaction().context.get('company') or False
+
def button_draft(self, ids):
self.workflow_trigger_create(ids)
return True
@@ -1479,8 +1766,8 @@ class ShipmentInternal(ModelWorkflow, ModelSQL, ModelView):
self._order[0] = ('id', 'DESC')
def create(self, values):
- sequence_obj = self.pool.get('ir.sequence')
- config_obj = self.pool.get('stock.configuration')
+ sequence_obj = Pool().get('ir.sequence')
+ config_obj = Pool().get('stock.configuration')
values = values.copy()
config = config_obj.browse(1)
@@ -1488,65 +1775,59 @@ class ShipmentInternal(ModelWorkflow, ModelSQL, ModelView):
config.shipment_internal_sequence.id)
return super(ShipmentInternal, self).create(values)
- def set_state_draft(self, shipment_id):
- move_obj = self.pool.get('stock.move')
- shipment = self.browse(shipment_id)
- self.write(shipment_id, {
+ def wkf_draft(self, shipment):
+ move_obj = Pool().get('stock.move')
+ self.write(shipment.id, {
'state': 'draft',
})
move_obj.write([m.id for m in shipment.moves], {
'state': 'draft',
})
- def set_state_waiting(self, shipment_id):
- move_obj = self.pool.get('stock.move')
- shipment = self.browse(shipment_id)
+ def wkf_waiting(self, shipment):
+ move_obj = Pool().get('stock.move')
move_obj.write([m.id for m in shipment.moves], {
'from_location': shipment.from_location.id,
'to_location': shipment.to_location.id,
'state': 'draft',
'planned_date': shipment.planned_date,
})
- self.write(shipment_id, {
+ self.write(shipment.id, {
'state': 'waiting',
})
- def set_state_assigned(self, shipment_id):
- self.write(shipment_id, {
+ def wkf_assigned(self, shipment):
+ self.write(shipment.id, {
'state': 'assigned',
})
- def set_state_done(self, shipment_id):
- move_obj = self.pool.get('stock.move')
- date_obj = self.pool.get('ir.date')
+ def wkf_done(self, shipment):
+ move_obj = Pool().get('stock.move')
+ date_obj = Pool().get('ir.date')
- shipment = self.browse(shipment_id)
move_obj.write([m.id for m in shipment.moves], {
'state': 'done',
})
- self.write(shipment_id, {
+ self.write(shipment.id, {
'state': 'done',
'effective_date': date_obj.today(),
})
- def set_state_cancel(self, shipment_id):
- move_obj = self.pool.get('stock.move')
- shipment = self.browse(shipment_id)
+ def wkf_cancel(self, shipment):
+ move_obj = Pool().get('stock.move')
move_obj.write([m.id for m in shipment.moves], {
'state': 'cancel',
})
- self.write(shipment_id, {
+ self.write(shipment.id, {
'state': 'cancel',
})
- def assign_try(self, shipment_id):
- move_obj = self.pool.get('stock.move')
- shipment = self.browse(shipment_id)
+ def wkf_assign_try(self, shipment):
+ move_obj = Pool().get('stock.move')
return move_obj.assign_try(shipment.moves)
- def assign_force(self, shipment_id):
- shipment = self.browse(shipment_id)
- move_obj = self.pool.get('stock.move')
+ def wkf_assign_force(self, shipment):
+ move_obj = Pool().get('stock.move')
move_obj.write([m.id for m in shipment.moves], {
'state': 'assigned',
})
@@ -1614,10 +1895,11 @@ class AssignShipmentInternal(Wizard):
}
def _choice(self, data):
- shipment_internal_obj = self.pool.get('stock.shipment.internal')
- user_group_obj = self.pool.get('res.user-res.group')
- model_data_obj = self.pool.get('ir.model.data')
- transition_obj = self.pool.get('workflow.transition')
+ pool = Pool()
+ shipment_internal_obj = pool.get('stock.shipment.internal')
+ user_group_obj = pool.get('res.user-res.group')
+ model_data_obj = pool.get('ir.model.data')
+ transition_obj = pool.get('workflow.transition')
shipment_internal_obj.workflow_trigger_validate(data['id'], 'assign')
shipment = shipment_internal_obj.browse(data['id'])
@@ -1628,20 +1910,20 @@ class AssignShipmentInternal(Wizard):
'shipmentinternal_trans_waiting_assigned_force')
trans = transition_obj.read(trans_id)
user_in_group = user_group_obj.search([
- ('uid', '=', Transaction().user),
- ('gid', '=', trans['group']),
+ ('user', '=', Transaction().user),
+ ('group', '=', trans['group']),
], limit=1)
if user_in_group:
return 'ask_force'
return 'assign_failed'
def _moves(self, data):
- shipment_internal_obj = self.pool.get('stock.shipment.internal')
+ shipment_internal_obj = Pool().get('stock.shipment.internal')
shipment = shipment_internal_obj.browse(data['id'])
return {'moves': [x.id for x in shipment.moves if x.state == 'draft']}
def _force(self, data):
- shipment_internal_obj = self.pool.get('stock.shipment.internal')
+ shipment_internal_obj = Pool().get('stock.shipment.internal')
shipment_internal_obj.workflow_trigger_validate(data['id'],
'force_assign')
@@ -1702,10 +1984,11 @@ class AssignShipmentInReturn(Wizard):
}
def _choice(self, data):
- shipment_internal_obj = self.pool.get('stock.shipment.in.return')
- user_group_obj = self.pool.get('res.user-res.group')
- model_data_obj = self.pool.get('ir.model.data')
- transition_obj = self.pool.get('workflow.transition')
+ pool = Pool()
+ shipment_internal_obj = pool.get('stock.shipment.in.return')
+ user_group_obj = pool.get('res.user-res.group')
+ model_data_obj = pool.get('ir.model.data')
+ transition_obj = pool.get('workflow.transition')
shipment_internal_obj.workflow_trigger_validate(data['id'], 'assign')
shipment = shipment_internal_obj.browse(data['id'])
@@ -1716,20 +1999,20 @@ class AssignShipmentInReturn(Wizard):
'shipment_in_return_trans_waiting_assigned_force')
trans = transition_obj.read(trans_id)
user_in_group = user_group_obj.search([
- ('uid', '=', Transaction().user),
- ('gid', '=', trans['group']),
+ ('user', '=', Transaction().user),
+ ('group', '=', trans['group']),
], limit=1)
if user_in_group:
return 'ask_force'
return 'assign_failed'
def _moves(self, data):
- shipment_internal_obj = self.pool.get('stock.shipment.in.return')
+ shipment_internal_obj = Pool().get('stock.shipment.in.return')
shipment = shipment_internal_obj.browse(data['id'])
return {'moves': [x.id for x in shipment.moves if x.state == 'draft']}
def _force(self, data):
- shipment_internal_obj = self.pool.get('stock.shipment.in.return')
+ shipment_internal_obj = Pool().get('stock.shipment.in.return')
shipment_internal_obj.workflow_trigger_validate(data['id'],
'force_assign')
@@ -1759,10 +2042,11 @@ class CreateShipmentOutReturn(Wizard):
def _create(self, data):
- model_data_obj = self.pool.get('ir.model.data')
- act_window_obj = self.pool.get('ir.action.act_window')
- shipment_out_obj = self.pool.get('stock.shipment.out')
- shipment_out_return_obj = self.pool.get('stock.shipment.out.return')
+ pool = Pool()
+ model_data_obj = pool.get('ir.model.data')
+ act_window_obj = pool.get('ir.action.act_window')
+ shipment_out_obj = pool.get('stock.shipment.out')
+ shipment_out_return_obj = pool.get('stock.shipment.out.return')
shipment_outs = shipment_out_obj.browse(data['ids'])
@@ -1814,7 +2098,7 @@ class DeliveryNote(CompanyReport):
localcontext)
def product_name(self, product_id, language):
- product_obj = self.pool.get('product.product')
+ product_obj = Pool().get('product.product')
with Transaction().set_context(language=language):
return product_obj.browse(product_id).rec_name
@@ -1825,8 +2109,8 @@ class PickingList(CompanyReport):
_name = 'stock.shipment.out.picking_list'
def parse(self, report, objects, datas, localcontext):
- move_obj = self.pool.get('stock.move')
- shipment_out_obj = self.pool.get('stock.shipment.out')
+ move_obj = Pool().get('stock.move')
+ shipment_out_obj = Pool().get('stock.shipment.out')
compare_context = self.get_compare_context(report, objects, datas)
@@ -1844,7 +2128,7 @@ class PickingList(CompanyReport):
localcontext)
def get_compare_context(self, report, objects, datas):
- location_obj = self.pool.get('stock.location')
+ location_obj = Pool().get('stock.location')
from_location_ids = set()
to_location_ids = set()
for obj in objects:
@@ -1872,8 +2156,8 @@ class SupplierRestockingList(CompanyReport):
_name = 'stock.shipment.in.restocking_list'
def parse(self, report, objects, datas, localcontext):
- move_obj = self.pool.get('stock.move')
- shipment_in_obj = self.pool.get('stock.shipment.in')
+ move_obj = Pool().get('stock.move')
+ shipment_in_obj = Pool().get('stock.shipment.in')
compare_context = self.get_compare_context(report, objects, datas)
@@ -1891,7 +2175,7 @@ class SupplierRestockingList(CompanyReport):
datas, localcontext)
def get_compare_context(self, report, objects, datas):
- location_obj = self.pool.get('stock.location')
+ location_obj = Pool().get('stock.location')
from_location_ids = set()
to_location_ids = set()
for obj in objects:
@@ -1919,8 +2203,8 @@ class CustomerReturnRestockingList(CompanyReport):
_name = 'stock.shipment.out.return.restocking_list'
def parse(self, report, objects, datas, localcontext):
- move_obj = self.pool.get('stock.move')
- shipment_in_obj = self.pool.get('stock.shipment.out.return')
+ move_obj = Pool().get('stock.move')
+ shipment_in_obj = Pool().get('stock.shipment.out.return')
compare_context = self.get_compare_context(report, objects, datas)
@@ -1938,7 +2222,7 @@ class CustomerReturnRestockingList(CompanyReport):
objects, datas, localcontext)
def get_compare_context(self, report, objects, datas):
- location_obj = self.pool.get('stock.location')
+ location_obj = Pool().get('stock.location')
from_location_ids = set()
to_location_ids = set()
for obj in objects:
@@ -1966,8 +2250,8 @@ class InteralShipmentReport(CompanyReport):
_name = 'stock.shipment.internal.report'
def parse(self, report, objects, datas, localcontext=None):
- move_obj = self.pool.get('stock.move')
- shipment_in_obj = self.pool.get('stock.shipment.internal')
+ move_obj = Pool().get('stock.move')
+ shipment_in_obj = Pool().get('stock.shipment.internal')
compare_context = self.get_compare_context(report, objects, datas)
@@ -1985,7 +2269,7 @@ class InteralShipmentReport(CompanyReport):
datas, localcontext)
def get_compare_context(self, report, objects, datas):
- location_obj = self.pool.get('stock.location')
+ location_obj = Pool().get('stock.location')
from_location_ids = set()
to_location_ids = set()
for obj in objects:
diff --git a/shipment.xml b/shipment.xml
index 85a2f98..3a89c07 100644
--- a/shipment.xml
+++ b/shipment.xml
@@ -23,19 +23,21 @@ this repository contains the full copyright notices and license terms. -->
<field name="planned_date"/>
<label name="effective_date"/>
<field name="effective_date"/>
+ <label name="company"/>
+ <field name="company"/>
<label name="warehouse"/>
<field name="warehouse"/>
<notebook colspan="6">
<page string="Incoming Moves" id="incoming_moves">
<field name="incoming_moves" colspan="4">
<tree string="Moves">
- <field name="product" select="1"/>
- <field name="from_location" select="2"/>
- <field name="to_location" select="2"/>
- <field name="quantity" select="1"/>
- <field name="uom" select="1"/>
- <field name="planned_date" select="1"/>
- <field name="state" select="2"/>
+ <field name="product"/>
+ <field name="from_location"/>
+ <field name="to_location"/>
+ <field name="quantity"/>
+ <field name="uom"/>
+ <field name="planned_date"/>
+ <field name="state"/>
<field name="unit_digits" tree_invisible="1"/>
</tree>
</field>
@@ -73,14 +75,14 @@ this repository contains the full copyright notices and license terms. -->
<field name="arch" type="xml">
<![CDATA[
<tree string="Supplier Shipments">
- <field name="code" select="1"/>
- <field name="reference" select="1"/>
- <field name="planned_date" select="2"/>
- <field name="effective_date" select="2"/>
- <field name="supplier" select="2"/>
- <field name="contact_address" select="2"/>
- <field name="state" select="1"/>
- <field name="create_date" tree_invisible="1" select="2"/>
+ <field name="code"/>
+ <field name="reference"/>
+ <field name="planned_date"/>
+ <field name="effective_date"/>
+ <field name="supplier"/>
+ <field name="contact_address"/>
+ <field name="state"/>
+ <field name="create_date" tree_invisible="1"/>
</tree>
]]>
</field>
@@ -88,7 +90,7 @@ this repository contains the full copyright notices and license terms. -->
<record model="ir.action.act_window" id="act_shipment_in_form">
<field name="name">Supplier Shipments</field>
<field name="res_model">stock.shipment.in</field>
- <field name="search_value">{'create_date': ['between', Date(delta_years=-1)]}</field>
+ <field name="search_value">[('create_date', '>=', DateTime(hour=0, minute=0, second=0, microsecond=0, delta_years=-1))]</field>
</record>
<record model="ir.action.act_window.view"
id="act_shipment_in_form_view1">
@@ -105,24 +107,25 @@ this repository contains the full copyright notices and license terms. -->
<menuitem parent="menu_stock" sequence="20"
action="act_shipment_in_form" id="menu_shipment_in_form"/>
- <record model="ir.action.act_window" id="act_shipment_in_form2">
- <field name="name">New Supplier Shipment</field>
+ <record model="ir.action.act_window" id="act_shipment_in_draft">
+ <field name="name">Draft Supplier Shipment</field>
<field name="res_model">stock.shipment.in</field>
+ <field name="domain">[('state', '=', 'draft')]</field>
</record>
<record model="ir.action.act_window.view"
- id="act_shipment_in_form2_view1">
- <field name="sequence" eval="1"/>
- <field name="view" ref="shipment_in_view_form"/>
- <field name="act_window" ref="act_shipment_in_form2"/>
+ id="act_shipment_in_draft_view1">
+ <field name="sequence" eval="10"/>
+ <field name="view" ref="shipment_in_view_tree"/>
+ <field name="act_window" ref="act_shipment_in_draft"/>
</record>
<record model="ir.action.act_window.view"
- id="act_shipment_in_form2_view2">
- <field name="sequence" eval="2"/>
- <field name="view" ref="shipment_in_view_tree"/>
- <field name="act_window" ref="act_shipment_in_form2"/>
+ id="act_shipment_in_draft_view2">
+ <field name="sequence" eval="20"/>
+ <field name="view" ref="shipment_in_view_form"/>
+ <field name="act_window" ref="act_shipment_in_draft"/>
</record>
<menuitem parent="menu_shipment_in_form" sequence="10"
- action="act_shipment_in_form2" id="menu_shipment_in_form2"/>
+ action="act_shipment_in_draft" id="menu_shipment_in_draft"/>
<record model="ir.action.act_window" id="act_shipment_in_form_received">
<field name="name">Received Supplier shipments</field>
@@ -170,7 +173,6 @@ this repository contains the full copyright notices and license terms. -->
<field name="planned_date"/>
<label name="effective_date"/>
<field name="effective_date"/>
- <separator name="moves" colspan="4"/>
<field name="moves" colspan="4"/>
<label name="state"/>
<field name="state"/>
@@ -205,14 +207,14 @@ this repository contains the full copyright notices and license terms. -->
<field name="arch" type="xml">
<![CDATA[
<tree string="Supplier Return Shipments">
- <field name="code" select="1"/>
- <field name="reference" select="2"/>
- <field name="planned_date" select="2"/>
- <field name="effective_date" select="2"/>
- <field name="from_location" select="2"/>
- <field name="to_location" select="2"/>
- <field name="state" select="1"/>
- <field name="create_date" tree_invisible="1" select="2"/>
+ <field name="code"/>
+ <field name="reference"/>
+ <field name="planned_date"/>
+ <field name="effective_date"/>
+ <field name="from_location"/>
+ <field name="to_location"/>
+ <field name="state"/>
+ <field name="create_date" tree_invisible="1"/>
</tree>
]]>
</field>
@@ -220,7 +222,7 @@ this repository contains the full copyright notices and license terms. -->
<record model="ir.action.act_window" id="act_shipment_in_return_form">
<field name="name">Supplier Return Shipments</field>
<field name="res_model">stock.shipment.in.return</field>
- <field name="search_value">{'create_date': ['between', Date(delta_years=-1)]}</field>
+ <field name="search_value">[('create_date', '>=', DateTime(hour=0, minute=0, second=0, microsecond=0, delta_years=-1))]</field>
</record>
<record model="ir.action.act_window.view"
id="act_shipment_in_return_form_view1">
@@ -238,45 +240,23 @@ this repository contains the full copyright notices and license terms. -->
action="act_shipment_in_return_form"
id="menu_shipment_in_return_form"/>
- <record model="ir.action.act_window" id="act_shipment_in_return_new_form">
- <field name="name">New Supplier Return Shipment</field>
- <field name="res_model">stock.shipment.in.return</field>
- </record>
- <record model="ir.action.act_window.view"
- id="act_shipment_in_return_new_form_view1">
- <field name="sequence" eval="2"/>
- <field name="view" ref="shipment_in_return_view_tree"/>
- <field name="act_window" ref="act_shipment_in_return_new_form"/>
- </record>
- <record model="ir.action.act_window.view"
- id="act_shipment_in_return_new_form_view2">
- <field name="sequence" eval="1"/>
- <field name="view" ref="shipment_in_return_view_form"/>
- <field name="act_window" ref="act_shipment_in_return_new_form"/>
- </record>
- <menuitem parent="menu_shipment_in_return_form" sequence="10"
- action="act_shipment_in_return_new_form"
- id="menu_shipment_in_return_new_form"/>
-
<record model="ir.ui.view" id="shipment_in_return_assign_assign_failed_view_form">
<field name="model">stock.shipment.in.return.assign.assign_failed</field>
<field name="type">form</field>
<field name="arch" type="xml">
<![CDATA[
<form string="Unable to Assign" col="2">
- <image name="tryton-dialog-information"/>
- <group col="1" id="labels">
- <separator string="Unable to assign those products:"
- id="unable"/>
- <field name="moves">
- <tree string="Moves" fill="1">
- <field name="product"/>
- <field name="quantity"/>
- <field name="uom"/>
- <field name="unit_digits" tree_invisible="1"/>
- </tree>
- </field>
- </group>
+ <image name="tryton-dialog-warning" xexpand="0" xfill="0"/>
+ <separator string="Unable to assign those products:"
+ id="unable"/>
+ <field name="moves" colspan="2">
+ <tree string="Moves" fill="1">
+ <field name="product"/>
+ <field name="quantity"/>
+ <field name="uom"/>
+ <field name="unit_digits" tree_invisible="1"/>
+ </tree>
+ </field>
</form>
]]>
</field>
@@ -307,6 +287,8 @@ this repository contains the full copyright notices and license terms. -->
<field name="planned_date"/>
<label name="effective_date"/>
<field name="effective_date"/>
+ <label name="company"/>
+ <field name="company"/>
<label name="warehouse"/>
<field name="warehouse"/>
<notebook colspan="4">
@@ -355,14 +337,14 @@ this repository contains the full copyright notices and license terms. -->
<field name="arch" type="xml">
<![CDATA[
<tree string="Customer Shipments">
- <field name="code" select="1"/>
- <field name="reference" select="1"/>
- <field name="planned_date" select="2"/>
- <field name="effective_date" select="2"/>
+ <field name="code"/>
+ <field name="reference"/>
+ <field name="planned_date"/>
+ <field name="effective_date"/>
<field name="customer"/>
<field name="delivery_address"/>
- <field name="state" select="1"/>
- <field name="create_date" tree_invisible="1" select="2"/>
+ <field name="state"/>
+ <field name="create_date" tree_invisible="1"/>
</tree>
]]>
</field>
@@ -375,14 +357,14 @@ this repository contains the full copyright notices and license terms. -->
</record>
<record model="ir.action.keyword" id="create_shipment_out_return_keyword">
<field name="keyword">form_action</field>
- <field name="model">stock.shipment.out,0</field>
+ <field name="model">stock.shipment.out,-1</field>
<field name="action" ref="create_shipment_out_return"/>
</record>
<record model="ir.action.act_window" id="act_shipment_out_form">
<field name="name">Customer Shipments</field>
<field name="res_model">stock.shipment.out</field>
- <field name="search_value">{'create_date': ['between', Date(delta_years=-1)]}</field>
+ <field name="search_value">[('create_date', '>=', DateTime(hour=0, minute=0, second=0, microsecond=0, delta_years=-1))]</field>
</record>
<record model="ir.action.act_window.view"
id="act_shipment_out_form_view1">
@@ -468,19 +450,17 @@ this repository contains the full copyright notices and license terms. -->
<field name="arch" type="xml">
<![CDATA[
<form string="Unable to Assign" col="2">
- <image name="tryton-dialog-information"/>
- <group col="1" id="labels">
- <separator string="Unable to assign those products:"
- id="unable"/>
- <field name="inventory_moves">
- <tree string="Inventory Moves" fill="1">
- <field name="product"/>
- <field name="quantity"/>
- <field name="uom"/>
- <field name="unit_digits" tree_invisible="1"/>
- </tree>
- </field>
- </group>
+ <image name="tryton-dialog-warning" xexpand="0" xfill="0"/>
+ <separator string="Unable to assign those products:"
+ id="unable"/>
+ <field name="inventory_moves" colspan="2">
+ <tree string="Inventory Moves" fill="1">
+ <field name="product"/>
+ <field name="quantity"/>
+ <field name="uom"/>
+ <field name="unit_digits" tree_invisible="1"/>
+ </tree>
+ </field>
</form>
]]>
</field>
@@ -511,7 +491,8 @@ this repository contains the full copyright notices and license terms. -->
<field name="planned_date"/>
<label name="effective_date"/>
<field name="effective_date"/>
- <separator name="moves" colspan="4"/>
+ <label name="company"/>
+ <field name="company"/>
<field name="moves" colspan="4"/>
<label name="state"/>
<field name="state"/>
@@ -546,14 +527,14 @@ this repository contains the full copyright notices and license terms. -->
<field name="arch" type="xml">
<![CDATA[
<tree string="Internal Shipments">
- <field name="code" select="1"/>
- <field name="reference" select="2"/>
- <field name="planned_date" select="2"/>
- <field name="effective_date" select="2"/>
- <field name="from_location" select="2"/>
- <field name="to_location" select="2"/>
- <field name="state" select="1"/>
- <field name="create_date" tree_invisible="1" select="2"/>
+ <field name="code"/>
+ <field name="reference"/>
+ <field name="planned_date"/>
+ <field name="effective_date"/>
+ <field name="from_location"/>
+ <field name="to_location"/>
+ <field name="state"/>
+ <field name="create_date" tree_invisible="1"/>
</tree>
]]>
</field>
@@ -561,7 +542,7 @@ this repository contains the full copyright notices and license terms. -->
<record model="ir.action.act_window" id="act_shipment_internal_form">
<field name="name">Internal Shipments</field>
<field name="res_model">stock.shipment.internal</field>
- <field name="search_value">{'create_date': ['between', Date(delta_years=-1)]}</field>
+ <field name="search_value">[('create_date', '>=', DateTime(hour=0, minute=0, second=0, microsecond=0, delta_years=-1))]</field>
</record>
<record model="ir.action.act_window.view"
id="act_shipment_internal_form_view1">
@@ -579,26 +560,6 @@ this repository contains the full copyright notices and license terms. -->
action="act_shipment_internal_form"
id="menu_shipment_internal_form"/>
- <record model="ir.action.act_window" id="act_shipment_internal_new_form">
- <field name="name">New Internal Shipment</field>
- <field name="res_model">stock.shipment.internal</field>
- </record>
- <record model="ir.action.act_window.view"
- id="act_shipment_internal_new_form_view1">
- <field name="sequence" eval="2"/>
- <field name="view" ref="shipment_internal_view_tree"/>
- <field name="act_window" ref="act_shipment_internal_new_form"/>
- </record>
- <record model="ir.action.act_window.view"
- id="act_shipment_internal_new_form_view2">
- <field name="sequence" eval="1"/>
- <field name="view" ref="shipment_internal_view_form"/>
- <field name="act_window" ref="act_shipment_internal_new_form"/>
- </record>
- <menuitem parent="menu_shipment_internal_form" sequence="10"
- action="act_shipment_internal_new_form"
- id="menu_shipment_internal_new_form"/>
-
<record model="ir.action.act_window" id="act_shipment_internal_draft_form">
<field name="name">Draft Internal Shipments</field>
<field name="res_model">stock.shipment.internal</field>
@@ -668,19 +629,17 @@ this repository contains the full copyright notices and license terms. -->
<field name="arch" type="xml">
<![CDATA[
<form string="Unable to Assign" col="2">
- <image name="tryton-dialog-information"/>
- <group col="1" id="labels">
- <separator string="Unable to assign those products:"
- id="unable"/>
- <field name="moves">
- <tree string="Moves" fill="1">
- <field name="product"/>
- <field name="quantity"/>
- <field name="uom"/>
- <field name="unit_digits" tree_invisible="1"/>
- </tree>
- </field>
- </group>
+ <image name="tryton-dialog-warning" xexpand="0" xfill="0"/>
+ <separator string="Unable to assign those products:"
+ id="unable"/>
+ <field name="moves" colspan="2">
+ <tree string="Moves" fill="1">
+ <field name="product"/>
+ <field name="quantity"/>
+ <field name="uom"/>
+ <field name="unit_digits" tree_invisible="1"/>
+ </tree>
+ </field>
</form>
]]>
</field>
@@ -705,19 +664,21 @@ this repository contains the full copyright notices and license terms. -->
<field name="planned_date"/>
<label name="effective_date"/>
<field name="effective_date"/>
+ <label name="company"/>
+ <field name="company"/>
<label name="warehouse"/>
<field name="warehouse"/>
<notebook colspan="6">
<page string="Incoming Moves" id="incoming_moves">
<field name="incoming_moves" colspan="4">
<tree string="Moves">
- <field name="product" select="1"/>
- <field name="from_location" select="2"/>
- <field name="to_location" select="2"/>
- <field name="quantity" select="1"/>
- <field name="uom" select="1"/>
- <field name="planned_date" select="1"/>
- <field name="state" select="2"/>
+ <field name="product"/>
+ <field name="from_location"/>
+ <field name="to_location"/>
+ <field name="quantity"/>
+ <field name="uom"/>
+ <field name="planned_date"/>
+ <field name="state"/>
<field name="unit_digits" tree_invisible="1"/>
</tree>
</field>
@@ -755,14 +716,14 @@ this repository contains the full copyright notices and license terms. -->
<field name="arch" type="xml">
<![CDATA[
<tree string="Customer Return Shipments">
- <field name="code" select="1"/>
- <field name="reference" select="1"/>
- <field name="state" select="1"/>
- <field name="planned_date" select="2"/>
- <field name="effective_date" select="2"/>
- <field name="customer" select="2"/>
- <field name="delivery_address" select="2"/>
- <field name="create_date" tree_invisible="1" select="2"/>
+ <field name="code"/>
+ <field name="reference"/>
+ <field name="state"/>
+ <field name="planned_date"/>
+ <field name="effective_date"/>
+ <field name="customer"/>
+ <field name="delivery_address"/>
+ <field name="create_date" tree_invisible="1"/>
</tree>
]]>
</field>
@@ -771,7 +732,7 @@ this repository contains the full copyright notices and license terms. -->
<record model="ir.action.act_window" id="act_shipment_out_return_form">
<field name="name">Customer Return Shipments</field>
<field name="res_model">stock.shipment.out.return</field>
- <field name="search_value">{'create_date': ['between', Date(delta_years=-1)]}</field>
+ <field name="search_value">[('create_date', '>=', DateTime(hour=0, minute=0, second=0, microsecond=0, delta_years=-1))]</field>
</record>
<record model="ir.action.act_window.view"
id="act_shipment_out_return_form_view1">
@@ -789,25 +750,6 @@ this repository contains the full copyright notices and license terms. -->
action="act_shipment_out_return_form"
id="menu_shipment_out_return_form"/>
- <record model="ir.action.act_window" id="act_shipment_out_return_form2">
- <field name="name">New Customer Return Shipment</field>
- <field name="res_model">stock.shipment.out.return</field>
- </record>
- <record model="ir.action.act_window.view"
- id="act_shipment_out_return_form2_view1">
- <field name="sequence" eval="1"/>
- <field name="view" ref="shipment_out_return_view_form"/>
- <field name="act_window" ref="act_shipment_out_return_form2"/>
- </record>
- <record model="ir.action.act_window.view"
- id="act_shipment_out_return_form2_view2">
- <field name="sequence" eval="2"/>
- <field name="view" ref="shipment_out_return_view_tree"/>
- <field name="act_window" ref="act_shipment_out_return_form2"/>
- </record>
- <menuitem parent="menu_shipment_out_return_form" sequence="10"
- action="act_shipment_out_return_form2" id="menu_shipment_out_return_form2"/>
-
<!-- Workflow shipment in -->
<record model="workflow" id="wkf_shipmentin">
<field name="name">Supplier Shipment</field>
@@ -817,29 +759,25 @@ this repository contains the full copyright notices and license terms. -->
<record model="workflow.activity" id="shipmentin_act_draft">
<field name="workflow" ref="wkf_shipmentin"/>
<field name="flow_start">True</field>
- <field name="kind">function</field>
- <field name="action">set_state_draft()</field>
+ <field name="method">wkf_draft</field>
<field name="name">Draft</field>
</record>
<record model="workflow.activity" id="shipmentin_act_cancel">
<field name="workflow" ref="wkf_shipmentin"/>
<field name="flow_stop">True</field>
<field name="name">Canceled</field>
- <field name="kind">function</field>
- <field name="action">set_state_cancel()</field>
+ <field name="method">wkf_cancel</field>
</record>
<record model="workflow.activity" id="shipmentin_act_done">
<field name="workflow" ref="wkf_shipmentin"/>
<field name="flow_stop">True</field>
<field name="name">Done</field>
- <field name="kind">function</field>
- <field name="action">set_state_done()</field>
+ <field name="method">wkf_done</field>
</record>
<record model="workflow.activity" id="shipmentin_act_received">
<field name="name">Received</field>
- <field name="kind">function</field>
<field name="workflow" ref="wkf_shipmentin"/>
- <field name="action">set_state_received()
create_inventory_moves()</field>
+ <field name="method">wkf_received</field>
</record>
<record model="workflow.transition"
@@ -887,40 +825,34 @@ this repository contains the full copyright notices and license terms. -->
<field name="workflow" ref="wkf_shipmentout"/>
<field name="flow_start">True</field>
<field name="name">Draft</field>
- <field name="kind">function</field>
- <field name="action">set_state_draft()</field>
+ <field name="method">wkf_draft</field>
</record>
<record model="workflow.activity" id="shipmentout_act_cancel">
<field name="workflow" ref="wkf_shipmentout"/>
<field name="flow_stop">True</field>
<field name="name">Canceled</field>
- <field name="kind">function</field>
- <field name="action">set_state_cancel()</field>
+ <field name="method">wkf_cancel</field>
</record>
<record model="workflow.activity" id="shipmentout_act_done">
<field name="workflow" ref="wkf_shipmentout"/>
<field name="flow_stop">True</field>
<field name="name">Done</field>
- <field name="kind">function</field>
- <field name="action">set_state_done()</field>
+ <field name="method">wkf_done</field>
</record>
<record model="workflow.activity" id="shipmentout_act_waiting">
<field name="name">Waiting</field>
- <field name="kind">function</field>
<field name="workflow" ref="wkf_shipmentout"/>
- <field name="action">set_state_waiting()</field>
+ <field name="method">wkf_waiting</field>
</record>
<record model="workflow.activity" id="shipmentout_act_assigned">
<field name="name">Assigned</field>
- <field name="kind">function</field>
<field name="workflow" ref="wkf_shipmentout"/>
- <field name="action">set_state_assigned()</field>
+ <field name="method">wkf_assigned</field>
</record>
<record model="workflow.activity" id="shipmentout_act_packed">
<field name="name">Packed</field>
- <field name="kind">function</field>
<field name="workflow" ref="wkf_shipmentout"/>
- <field name="action">set_state_packed()</field>
+ <field name="method">wkf_packed</field>
</record>
<record model="workflow.transition"
@@ -929,7 +861,7 @@ this repository contains the full copyright notices and license terms. -->
<field name="act_to" ref="shipmentout_act_assigned"/>
<field name="group" ref="group_stock"/>
<field name="signal">assign</field>
- <field name="condition">assign_try()</field>
+ <field name="condition">wkf_assign_try</field>
</record>
<record model="workflow.transition"
id="shipmentout_trans_assigned_waiting">
@@ -951,7 +883,7 @@ this repository contains the full copyright notices and license terms. -->
<field name="act_to" ref="shipmentout_act_assigned"/>
<field name="group" ref="group_stock_force_assignment"/>
<field name="signal">force_assign</field>
- <field name="condition">assign_force()</field>
+ <field name="condition">wkf_assign_force</field>
</record>
<record model="workflow.transition"
id="shipmentout_trans_draft_waiting">
@@ -1021,7 +953,7 @@ this repository contains the full copyright notices and license terms. -->
<record model="ir.action.keyword"
id="report_shipment_out_delivery_note_keyword">
<field name="keyword">form_print</field>
- <field name="model">stock.shipment.out,0</field>
+ <field name="model">stock.shipment.out,-1</field>
<field name="action" ref="report_shipment_out_delivery_note"/>
</record>
@@ -1035,7 +967,7 @@ this repository contains the full copyright notices and license terms. -->
<record model="ir.action.keyword"
id="report_shipment_out_picking_list_keyword">
<field name="keyword">form_print</field>
- <field name="model">stock.shipment.out,0</field>
+ <field name="model">stock.shipment.out,-1</field>
<field name="action" ref="report_shipment_out_picking_list"/>
</record>
@@ -1049,7 +981,7 @@ this repository contains the full copyright notices and license terms. -->
<record model="ir.action.keyword"
id="report_shipment_in_restocking_list_keyword">
<field name="keyword">form_print</field>
- <field name="model">stock.shipment.in,0</field>
+ <field name="model">stock.shipment.in,-1</field>
<field name="action" ref="report_shipment_in_restocking_list"/>
</record>
@@ -1063,7 +995,7 @@ this repository contains the full copyright notices and license terms. -->
<record model="ir.action.keyword"
id="report_shipment_out_return_restocking_list_keyword">
<field name="keyword">form_print</field>
- <field name="model">stock.shipment.out.return,0</field>
+ <field name="model">stock.shipment.out.return,-1</field>
<field name="action" ref="report_shipment_out_return_restocking_list"/>
</record>
@@ -1077,7 +1009,7 @@ this repository contains the full copyright notices and license terms. -->
<record model="ir.action.keyword"
id="report_shipment_internal_keyword">
<field name="keyword">form_print</field>
- <field name="model">stock.shipment.internal,0</field>
+ <field name="model">stock.shipment.internal,-1</field>
<field name="action" ref="report_shipment_internal"/>
</record>
@@ -1090,35 +1022,30 @@ this repository contains the full copyright notices and license terms. -->
<record model="workflow.activity" id="shipmentinternal_act_draft">
<field name="workflow" ref="wkf_shipmentinternal"/>
<field name="flow_start">True</field>
- <field name="kind">function</field>
- <field name="action">set_state_draft()</field>
+ <field name="method">wkf_draft</field>
<field name="name">Draft</field>
</record>
<record model="workflow.activity" id="shipmentinternal_act_cancel">
<field name="workflow" ref="wkf_shipmentinternal"/>
<field name="flow_stop">True</field>
<field name="name">Canceled</field>
- <field name="kind">function</field>
- <field name="action">set_state_cancel()</field>
+ <field name="method">wkf_cancel</field>
</record>
<record model="workflow.activity" id="shipmentinternal_act_done">
<field name="workflow" ref="wkf_shipmentinternal"/>
<field name="flow_stop">True</field>
<field name="name">Done</field>
- <field name="kind">function</field>
- <field name="action">set_state_done()</field>
+ <field name="method">wkf_done</field>
</record>
<record model="workflow.activity" id="shipmentinternal_act_waiting">
<field name="name">Waiting</field>
- <field name="kind">function</field>
<field name="workflow" ref="wkf_shipmentinternal"/>
- <field name="action">set_state_waiting()</field>
+ <field name="method">wkf_waiting</field>
</record>
<record model="workflow.activity" id="shipmentinternal_act_assigned">
<field name="name">Assigned</field>
- <field name="kind">function</field>
<field name="workflow" ref="wkf_shipmentinternal"/>
- <field name="action">set_state_assigned()</field>
+ <field name="method">wkf_assigned</field>
</record>
<record model="workflow.transition"
@@ -1148,7 +1075,7 @@ this repository contains the full copyright notices and license terms. -->
<field name="act_to" ref="shipmentinternal_act_assigned"/>
<field name="group" ref="group_stock"/>
<field name="signal">assign</field>
- <field name="condition">assign_try()</field>
+ <field name="condition">wkf_assign_try</field>
</record>
<record model="workflow.transition"
id="shipmentinternal_trans_assigned_waiting">
@@ -1163,7 +1090,7 @@ this repository contains the full copyright notices and license terms. -->
<field name="act_to" ref="shipmentinternal_act_assigned"/>
<field name="group" ref="group_stock_force_assignment"/>
<field name="signal">force_assign</field>
- <field name="condition">assign_force()</field>
+ <field name="condition">wkf_assign_force</field>
</record>
<record model="workflow.transition" id="shipmentinternal_trans_assigned_done">
<field name="act_from" ref="shipmentinternal_act_assigned"/>
@@ -1201,29 +1128,25 @@ this repository contains the full copyright notices and license terms. -->
<record model="workflow.activity" id="shipment_out_return_act_draft">
<field name="workflow" ref="wkf_shipment_out_return"/>
<field name="flow_start">True</field>
- <field name="kind">function</field>
- <field name="action">set_state_draft()</field>
+ <field name="method">wkf_draft</field>
<field name="name">Draft</field>
</record>
<record model="workflow.activity" id="shipment_out_return_act_cancel">
<field name="workflow" ref="wkf_shipment_out_return"/>
<field name="flow_stop">True</field>
<field name="name">Canceled</field>
- <field name="kind">function</field>
- <field name="action">set_state_cancel()</field>
+ <field name="method">wkf_cancel</field>
</record>
<record model="workflow.activity" id="shipment_out_return_act_done">
<field name="workflow" ref="wkf_shipment_out_return"/>
<field name="flow_stop">True</field>
<field name="name">Done</field>
- <field name="kind">function</field>
- <field name="action">set_state_done()</field>
+ <field name="method">wkf_done</field>
</record>
<record model="workflow.activity" id="shipment_out_return_act_received">
<field name="name">Received</field>
- <field name="kind">function</field>
<field name="workflow" ref="wkf_shipment_out_return"/>
- <field name="action">set_state_received()
create_inventory_moves()</field>
+ <field name="method">wkf_received</field>
</record>
<record model="workflow.transition"
@@ -1269,35 +1192,30 @@ this repository contains the full copyright notices and license terms. -->
<record model="workflow.activity" id="shipment_in_return_act_draft">
<field name="workflow" ref="wkf_shipment_in_return"/>
<field name="flow_start">True</field>
- <field name="kind">function</field>
- <field name="action">set_state_draft()</field>
+ <field name="method">wkf_draft</field>
<field name="name">Draft</field>
</record>
<record model="workflow.activity" id="shipment_in_return_act_cancel">
<field name="workflow" ref="wkf_shipment_in_return"/>
<field name="flow_stop">True</field>
<field name="name">Canceled</field>
- <field name="kind">function</field>
- <field name="action">set_state_cancel()</field>
+ <field name="method">wkf_cancel</field>
</record>
<record model="workflow.activity" id="shipment_in_return_act_done">
<field name="workflow" ref="wkf_shipment_in_return"/>
<field name="flow_stop">True</field>
<field name="name">Done</field>
- <field name="kind">function</field>
- <field name="action">set_state_done()</field>
+ <field name="method">wkf_done</field>
</record>
<record model="workflow.activity" id="shipment_in_return_act_waiting">
<field name="name">Waiting</field>
- <field name="kind">function</field>
<field name="workflow" ref="wkf_shipment_in_return"/>
- <field name="action">set_state_waiting()</field>
+ <field name="method">wkf_waiting</field>
</record>
<record model="workflow.activity" id="shipment_in_return_act_assigned">
<field name="name">Assigned</field>
- <field name="kind">function</field>
<field name="workflow" ref="wkf_shipment_in_return"/>
- <field name="action">set_state_assigned()</field>
+ <field name="method">wkf_assigned</field>
</record>
<record model="workflow.transition"
@@ -1320,7 +1238,7 @@ this repository contains the full copyright notices and license terms. -->
<field name="act_to" ref="shipment_in_return_act_assigned"/>
<field name="group" ref="group_stock"/>
<field name="signal">assign</field>
- <field name="condition">assign_try()</field>
+ <field name="condition">wkf_assign_try</field>
</record>
<record model="workflow.transition"
id="shipment_in_return_trans_assigned_waiting">
@@ -1335,7 +1253,7 @@ this repository contains the full copyright notices and license terms. -->
<field name="act_to" ref="shipment_in_return_act_assigned"/>
<field name="group" ref="group_stock_force_assignment"/>
<field name="signal">force_assign</field>
- <field name="condition">assign_force()</field>
+ <field name="condition">wkf_assign_force</field>
</record>
<record model="workflow.transition" id="shipment_in_return_trans_assigned_done">
<field name="act_from" ref="shipment_in_return_act_assigned"/>
@@ -1368,9 +1286,18 @@ this repository contains the full copyright notices and license terms. -->
<record model="ir.sequence.type" id="sequence_type_shipment_out">
<field name="name">Customer Shipment</field>
<field name="code">stock.shipment.out</field>
- <field name="groups"
- eval="[('add', ref('res.group_admin')), ('add', ref('group_stock_admin'))]"/>
</record>
+ <record model="ir.sequence.type-res.group"
+ id="sequence_type_shipment_out_group_admin">
+ <field name="sequence_type" ref="sequence_type_shipment_out"/>
+ <field name="group" ref="res.group_admin"/>
+ </record>
+ <record model="ir.sequence.type-res.group"
+ id="sequence_type_shipment_out_group_stock_admin">
+ <field name="sequence_type" ref="sequence_type_shipment_out"/>
+ <field name="group" ref="group_stock_admin"/>
+ </record>
+
<record model="ir.sequence" id="sequence_shipment_out">
<field name="name">Customer Shipment</field>
<field name="code">stock.shipment.out</field>
@@ -1380,9 +1307,18 @@ this repository contains the full copyright notices and license terms. -->
<record model="ir.sequence.type" id="sequence_type_shipment_in">
<field name="name">Supplier Shipment</field>
<field name="code">stock.shipment.in</field>
- <field name="groups"
- eval="[('add', ref('res.group_admin')), ('add', ref('group_stock_admin'))]"/>
</record>
+ <record model="ir.sequence.type-res.group"
+ id="sequence_type_shipment_in_group_admin">
+ <field name="sequence_type" ref="sequence_type_shipment_in"/>
+ <field name="group" ref="res.group_admin"/>
+ </record>
+ <record model="ir.sequence.type-res.group"
+ id="sequence_type_shipment_in_group_stock_admin">
+ <field name="sequence_type" ref="sequence_type_shipment_in"/>
+ <field name="group" ref="group_stock_admin"/>
+ </record>
+
<record model="ir.sequence" id="sequence_shipment_in">
<field name="name">Supplier Shipment</field>
<field name="code">stock.shipment.in</field>
@@ -1392,9 +1328,18 @@ this repository contains the full copyright notices and license terms. -->
<record model="ir.sequence.type" id="sequence_type_shipment_internal">
<field name="name">Internal Shipment</field>
<field name="code">stock.shipment.internal</field>
- <field name="groups"
- eval="[('add', ref('res.group_admin')), ('add', ref('group_stock_admin'))]"/>
</record>
+ <record model="ir.sequence.type-res.group"
+ id="sequence_type_shipment_internal_group_admin">
+ <field name="sequence_type" ref="sequence_type_shipment_internal"/>
+ <field name="group" ref="res.group_admin"/>
+ </record>
+ <record model="ir.sequence.type-res.group"
+ id="sequence_type_shipment_internal_group_stock_admin">
+ <field name="sequence_type" ref="sequence_type_shipment_internal"/>
+ <field name="group" ref="group_stock_admin"/>
+ </record>
+
<record model="ir.sequence" id="sequence_shipment_internal">
<field name="name">Internal Shipment</field>
<field name="code">stock.shipment.internal</field>
@@ -1404,9 +1349,18 @@ this repository contains the full copyright notices and license terms. -->
<record model="ir.sequence.type" id="sequence_type_shipment_out_return">
<field name="name">Customer Return Shipment</field>
<field name="code">stock.shipment.out.return</field>
- <field name="groups"
- eval="[('add', ref('res.group_admin')), ('add', ref('group_stock_admin'))]"/>
</record>
+ <record model="ir.sequence.type-res.group"
+ id="sequence_type_shipment_out_return_group_admin">
+ <field name="sequence_type" ref="sequence_type_shipment_out_return"/>
+ <field name="group" ref="res.group_admin"/>
+ </record>
+ <record model="ir.sequence.type-res.group"
+ id="sequence_type_shipment_out_return_group_stock_admin">
+ <field name="sequence_type" ref="sequence_type_shipment_out_return"/>
+ <field name="group" ref="group_stock_admin"/>
+ </record>
+
<record model="ir.sequence" id="sequence_shipment_out_return">
<field name="name">Customer Return Shipment</field>
<field name="code">stock.shipment.out.return</field>
@@ -1416,9 +1370,18 @@ this repository contains the full copyright notices and license terms. -->
<record model="ir.sequence.type" id="sequence_type_shipment_in_return">
<field name="name">Supplier Return Shipment</field>
<field name="code">stock.shipment.in.return</field>
- <field name="groups"
- eval="[('add', ref('res.group_admin')), ('add', ref('group_stock_admin'))]"/>
</record>
+ <record model="ir.sequence.type-res.group"
+ id="sequence_type_shipment_in_return_group_admin">
+ <field name="sequence_type" ref="sequence_type_shipment_in_return"/>
+ <field name="group" ref="res.group_admin"/>
+ </record>
+ <record model="ir.sequence.type-res.group"
+ id="sequence_type_shipment_in_return_group_stock_admin">
+ <field name="sequence_type" ref="sequence_type_shipment_in_return"/>
+ <field name="group" ref="group_stock_admin"/>
+ </record>
+
<record model="ir.sequence" id="sequence_shipment_in_return">
<field name="name">Supplier Return Shipment</field>
<field name="code">stock.shipment.in.return</field>
@@ -1433,7 +1396,7 @@ this repository contains the full copyright notices and license terms. -->
<data>
<xpath
expr="/tree/field[@name="active"]" position="after">
- <field name="delivery" select="2"/>
+ <field name="delivery"/>
</xpath>
</data>
]]>
@@ -1458,7 +1421,7 @@ this repository contains the full copyright notices and license terms. -->
<!-- Model Access -->
<record model="ir.model.access" id="access_shipment_in">
<field name="model" search="[('model', '=', 'stock.shipment.in')]"/>
- <field name="perm_read" eval="True"/>
+ <field name="perm_read" eval="False"/>
<field name="perm_write" eval="False"/>
<field name="perm_create" eval="False"/>
<field name="perm_delete" eval="False"/>
@@ -1482,7 +1445,7 @@ this repository contains the full copyright notices and license terms. -->
<record model="ir.model.access" id="access_shipment_out">
<field name="model" search="[('model', '=', 'stock.shipment.out')]"/>
- <field name="perm_read" eval="True"/>
+ <field name="perm_read" eval="False"/>
<field name="perm_write" eval="False"/>
<field name="perm_create" eval="False"/>
<field name="perm_delete" eval="False"/>
@@ -1506,7 +1469,7 @@ this repository contains the full copyright notices and license terms. -->
<record model="ir.model.access" id="access_shipment_internal">
<field name="model" search="[('model', '=', 'stock.shipment.internal')]"/>
- <field name="perm_read" eval="True"/>
+ <field name="perm_read" eval="False"/>
<field name="perm_write" eval="False"/>
<field name="perm_create" eval="False"/>
<field name="perm_delete" eval="False"/>
@@ -1530,7 +1493,7 @@ this repository contains the full copyright notices and license terms. -->
<record model="ir.model.access" id="access_shipment_out_return">
<field name="model" search="[('model', '=', 'stock.shipment.out.return')]"/>
- <field name="perm_read" eval="True"/>
+ <field name="perm_read" eval="False"/>
<field name="perm_write" eval="False"/>
<field name="perm_create" eval="False"/>
<field name="perm_delete" eval="False"/>
@@ -1554,7 +1517,7 @@ this repository contains the full copyright notices and license terms. -->
<record model="ir.model.access" id="access_shipment_in_return">
<field name="model" search="[('model', '=', 'stock.shipment.in.return')]"/>
- <field name="perm_read" eval="True"/>
+ <field name="perm_read" eval="False"/>
<field name="perm_write" eval="False"/>
<field name="perm_create" eval="False"/>
<field name="perm_delete" eval="False"/>
@@ -1575,5 +1538,57 @@ this repository contains the full copyright notices and license terms. -->
<field name="perm_create" eval="True"/>
<field name="perm_delete" eval="True"/>
</record>
+
+ <!-- Rule definition -->
+ <record model="ir.rule.group" id="rule_group_shipment_in">
+ <field name="model" search="[('model', '=', 'stock.shipment.in')]"/>
+ <field name="global_p" eval="True"/>
+ </record>
+ <record model="ir.rule" id="rule_shipment_in">
+ <field name="field" search="[('name', '=', 'company'), ('model.model', '=', 'stock.shipment.in')]"/>
+ <field name="operator">=</field>
+ <field name="operand">User/Current Company</field>
+ <field name="rule_group" ref="rule_group_shipment_in"/>
+ </record>
+ <record model="ir.rule.group" id="rule_group_shipment_in_return">
+ <field name="model" search="[('model', '=', 'stock.shipment.in.return')]"/>
+ <field name="global_p" eval="True"/>
+ </record>
+ <record model="ir.rule" id="rule_shipment_in_return">
+ <field name="field" search="[('name', '=', 'company'), ('model.model', '=', 'stock.shipment.in.return')]"/>
+ <field name="operator">=</field>
+ <field name="operand">User/Current Company</field>
+ <field name="rule_group" ref="rule_group_shipment_in_return"/>
+ </record>
+ <record model="ir.rule.group" id="rule_group_shipment_out">
+ <field name="model" search="[('model', '=', 'stock.shipment.out')]"/>
+ <field name="global_p" eval="True"/>
+ </record>
+ <record model="ir.rule" id="rule_shipment_out">
+ <field name="field" search="[('name', '=', 'company'), ('model.model', '=', 'stock.shipment.out')]"/>
+ <field name="operator">=</field>
+ <field name="operand">User/Current Company</field>
+ <field name="rule_group" ref="rule_group_shipment_out"/>
+ </record>
+ <record model="ir.rule.group" id="rule_group_shipment_out_return">
+ <field name="model" search="[('model', '=', 'stock.shipment.out.return')]"/>
+ <field name="global_p" eval="True"/>
+ </record>
+ <record model="ir.rule" id="rule_shipment_out_return">
+ <field name="field" search="[('name', '=', 'company'), ('model.model', '=', 'stock.shipment.out.return')]"/>
+ <field name="operator">=</field>
+ <field name="operand">User/Current Company</field>
+ <field name="rule_group" ref="rule_group_shipment_out_return"/>
+ </record>
+ <record model="ir.rule.group" id="rule_group_shipment_internal">
+ <field name="model" search="[('model', '=', 'stock.shipment.internal')]"/>
+ <field name="global_p" eval="True"/>
+ </record>
+ <record model="ir.rule" id="rule_shipment_internal">
+ <field name="field" search="[('name', '=', 'company'), ('model.model', '=', 'stock.shipment.internal')]"/>
+ <field name="operator">=</field>
+ <field name="operand">User/Current Company</field>
+ <field name="rule_group" ref="rule_group_shipment_internal"/>
+ </record>
</data>
</tryton>
diff --git a/stock.xml b/stock.xml
index 6bc146b..aad5010 100644
--- a/stock.xml
+++ b/stock.xml
@@ -12,22 +12,57 @@ this repository contains the full copyright notices and license terms. -->
<record model="res.group" id="group_stock_force_assignment">
<field name="name">Stock Force Assignment</field>
</record>
- <record model="res.user" id="res.user_admin">
- <field name="groups" eval="[('add', ref('group_stock_admin')), ('add', ref('group_stock')), ('add', ref('group_stock_force_assignment'))]"/>
+ <record model="res.user-res.group"
+ id="user_admin_group_stock_admin">
+ <field name="user" ref="res.user_admin"/>
+ <field name="group" ref="group_stock_admin"/>
</record>
- <record model="res.user" id="res.user_trigger">
- <field name="groups" eval="[('add', ref('group_stock_admin')), ('add', ref('group_stock')), ('add', ref('group_stock_force_assignment'))]"/>
+ <record model="res.user-res.group"
+ id="user_admin_group_stock">
+ <field name="user" ref="res.user_admin"/>
+ <field name="group" ref="group_stock"/>
+ </record>
+ <record model="res.user-res.group"
+ id="user_admin_group_stock_force_assignment">
+ <field name="user" ref="res.user_admin"/>
+ <field name="group" ref="group_stock_force_assignment"/>
+ </record>
+
+ <record model="res.user-res.group"
+ id="user_trigger_group_stock_admin">
+ <field name="user" ref="res.user_trigger"/>
+ <field name="group" ref="group_stock_admin"/>
+ </record>
+ <record model="res.user-res.group"
+ id="user_trigger_group_stock">
+ <field name="user" ref="res.user_trigger"/>
+ <field name="group" ref="group_stock"/>
+ </record>
+ <record model="res.user-res.group"
+ id="user_trigger_group_stock_force_assignment">
+ <field name="user" ref="res.user_trigger"/>
+ <field name="group" ref="group_stock_force_assignment"/>
</record>
<record model="ir.ui.icon" id="inventory_icon">
<field name="name">tryton-inventory</field>
<field name="path">icons/tryton-inventory.svg</field>
</record>
- <menuitem name="Inventory Management" sequence="3" id="menu_stock"
+ <menuitem name="Inventory & Stock" sequence="3" id="menu_stock"
icon="tryton-inventory"/>
+ <record model="ir.ui.menu-res.group"
+ id="menu_stock_group_stock">
+ <field name="menu" ref="menu_stock"/>
+ <field name="group" ref="group_stock"/>
+ </record>
+
<menuitem name="Configuration" parent="menu_stock"
- id="menu_configuration" groups="group_stock_admin"
- sequence="0" icon="tryton-preferences"/>
+ id="menu_configuration" sequence="0" icon="tryton-preferences"/>
+ <record model="ir.ui.menu-res.group"
+ id="menu_configuration_group_stock_admin">
+ <field name="menu" ref="menu_configuration"/>
+ <field name="group" ref="group_stock_admin"/>
+ </record>
<menuitem name="Reporting" parent="menu_stock"
id="menu_reporting" sequence="100" active="0"/>
diff --git a/tests/test_stock.py b/tests/test_stock.py
index dcf0de6..dbef2fe 100644
--- a/tests/test_stock.py
+++ b/tests/test_stock.py
@@ -1,7 +1,6 @@
#!/usr/bin/env python
#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 __future__ import with_statement
import sys, os
DIR = os.path.abspath(os.path.normpath(os.path.join(__file__,
@@ -15,7 +14,8 @@ from decimal import Decimal
from dateutil.relativedelta import relativedelta
from functools import partial
import trytond.tests.test_tryton
-from trytond.tests.test_tryton import POOL, DB_NAME, USER, CONTEXT, test_view
+from trytond.tests.test_tryton import POOL, DB_NAME, USER, CONTEXT, test_view,\
+ test_depends
from trytond.transaction import Transaction
@@ -42,6 +42,12 @@ class StockTestCase(unittest.TestCase):
'''
test_view('stock')
+ def test0006depends(self):
+ '''
+ Test depends.
+ '''
+ test_depends()
+
def test0010move_internal_quantity(self):
'''
Test Move.internal_quantity.
diff --git a/trytond_stock.egg-info/PKG-INFO b/trytond_stock.egg-info/PKG-INFO
index 0f7df99..439036a 100644
--- a/trytond_stock.egg-info/PKG-INFO
+++ b/trytond_stock.egg-info/PKG-INFO
@@ -1,6 +1,6 @@
Metadata-Version: 1.0
Name: trytond-stock
-Version: 2.0.1
+Version: 2.2.0
Summary: Stock Management and Inventory Control with:
- Location definition
- Stock move
@@ -17,24 +17,26 @@ Home-page: http://www.tryton.org/
Author: B2CK
Author-email: info at b2ck.com
License: GPL-3
-Download-URL: http://downloads.tryton.org/2.0/
+Download-URL: http://downloads.tryton.org/2.2/
Description: UNKNOWN
Platform: UNKNOWN
Classifier: Development Status :: 5 - Production/Stable
Classifier: Environment :: Plugins
+Classifier: Framework :: Tryton
Classifier: Intended Audience :: Developers
Classifier: Intended Audience :: Financial and Insurance Industry
Classifier: Intended Audience :: Legal Industry
Classifier: Intended Audience :: Manufacturing
Classifier: License :: OSI Approved :: GNU General Public License (GPL)
Classifier: Natural Language :: Bulgarian
+Classifier: Natural Language :: Czech
+Classifier: Natural Language :: Dutch
Classifier: Natural Language :: English
Classifier: Natural Language :: French
Classifier: Natural Language :: German
Classifier: Natural Language :: Russian
Classifier: Natural Language :: Spanish
Classifier: Operating System :: OS Independent
-Classifier: Programming Language :: Python :: 2.5
Classifier: Programming Language :: Python :: 2.6
Classifier: Programming Language :: Python :: 2.7
Classifier: Topic :: Office/Business
diff --git a/trytond_stock.egg-info/SOURCES.txt b/trytond_stock.egg-info/SOURCES.txt
index 7389bbc..ff51ee8 100644
--- a/trytond_stock.egg-info/SOURCES.txt
+++ b/trytond_stock.egg-info/SOURCES.txt
@@ -5,14 +5,9 @@ LICENSE
MANIFEST.in
README
TODO
-bg_BG.csv
configuration.xml
customer_return_restocking_list.odt
-de_DE.csv
delivery_note.odt
-es_CO.csv
-es_ES.csv
-fr_FR.csv
internal_shipment.odt
inventory.xml
location.xml
@@ -21,7 +16,6 @@ party.xml
period.xml
picking_list.odt
product.xml
-ru_RU.csv
setup.py
shipment.xml
stock.xml
@@ -35,13 +29,18 @@ supplier_restocking_list.odt
./period.py
./product.py
./shipment.py
-./icons/__init__.py
./tests/__init__.py
./tests/test_stock.py
doc/index.rst
-icons/LICENSE
-icons/__init__.py
icons/tryton-inventory.svg
+locale/bg_BG.po
+locale/cs_CZ.po
+locale/de_DE.po
+locale/es_CO.po
+locale/es_ES.po
+locale/fr_FR.po
+locale/nl_NL.po
+locale/ru_RU.po
trytond_stock.egg-info/PKG-INFO
trytond_stock.egg-info/SOURCES.txt
trytond_stock.egg-info/dependency_links.txt
diff --git a/trytond_stock.egg-info/requires.txt b/trytond_stock.egg-info/requires.txt
index 05d3f8e..5a5937b 100644
--- a/trytond_stock.egg-info/requires.txt
+++ b/trytond_stock.egg-info/requires.txt
@@ -1,5 +1,5 @@
-trytond_party >= 2.0, < 2.1
-trytond_product >= 2.0, < 2.1
-trytond_company >= 2.0, < 2.1
-trytond_currency >= 2.0, < 2.1
-trytond >= 2.0, < 2.1
\ No newline at end of file
+trytond_party >= 2.2, < 2.3
+trytond_product >= 2.2, < 2.3
+trytond_company >= 2.2, < 2.3
+trytond_currency >= 2.2, < 2.3
+trytond >= 2.2, < 2.3
\ No newline at end of file
commit e9083c366ec777dc15c5b02cba7ae69a691771cb
Author: Mathias Behrle <mathiasb at m9s.biz>
Date: Tue Jul 12 23:04:20 2011 +0200
Adding upstream version 2.0.1+dfsg.
diff --git a/icons/LICENSE b/icons/LICENSE
deleted file mode 100644
index 11782c0..0000000
--- a/icons/LICENSE
+++ /dev/null
@@ -1,264 +0,0 @@
- [1]Creative Commons
-
- Creative Commons Legal Code
-
- Attribution-ShareAlike 2.0
- CREATIVE COMMONS CORPORATION IS NOT A LAW FIRM AND DOES NOT PROVIDE
- LEGAL SERVICES. DISTRIBUTION OF THIS LICENSE DOES NOT CREATE AN
- ATTORNEY-CLIENT RELATIONSHIP. CREATIVE COMMONS PROVIDES THIS
- INFORMATION ON AN "AS-IS" BASIS. CREATIVE COMMONS MAKES NO WARRANTIES
- REGARDING THE INFORMATION PROVIDED, AND DISCLAIMS LIABILITY FOR
- DAMAGES RESULTING FROM ITS USE.
-
- License
-
- THE WORK (AS DEFINED BELOW) IS PROVIDED UNDER THE TERMS OF THIS
- CREATIVE COMMONS PUBLIC LICENSE ("CCPL" OR "LICENSE"). THE WORK IS
- PROTECTED BY COPYRIGHT AND/OR OTHER APPLICABLE LAW. ANY USE OF THE
- WORK OTHER THAN AS AUTHORIZED UNDER THIS LICENSE OR COPYRIGHT LAW IS
- PROHIBITED.
-
- BY EXERCISING ANY RIGHTS TO THE WORK PROVIDED HERE, YOU ACCEPT AND
- AGREE TO BE BOUND BY THE TERMS OF THIS LICENSE. THE LICENSOR GRANTS
- YOU THE RIGHTS CONTAINED HERE IN CONSIDERATION OF YOUR ACCEPTANCE OF
- SUCH TERMS AND CONDITIONS.
-
- 1. Definitions
- a. "Collective Work" means a work, such as a periodical issue,
- anthology or encyclopedia, in which the Work in its entirety in
- unmodified form, along with a number of other contributions,
- constituting separate and independent works in themselves, are
- assembled into a collective whole. A work that constitutes a
- Collective Work will not be considered a Derivative Work (as
- defined below) for the purposes of this License.
- b. "Derivative Work" means a work based upon the Work or upon the
- Work and other pre-existing works, such as a translation, musical
- arrangement, dramatization, fictionalization, motion picture
- version, sound recording, art reproduction, abridgment,
- condensation, or any other form in which the Work may be recast,
- transformed, or adapted, except that a work that constitutes a
- Collective Work will not be considered a Derivative Work for the
- purpose of this License. For the avoidance of doubt, where the
- Work is a musical composition or sound recording, the
- synchronization of the Work in timed-relation with a moving image
- ("synching") will be considered a Derivative Work for the purpose
- of this License.
- c. "Licensor" means the individual or entity that offers the Work
- under the terms of this License.
- d. "Original Author" means the individual or entity who created the
- Work.
- e. "Work" means the copyrightable work of authorship offered under
- the terms of this License.
- f. "You" means an individual or entity exercising rights under this
- License who has not previously violated the terms of this License
- with respect to the Work, or who has received express permission
- from the Licensor to exercise rights under this License despite a
- previous violation.
- g. "License Elements" means the following high-level license
- attributes as selected by Licensor and indicated in the title of
- this License: Attribution, ShareAlike.
-
- 2. Fair Use Rights. Nothing in this license is intended to reduce,
- limit, or restrict any rights arising from fair use, first sale or
- other limitations on the exclusive rights of the copyright owner under
- copyright law or other applicable laws.
-
- 3. License Grant. Subject to the terms and conditions of this License,
- Licensor hereby grants You a worldwide, royalty-free, non-exclusive,
- perpetual (for the duration of the applicable copyright) license to
- exercise the rights in the Work as stated below:
- a. to reproduce the Work, to incorporate the Work into one or more
- Collective Works, and to reproduce the Work as incorporated in the
- Collective Works;
- b. to create and reproduce Derivative Works;
- c. to distribute copies or phonorecords of, display publicly, perform
- publicly, and perform publicly by means of a digital audio
- transmission the Work including as incorporated in Collective
- Works;
- d. to distribute copies or phonorecords of, display publicly, perform
- publicly, and perform publicly by means of a digital audio
- transmission Derivative Works.
- e. For the avoidance of doubt, where the work is a musical
- composition:
- i. Performance Royalties Under Blanket Licenses. Licensor waives
- the exclusive right to collect, whether individually or via a
- performance rights society (e.g. ASCAP, BMI, SESAC),
- royalties for the public performance or public digital
- performance (e.g. webcast) of the Work.
- ii. Mechanical Rights and Statutory Royalties. Licensor waives
- the exclusive right to collect, whether individually or via a
- music rights society or designated agent (e.g. Harry Fox
- Agency), royalties for any phonorecord You create from the
- Work ("cover version") and distribute, subject to the
- compulsory license created by 17 USC Section 115 of the US
- Copyright Act (or the equivalent in other jurisdictions).
- f. Webcasting Rights and Statutory Royalties. For the avoidance of
- doubt, where the Work is a sound recording, Licensor waives the
- exclusive right to collect, whether individually or via a
- performance-rights society (e.g. SoundExchange), royalties for the
- public digital performance (e.g. webcast) of the Work, subject to
- the compulsory license created by 17 USC Section 114 of the US
- Copyright Act (or the equivalent in other jurisdictions).
-
- The above rights may be exercised in all media and formats whether now
- known or hereafter devised. The above rights include the right to make
- such modifications as are technically necessary to exercise the rights
- in other media and formats. All rights not expressly granted by
- Licensor are hereby reserved.
-
- 4. Restrictions.The license granted in Section 3 above is expressly
- made subject to and limited by the following restrictions:
- a. You may distribute, publicly display, publicly perform, or
- publicly digitally perform the Work only under the terms of this
- License, and You must include a copy of, or the Uniform Resource
- Identifier for, this License with every copy or phonorecord of the
- Work You distribute, publicly display, publicly perform, or
- publicly digitally perform. You may not offer or impose any terms
- on the Work that alter or restrict the terms of this License or
- the recipients' exercise of the rights granted hereunder. You may
- not sublicense the Work. You must keep intact all notices that
- refer to this License and to the disclaimer of warranties. You may
- not distribute, publicly display, publicly perform, or publicly
- digitally perform the Work with any technological measures that
- control access or use of the Work in a manner inconsistent with
- the terms of this License Agreement. The above applies to the Work
- as incorporated in a Collective Work, but this does not require
- the Collective Work apart from the Work itself to be made subject
- to the terms of this License. If You create a Collective Work,
- upon notice from any Licensor You must, to the extent practicable,
- remove from the Collective Work any reference to such Licensor or
- the Original Author, as requested. If You create a Derivative
- Work, upon notice from any Licensor You must, to the extent
- practicable, remove from the Derivative Work any reference to such
- Licensor or the Original Author, as requested.
- b. You may distribute, publicly display, publicly perform, or
- publicly digitally perform a Derivative Work only under the terms
- of this License, a later version of this License with the same
- License Elements as this License, or a Creative Commons iCommons
- license that contains the same License Elements as this License
- (e.g. Attribution-ShareAlike 2.0 Japan). You must include a copy
- of, or the Uniform Resource Identifier for, this License or other
- license specified in the previous sentence with every copy or
- phonorecord of each Derivative Work You distribute, publicly
- display, publicly perform, or publicly digitally perform. You may
- not offer or impose any terms on the Derivative Works that alter
- or restrict the terms of this License or the recipients' exercise
- of the rights granted hereunder, and You must keep intact all
- notices that refer to this License and to the disclaimer of
- warranties. You may not distribute, publicly display, publicly
- perform, or publicly digitally perform the Derivative Work with
- any technological measures that control access or use of the Work
- in a manner inconsistent with the terms of this License Agreement.
- The above applies to the Derivative Work as incorporated in a
- Collective Work, but this does not require the Collective Work
- apart from the Derivative Work itself to be made subject to the
- terms of this License.
- c. If you distribute, publicly display, publicly perform, or publicly
- digitally perform the Work or any Derivative Works or Collective
- Works, You must keep intact all copyright notices for the Work and
- give the Original Author credit reasonable to the medium or means
- You are utilizing by conveying the name (or pseudonym if
- applicable) of the Original Author if supplied; the title of the
- Work if supplied; to the extent reasonably practicable, the
- Uniform Resource Identifier, if any, that Licensor specifies to be
- associated with the Work, unless such URI does not refer to the
- copyright notice or licensing information for the Work; and in the
- case of a Derivative Work, a credit identifying the use of the
- Work in the Derivative Work (e.g., "French translation of the Work
- by Original Author," or "Screenplay based on original Work by
- Original Author"). Such credit may be implemented in any
- reasonable manner; provided, however, that in the case of a
- Derivative Work or Collective Work, at a minimum such credit will
- appear where any other comparable authorship credit appears and in
- a manner at least as prominent as such other comparable authorship
- credit.
-
- 5. Representations, Warranties and Disclaimer
-
- UNLESS OTHERWISE AGREED TO BY THE PARTIES IN WRITING, LICENSOR OFFERS
- THE WORK AS-IS AND MAKES NO REPRESENTATIONS OR WARRANTIES OF ANY KIND
- CONCERNING THE MATERIALS, EXPRESS, IMPLIED, STATUTORY OR OTHERWISE,
- INCLUDING, WITHOUT LIMITATION, WARRANTIES OF TITLE, MERCHANTIBILITY,
- FITNESS FOR A PARTICULAR PURPOSE, NONINFRINGEMENT, OR THE ABSENCE OF
- LATENT OR OTHER DEFECTS, ACCURACY, OR THE PRESENCE OF ABSENCE OF
- ERRORS, WHETHER OR NOT DISCOVERABLE. SOME JURISDICTIONS DO NOT ALLOW
- THE EXCLUSION OF IMPLIED WARRANTIES, SO SUCH EXCLUSION MAY NOT APPLY
- TO YOU.
-
- 6. Limitation on Liability. EXCEPT TO THE EXTENT REQUIRED BY
- APPLICABLE LAW, IN NO EVENT WILL LICENSOR BE LIABLE TO YOU ON ANY
- LEGAL THEORY FOR ANY SPECIAL, INCIDENTAL, CONSEQUENTIAL, PUNITIVE OR
- EXEMPLARY DAMAGES ARISING OUT OF THIS LICENSE OR THE USE OF THE WORK,
- EVEN IF LICENSOR HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
-
- 7. Termination
- a. This License and the rights granted hereunder will terminate
- automatically upon any breach by You of the terms of this License.
- Individuals or entities who have received Derivative Works or
- Collective Works from You under this License, however, will not
- have their licenses terminated provided such individuals or
- entities remain in full compliance with those licenses. Sections
- 1, 2, 5, 6, 7, and 8 will survive any termination of this License.
- b. Subject to the above terms and conditions, the license granted
- here is perpetual (for the duration of the applicable copyright in
- the Work). Notwithstanding the above, Licensor reserves the right
- to release the Work under different license terms or to stop
- distributing the Work at any time; provided, however that any such
- election will not serve to withdraw this License (or any other
- license that has been, or is required to be, granted under the
- terms of this License), and this License will continue in full
- force and effect unless terminated as stated above.
-
- 8. Miscellaneous
- a. Each time You distribute or publicly digitally perform the Work or
- a Collective Work, the Licensor offers to the recipient a license
- to the Work on the same terms and conditions as the license
- granted to You under this License.
- b. Each time You distribute or publicly digitally perform a
- Derivative Work, Licensor offers to the recipient a license to the
- original Work on the same terms and conditions as the license
- granted to You under this License.
- c. If any provision of this License is invalid or unenforceable under
- applicable law, it shall not affect the validity or enforceability
- of the remainder of the terms of this License, and without further
- action by the parties to this agreement, such provision shall be
- reformed to the minimum extent necessary to make such provision
- valid and enforceable.
- d. No term or provision of this License shall be deemed waived and no
- breach consented to unless such waiver or consent shall be in
- writing and signed by the party to be charged with such waiver or
- consent.
- e. This License constitutes the entire agreement between the parties
- with respect to the Work licensed here. There are no
- understandings, agreements or representations with respect to the
- Work not specified here. Licensor shall not be bound by any
- additional provisions that may appear in any communication from
- You. This License may not be modified without the mutual written
- agreement of the Licensor and You.
-
- Creative Commons is not a party to this License, and makes no warranty
- whatsoever in connection with the Work. Creative Commons will not be
- liable to You or any party on any legal theory for any damages
- whatsoever, including without limitation any general, special,
- incidental or consequential damages arising in connection to this
- license. Notwithstanding the foregoing two (2) sentences, if Creative
- Commons has expressly identified itself as the Licensor hereunder, it
- shall have all rights and obligations of Licensor.
-
- Except for the limited purpose of indicating to the public that the
- Work is licensed under the CCPL, neither party will use the trademark
- "Creative Commons" or any related trademark or logo of Creative
- Commons without the prior written consent of Creative Commons. Any
- permitted use will be in compliance with Creative Commons'
- then-current trademark usage guidelines, as may be published on its
- website or otherwise made available upon request from time to time.
-
- Creative Commons may be contacted at [2]http://creativecommons.org/.
-
- [3]« Back to Commons Deed
-
-References
-
- 1. http://creativecommons.org/
- 2. http://creativecommons.org/
- 3. http://creativecommons.org/licenses/by-sa/2.0/
diff --git a/icons/tryton-inventory.svg b/icons/tryton-inventory.svg
deleted file mode 100644
index dced3c4..0000000
--- a/icons/tryton-inventory.svg
+++ /dev/null
@@ -1,483 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!-- Created with Inkscape (http://www.inkscape.org/) -->
-<svg
- xmlns:dc="http://purl.org/dc/elements/1.1/"
- xmlns:cc="http://web.resource.org/cc/"
- xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
- xmlns:svg="http://www.w3.org/2000/svg"
- xmlns="http://www.w3.org/2000/svg"
- xmlns:xlink="http://www.w3.org/1999/xlink"
- xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
- xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
- sodipodi:docname="package-x-generic.svg"
- sodipodi:docbase="/home/jimmac/src/cvs/tango-icon-theme/scalable/mimetypes"
- inkscape:version="0.43+devel"
- sodipodi:version="0.32"
- id="svg2963"
- height="48px"
- width="48px">
- <defs
- id="defs3">
- <radialGradient
- inkscape:collect="always"
- xlink:href="#linearGradient5060"
- id="radialGradient6719"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(-2.774389,0,0,1.969706,112.7623,-872.8854)"
- cx="605.71429"
- cy="486.64789"
- fx="605.71429"
- fy="486.64789"
- r="117.14286" />
- <linearGradient
- inkscape:collect="always"
- id="linearGradient5060">
- <stop
- style="stop-color:black;stop-opacity:1;"
- offset="0"
- id="stop5062" />
- <stop
- style="stop-color:black;stop-opacity:0;"
- offset="1"
- id="stop5064" />
- </linearGradient>
- <radialGradient
- inkscape:collect="always"
- xlink:href="#linearGradient5060"
- id="radialGradient6717"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(2.774389,0,0,1.969706,-1891.633,-872.8854)"
- cx="605.71429"
- cy="486.64789"
- fx="605.71429"
- fy="486.64789"
- r="117.14286" />
- <linearGradient
- id="linearGradient5048">
- <stop
- style="stop-color:black;stop-opacity:0;"
- offset="0"
- id="stop5050" />
- <stop
- id="stop5056"
- offset="0.5"
- style="stop-color:black;stop-opacity:1;" />
- <stop
- style="stop-color:black;stop-opacity:0;"
- offset="1"
- id="stop5052" />
- </linearGradient>
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient5048"
- id="linearGradient6715"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(2.774389,0,0,1.969706,-1892.179,-872.8854)"
- x1="302.85715"
- y1="366.64789"
- x2="302.85715"
- y2="609.50507" />
- <linearGradient
- inkscape:collect="always"
- id="linearGradient2884">
- <stop
- style="stop-color:#000000;stop-opacity:1;"
- offset="0"
- id="stop2886" />
- <stop
- style="stop-color:#000000;stop-opacity:0;"
- offset="1"
- id="stop2888" />
- </linearGradient>
- <linearGradient
- id="linearGradient2869">
- <stop
- style="stop-color:#ffffff;stop-opacity:1;"
- offset="0"
- id="stop2871" />
- <stop
- style="stop-color:#cccccc;stop-opacity:1.0000000;"
- offset="1.0000000"
- id="stop2873" />
- </linearGradient>
- <linearGradient
- id="linearGradient4995">
- <stop
- id="stop4997"
- offset="0"
- style="stop-color:#de9523;stop-opacity:1;" />
- <stop
- id="stop4999"
- offset="1.0000000"
- style="stop-color:#a36d18;stop-opacity:1.0000000;" />
- </linearGradient>
- <linearGradient
- id="linearGradient4987"
- inkscape:collect="always">
- <stop
- id="stop4989"
- offset="0"
- style="stop-color:#a0670c;stop-opacity:1;" />
- <stop
- id="stop4991"
- offset="1"
- style="stop-color:#a0670c;stop-opacity:0;" />
- </linearGradient>
- <linearGradient
- id="linearGradient4979">
- <stop
- id="stop4981"
- offset="0.0000000"
- style="stop-color:#fbf0e0;stop-opacity:1.0000000;" />
- <stop
- id="stop4983"
- offset="1.0000000"
- style="stop-color:#f0ce99;stop-opacity:1.0000000;" />
- </linearGradient>
- <linearGradient
- id="linearGradient4946"
- inkscape:collect="always">
- <stop
- id="stop4948"
- offset="0"
- style="stop-color:#000000;stop-opacity:1;" />
- <stop
- id="stop4950"
- offset="1"
- style="stop-color:#000000;stop-opacity:0;" />
- </linearGradient>
- <linearGradient
- id="linearGradient4222">
- <stop
- id="stop4224"
- offset="0"
- style="stop-color:#ffffff;stop-opacity:1;" />
- <stop
- id="stop4226"
- offset="1.0000000"
- style="stop-color:#ffffff;stop-opacity:0.68639052;" />
- </linearGradient>
- <linearGradient
- id="linearGradient4210">
- <stop
- id="stop4212"
- offset="0.0000000"
- style="stop-color:#eaba6f;stop-opacity:1.0000000;" />
- <stop
- id="stop4214"
- offset="1.0000000"
- style="stop-color:#b97a1b;stop-opacity:1.0000000;" />
- </linearGradient>
- <linearGradient
- id="linearGradient4192">
- <stop
- id="stop4194"
- offset="0"
- style="stop-color:#e9b96e;stop-opacity:1;" />
- <stop
- id="stop4196"
- offset="1.0000000"
- style="stop-color:#f1d19e;stop-opacity:1.0000000;" />
- </linearGradient>
- <linearGradient
- id="linearGradient4182">
- <stop
- id="stop4184"
- offset="0.0000000"
- style="stop-color:#a36d18;stop-opacity:1.0000000;" />
- <stop
- id="stop4186"
- offset="1.0000000"
- style="stop-color:#d79020;stop-opacity:1.0000000;" />
- </linearGradient>
- <radialGradient
- inkscape:collect="always"
- xlink:href="#linearGradient4946"
- id="radialGradient2252"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(1.000000,0.000000,0.000000,0.333333,2.658463e-16,23.58206)"
- cx="22.930462"
- cy="35.373093"
- fx="22.930462"
- fy="35.373093"
- r="17.576654" />
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient4979"
- id="linearGradient2269"
- gradientUnits="userSpaceOnUse"
- x1="30.062469"
- y1="13.444801"
- x2="17.696169"
- y2="12.333632" />
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient4995"
- id="linearGradient2274"
- gradientUnits="userSpaceOnUse"
- x1="36.288929"
- y1="14.661557"
- x2="47.065835"
- y2="15.267649" />
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient4192"
- id="linearGradient2277"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(1.000000,0.000000,0.000000,0.986355,0.000000,0.316638)"
- x1="25.381256"
- y1="24.720648"
- x2="24.119167"
- y2="16.170370" />
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient4182"
- id="linearGradient2280"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(1.000000,0.000000,0.000000,1.039184,0.000000,-4.057054e-2)"
- x1="16.148972"
- y1="12.636667"
- x2="34.193642"
- y2="12.636667" />
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient4987"
- id="linearGradient2282"
- gradientUnits="userSpaceOnUse"
- x1="21.906841"
- y1="9.7577486"
- x2="22.071806"
- y2="16.020695" />
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient4222"
- id="linearGradient2285"
- gradientUnits="userSpaceOnUse"
- x1="18.706615"
- y1="19.912336"
- x2="30.014812"
- y2="47.388485" />
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient4210"
- id="linearGradient2288"
- gradientUnits="userSpaceOnUse"
- x1="24.990499"
- y1="34.004856"
- x2="24.990499"
- y2="22.585211" />
- <radialGradient
- inkscape:collect="always"
- xlink:href="#linearGradient2884"
- id="radialGradient2896"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(1.353283,5.468101e-16,-1.144754e-13,0.635968,-8.458890,3.413470)"
- cx="23.943670"
- cy="20.800287"
- fx="23.943670"
- fy="20.800287"
- r="6.4286140" />
- <radialGradient
- inkscape:collect="always"
- xlink:href="#linearGradient2869"
- id="radialGradient2898"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(0.749420,0.000000,0.000000,0.394055,6.226925,10.09253)"
- cx="21.578989"
- cy="9.0255041"
- fx="21.578989"
- fy="9.0255041"
- r="9.5862970" />
- <radialGradient
- inkscape:collect="always"
- xlink:href="#linearGradient2884"
- id="radialGradient2906"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(1.353283,5.468101e-16,-1.144754e-13,0.635968,-8.458890,3.413470)"
- cx="23.943670"
- cy="20.800287"
- fx="23.943670"
- fy="20.800287"
- r="6.4286140" />
- <radialGradient
- inkscape:collect="always"
- xlink:href="#linearGradient2869"
- id="radialGradient2908"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(0.749420,0.000000,0.000000,0.394055,6.226925,10.09253)"
- cx="21.578989"
- cy="9.8105707"
- fx="21.578989"
- fy="9.8105707"
- r="9.5862970" />
- </defs>
- <sodipodi:namedview
- inkscape:window-y="242"
- inkscape:window-x="392"
- inkscape:window-height="706"
- inkscape:window-width="872"
- stroke="#c17d11"
- fill="#e9b96e"
- inkscape:showpageshadow="false"
- inkscape:document-units="px"
- inkscape:grid-bbox="true"
- showgrid="false"
- inkscape:current-layer="layer1"
- inkscape:cy="39.004018"
- inkscape:cx="74.637005"
- inkscape:zoom="1"
- inkscape:pageshadow="2"
- inkscape:pageopacity="0.0"
- borderopacity="0.16470588"
- bordercolor="#666666"
- pagecolor="#ffffff"
- id="base" />
- <metadata
- id="metadata4">
- <rdf:RDF>
- <cc:Work
- rdf:about="">
- <dc:format>image/svg+xml</dc:format>
- <dc:type
- rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
- <dc:title>Package</dc:title>
- <dc:creator>
- <cc:Agent>
- <dc:title>Jakub Steiner</dc:title>
- </cc:Agent>
- </dc:creator>
- <dc:source>http://jimmac.musichall.cz/</dc:source>
- <dc:subject>
- <rdf:Bag>
- <rdf:li>package</rdf:li>
- <rdf:li>archive</rdf:li>
- <rdf:li>tarball</rdf:li>
- <rdf:li>tar</rdf:li>
- <rdf:li>bzip</rdf:li>
- <rdf:li>gzip</rdf:li>
- <rdf:li>zip</rdf:li>
- <rdf:li>arj</rdf:li>
- <rdf:li>tar</rdf:li>
- <rdf:li>jar</rdf:li>
- </rdf:Bag>
- </dc:subject>
- <cc:license
- rdf:resource="http://creativecommons.org/licenses/by-sa/2.0/" />
- </cc:Work>
- <cc:License
- rdf:about="http://creativecommons.org/licenses/by-sa/2.0/">
- <cc:permits
- rdf:resource="http://web.resource.org/cc/Reproduction" />
- <cc:permits
- rdf:resource="http://web.resource.org/cc/Distribution" />
- <cc:requires
- rdf:resource="http://web.resource.org/cc/Notice" />
- <cc:requires
- rdf:resource="http://web.resource.org/cc/Attribution" />
- <cc:permits
- rdf:resource="http://web.resource.org/cc/DerivativeWorks" />
- <cc:requires
- rdf:resource="http://web.resource.org/cc/ShareAlike" />
- </cc:License>
- </rdf:RDF>
- </metadata>
- <g
- inkscape:groupmode="layer"
- inkscape:label="Layer 1"
- id="layer1">
- <g
- style="display:inline"
- transform="matrix(2.105461e-2,0,0,2.086758e-2,42.60172,35.4036)"
- id="g6707">
- <rect
- style="opacity:0.40206185;color:black;fill:url(#linearGradient6715);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
- id="rect6709"
- width="1339.6335"
- height="478.35718"
- x="-1559.2523"
- y="-150.69685" />
- <path
- style="opacity:0.40206185;color:black;fill:url(#radialGradient6717);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
- d="M -219.61876,-150.68038 C -219.61876,-150.68038 -219.61876,327.65041 -219.61876,327.65041 C -76.744594,328.55086 125.78146,220.48075 125.78138,88.454235 C 125.78138,-43.572302 -33.655436,-150.68036 -219.61876,-150.68038 z "
- id="path6711"
- sodipodi:nodetypes="cccc" />
- <path
- sodipodi:nodetypes="cccc"
- id="path6713"
- d="M -1559.2523,-150.68038 C -1559.2523,-150.68038 -1559.2523,327.65041 -1559.2523,327.65041 C -1702.1265,328.55086 -1904.6525,220.48075 -1904.6525,88.454235 C -1904.6525,-43.572302 -1745.2157,-150.68036 -1559.2523,-150.68038 z "
- style="opacity:0.40206185;color:black;fill:url(#radialGradient6719);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" />
- </g>
- <rect
- ry="2.3944440"
- rx="2.4241352"
- y="15.275433"
- x="7.4623847"
- height="23.112879"
- width="31.978371"
- id="rect3115"
- style="opacity:1.0000000;color:#000000;fill:url(#linearGradient2288);fill-opacity:1.0000000;fill-rule:nonzero;stroke:#a0670c;stroke-width:1.0000007;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4.0000000;stroke-dasharray:none;stroke-dashoffset:0.0000000;stroke-opacity:1.0000000;visibility:visible;display:block;overflow:visible" />
- <rect
- style="opacity:0.48101267;color:#000000;fill:none;fill-opacity:1.0000000;fill-rule:nonzero;stroke:url(#linearGradient2285);stroke-width:1.0000011;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4.0000000;stroke-dasharray:none;stroke-dashoffset:0.0000000;stroke-opacity:1.0000000;visibility:visible;display:block;overflow:visible"
- id="rect4220"
- width="29.804138"
- height="21.075352"
- x="8.4989996"
- y="16.243698"
- rx="1.2846882"
- ry="1.2846882" />
- <path
- sodipodi:nodetypes="ccccc"
- id="path4162"
- d="M 8.7697819,16.547178 L 13.819731,9.7363408 L 32.615291,9.6353255 L 37.835264,16.408941 L 8.7697819,16.547178 z "
- style="fill:url(#linearGradient2280);fill-opacity:1.0000000;fill-rule:evenodd;stroke:url(#linearGradient2282);stroke-width:1.0000008;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4.0000000;stroke-dasharray:none;stroke-opacity:1.0000000" />
- <path
- sodipodi:nodetypes="ccccc"
- id="path4164"
- d="M 38.276321,16.325703 L 43.469269,23.520364 L 3.9609455,23.520364 L 8.6250143,16.320763 L 38.276321,16.325703 z "
- style="opacity:1.0000000;color:#000000;fill:url(#linearGradient2277);fill-opacity:1.0000000;fill-rule:nonzero;stroke:#a0670c;stroke-width:1.0000005;stroke-linecap:round;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4.0000000;stroke-dasharray:none;stroke-dashoffset:0.0000000;stroke-opacity:1.0000000;visibility:visible;display:block;overflow:visible" />
- <path
- sodipodi:nodetypes="ccccc"
- id="path4178"
- d="M 32.849333,9.6141009 L 37.532219,16.536370 L 46.565835,20.921197 L 38.451329,12.008545 L 32.849333,9.6141009 z "
- style="opacity:1.0000000;color:#000000;fill:url(#linearGradient2274);fill-opacity:1.0000000;fill-rule:nonzero;stroke:#a0670c;stroke-width:1.0000005;stroke-linecap:round;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4.0000000;stroke-dasharray:none;stroke-dashoffset:0.0000000;stroke-opacity:1.0000000;visibility:visible;display:block;overflow:visible" />
- <path
- sodipodi:nodetypes="ccccc"
- style="opacity:1.0000000;color:#000000;fill:#f8e8cf;fill-opacity:1.0000000;fill-rule:nonzero;stroke:#a0670c;stroke-width:1.0000000;stroke-linecap:round;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4.0000000;stroke-dasharray:none;stroke-dashoffset:0.0000000;stroke-opacity:1.0000000;visibility:visible;display:block;overflow:visible"
- d="M 13.617702,9.7151161 L 9.6419233,16.435355 L 0.50729183,20.820182 L 8.6217973,11.907530 L 13.617702,9.7151161 z "
- id="path4180" />
- <path
- style="opacity:1.0000000;color:#000000;fill:none;fill-opacity:1.0000000;fill-rule:nonzero;stroke:#f4e3ca;stroke-width:1.0000000;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4.0000000;stroke-dasharray:none;stroke-dashoffset:0.0000000;stroke-opacity:1.0000000;visibility:visible;display:block;overflow:visible"
- d="M 37.024959,16.436050 L 41.478871,22.493011 L 5.6482792,22.493011 L 9.7892982,16.312694 L 37.024959,16.436050 z "
- id="path4954"
- sodipodi:nodetypes="ccccc" />
- <g
- id="g2892"
- transform="matrix(0.676538,0.000000,0.000000,1.000000,3.994869,0.000000)">
- <path
- style="opacity:1.0000000;color:#000000;fill:url(#radialGradient2896);fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:2.0000000;stroke-linecap:round;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4.0000000;stroke-dasharray:none;stroke-dashoffset:0.0000000;stroke-opacity:1.0000000;visibility:visible;display:inline;overflow:visible"
- d="M 23.926073,12.101621 C 18.588065,12.101621 14.282569,14.129809 14.282569,16.641813 L 33.604773,16.641813 C 33.604773,14.129809 29.264081,12.101621 23.926073,12.101621 z "
- id="path2882" />
- <path
- id="path2141"
- d="M 23.931961,12.861168 C 20.379986,12.861168 17.515057,14.210748 17.515057,15.882266 L 30.372285,15.882266 C 30.372285,14.210748 27.483936,12.861168 23.931961,12.861168 z "
- style="opacity:1.0000000;color:#000000;fill:url(#radialGradient2898);fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:2.0000000;stroke-linecap:round;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4.0000000;stroke-dasharray:none;stroke-dashoffset:0.0000000;stroke-opacity:1.0000000;visibility:visible;display:inline;overflow:visible" />
- </g>
- <g
- transform="matrix(0.676538,0.000000,0.000000,1.000000,10.49487,0.000000)"
- id="g2900">
- <path
- id="path2902"
- d="M 23.926073,12.101621 C 18.588065,12.101621 14.282569,14.129809 14.282569,16.641813 L 33.604773,16.641813 C 33.604773,14.129809 29.264081,12.101621 23.926073,12.101621 z "
- style="opacity:1.0000000;color:#000000;fill:url(#radialGradient2906);fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:2.0000000;stroke-linecap:round;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4.0000000;stroke-dasharray:none;stroke-dashoffset:0.0000000;stroke-opacity:1.0000000;visibility:visible;display:inline;overflow:visible" />
- <path
- style="opacity:1.0000000;color:#000000;fill:url(#radialGradient2908);fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:2.0000000;stroke-linecap:round;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4.0000000;stroke-dasharray:none;stroke-dashoffset:0.0000000;stroke-opacity:1.0000000;visibility:visible;display:inline;overflow:visible"
- d="M 23.931961,12.861168 C 20.379986,12.861168 17.515057,14.210748 17.515057,15.882266 L 30.372285,15.882266 C 30.372285,14.210748 27.483936,12.861168 23.931961,12.861168 z "
- id="path2904" />
- </g>
- <path
- style="opacity:0.87974685;fill:none;fill-opacity:1.0000000;fill-rule:evenodd;stroke:url(#linearGradient2269);stroke-width:1.0000000;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4.0000000;stroke-dasharray:none;stroke-opacity:1.0000000"
- d="M 9.6523127,16.371803 L 13.036643,10.593020 L 33.514841,10.517799 L 37.356782,16.369880 L 9.6523127,16.371803 z "
- id="path4966"
- sodipodi:nodetypes="ccccc" />
- </g>
-</svg>
commit a5e3c30e8515c2795c4a3b17d1b92487fc2b1689
Author: Mathias Behrle <mathiasb at m9s.biz>
Date: Sun Jun 5 13:14:57 2011 +0200
Adding upstream version 2.0.1.
diff --git a/CHANGELOG b/CHANGELOG
index e97f759..7e7de66 100644
--- a/CHANGELOG
+++ b/CHANGELOG
@@ -1,3 +1,6 @@
+Version 2.0.1 - 2011-05-29
+* Bug fixes (see mercurial logs for details)
+
Version 2.0.0 - 2011-04-27
* Bug fixes (see mercurial logs for details)
* Add period to reduce data computation
diff --git a/PKG-INFO b/PKG-INFO
index dcf4945..1c823cb 100644
--- a/PKG-INFO
+++ b/PKG-INFO
@@ -1,6 +1,6 @@
Metadata-Version: 1.0
Name: trytond_stock
-Version: 2.0.0
+Version: 2.0.1
Summary: Stock Management and Inventory Control with:
- Location definition
- Stock move
diff --git a/__tryton__.py b/__tryton__.py
index f57c825..0cc50c0 100644
--- a/__tryton__.py
+++ b/__tryton__.py
@@ -8,7 +8,7 @@
'name_es_ES': 'Gestión de existencias',
'name_fr_FR': 'Gestion des stocks',
'name_ru_RU': 'УпÑавление Ñкладами',
- 'version': '2.0.0',
+ 'version': '2.0.1',
'author': 'B2CK',
'email': 'info at b2ck.com',
'website': 'http://www.tryton.org/',
diff --git a/inventory.py b/inventory.py
index ceeb1df..518290d 100644
--- a/inventory.py
+++ b/inventory.py
@@ -263,7 +263,11 @@ class InventoryLine(ModelSQL, ModelView):
:return: the stock.move id or None
'''
move_obj = self.pool.get('stock.move')
- delta_qty = line.expected_quantity - line.quantity
+ uom_obj = self.pool.get('product.uom')
+
+ delta_qty = uom_obj.compute_qty(line.uom,
+ line.expected_quantity - line.quantity,
+ line.uom)
if delta_qty == 0.0:
return
from_location = line.inventory.location.id
diff --git a/shipment.py b/shipment.py
index 46e30d1..ce5009c 100644
--- a/shipment.py
+++ b/shipment.py
@@ -921,6 +921,8 @@ class ShipmentOut(ModelWorkflow, ModelSQL, ModelView):
'planned_date': move.planned_date,
'state': 'draft',
'company': move.company.id,
+ 'currency': move.currency.id,
+ 'unit_price': move.unit_price,
})
def create(self, values):
diff --git a/trytond_stock.egg-info/PKG-INFO b/trytond_stock.egg-info/PKG-INFO
index 64491bc..0f7df99 100644
--- a/trytond_stock.egg-info/PKG-INFO
+++ b/trytond_stock.egg-info/PKG-INFO
@@ -1,6 +1,6 @@
Metadata-Version: 1.0
Name: trytond-stock
-Version: 2.0.0
+Version: 2.0.1
Summary: Stock Management and Inventory Control with:
- Location definition
- Stock move
commit 9b2c822b34792c4c04ef514fd7cd27e740be7930
Author: Mathias Behrle <mathiasb at m9s.biz>
Date: Tue May 24 19:13:06 2011 +0200
Adding upstream version 2.0.0.
diff --git a/CHANGELOG b/CHANGELOG
index a06290d..e97f759 100644
--- a/CHANGELOG
+++ b/CHANGELOG
@@ -1,3 +1,8 @@
+Version 2.0.0 - 2011-04-27
+* Bug fixes (see mercurial logs for details)
+* Add period to reduce data computation
+* Add internal_quantity on move to speedup computation
+
Version 1.8.0 - 2010-11-01
* Bug fixes (see mercurial logs for details)
diff --git a/COPYRIGHT b/COPYRIGHT
index 94a43fb..a9feb41 100644
--- a/COPYRIGHT
+++ b/COPYRIGHT
@@ -1,7 +1,7 @@
+Copyright (C) 2008-2011 Cédric Krier.
+Copyright (C) 2008-2011 Bertrand Chenal.
+Copyright (C) 2008-2011 B2CK SPRL.
Copyright (C) 2004-2008 Tiny SPRL.
-Copyright (C) 2008-2010 Cédric Krier.
-Copyright (C) 2008-2010 Bertrand Chenal.
-Copyright (C) 2008-2010 B2CK SPRL.
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
diff --git a/MANIFEST.in b/MANIFEST.in
index dcb2afa..47da692 100644
--- a/MANIFEST.in
+++ b/MANIFEST.in
@@ -8,3 +8,4 @@ include *.xml
include *.odt
include *.csv
include doc/*
+include icons/*
diff --git a/PKG-INFO b/PKG-INFO
index 9ba5984..dcf4945 100644
--- a/PKG-INFO
+++ b/PKG-INFO
@@ -1,6 +1,6 @@
Metadata-Version: 1.0
Name: trytond_stock
-Version: 1.8.0
+Version: 2.0.0
Summary: Stock Management and Inventory Control with:
- Location definition
- Stock move
@@ -17,7 +17,7 @@ Home-page: http://www.tryton.org/
Author: B2CK
Author-email: info at b2ck.com
License: GPL-3
-Download-URL: http://downloads.tryton.org/1.8/
+Download-URL: http://downloads.tryton.org/2.0/
Description: UNKNOWN
Platform: UNKNOWN
Classifier: Development Status :: 5 - Production/Stable
@@ -27,10 +27,14 @@ Classifier: Intended Audience :: Financial and Insurance Industry
Classifier: Intended Audience :: Legal Industry
Classifier: Intended Audience :: Manufacturing
Classifier: License :: OSI Approved :: GNU General Public License (GPL)
+Classifier: Natural Language :: Bulgarian
Classifier: Natural Language :: English
Classifier: Natural Language :: French
Classifier: Natural Language :: German
+Classifier: Natural Language :: Russian
Classifier: Natural Language :: Spanish
Classifier: Operating System :: OS Independent
-Classifier: Programming Language :: Python
+Classifier: Programming Language :: Python :: 2.5
+Classifier: Programming Language :: Python :: 2.6
+Classifier: Programming Language :: Python :: 2.7
Classifier: Topic :: Office/Business
diff --git a/__init__.py b/__init__.py
index e5ca873..c258741 100644
--- a/__init__.py
+++ b/__init__.py
@@ -3,6 +3,7 @@
from location import *
from shipment import *
+from period import *
from move import *
from product import *
from inventory import *
diff --git a/__tryton__.py b/__tryton__.py
index c2f9bab..f57c825 100644
--- a/__tryton__.py
+++ b/__tryton__.py
@@ -2,11 +2,13 @@
#this repository contains the full copyright notices and license terms.
{
'name': 'Stock Management',
+ 'name_bg_BG': 'УпÑавление на налиÑноÑÑи',
'name_de_DE': 'Lagerverwaltung',
'name_es_CO': 'Inventarios',
'name_es_ES': 'Gestión de existencias',
'name_fr_FR': 'Gestion des stocks',
- 'version': '1.8.0',
+ 'name_ru_RU': 'УпÑавление Ñкладами',
+ 'version': '2.0.0',
'author': 'B2CK',
'email': 'info at b2ck.com',
'website': 'http://www.tryton.org/',
@@ -22,6 +24,18 @@ And with reports:
- Restocking List (on Supplier Shipment and Customer Return Shipment)
- Products by Locations
''',
+ 'description_bg_BG': '''УпÑавление на налиÑноÑÑи и конÑÑол на инвенÑаÑизаÑÐ¸Ñ Ñ:
+ - Ðадаване на меÑÑонаÑ
ождениÑ
+ - ÐÐ²Ð¸Ð¶ÐµÐ½Ð¸Ñ Ð½Ð° налиÑноÑÑ
+ - ÐÑаÑки за клиенÑ, Ð¾Ñ Ð´Ð¾ÑÑавÑик, вÑÑÑеÑни пÑаÑки. ÐÑÑнаÑи пÑаÑки Ð¾Ñ ÐºÐ»Ð¸ÐµÐ½Ñ Ð¸ за доÑÑавÑик.
+ - ÐнвенÑаÑизаÑÐ¸Ñ Ð½Ð° налиÑноÑÑ
+
+СÑÑ ÑледниÑе ÑпÑавки:
+ - Ðележка за доÑÑавка
+ - ÐпаковÑÑен лиÑÑ
+ - ÐÑеизÑиÑлÑване на инвенÑаÑен Ð¾Ð¿Ð¸Ñ (пÑи пÑаÑка на доÑÑавÑик и пÑаÑка вÑÑнаÑа Ð¾Ñ ÐºÐ»Ð¸ÐµÐ½Ñ)
+ - ÐÑодÑкÑи по меÑÑонаÑ
ождение
+''',
'description_de_DE': '''Lagerverwaltung und Bestandskontrolle mit:
- Definition von Lagerorten
- Lagerbewegungen
@@ -68,6 +82,18 @@ Et les rapports:
- Liste de restockage (sur l'expédition fournisseur et le retour d'expédition client)
- Quantités de produit par location
''',
+ 'description_ru_RU': '''УпÑавление Ñкладами и запаÑами:
+ - ÐпÑеделение меÑÑ Ñ
ÑанениÑ
+ - СкладÑкие пеÑемеÑениÑ
+ - ÐÑиÑ
од, оÑгÑÑзки, внÑÑÑенние пеÑемеÑениÑ. ÐозвÑаÑÑ Ð¿Ð¾ÑÑавÑикам и Ð¾Ñ Ð·Ð°ÐºÐ°Ð·Ñиков.
+ - СкладÑкой ÑÑеÑ
+
+Ð Ñ Ð¾ÑÑеÑами:
+ - ÐоÑÑавка
+ - Упаковка
+ - ÐнвенÑаÑизаÑÐ¸Ñ (на пÑиÑ
од Ð¾Ñ Ð¿Ð¾ÑÑавÑиков и возвÑаÑÑ ÐºÐ»Ð¸ÐµÐ½Ñов)
+ - ТÐЦ по меÑÑам Ñ
ÑанениÑ
+''',
'depends': [
'ir',
'workflow',
@@ -85,11 +111,14 @@ Et les rapports:
'inventory.xml',
'party.xml',
'configuration.xml',
+ 'period.xml',
],
'translation': [
+ 'bg_BG.csv',
'de_DE.csv',
'es_CO.csv',
'es_ES.csv',
'fr_FR.csv',
+ 'ru_RU.csv',
],
}
diff --git a/bg_BG.csv b/bg_BG.csv
new file mode 100644
index 0000000..582e36e
--- /dev/null
+++ b/bg_BG.csv
@@ -0,0 +1,508 @@
+type,name,res_id,src,value,fuzzy
+error,product.template,0,You cannot change the default uom for a product which is associated to stock moves.,Ðе може да пÑоменÑÑе меÑ. ед. на пÑодÑÐºÑ ÐºÐ¾Ð¹Ñо е ÑвÑÑзан Ñ Ð´Ð²Ð¸Ð¶ÐµÐ½Ð¸Ñ Ð½Ð° налиÑноÑÑ.,0
+error,stock.inventory.line,0,Line quantity must be positive!,ÐолиÑеÑÑвоÑо на Ñеда ÑÑÑбва да е положиÑелно ÑиÑло!,0
+error,stock.inventory.line,0,Product must be unique by inventory!,ÐÑодÑкÑа ÑÑÑбва да е Ñникален по инвенÑаÑизаÑиÑ!,0
+error,stock.location,0,A location with existing moves cannot be changed to a type that does not support moves.,ÐеÑÑонаÑ
ождение ÑÑÑ ÑÑÑеÑÑвÑваÑи Ð´Ð²Ð¸Ð¶ÐµÐ½Ð¸Ñ Ð½Ðµ може да бÑде пÑоменено Ñ Ñакова коеÑо не поддÑÑжа движениÑ,0
+error,stock.location,0,"Location ""%s"" must be a child of warehouse ""%s""!","ÐеÑÑонаÑ
ождение ""%s"" ÑÑÑбва да е подÑинен на Ñклад ""%s"" !",0
+error,stock.location,0,You can not create recursive locations!,Ðе може да ÑÑздаваÑе взаимновложени меÑÑонаÑ
ождениÑ!,0
+error,stock.move,0,Internal move quantity must be positive,ÐолиÑеÑÑваÑа на движение ÑÑÑбва да Ñа положиÑелно ÑиÑло,0
+error,stock.move,0,Move can be on only one Shipment,ÐвижениеÑо ÑÑÑбва да Ñамо вÑÑÑ
Ñ ÐµÐ´Ð½Ð¾ изпÑаÑане,0
+error,stock.move,0,Move quantity must be positive,ÐолиÑеÑÑвоÑо на движение ÑÑÑбва да е положиÑелно ÑиÑло,0
+error,stock.move,0,Source and destination location must be different,ÐзÑоÑника и ÑелÑа на меÑÑонаÑ
ождениеÑо ÑÑÑбва да Ñа ÑазлиÑни,0
+error,stock.move,0,"You can not modify a move in the state: ""Assigned"", ""Done"" or ""Cancel""","Ðе може да пÑоменÑÑе движение в ÑÑÑÑоÑние: ""ÐазнаÑен"", ""ÐÑиклÑÑен"" или ""ÐÑказ""",0
+error,stock.move,0,You can not modify move in closed period!,Ðе може да пÑоменÑÑе заÑвоÑен пеÑиод!,0
+error,stock.move,0,You can not set state to assigned!,Ðе може да пÑомениÑе ÑÑÑÑоÑниеÑо в назнаÑен!,0
+error,stock.move,0,You can not set state to done!,Ðе може да пÑеÑ
вÑÑлиÑе в ÑÑÑÑоÑние ÐоÑов!,0
+error,stock.move,0,You can not set state to draft!,Ðе може да пÑаÑиÑе ÑÑаÑÑÑа в пÑоекÑ!,0
+error,stock.move,0,You can not use service products for a move!,Рдвижение не може да използваÑе пÑодÑкÑи коиÑо Ñа ÑÑлÑги! ,0
+error,stock.move,0,You can only delete draft or cancelled moves!,Ðе може да изÑÑиваÑе Ð´Ð²Ð¸Ð¶ÐµÐ½Ð¸Ñ Ð² ÑÑаÑÑÑ Ð¿ÑÐ¾ÐµÐºÑ Ð¸Ð»Ð¸ оÑказан!,0
+error,stock.period,0,You can not close a period in the future or today!,Ðе може да заÑваÑÑÑе пеÑиод Ð¾Ñ Ð´Ð½ÐµÑ Ð¸Ð»Ð¸ в бедеÑеÑо!,0
+error,stock.period,0,You can not close a period when there is still assigned moves!,Ðе може да заÑваÑÑÑе пеÑиод когаÑо ÑÑдÑÑжа назнаÑени движениÑ!,0
+error,stock.shipment.in,0,Incoming Moves must have the warehouse input location as destination location!,ÐÑ
одÑÑиÑе Ð´Ð²Ð¸Ð¶ÐµÐ½Ð¸Ñ ÑÑÑбва да Ð¸Ð¼Ð°Ñ Ð¼ÐµÑÑонаÑ
ождение-вÑ
од на Ñклад каÑо меÑÑонаÑ
ождение-Ñел!,0
+error,stock.shipment.in,0,Inventory Moves must have the warehouse input location as source location!,Ðвижение на инвенÑаÑизаÑÐ¸Ñ ÑÑÑбва да Ð¸Ð¼Ð°Ñ Ð¼ÐµÑÑонаÑ
ождение-вÑ
од на Ñклад каÑо меÑÑонаÑ
ождение-изÑоÑник!,0
+error,stock.shipment.out,0,Inventory Moves must have the warehouse output location as destination location!,Ðвижение на инвенÑаÑизаÑÐ¸Ñ ÑÑÑбва да Ð¸Ð¼Ð°Ñ Ð¼ÐµÑÑонаÑ
ождение-изÑ
од на Ñклад каÑо меÑÑонаÑ
ождение-Ñел!,0
+error,stock.shipment.out,0,Outgoing Moves must have the warehouse output location as source location!,ÐзÑ
одÑÑиÑе Ð´Ð²Ð¸Ð¶ÐµÐ½Ð¸Ñ ÑÑÑбва да Ð¸Ð¼Ð°Ñ Ð¼ÐµÑÑонаÑ
ождение-изÑ
од на Ñклад каÑо меÑÑонаÑ
ождение-изÑоÑник!,0
+error,stock.shipment.out.return,0,Incoming Moves must have the warehouse input location as destination location!,ÐÑ
одÑÑиÑе Ð´Ð²Ð¸Ð¶ÐµÐ½Ð¸Ñ ÑÑÑбва да Ð¸Ð¼Ð°Ñ ÐºÐ°Ñо меÑÑонаÑ
ождение-Ñел деÑÑонаÑиÑ-вÑ
од на Ñклад!,0
+error,stock.shipment.out.return,0,Inventory Moves must have the warehouse input location as source location!,Ðвижение на инвенÑаÑизаÑÐ¸Ñ ÑÑÑбва да Ð¸Ð¼Ð°Ñ Ð¼ÐµÑÑонаÑ
ождение-вÑ
од на Ñклад каÑо меÑÑонаÑ
ождение-изÑоÑник!,0
+error,stock.shipment.out.return.create,0,The shipment with code %s is not yet sent.,ÐÑаÑкаÑа Ñ ÐºÐ¾Ð´ %s оÑе не е изпÑаÑена,0
+error,stock.shipment.out.return.create,0,You can not create return shipment,Ðе може да ÑÑздадеÑе вÑÑÑане на пÑаÑка,0
+field,"party.address,delivery",0,Delivery,ÐоÑÑавка,0
+field,"party.party,customer_location",0,Customer Location,ÐеÑÑонаÑ
ождение на клиенÑ,0
+field,"party.party,supplier_location",0,Supplier Location,ÐеÑÑонаÑ
ождение на доÑÑавÑик,0
+field,"product.product,forecast_quantity",0,Forecast Quantity,ÐланиÑано колиÑеÑÑво,0
+field,"product.product,quantity",0,Quantity,ÐолиÑеÑÑво,0
+field,"product.template,forecast_quantity",0,Forecast Quantity,ÐланиÑано колиÑеÑÑво,0
+field,"product.template,quantity",0,Quantity,ÐолиÑеÑÑво,0
+field,"stock.configuration,rec_name",0,Name,Ðме,0
+field,"stock.configuration,shipment_in_return_sequence",0,Supplier Return Shipment Sequence,ÐоÑледоваÑелноÑÑ Ð·Ð° пÑаÑка вÑÑнаÑа на доÑÑавик,0
+field,"stock.configuration,shipment_in_sequence",0,Supplier Shipment Sequence,ÐоÑледоваÑелноÑÑ Ð·Ð° пÑаÑка на доÑÑавÑик,0
+field,"stock.configuration,shipment_internal_sequence",0,Internal Shipment Sequence,ÐоÑледоваÑелноÑÑ Ð½Ð° вÑÑÑеÑна пÑаÑка,0
+field,"stock.configuration,shipment_out_return_sequence",0,Customer Return Shipment Sequence,ÐоÑледоваÑелноÑÑ Ð·Ð° пÑаÑка вÑÑнаÑа Ð¾Ñ ÐºÐ»Ð¸ÐµÐ½Ñ,0
+field,"stock.configuration,shipment_out_sequence",0,Customer Shipment Sequence,ÐоÑледоваÑелноÑÑ Ð½Ð° пÑаÑка за клиенÑ,0
+field,"stock.inventory,company",0,Company,ФиÑма,0
+field,"stock.inventory,date",0,Date,ÐаÑа,0
+field,"stock.inventory,lines",0,Lines,Редове,0
+field,"stock.inventory,location",0,Location,ÐеÑÑоположение,0
+field,"stock.inventory,lost_found",0,Lost and Found,ÐагÑбени и намеÑени,0
+field,"stock.inventory,rec_name",0,Name,Ðме,0
+field,"stock.inventory,state",0,State,СÑÑÑоÑние,0
+field,"stock.inventory.line,expected_quantity",0,Expected Quantity,ÐÑаквано колиÑеÑÑво,0
+field,"stock.inventory.line,inventory",0,Inventory,ÐнвенÑаÑизаÑиÑ,0
+field,"stock.inventory.line,move",0,Move,Ðвижение,0
+field,"stock.inventory.line,product",0,Product,ÐÑодÑкÑ,0
+field,"stock.inventory.line,quantity",0,Quantity,ÐолиÑеÑÑво,0
+field,"stock.inventory.line,rec_name",0,Name,Ðме,0
+field,"stock.inventory.line,unit_digits",0,Unit Digits,ÐеÑеÑиÑни единиÑи,0
+field,"stock.inventory.line,uom",0,UOM,ÐеÑ. ед.,0
+field,"stock.location,active",0,Active,ÐкÑивен,0
+field,"stock.location,address",0,Address,ÐдÑеÑ,0
+field,"stock.location,childs",0,Children,ÐеÑа,0
+field,"stock.location,code",0,Code,Ðод,0
+field,"stock.location,forecast_quantity",0,Forecast Quantity,ÐланиÑани колиÑеÑÑва,0
+field,"stock.location,input_location",0,Input,ÐÑ
од,0
+field,"stock.location,left",0,Left,ÐÑв,0
+field,"stock.location,name",0,Name,Ðме,0
+field,"stock.location,output_location",0,Output,ÐзÑ
од,0
+field,"stock.location,parent",0,Parent,РодиÑел,0
+field,"stock.location,quantity",0,Quantity,ÐолиÑеÑÑво,0
+field,"stock.location,rec_name",0,Name,Ðме,0
+field,"stock.location,right",0,Right,ÐеÑен,0
+field,"stock.location,storage_location",0,Storage,Склад,0
+field,"stock.location,type",0,Location type,Ðид меÑÑонаÑ
ождение,0
+field,"stock.location_stock_date.init,forecast_date",0,At Date,Ðа даÑа,0
+field,"stock.move,company",0,Company,ФиÑма,0
+field,"stock.move,cost_price",0,Cost Price,ФабÑиÑна Ñена,0
+field,"stock.move,currency",0,Currency,ÐалÑÑа,0
+field,"stock.move,effective_date",0,Effective Date,ÐÑекÑивна даÑа,0
+field,"stock.move,from_location",0,From Location,ÐÑ Ð¼ÐµÑÑонаÑ
ождение,0
+field,"stock.move,internal_quantity",0,Internal Quantity,ÐÑÑÑеÑно колиÑеÑÑво,0
+field,"stock.move,planned_date",0,Planned Date,ÐланиÑана даÑа,0
+field,"stock.move,product",0,Product,ÐÑодÑкÑ,0
+field,"stock.move,quantity",0,Quantity,ÐолиÑеÑÑво,0
+field,"stock.move,rec_name",0,Name,Ðме,0
+field,"stock.move,shipment_in",0,Supplier Shipment,ÐÑаÑка на доÑÑавÑик,0
+field,"stock.move,shipment_in_return",0,Supplier Return Shipment,ÐÑаÑка вÑÑнаÑа Ð¾Ñ Ð´Ð¾ÑÑавÑик',0
+field,"stock.move,shipment_internal",0,Internal Shipment,ÐÑÑÑеÑно изпÑаÑане,0
+field,"stock.move,shipment_out",0,Customer Shipment,ÐÑаÑка за клиенÑ,0
+field,"stock.move,shipment_out_return",0,Customer Return Shipment,ÐÑаÑка вÑÑнаÑа Ð¾Ñ ÐºÐ»Ð¸ÐµÐ½Ñ,0
+field,"stock.move,state",0,State,СÑÑÑоÑние,0
+field,"stock.move,to_location",0,To Location,ÐÑм меÑÑонаÑ
ождение,0
+field,"stock.move,unit_digits",0,Unit Digits,ÐеÑеÑиÑни единиÑи,0
+field,"stock.move,unit_price",0,Unit Price,ÐдиниÑна Ñена,0
+field,"stock.move,unit_price_required",0,Unit Price Required,ÐдиниÑнаÑа Ñена е задÑлжиÑелна,0
+field,"stock.move,uom",0,Uom,ÐеÑ. ед.,0
+field,"stock.period,caches",0,Caches,ÐаÑи в налиÑноÑÑ,0
+field,"stock.period,company",0,Company,ФиÑма,0
+field,"stock.period,date",0,Date,ÐаÑа,0
+field,"stock.period,rec_name",0,Name,Ðме на пÑикаÑен Ñайл,0
+field,"stock.period,state",0,State,ЩаÑ,0
+field,"stock.period.cache,internal_quantity",0,Internal Quantity,ÐÑÑÑеÑно колиÑеÑÑво,0
+field,"stock.period.cache,location",0,Location,ÐеÑÑоположение,0
+field,"stock.period.cache,period",0,Period,ÐеÑиод,0
+field,"stock.period.cache,product",0,Product,ÐÑодÑкÑ,0
+field,"stock.period.cache,rec_name",0,Name,Ðме на пÑикаÑен Ñайл,0
+field,"stock.product_stock_date.init,forecast_date",0,At Date,Ðа даÑа,0
+field,"stock.shipment.in,code",0,Code,Ðод,0
+field,"stock.shipment.in,contact_address",0,Contact Address,ÐдÑÐµÑ Ð·Ð° конÑакÑ,0
+field,"stock.shipment.in,effective_date",0,Effective Date,ÐÑекÑивна даÑа,0
+field,"stock.shipment.in,incoming_moves",0,Incoming Moves,ÐÑ
одÑÑи движениÑ,0
+field,"stock.shipment.in,inventory_moves",0,Inventory Moves,ÐÐ²Ð¸Ð¶ÐµÐ½Ð¸Ñ Ð½Ð° инвенÑаÑизаÑиÑ,0
+field,"stock.shipment.in,moves",0,Moves,ÐвижениÑ,0
+field,"stock.shipment.in,planned_date",0,Planned Date,ÐланиÑана даÑа,0
+field,"stock.shipment.in,rec_name",0,Name,Ðме,0
+field,"stock.shipment.in,reference",0,Reference,ÐÑпÑаÑка,0
+field,"stock.shipment.in,state",0,State,СÑÑÑоÑние,0
+field,"stock.shipment.in,supplier",0,Supplier,ÐоÑÑавÑик,0
+field,"stock.shipment.in,warehouse",0,Warehouse,Склад,0
+field,"stock.shipment.in.return,code",0,Code,Ðод,0
+field,"stock.shipment.in.return,effective_date",0,Effective Date,ÐÑекÑивна даÑа,0
+field,"stock.shipment.in.return,from_location",0,From Location,ÐÑ Ð¼ÐµÑÑонаÑ
ождение,0
+field,"stock.shipment.in.return,moves",0,Moves,ÐвижениÑ,0
+field,"stock.shipment.in.return,planned_date",0,Planned Date,ÐланиÑана даÑа,0
+field,"stock.shipment.in.return,rec_name",0,Name,Ðме,0
+field,"stock.shipment.in.return,reference",0,Reference,ÐÑпÑаÑка,0
+field,"stock.shipment.in.return,state",0,State,СÑÑÑоÑние,0
+field,"stock.shipment.in.return,to_location",0,To Location,ÐÑм меÑÑонаÑ
ождение,0
+field,"stock.shipment.in.return.assign.assign_failed,moves",0,Moves,ÐвижениÑ,0
+field,"stock.shipment.internal,code",0,Code,Ðод,0
+field,"stock.shipment.internal,effective_date",0,Effective Date,ÐÑекÑивна даÑа,0
+field,"stock.shipment.internal,from_location",0,From Location,ÐÑ Ð¼ÐµÑÑонаÑ
ождение,0
+field,"stock.shipment.internal,moves",0,Moves,ÐвижениÑ,0
+field,"stock.shipment.internal,planned_date",0,Planned Date,ÐланиÑана даÑа,0
+field,"stock.shipment.internal,rec_name",0,Name,Ðме,0
+field,"stock.shipment.internal,reference",0,Reference,ÐÑпÑаÑка,0
+field,"stock.shipment.internal,state",0,State,СÑÑÑоÑние,0
+field,"stock.shipment.internal,to_location",0,To Location,ÐÑм меÑÑонаÑ
ождение,0
+field,"stock.shipment.internal.assign.assign_failed,moves",0,Moves,ÐвижениÑ,0
+field,"stock.shipment.out,code",0,Code,Ðод,0
+field,"stock.shipment.out,customer",0,Customer,ÐлиенÑ,0
+field,"stock.shipment.out,delivery_address",0,Delivery Address,ÐдÑÐµÑ Ð·Ð° доÑÑвка,0
+field,"stock.shipment.out,effective_date",0,Effective Date,ÐÑекÑивна даÑа,0
+field,"stock.shipment.out,inventory_moves",0,Inventory Moves,ÐÐ²Ð¸Ð¶ÐµÐ½Ð¸Ñ Ð½Ð° инвенÑаÑизаÑиÑ,0
+field,"stock.shipment.out,moves",0,Moves,ÐвижениÑ,0
+field,"stock.shipment.out,outgoing_moves",0,Outgoing Moves,ÐзÑ
одÑÑи движениÑ,0
+field,"stock.shipment.out,planned_date",0,Planned Date,ÐланиÑана даÑа,0
+field,"stock.shipment.out,rec_name",0,Name,Ðме,0
+field,"stock.shipment.out,reference",0,Reference,ÐÑпÑаÑка,0
+field,"stock.shipment.out,state",0,State,СÑÑÑоÑние,0
+field,"stock.shipment.out,warehouse",0,Warehouse,Склад,0
+field,"stock.shipment.out.assign.assign_failed,inventory_moves",0,Inventory Moves,ÐÐ²Ð¸Ð¶ÐµÐ½Ð¸Ñ Ð½Ð° инвенÑаÑизаÑиÑ,0
+field,"stock.shipment.out.return,code",0,Code,Ðод,0
+field,"stock.shipment.out.return,customer",0,Customer,ÐлиенÑ,0
+field,"stock.shipment.out.return,delivery_address",0,Delivery Address,ÐдÑÐµÑ Ð·Ð° доÑÑвка,0
+field,"stock.shipment.out.return,effective_date",0,Effective Date,ÐÑекÑивна даÑа,0
+field,"stock.shipment.out.return,incoming_moves",0,Incoming Moves,ÐÑ
одÑÑи движениÑ,0
+field,"stock.shipment.out.return,inventory_moves",0,Inventory Moves,ÐÐ²Ð¸Ð¶ÐµÐ½Ð¸Ñ Ð½Ð° инвенÑаÑизаÑиÑ,0
+field,"stock.shipment.out.return,moves",0,Moves,ÐвижениÑ,0
+field,"stock.shipment.out.return,planned_date",0,Planned Date,ÐланиÑана даÑа,0
+field,"stock.shipment.out.return,rec_name",0,Name,Ðме,0
+field,"stock.shipment.out.return,reference",0,Reference,ÐÑпÑаÑка,0
+field,"stock.shipment.out.return,state",0,State,СÑÑÑоÑние,0
+field,"stock.shipment.out.return,warehouse",0,Warehouse,Склад,0
+help,"party.party,customer_location",0,The default destination location when sending products to the party.,ЦелÑа-меÑÑонаÑ
ождение по подÑазбиÑане когаÑо Ñе изпÑаÑÐ°Ñ Ð¿ÑодÑкÑи на паÑÑнÑоÑа.,0
+help,"party.party,supplier_location",0,The default source location when receiving products from the party.,ÐзÑоÑник-меÑÑонаÑ
Ð¾Ð¶Ð´ÐµÐ½Ð¸Ñ Ð¿Ð¾ подÑазбиÑане когаÑо Ñе полÑÑÐ°Ð²Ð°Ñ Ð¿ÑодÑкÑи Ð¾Ñ Ð¿Ð°ÑÑнÑоÑа.,0
+help,"stock.location_stock_date.init,forecast_date",0,"Allow to compute expected stock quantities for this date.
+* An empty value is an infinite date in the future.
+* A date in the past will provide historical values.","ÐозволÑва да Ñе изÑиÑли оÑакваниÑе налиÑноÑÑи Ð¾Ñ Ð¿ÑодÑÐºÑ Ð·Ð° Ñази даÑа:
+* ÐÑазна даÑа е неизвеÑÑна даÑа в бÑдеÑеÑо.
+* ÐаÑа Ð¾Ñ Ð¼Ð¸Ð½Ð°Ð» пеÑиод показва иÑÑоÑиÑеÑки данни.",0
+help,"stock.product_stock_date.init,forecast_date",0,"Allow to compute expected stock quantities for this date.
+* An empty value is an infinite date in the future.
+* A date in the past will provide historical values.","ÐозволÑва да Ñе изÑиÑли оÑакваниÑе налиÑноÑÑи Ð¾Ñ Ð¿ÑодÑÐºÑ Ð·Ð° Ñази даÑа:
+* ÐÑазна даÑа е неизвеÑÑна даÑа в бÑдеÑеÑо.
+* ÐаÑа Ð¾Ñ Ð¼Ð¸Ð½Ð°Ð» пеÑиод показва иÑÑоÑиÑеÑки данни.",0
+model,"ir.action,name",act_inventory_form,Inventories,ÐнвенÑаÑизаÑии,0
+model,"ir.action,name",act_inventory_form2,Inventories,ÐнвенÑаÑизаÑии,0
+model,"ir.action,name",act_inventory_form_draft,Draft Inventories,ÐÑÐ¾ÐµÐºÑ Ð½Ð° инвенÑаÑизаÑиÑ,0
+model,"ir.action,name",act_location_form,Locations,ÐеÑÑонаÑ
ождениÑ,0
+model,"ir.action,name",act_location_quantity_tree,Product Stock,ÐалиÑноÑÑ Ð½Ð° пÑодÑкÑ,0
+model,"ir.action,name",act_location_tree,Locations,ÐеÑÑонаÑ
ождениÑ,0
+model,"ir.action,name",act_move_form,Moves,ÐвижениÑ,0
+model,"ir.action,name",act_move_form_cust,Moves to Customers,ÐÐ²Ð¸Ð¶ÐµÐ½Ð¸Ñ ÐºÑм клиенÑи,0
+model,"ir.action,name",act_move_form_supp,Moves from Suppliers,ÐÐ²Ð¸Ð¶ÐµÐ½Ð¸Ñ Ð¾Ñ Ð´Ð¾ÑÑавÑик,0
+model,"ir.action,name",act_move_form_supp_proceed,Moves from Suppliers Waiting Arrival,ÐÐ²Ð¸Ð¶ÐµÐ½Ð¸Ñ Ð¾Ñ Ð´Ð¾ÑÑавÑик оÑакваÑи пÑиÑÑигане,0
+model,"ir.action,name",act_product_by_location,Products by Locations,ÐÑодÑкÑи по меÑÑонаÑ
ождение,0
+model,"ir.action,name",act_shipment_in_form,Supplier Shipments,ÐÑаÑки на доÑÑавÑик,0
+model,"ir.action,name",act_shipment_in_form2,New Supplier Shipment,Ðова пÑаÑка на доÑÑавÑик,0
+model,"ir.action,name",act_shipment_in_form_received,Received Supplier shipments,ÐÑаÑки полÑÑени Ð¾Ñ Ð´Ð¾ÑÑавÑик,0
+model,"ir.action,name",act_shipment_in_return_form,Supplier Return Shipments,ÐÑаÑка вÑÑнаÑа на доÑÑавÑик,0
+model,"ir.action,name",act_shipment_in_return_new_form,New Supplier Return Shipment,Ðова пÑаÑка вÑÑнаÑа на доÑÑавÑик,0
+model,"ir.action,name",act_shipment_internal_assigned_form,Assigned Internal Shipments,ÐазнаÑаване на вÑÑÑеÑна пÑаÑка,0
+model,"ir.action,name",act_shipment_internal_draft_form,Draft Internal Shipments,ÐÑÐ¾ÐµÐºÑ Ð½Ð° вÑÑÑеÑна пÑаÑка,0
+model,"ir.action,name",act_shipment_internal_form,Internal Shipments,ÐÑÑÑеÑни изпÑаÑаниÑ,0
+model,"ir.action,name",act_shipment_internal_new_form,New Internal Shipment,Ðова вÑÑÑеÑна пÑаÑка,0
+model,"ir.action,name",act_shipment_internal_waiting_form,Internal Shipments Waiting Assignation,ÐÑÑÑеÑни пÑаÑки оÑакваÑи назнаÑаване,0
+model,"ir.action,name",act_shipment_out_form,Customer Shipments,ÐÑаÑки за клиенÑи,0
+model,"ir.action,name",act_shipment_out_form2,Customer Shipments,ÐÑаÑки за клиенÑи,0
+model,"ir.action,name",act_shipment_out_form3,Supplier Shipments,ÐÑаÑки на доÑÑавÑик,0
+model,"ir.action,name",act_shipment_out_form_assigned,Assigned Customer Shipments,ÐазнаÑени пÑаÑки за клиенÑи,0
+model,"ir.action,name",act_shipment_out_form_ready,Customer Shipments Ready for Shipping,ÐÑаÑки за клиенÑи гоÑови за изпÑаÑане,0
+model,"ir.action,name",act_shipment_out_form_waiting,Customer Shipments Waiting Assignation,ÐÑаÑки за клиенÑи ÑакаÑи назнаÑаване,0
+model,"ir.action,name",act_shipment_out_return_form,Customer Return Shipments,ÐÑаÑки вÑÑнаÑи Ð¾Ñ ÐºÐ»Ð¸ÐµÐ½Ñ,0
+model,"ir.action,name",act_shipment_out_return_form2,New Customer Return Shipment,Ðова пÑаÑка вÑÑнаÑа Ð¾Ñ ÐºÐ»Ð¸ÐµÐ½Ñ,0
+model,"ir.action,name",act_stock_configuration_form,Stock Configuration,ÐонÑигÑÑиÑане на налиÑноÑÑ,0
+model,"ir.action,name",create_shipment_out_return,Create Return Shipment,СÑздаване на вÑÑнаÑа пÑаÑка,0
+model,"ir.action,name",report_shipment_in_restocking_list,Restocking List,СпиÑÑк за ÑвелиÑаване налиÑноÑÑ Ð½Ð° пÑодÑкÑ,0
+model,"ir.action,name",report_shipment_internal,Internal Shipment,ÐÑÑÑеÑно изпÑаÑане,0
+model,"ir.action,name",report_shipment_out_delivery_note,Delivery Note,Ðележка кÑм доÑÑавка,0
+model,"ir.action,name",report_shipment_out_picking_list,Picking List,СпиÑÑк за опаковане,0
+model,"ir.action,name",report_shipment_out_return_restocking_list,Restocking List,СпиÑÑк за ÑвелиÑаване налиÑноÑÑ Ð½Ð° пÑодÑкÑ,0
+model,"ir.action,name",wizard_complete_inventory,Complete Inventory,ÐÑлна инвенÑаÑизаÑиÑ,0
+model,"ir.action,name",wizard_location_open,Product by Location,ÐÑодÑкÑа по меÑÑонаÑ
ождение,0
+model,"ir.action,name",wizard_product_open,Product Quantities,ÐолиÑеÑÑва на пÑодÑкÑ,0
+model,"ir.action,name",wizard_shipment_in_return_assign,Assign Purchase Return Shipment,ÐазнаÑаване за вÑÑÑане на пÑаÑка Ð¾Ñ Ð¿Ð¾ÐºÑпка,0
+model,"ir.action,name",wizard_shipment_internal_assign,Assign Shipment Internal,ÐазнаÑаване на вÑÑÑеÑна пÑаÑка,0
+model,"ir.action,name",wizard_shipment_out_assign,Assign Shipment Out,ÐазнаÑаване на пÑаÑка за навÑн,0
+model,"ir.sequence,name",sequence_shipment_in,Supplier Shipment,ÐзпÑаÑане на доÑÑавÑик,0
+model,"ir.sequence,name",sequence_shipment_in_return,Supplier Return Shipment,ÐÑаÑка вÑÑнаÑа Ð¾Ñ Ð´Ð¾ÑÑавÑик',0
+model,"ir.sequence,name",sequence_shipment_internal,Internal Shipment,ÐÑÑÑеÑна пÑаÑка,0
+model,"ir.sequence,name",sequence_shipment_out,Customer Shipment,ÐÑаÑка за клиенÑ,0
+model,"ir.sequence,name",sequence_shipment_out_return,Customer Return Shipment,ÐÑаÑка вÑÑнаÑа Ð¾Ñ ÐºÐ»Ð¸ÐµÐ½Ñ,0
+model,"ir.sequence.type,name",sequence_type_shipment_in,Supplier Shipment,ÐÑаÑка на доÑÑавÑик,0
+model,"ir.sequence.type,name",sequence_type_shipment_in_return,Supplier Return Shipment,ÐÑаÑка вÑÑнаÑа Ð¾Ñ Ð´Ð¾ÑÑавÑик',0
+model,"ir.sequence.type,name",sequence_type_shipment_internal,Internal Shipment,ÐÑÑÑеÑна пÑаÑка,0
+model,"ir.sequence.type,name",sequence_type_shipment_out,Customer Shipment,ÐÑаÑка за клиенÑ,0
+model,"ir.sequence.type,name",sequence_type_shipment_out_return,Customer Return Shipment,ÐÑаÑка вÑÑнаÑа Ð¾Ñ ÐºÐ»Ð¸ÐµÐ½Ñ,0
+model,"ir.ui.menu,name",menu_configuration,Configuration,ÐонÑигÑÑаÑиÑ,0
+model,"ir.ui.menu,name",menu_inventory_form,Inventories,ÐнвенÑаÑизаÑии,0
+model,"ir.ui.menu,name",menu_inventory_form_draft,Draft Inventories,ÐÑÐ¾ÐµÐºÑ Ð½Ð° инвенÑаÑизаÑиÑ,0
+model,"ir.ui.menu,name",menu_inventory_form_new,New Inventory,Ðова нвенÑаÑизаÑиÑ,0
+model,"ir.ui.menu,name",menu_location_form,Locations,ÐеÑÑонаÑ
ождениÑ,0
+model,"ir.ui.menu,name",menu_location_tree,Locations,ÐеÑÑонаÑ
ождениÑ,0
+model,"ir.ui.menu,name",menu_move_form,Moves,ÐвижениÑ,0
+model,"ir.ui.menu,name",menu_move_form_cust,Moves to Customers,ÐÐ²Ð¸Ð¶ÐµÐ½Ð¸Ñ ÐºÑм клиенÑи,0
+model,"ir.ui.menu,name",menu_move_form_supp,Moves from Suppliers,ÐÐ²Ð¸Ð¶ÐµÐ½Ð¸Ñ Ð¾Ñ Ð´Ð¾ÑÑавÑик,0
+model,"ir.ui.menu,name",menu_move_form_supp_proceed,Moves from Suppliers Waiting Arrival,ÐÐ²Ð¸Ð¶ÐµÐ½Ð¸Ñ Ð¾Ñ Ð´Ð¾ÑÑавÑик оÑакваÑи пÑиÑÑигане,0
+model,"ir.ui.menu,name",menu_reporting,Reporting,СпÑавки,0
+model,"ir.ui.menu,name",menu_shipment_in_form,Supplier Shipments,ÐÑаÑки на доÑÑавÑик,0
+model,"ir.ui.menu,name",menu_shipment_in_form2,New Supplier Shipment,Ðова пÑаÑка на доÑÑавÑик,0
+model,"ir.ui.menu,name",menu_shipment_in_received,Received Supplier shipments,ÐÑаÑки полÑÑени Ð¾Ñ Ð´Ð¾ÑÑавÑик,0
+model,"ir.ui.menu,name",menu_shipment_in_return_form,Supplier Return Shipments,ÐÑаÑка вÑÑнаÑа на доÑÑавÑик,0
+model,"ir.ui.menu,name",menu_shipment_in_return_new_form,New Supplier Return Shipment,Ðова пÑаÑка вÑÑнаÑа на доÑÑавÑик,0
+model,"ir.ui.menu,name",menu_shipment_internal_assigned_form,Assigned Internal Shipments,ÐазнаÑени вÑÑÑеÑни пÑаÑки,0
+model,"ir.ui.menu,name",menu_shipment_internal_draft_form,Draft Internal Shipments,ÐÑÐ¾ÐµÐºÑ Ð½Ð° вÑÑÑеÑна пÑаÑка,0
+model,"ir.ui.menu,name",menu_shipment_internal_form,Internal Shipments,ÐÑÑÑеÑни изпÑаÑаниÑ,0
+model,"ir.ui.menu,name",menu_shipment_internal_new_form,New Internal Shipment,Ðова вÑÑÑеÑна пÑаÑка,0
+model,"ir.ui.menu,name",menu_shipment_internal_waiting_form,Internal Shipments Waiting Assignation,ÐÑÑÑеÑни пÑаÑки оÑакваÑи назнаÑаване,0
+model,"ir.ui.menu,name",menu_shipment_out_assigned,Assigned Customer Shipments,ÐазнаÑени пÑаÑки за клиенÑи,0
+model,"ir.ui.menu,name",menu_shipment_out_form,Customer Shipments,ÐÑаÑки за клиенÑи,0
+model,"ir.ui.menu,name",menu_shipment_out_ready,Customer Shipments Ready for Shipping,ÐÑаÑки за клиенÑи гоÑови за изпÑаÑане,0
+model,"ir.ui.menu,name",menu_shipment_out_return_form,Customer Return Shipments,ÐÑаÑки вÑÑнаÑи Ð¾Ñ ÐºÐ»Ð¸ÐµÐ½Ñ,0
+model,"ir.ui.menu,name",menu_shipment_out_return_form2,New Customer Return Shipment,Ðова пÑаÑка вÑÑнаÑа Ð¾Ñ ÐºÐ»Ð¸ÐµÐ½Ñ,0
+model,"ir.ui.menu,name",menu_shipment_out_waiting,Customer Shipments Waiting Assignation,ÐÑаÑки за клиенÑи ÑакаÑи назнаÑаване,0
+model,"ir.ui.menu,name",menu_stock,Inventory Management,УпÑавление на инвенÑаÑизаÑиÑ,0
+model,"ir.ui.menu,name",menu_stock_configuration,Stock Configuration,ÐонÑигÑÑиÑане на налиÑноÑÑ,0
+model,"res.group,name",group_stock,Stock,ÐалиÑноÑÑ,0
+model,"res.group,name",group_stock_admin,Stock Administration,УпÑавление на налиÑноÑÑ,0
+model,"res.group,name",group_stock_force_assignment,Stock Force Assignment,ÐаÑоÑно назнаÑване на налиÑноÑÑ,0
+model,"stock.configuration,name",0,Stock Configuration,ÐонÑигÑÑиÑане на налиÑноÑÑ,0
+model,"stock.inventory,name",0,Stock Inventory,ÐнвенÑаÑизаÑÐ¸Ñ Ð½Ð° налиÑноÑÑ,0
+model,"stock.inventory.line,name",0,Stock Inventory Line,Ред Ð¾Ñ Ð½Ð°Ð»Ð¸ÑноÑÑ Ð½Ð° пÑодÑкÑ,0
+model,"stock.location,name",0,Stock Location,ÐеÑÑонаÑ
ождение на налиÑноÑÑ,0
+model,"stock.location,name",location_customer,Customer,ÐлиенÑ,0
+model,"stock.location,name",location_input,Input Zone,Ðона вÑ
од,0
+model,"stock.location,name",location_lost_found,Lost and Found,ÐагÑбени и намеÑени,0
+model,"stock.location,name",location_output,Output Zone,Ðона изÑ
од,0
+model,"stock.location,name",location_storage,Storage Zone,Ðона за ÑÑÑ
Ñанение,0
+model,"stock.location,name",location_supplier,Supplier,ÐоÑÑавÑик,0
+model,"stock.location,name",location_warehouse,Warehouse,Склад,0
+model,"stock.location_stock_date.init,name",0,Compute stock quantities,ÐзÑиÑлÑване на колиÑеÑÑва на налиÑноÑÑ,0
+model,"stock.move,name",0,Stock Move,Ðвижение на налиÑноÑÑ,0
+model,"stock.period,name",0,Stock Period,ÐеÑиод на налиÑноÑÑ,0
+model,"stock.period.cache,name",0,"
+ Stock Period Cache
+
+ It is used to store cached computation of stock quantities.
+ ","
+ ÐеÑиод на налиÑноÑÑ Ð² паÑи в бÑой
+
+ Ðзползва Ñе за Ð·Ð°Ð¿Ð¸Ñ Ð½Ð° изÑиÑлениÑе паÑи в бÑой на налиÑниÑе колиÑеÑÑва.",0
+model,"stock.product_stock_date.init,name",0,Compute stock quantities,ÐзÑиÑлÑване на колиÑеÑÑва на налиÑноÑÑ,0
+model,"stock.shipment.in,name",0,Supplier Shipment,ÐÑаÑка на доÑÑавÑик,0
+model,"stock.shipment.in.return,name",0,Supplier Return Shipment,ÐÑаÑка вÑÑнаÑа Ð¾Ñ Ð´Ð¾ÑÑавÑик',0
+model,"stock.shipment.in.return.assign.assign_failed,name",0,Assign Supplier Return Shipment Assign Failed,ÐеÑÑпеÑно назнаÑаване на доÑÑавÑик за вÑÑнаÑа пÑаÑка,0
+model,"stock.shipment.internal,name",0,Internal Shipment,ÐÑÑÑеÑно изпÑаÑане,0
+model,"stock.shipment.internal.assign.assign_failed,name",0,Assign Shipment Internal Assign Failed,ÐеÑÑпеÑно назнаÑаване на вÑÑÑеÑно пÑаÑка,0
+model,"stock.shipment.out,name",0,Customer Shipment,ÐÑаÑка за клиенÑ,0
+model,"stock.shipment.out.assign.assign_failed,name",0,Assign Shipment Out Assign Failed,ÐеÑÑпеÑно назнаÑаване на пÑаÑка за навÑн,0
+model,"stock.shipment.out.return,name",0,Customer Return Shipment,ÐÑаÑка вÑÑнаÑа Ð¾Ñ ÐºÐ»Ð¸ÐµÐ½Ñ,0
+model,"workflow,name",wkf_inventory,Inventory,ÐнвенÑаÑизаÑиÑ,0
+model,"workflow,name",wkf_shipment_in_return,Supplier Return Shipment,ÐÑаÑка вÑÑнаÑа Ð¾Ñ Ð´Ð¾ÑÑавÑик',0
+model,"workflow,name",wkf_shipment_out_return,Customer Return Shipment,ÐÑаÑка вÑÑнаÑа Ð¾Ñ ÐºÐ»Ð¸ÐµÐ½Ñ,0
+model,"workflow,name",wkf_shipmentin,Supplier Shipment,ÐÑаÑка на доÑÑавÑик,0
+model,"workflow,name",wkf_shipmentinternal,Internal Shipment,ÐÑÑÑеÑно изпÑаÑане,0
+model,"workflow,name",wkf_shipmentout,Customer Shipment,ÐÑаÑка за клиенÑ,0
+model,"workflow.activity,name",inventory_act_cancel,Canceled,ÐÑказан,0
+model,"workflow.activity,name",inventory_act_done,Done,ÐÑиклÑÑен,0
+model,"workflow.activity,name",inventory_act_draft,Draft,ÐÑоекÑ,0
+model,"workflow.activity,name",shipment_in_return_act_assigned,Assigned,ÐазнаÑен,0
+model,"workflow.activity,name",shipment_in_return_act_cancel,Canceled,ÐÑказан,0
+model,"workflow.activity,name",shipment_in_return_act_done,Done,ÐÑиклÑÑен,0
+model,"workflow.activity,name",shipment_in_return_act_draft,Draft,ÐÑоекÑ,0
+model,"workflow.activity,name",shipment_in_return_act_waiting,Waiting,ÐзÑакваÑ,0
+model,"workflow.activity,name",shipment_out_return_act_cancel,Canceled,ÐÑказан,0
+model,"workflow.activity,name",shipment_out_return_act_done,Done,ÐÑиклÑÑен,0
+model,"workflow.activity,name",shipment_out_return_act_draft,Draft,ÐÑоекÑ,0
+model,"workflow.activity,name",shipment_out_return_act_received,Received,ÐолÑÑен,0
+model,"workflow.activity,name",shipmentin_act_cancel,Canceled,ÐÑказан,0
+model,"workflow.activity,name",shipmentin_act_done,Done,ÐÑиклÑÑен,0
+model,"workflow.activity,name",shipmentin_act_draft,Draft,ÐÑоекÑ,0
+model,"workflow.activity,name",shipmentin_act_received,Received,ÐолÑÑен,0
+model,"workflow.activity,name",shipmentinternal_act_assigned,Assigned,ÐазнаÑен,0
+model,"workflow.activity,name",shipmentinternal_act_cancel,Canceled,ÐÑказан,0
+model,"workflow.activity,name",shipmentinternal_act_done,Done,ÐÑиклÑÑен,0
+model,"workflow.activity,name",shipmentinternal_act_draft,Draft,ÐÑоекÑ,0
+model,"workflow.activity,name",shipmentinternal_act_waiting,Waiting,ÐзÑакваÑ,0
+model,"workflow.activity,name",shipmentout_act_assigned,Assigned,ÐазнаÑен,0
+model,"workflow.activity,name",shipmentout_act_cancel,Canceled,ÐÑказан,0
+model,"workflow.activity,name",shipmentout_act_done,Done,ÐÑиклÑÑен,0
+model,"workflow.activity,name",shipmentout_act_draft,Draft,ÐÑоекÑ,0
+model,"workflow.activity,name",shipmentout_act_packed,Packed,Ðпакован,0
+model,"workflow.activity,name",shipmentout_act_waiting,Waiting,ÐзÑакваÑ,0
+odt,stock.shipment.in.restocking_list,0,/,/,0
+odt,stock.shipment.in.restocking_list,0,Code:,Ðод:,0
+odt,stock.shipment.in.restocking_list,0,E-Mail:,E-Mail:,0
+odt,stock.shipment.in.restocking_list,0,From Location,ÐÑ Ð¼ÐµÑÑонаÑ
ождение,0
+odt,stock.shipment.in.restocking_list,0,Phone:,ТелеÑон:,0
+odt,stock.shipment.in.restocking_list,0,Planned Date:,ÐланиÑана даÑа:,0
+odt,stock.shipment.in.restocking_list,0,Product,ÐÑодÑкÑ,0
+odt,stock.shipment.in.restocking_list,0,Quantity,ÐолиÑеÑÑво,0
+odt,stock.shipment.in.restocking_list,0,Reference:,ÐÑпÑаÑка:,0
+odt,stock.shipment.in.restocking_list,0,Restocking List,СпиÑÑк за ÑвелиÑаване налиÑноÑÑ Ð½Ð° пÑодÑкÑ,0
+odt,stock.shipment.in.restocking_list,0,Supplier:,ÐоÑÑавÑик:,0
+odt,stock.shipment.in.restocking_list,0,To Location,ÐÑм меÑÑонаÑ
ождение,0
+odt,stock.shipment.in.restocking_list,0,Warehouse:,Склад:,0
+odt,stock.shipment.internal.report,0,/,/,0
+odt,stock.shipment.internal.report,0,Code:,Ðод:,0
+odt,stock.shipment.internal.report,0,E-Mail:,E-Mail:,0
+odt,stock.shipment.internal.report,0,From Location,ÐÑ Ð¼ÐµÑÑонаÑ
ождение,0
+odt,stock.shipment.internal.report,0,From Location:,ÐÑ Ð¼ÐµÑÑонаÑ
ождение:,0
+odt,stock.shipment.internal.report,0,Internal Shipment,ÐÑÑÑеÑно пÑаÑка,0
+odt,stock.shipment.internal.report,0,Phone:,ТелеÑон:,0
+odt,stock.shipment.internal.report,0,Planned Date:,ÐланиÑана даÑа:,0
+odt,stock.shipment.internal.report,0,Product,ÐÑодÑкÑ,0
+odt,stock.shipment.internal.report,0,Quantity,ÐолиÑеÑÑво,0
+odt,stock.shipment.internal.report,0,Reference:,ÐÑпÑаÑка:,0
+odt,stock.shipment.internal.report,0,To Location,ÐÑм меÑÑонаÑ
ождение,0
+odt,stock.shipment.internal.report,0,To Location:,ÐÑм меÑÑонаÑ
ождение:,0
+odt,stock.shipment.out.delivery_note,0,/,/,0
+odt,stock.shipment.out.delivery_note,0,Customer Code:,Ðод на клиенÑ:,0
+odt,stock.shipment.out.delivery_note,0,Date:,ÐаÑа:,0
+odt,stock.shipment.out.delivery_note,0,Delivery Note,Ðележка кÑм доÑÑавка,0
+odt,stock.shipment.out.delivery_note,0,E-Mail:,E-Mail:,0
+odt,stock.shipment.out.delivery_note,0,Phone:,ТелеÑон:,0
+odt,stock.shipment.out.delivery_note,0,Product,ÐÑодÑкÑ,0
+odt,stock.shipment.out.delivery_note,0,Quantity,ÐолиÑеÑÑво,0
+odt,stock.shipment.out.delivery_note,0,Reference:,ÐÑпÑаÑка:,0
+odt,stock.shipment.out.delivery_note,0,Shipment Number:,ÐÐ¾Ð¼ÐµÑ Ð½Ð° пÑаÑка:,0
+odt,stock.shipment.out.picking_list,0,/,/,0
+odt,stock.shipment.out.picking_list,0,Code:,Ðод:,0
+odt,stock.shipment.out.picking_list,0,Customer:,ÐлиенÑ:,0
+odt,stock.shipment.out.picking_list,0,E-Mail:,E-Mail:,0
+odt,stock.shipment.out.picking_list,0,From Location,ÐÑ Ð¼ÐµÑÑонаÑ
ождение,0
+odt,stock.shipment.out.picking_list,0,Phone:,ТелеÑон:,0
+odt,stock.shipment.out.picking_list,0,Picking List,СпиÑÑк за опаковане,0
+odt,stock.shipment.out.picking_list,0,Planned Date:,ÐланиÑана даÑа:,0
+odt,stock.shipment.out.picking_list,0,Product,ÐÑодÑкÑ,0
+odt,stock.shipment.out.picking_list,0,Quantity,ÐолиÑеÑÑво,0
+odt,stock.shipment.out.picking_list,0,Reference:,ÐÑпÑаÑка:,0
+odt,stock.shipment.out.picking_list,0,To Location,ÐÑм меÑÑонаÑ
ождение,0
+odt,stock.shipment.out.picking_list,0,Warehouse:,Склад:,0
+odt,stock.shipment.out.return.restocking_list,0,/,/,0
+odt,stock.shipment.out.return.restocking_list,0,Code:,Ðод:,0
+odt,stock.shipment.out.return.restocking_list,0,E-Mail:,E-Mail:,0
+odt,stock.shipment.out.return.restocking_list,0,From Location,ÐÑ Ð¼ÐµÑÑонаÑ
ождение,0
+odt,stock.shipment.out.return.restocking_list,0,Phone:,ТелеÑон:,0
+odt,stock.shipment.out.return.restocking_list,0,Planned Date:,ÐланиÑана даÑа:,0
+odt,stock.shipment.out.return.restocking_list,0,Product,ÐÑодÑкÑ,0
+odt,stock.shipment.out.return.restocking_list,0,Quantity,ÐолиÑеÑÑво,0
+odt,stock.shipment.out.return.restocking_list,0,Reference:,ÐÑпÑаÑка:,0
+odt,stock.shipment.out.return.restocking_list,0,Restocking List,СпиÑÑк за ÑвелиÑаване налиÑноÑÑ Ð½Ð° пÑодÑкÑ,0
+odt,stock.shipment.out.return.restocking_list,0,Supplier:,ÐоÑÑавÑик:,0
+odt,stock.shipment.out.return.restocking_list,0,To Location,ÐÑм меÑÑонаÑ
ождение,0
+odt,stock.shipment.out.return.restocking_list,0,Warehouse:,Склад:,0
+selection,"stock.inventory,state",0,Canceled,ÐÑказан,0
+selection,"stock.inventory,state",0,Done,ÐÑиклÑÑен,0
+selection,"stock.inventory,state",0,Draft,ÐÑоекÑ,0
+selection,"stock.location,type",0,Customer,ÐлиенÑ,0
+selection,"stock.location,type",0,Lost and Found,ÐагÑбени и намеÑени,0
+selection,"stock.location,type",0,Production,ÐÑоизводÑÑво,0
+selection,"stock.location,type",0,Storage,Склад,0
+selection,"stock.location,type",0,Supplier,ÐоÑÑавÑик,0
+selection,"stock.location,type",0,View,Ðзглед,0
+selection,"stock.location,type",0,Warehouse,Склад,0
+selection,"stock.move,state",0,Assigned,ÐазнаÑен,0
+selection,"stock.move,state",0,Canceled,ÐÑказан,0
+selection,"stock.move,state",0,Done,ÐÑиклÑÑен,0
+selection,"stock.move,state",0,Draft,ÐÑоекÑ,0
+selection,"stock.period,state",0,Closed,ÐÑиклÑÑен,0
+selection,"stock.period,state",0,Draft,ÐÑоекÑ,0
+selection,"stock.shipment.in,state",0,Canceled,ÐÑказан,0
+selection,"stock.shipment.in,state",0,Done,ÐÑиклÑÑен,0
+selection,"stock.shipment.in,state",0,Draft,ÐÑоекÑ,0
+selection,"stock.shipment.in,state",0,Received,ÐолÑÑен,0
+selection,"stock.shipment.in.return,state",0,Assigned,ÐазнаÑен,0
+selection,"stock.shipment.in.return,state",0,Canceled,ÐÑказан,0
+selection,"stock.shipment.in.return,state",0,Done,ÐÑиклÑÑен,0
+selection,"stock.shipment.in.return,state",0,Draft,ÐÑоекÑ,0
+selection,"stock.shipment.in.return,state",0,Waiting,ÐзÑакваÑ,0
+selection,"stock.shipment.internal,state",0,Assigned,ÐазнаÑен,0
+selection,"stock.shipment.internal,state",0,Canceled,ÐÑказан,0
+selection,"stock.shipment.internal,state",0,Done,ÐÑиклÑÑен,0
+selection,"stock.shipment.internal,state",0,Draft,ÐÑоекÑ,0
+selection,"stock.shipment.internal,state",0,Waiting,ÐзÑакваÑ,0
+selection,"stock.shipment.out,state",0,Assigned,ÐазнаÑен,0
+selection,"stock.shipment.out,state",0,Canceled,ÐÑказан,0
+selection,"stock.shipment.out,state",0,Done,ÐÑиклÑÑен,0
+selection,"stock.shipment.out,state",0,Draft,ÐÑоекÑ,0
+selection,"stock.shipment.out,state",0,Packed,Ðпакован,0
+selection,"stock.shipment.out,state",0,Waiting,ÐзÑакваÑ,0
+selection,"stock.shipment.out.return,state",0,Canceled,ÐÑказан,0
+selection,"stock.shipment.out.return,state",0,Done,ÐÑиклÑÑен,0
+selection,"stock.shipment.out.return,state",0,Draft,ÐÑоекÑ,0
+selection,"stock.shipment.out.return,state",0,Received,ÐолÑÑен,0
+view,party.party,0,Stock,ÐалиÑноÑÑ,0
+view,product.product,0,Products,ÐÑодÑкÑи,0
+view,stock.configuration,0,Stock Configuration,ÐонÑигÑÑиÑане на налиÑноÑÑ,0
+view,stock.inventory,0,Add an inventory line for each missing products,ÐобавÑне на Ñед Ð¾Ñ Ð¸Ð½Ð²ÐµÐ½ÑаÑизаÑÐ¸Ñ Ð·Ð° вÑеки липÑÐ²Ð°Ñ Ð¿ÑодÑкÑ,0
+view,stock.inventory,0,Cancel,ÐÑказ,0
+view,stock.inventory,0,Complete Inventory,ÐÑлна инвенÑаÑизаÑиÑ,0
+view,stock.inventory,0,Confirm,ÐоÑвÑÑждаване,0
+view,stock.inventory,0,Inventories,ÐнвенÑаÑизаÑии,0
+view,stock.inventory,0,Inventory,ÐнвенÑаÑизаÑиÑ,0
+view,stock.inventory.line,0,Inventory Line,Ред Ð¾Ñ Ð¸Ð½Ð²ÐµÐ½ÑаÑизаÑиÑ,0
+view,stock.inventory.line,0,Inventory Lines,Редове Ð¾Ñ Ð¸Ð½Ð²ÐµÐ½ÑаÑизаÑиÑ,0
+view,stock.location,0,Location,ÐеÑÑоположение,0
+view,stock.location,0,Locations,ÐеÑÑонаÑ
ождениÑ,0
+view,stock.location,0,Product Stock,ÐалиÑноÑÑ Ð½Ð° пÑодÑкÑ,0
+view,stock.location_stock_date.init,0,Product Quantity.,ÐолиÑеÑÑво пÑодÑкÑ,0
+view,stock.move,0,Move,Ðвижение,0
+view,stock.move,0,Moves,ÐвижениÑ,0
+view,stock.product_stock_date.init,0,Product Quantity.,ÐолиÑеÑÑво пÑодÑкÑ,0
+view,stock.shipment.in,0,Cancel,ÐÑказ,0
+view,stock.shipment.in,0,Done,ÐÑиклÑÑен,0
+view,stock.shipment.in,0,Incoming Moves,ÐÑ
одÑÑи движениÑ,0
+view,stock.shipment.in,0,Inventory Moves,ÐÐ²Ð¸Ð¶ÐµÐ½Ð¸Ñ Ð½Ð° инвенÑаÑизаÑиÑ,0
+view,stock.shipment.in,0,Moves,ÐвижениÑ,0
+view,stock.shipment.in,0,Received,ÐолÑÑен,0
+view,stock.shipment.in,0,Reset to Draft,ÐзпÑаÑане в пÑоекÑ,0
+view,stock.shipment.in,0,Supplier Shipment,ÐÑаÑка на доÑÑавÑик,0
+view,stock.shipment.in,0,Supplier Shipments,ÐÑаÑки на доÑÑавÑик,0
+view,stock.shipment.in.return,0,Assign,ÐазнаÑаване,0
+view,stock.shipment.in.return,0,Cancel,ÐÑказ,0
+view,stock.shipment.in.return,0,Done,ÐÑиклÑÑен,0
+view,stock.shipment.in.return,0,Draft,ÐÑоекÑ,0
+view,stock.shipment.in.return,0,Reset to Draft,ÐзпÑаÑане в пÑоекÑ,0
+view,stock.shipment.in.return,0,Supplier Return Shipment,ÐÑаÑка вÑÑнаÑа на доÑÑавÑик,0
+view,stock.shipment.in.return,0,Supplier Return Shipments,ÐÑаÑка вÑÑнаÑа на доÑÑавÑик,0
+view,stock.shipment.in.return,0,Waiting,ÐзÑакваÑ,0
+view,stock.shipment.in.return.assign.assign_failed,0,Moves,ÐвижениÑ,0
+view,stock.shipment.in.return.assign.assign_failed,0,Unable to Assign,ÐевÑзможен доÑÑÑп,0
+view,stock.shipment.in.return.assign.assign_failed,0,Unable to assign those products:,Ðе Ð¼Ð¾Ð³Ð°Ñ Ð´Ð° бÑÐ´Ð°Ñ Ð½Ð°Ð·Ð½Ð°Ñени ÑледниÑе пÑодÑкÑи:,0
+view,stock.shipment.internal,0,Assign,ÐазнаÑаване,0
+view,stock.shipment.internal,0,Cancel,ÐÑказ,0
+view,stock.shipment.internal,0,Done,ÐÑиклÑÑен,0
+view,stock.shipment.internal,0,Draft,ÐÑоекÑ,0
+view,stock.shipment.internal,0,Internal Shipment,ÐÑÑÑеÑна пÑаÑка,0
+view,stock.shipment.internal,0,Internal Shipments,ÐÑÑÑеÑни пÑаÑки,0
+view,stock.shipment.internal,0,Reset to Draft,ÐзпÑаÑане в пÑоекÑ,0
+view,stock.shipment.internal,0,Waiting,ÐзÑакваÑ,0
+view,stock.shipment.internal.assign.assign_failed,0,Moves,ÐвижениÑ,0
+view,stock.shipment.internal.assign.assign_failed,0,Unable to Assign,ÐевÑзможен доÑÑÑп,0
+view,stock.shipment.internal.assign.assign_failed,0,Unable to assign those products:,Ðе Ð¼Ð¾Ð³Ð°Ñ Ð´Ð° бÑÐ´Ð°Ñ Ð½Ð°Ð·Ð½Ð°Ñени ÑледниÑе пÑодÑкÑи:,0
+view,stock.shipment.out,0,Assign,ÐазнаÑаване,0
+view,stock.shipment.out,0,Cancel,ÐÑказ,0
+view,stock.shipment.out,0,Customer Shipment,ÐÑаÑка за клиенÑ,0
+view,stock.shipment.out,0,Customer Shipments,ÐÑаÑки за клиенÑи,0
+view,stock.shipment.out,0,Done,ÐÑиклÑÑен,0
+view,stock.shipment.out,0,Draft,ÐÑоекÑ,0
+view,stock.shipment.out,0,Inventory Moves,ÐÐ²Ð¸Ð¶ÐµÐ½Ð¸Ñ Ð½Ð° инвенÑаÑизаÑиÑ,0
+view,stock.shipment.out,0,Make shipment,СÑздаване на изпÑаÑане,0
+view,stock.shipment.out,0,Outgoing Moves,ÐзÑ
одÑÑи движениÑ,0
+view,stock.shipment.out,0,Reset to Draft,ÐзпÑаÑане в пÑоекÑ,0
+view,stock.shipment.out,0,Waiting,ÐзÑакваÑ,0
+view,stock.shipment.out.assign.assign_failed,0,Inventory Moves,ÐÐ²Ð¸Ð¶ÐµÐ½Ð¸Ñ Ð½Ð° инвенÑаÑизаÑиÑ,0
+view,stock.shipment.out.assign.assign_failed,0,Unable to Assign,ÐевÑзможен доÑÑÑп,0
+view,stock.shipment.out.assign.assign_failed,0,Unable to assign those products:,Ðе Ð¼Ð¾Ð³Ð°Ñ Ð´Ð° бÑÐ´Ð°Ñ Ð½Ð°Ð·Ð½Ð°Ñени ÑледниÑе пÑодÑкÑи:,0
+view,stock.shipment.out.return,0,Cancel,ÐÑказ,0
+view,stock.shipment.out.return,0,Customer Return Shipment,ÐÑаÑка вÑÑнаÑа Ð¾Ñ ÐºÐ»Ð¸ÐµÐ½Ñ,0
+view,stock.shipment.out.return,0,Customer Return Shipments,ÐÑаÑки вÑÑнаÑи Ð¾Ñ ÐºÐ»Ð¸ÐµÐ½Ñ,0
+view,stock.shipment.out.return,0,Done,ÐÑиклÑÑен,0
+view,stock.shipment.out.return,0,Incoming Moves,ÐÑ
одÑÑи движениÑ,0
+view,stock.shipment.out.return,0,Inventory Moves,ÐÐ²Ð¸Ð¶ÐµÐ½Ð¸Ñ Ð½Ð° инвенÑаÑизаÑиÑ,0
+view,stock.shipment.out.return,0,Moves,ÐвижениÑ,0
+view,stock.shipment.out.return,0,Received,ÐолÑÑен,0
+view,stock.shipment.out.return,0,Reset to Draft,ÐзпÑаÑане в пÑоекÑ,0
+wizard_button,"stock.location.open,init,end",0,Cancel,ÐÑказ,0
+wizard_button,"stock.location.open,init,open",0,Open,ÐÑваÑÑне,0
+wizard_button,"stock.product.open,init,end",0,Cancel,ÐÑказ,0
+wizard_button,"stock.product.open,init,open",0,Open,ÐÑваÑÑне,0
+wizard_button,"stock.shipment.in.return.assign,ask_force,end",0,Ok,ÐобÑе,0
+wizard_button,"stock.shipment.in.return.assign,ask_force,force",0,Force Assign,СÑздай изÑиÑно назнаÑение,0
+wizard_button,"stock.shipment.in.return.assign,assign_failed,end",0,Ok,ÐобÑе,0
+wizard_button,"stock.shipment.internal.assign,ask_force,end",0,Ok,ÐобÑе,0
+wizard_button,"stock.shipment.internal.assign,ask_force,force",0,Force Assign,СÑздай изÑиÑно назнаÑение,0
+wizard_button,"stock.shipment.internal.assign,assign_failed,end",0,Ok,ÐобÑе,0
+wizard_button,"stock.shipment.out.assign,ask_force,end",0,Ok,ÐобÑе,0
+wizard_button,"stock.shipment.out.assign,ask_force,force",0,Force Assign,СÑздай изÑиÑно назнаÑение,0
+wizard_button,"stock.shipment.out.assign,assign_failed,end",0,Ok,ÐобÑе,0
diff --git a/configuration.xml b/configuration.xml
index ca1bd70..f08895e 100644
--- a/configuration.xml
+++ b/configuration.xml
@@ -26,7 +26,6 @@ this repository contains the full copyright notices and license terms. -->
<record model="ir.action.act_window" id="act_stock_configuration_form">
<field name="name">Stock Configuration</field>
<field name="res_model">stock.configuration</field>
- <field name="view_type">form</field>
</record>
<record model="ir.action.act_window.view"
id="act_stock_configuration_view1">
diff --git a/de_DE.csv b/de_DE.csv
index 1e003fc..4cf8f23 100644
--- a/de_DE.csv
+++ b/de_DE.csv
@@ -5,14 +5,19 @@ error,stock.inventory.line,0,Product must be unique by inventory!,Ein Artikel ka
error,stock.location,0,A location with existing moves cannot be changed to a type that does not support moves.,"Ein Lagerort mit zugordneten Bewegungen kann nicht zu einem Typ geändert werden, der keine Bewegungen unterstützt.",0
error,stock.location,0,"Location ""%s"" must be a child of warehouse ""%s""!","Lagerort ""%s"" muss untergeordnet zu Warenlager ""%s"" sein!",0
error,stock.location,0,You can not create recursive locations!,Lagerorte können nicht rekursiv angelegt werden!,0
+error,stock.move,0,Internal move quantity must be positive,Interne Anzahl von Bewegungen muss positiv sein!,0
error,stock.move,0,Move can be on only one Shipment,Eine Bewegung kann nur auf einem Lieferposten erfolgen!,0
error,stock.move,0,Move quantity must be positive,Zu bewegende Anzahl muss positiv sein,0
error,stock.move,0,Source and destination location must be different,Herkunfts- und Bestimmungsort müssen unterschiedlich sein,0
+error,stock.move,0,"You can not modify a move in the state: ""Assigned"", ""Done"" or ""Cancel""","Eine Bewegung in Status ""Zugewiesen"", ""Erledigt"" oder ""Annulliert"" kann nicht geändert werden!",0
+error,stock.move,0,You can not modify move in closed period!,Eine Bewegung in einer geschlossenen Periode kann nicht geändert werden!,0
error,stock.move,0,You can not set state to assigned!,Status kann nicht auf Zugewiesen gesetzt werden!,0
error,stock.move,0,You can not set state to done!,Status kann nicht auf Erledigt gesetzt werden!,0
error,stock.move,0,You can not set state to draft!,"Status ""Entwurf"" kann nicht gesetzt werden!",0
error,stock.move,0,You can not use service products for a move!,Dienstleistungen können nicht in Warenbewegungen verwendet werden!,0
error,stock.move,0,You can only delete draft or cancelled moves!,"Nur Bewegungen mit Status ""Entwurf"" oder ""Annulliert"" können gelöscht werden!",0
+error,stock.period,0,You can not close a period in the future or today!,Eine Periode kann nicht am heutigen Tag (oder später) geschlossen werden!,0
+error,stock.period,0,You can not close a period when there is still assigned moves!,"Eine Periode, die noch zugewiesene Bewegungen enthält, kann nicht geschlossen werden!",0
error,stock.shipment.in,0,Incoming Moves must have the warehouse input location as destination location!,Eingehende Bewegungen müssen den Eingangsbereich des Warenlagers als Zielort haben!,0
error,stock.shipment.in,0,Inventory Moves must have the warehouse input location as source location!,Bestandsänderungen müssen den Eingangsbereich des Warenlagers als Herkunftsort haben!,0
error,stock.shipment.out,0,Inventory Moves must have the warehouse output location as destination location!,Bestandsänderungen müssen den Ausgangsbereich des Warenlagers als Zielort haben!,0
@@ -70,6 +75,7 @@ field,"stock.move,cost_price",0,Cost Price,Einkaufspreis,0
field,"stock.move,currency",0,Currency,Währung,0
field,"stock.move,effective_date",0,Effective Date,Effektives Datum,0
field,"stock.move,from_location",0,From Location,Von Lagerort,0
+field,"stock.move,internal_quantity",0,Internal Quantity,Anzahl Intern,0
field,"stock.move,planned_date",0,Planned Date,Geplantes Datum,0
field,"stock.move,product",0,Product,Artikel,0
field,"stock.move,quantity",0,Quantity,Anzahl,0
@@ -85,6 +91,16 @@ field,"stock.move,unit_digits",0,Unit Digits,Anzahl Stellen,0
field,"stock.move,unit_price",0,Unit Price,Einzelpreis,0
field,"stock.move,unit_price_required",0,Unit Price Required,Einzelpreis erforderlich,0
field,"stock.move,uom",0,Uom,Einheit,0
+field,"stock.period,caches",0,Caches,Cache-Speicher,0
+field,"stock.period,company",0,Company,Unternehmen,0
+field,"stock.period,date",0,Date,Datum,0
+field,"stock.period,rec_name",0,Name,Name,0
+field,"stock.period,state",0,State,Status,0
+field,"stock.period.cache,internal_quantity",0,Internal Quantity,Anzahl Intern,0
+field,"stock.period.cache,location",0,Location,Lagerort,0
+field,"stock.period.cache,period",0,Period,Periode,0
+field,"stock.period.cache,product",0,Product,Artikel,0
+field,"stock.period.cache,rec_name",0,Name,Name,0
field,"stock.product_stock_date.init,forecast_date",0,At Date,Zum,0
field,"stock.shipment.in,code",0,Code,Code,0
field,"stock.shipment.in,contact_address",0,Contact Address,Kontaktadresse,0
@@ -160,13 +176,14 @@ help,"stock.product_stock_date.init,forecast_date",0,"Allow to compute expected
model,"ir.action,name",act_inventory_form,Inventories,Bestandskorrekturen,0
model,"ir.action,name",act_inventory_form2,Inventories,Bestandskorrekturen,0
model,"ir.action,name",act_inventory_form_draft,Draft Inventories,Entwürfe Bestandskorrekturen,0
-model,"ir.action,name",act_location_form,Edit Locations,Lagerorte bearbeiten,0
+model,"ir.action,name",act_location_form,Locations,Lagerorte,0
model,"ir.action,name",act_location_quantity_tree,Product Stock,Lagerbestand,0
model,"ir.action,name",act_location_tree,Locations,Lagerorte,0
model,"ir.action,name",act_move_form,Moves,Lagerbewegungen,0
model,"ir.action,name",act_move_form_cust,Moves to Customers,Bewegungen zu Kunden,0
model,"ir.action,name",act_move_form_supp,Moves from Suppliers,Bewegungen von Lieferanten,0
model,"ir.action,name",act_move_form_supp_proceed,Moves from Suppliers Waiting Arrival,Erwartete Bewegungen von Lieferanten,0
+model,"ir.action,name",act_period_list,Periods,Lagerperioden,0
model,"ir.action,name",act_product_by_location,Products by Locations,Artikel nach Lagerort,0
model,"ir.action,name",act_shipment_in_form,Supplier Shipments,Lieferposten von Lieferanten,0
model,"ir.action,name",act_shipment_in_form2,New Supplier Shipment,Neuer Lieferposten von Lieferant,0
@@ -174,16 +191,16 @@ model,"ir.action,name",act_shipment_in_form_received,Received Supplier shipments
model,"ir.action,name",act_shipment_in_return_form,Supplier Return Shipments,Warenrückgaben (an Lieferanten),0
model,"ir.action,name",act_shipment_in_return_new_form,New Supplier Return Shipment,Neue Warenrückgabe (an Lieferant),0
model,"ir.action,name",act_shipment_internal_assigned_form,Assigned Internal Shipments,Zugewiesene Interne Lieferposten,0
-model,"ir.action,name",act_shipment_internal_draft_form,Draft Internal Shipments,Entwürfe (Interne Lieferposten),0
+model,"ir.action,name",act_shipment_internal_draft_form,Draft Internal Shipments,Entwürfe Interne Lieferposten,0
model,"ir.action,name",act_shipment_internal_form,Internal Shipments,Interne Lieferposten,0
model,"ir.action,name",act_shipment_internal_new_form,New Internal Shipment,Neuer Interner Lieferposten,0
-model,"ir.action,name",act_shipment_internal_waiting_form,Internal Shipments Waiting Assignation,Zuzuweisende Interne Lieferposten,0
+model,"ir.action,name",act_shipment_internal_waiting_form,Internal Shipments Waiting Assignation,Wartende Interne Lieferposten,0
model,"ir.action,name",act_shipment_out_form,Customer Shipments,Lieferposten an Kunden,0
model,"ir.action,name",act_shipment_out_form2,Customer Shipments,Lieferposten als Kunde,0
model,"ir.action,name",act_shipment_out_form3,Supplier Shipments,Lieferposten als Lieferant,0
model,"ir.action,name",act_shipment_out_form_assigned,Assigned Customer Shipments,Zugewiesene Lieferposten an Kunden,0
model,"ir.action,name",act_shipment_out_form_ready,Customer Shipments Ready for Shipping,Versandbereite Lieferposten an Kunden,0
-model,"ir.action,name",act_shipment_out_form_waiting,Customer Shipments Waiting Assignation,Zuzuweisende Lieferposten an Kunden,0
+model,"ir.action,name",act_shipment_out_form_waiting,Customer Shipments Waiting Assignation,Wartende Lieferposten an Kunden,0
model,"ir.action,name",act_shipment_out_return_form,Customer Return Shipments,Warenrücknahmen (von Kunden),0
model,"ir.action,name",act_shipment_out_return_form2,New Customer Return Shipment,Neue Warenrücknahme (von Kunde),0
model,"ir.action,name",act_stock_configuration_form,Stock Configuration,Einstellungen Lager,0
@@ -213,29 +230,30 @@ model,"ir.ui.menu,name",menu_configuration,Configuration,Einstellungen,0
model,"ir.ui.menu,name",menu_inventory_form,Inventories,Bestandskorrektur,0
model,"ir.ui.menu,name",menu_inventory_form_draft,Draft Inventories,Entwürfe Bestandskorrekturen,0
model,"ir.ui.menu,name",menu_inventory_form_new,New Inventory,Neue Bestandskorrektur,0
-model,"ir.ui.menu,name",menu_location_form,Edit Locations,Lagerorte bearbeiten,0
+model,"ir.ui.menu,name",menu_location_form,Locations,Lagerorte,0
model,"ir.ui.menu,name",menu_location_tree,Locations,Lagerorte,0
model,"ir.ui.menu,name",menu_move_form,Moves,Bewegungen,0
model,"ir.ui.menu,name",menu_move_form_cust,Moves to Customers,Bewegungen zu Kunden,0
model,"ir.ui.menu,name",menu_move_form_supp,Moves from Suppliers,Bewegungen von Lieferanten,0
model,"ir.ui.menu,name",menu_move_form_supp_proceed,Moves from Suppliers Waiting Arrival,Erwartete Bewegungen von Lieferanten,0
-model,"ir.ui.menu,name",menu_reporting,Reporting,Berichte,0
+model,"ir.ui.menu,name",menu_period_list,Periods,Lagerperioden,0
+model,"ir.ui.menu,name",menu_reporting,Reporting,Auswertungen,0
model,"ir.ui.menu,name",menu_shipment_in_form,Supplier Shipments,Lieferposten von Lieferanten,0
model,"ir.ui.menu,name",menu_shipment_in_form2,New Supplier Shipment,Neuer Lieferposten von Lieferant,0
model,"ir.ui.menu,name",menu_shipment_in_received,Received Supplier shipments,Erhaltene Lieferposten von Lieferanten,0
model,"ir.ui.menu,name",menu_shipment_in_return_form,Supplier Return Shipments,Warenrückgaben (an Lieferanten),0
model,"ir.ui.menu,name",menu_shipment_in_return_new_form,New Supplier Return Shipment,Neue Warenrückgabe (an Lieferant),0
model,"ir.ui.menu,name",menu_shipment_internal_assigned_form,Assigned Internal Shipments,Zugewiesene Interne Lieferposten,0
-model,"ir.ui.menu,name",menu_shipment_internal_draft_form,Draft Internal Shipments,Entwürfe (Interne Lieferposten),0
+model,"ir.ui.menu,name",menu_shipment_internal_draft_form,Draft Internal Shipments,Entwürfe Interne Lieferposten,0
model,"ir.ui.menu,name",menu_shipment_internal_form,Internal Shipments,Interne Lieferposten,0
model,"ir.ui.menu,name",menu_shipment_internal_new_form,New Internal Shipment,Neuer Interner Lieferposten,0
-model,"ir.ui.menu,name",menu_shipment_internal_waiting_form,Internal Shipments Waiting Assignation,Zuzuweisende Interne Lieferposten,0
+model,"ir.ui.menu,name",menu_shipment_internal_waiting_form,Internal Shipments Waiting Assignation,Wartende Interne Lieferposten,0
model,"ir.ui.menu,name",menu_shipment_out_assigned,Assigned Customer Shipments,Zugewiesene Lieferposten an Kunden,0
model,"ir.ui.menu,name",menu_shipment_out_form,Customer Shipments,Lieferposten an Kunden,0
model,"ir.ui.menu,name",menu_shipment_out_ready,Customer Shipments Ready for Shipping,Versandbereite Lieferposten an Kunden,0
model,"ir.ui.menu,name",menu_shipment_out_return_form,Customer Return Shipments,Warenrücknahmen (von Kunden),0
model,"ir.ui.menu,name",menu_shipment_out_return_form2,New Customer Return Shipment,Neue Warenrücknahme (von Kunde),0
-model,"ir.ui.menu,name",menu_shipment_out_waiting,Customer Shipments Waiting Assignation,Zuzuweisende Lieferposten an Kunden,0
+model,"ir.ui.menu,name",menu_shipment_out_waiting,Customer Shipments Waiting Assignation,Wartende Lieferposten an Kunden,0
model,"ir.ui.menu,name",menu_stock,Inventory Management,Lager,0
model,"ir.ui.menu,name",menu_stock_configuration,Stock Configuration,Einstellungen Lager,0
model,"res.group,name",group_stock,Stock,Lager,0
@@ -254,6 +272,15 @@ model,"stock.location,name",location_supplier,Supplier,Lieferant,0
model,"stock.location,name",location_warehouse,Warehouse,Warenlager,0
model,"stock.location_stock_date.init,name",0,Compute stock quantities,Berechnung Lagerbestände,0
model,"stock.move,name",0,Stock Move,Lager Bewegung,0
+model,"stock.period,name",0,Stock Period,Lager Periode,0
+model,"stock.period.cache,name",0,"
+ Stock Period Cache
+
+ It is used to store cached computation of stock quantities.
+ ","
+ Perioden Cache-Speicher
+
+ Dient der Pufferspeicherung von berechneten Lagerbeständen.",0
model,"stock.product_stock_date.init,name",0,Compute stock quantities,Berechnung Lagerbestände,0
model,"stock.shipment.in,name",0,Supplier Shipment,Lieferant Lieferposten,0
model,"stock.shipment.in.return,name",0,Supplier Return Shipment,Warenrückgabe Lieferant,0
@@ -377,6 +404,8 @@ selection,"stock.move,state",0,Assigned,Zugewiesen,0
selection,"stock.move,state",0,Canceled,Annulliert,0
selection,"stock.move,state",0,Done,Erledigt,0
selection,"stock.move,state",0,Draft,Entwurf,0
+selection,"stock.period,state",0,Closed,Geschlossen,0
+selection,"stock.period,state",0,Draft,Entwurf,0
selection,"stock.shipment.in,state",0,Canceled,Annulliert,0
selection,"stock.shipment.in,state",0,Done,Erledigt,0
selection,"stock.shipment.in,state",0,Draft,Entwurf,0
@@ -424,6 +453,12 @@ view,stock.move,0,Move,Bewegung,0
view,stock.move,0,Moves,Bewegungen,0
view,stock.move,0,Set Done,Auf Erledigt setzen,0
view,stock.move,0,Set Draft,Auf Entwurf setzen,0
+view,stock.period,0,Close,SchlieÃen,0
+view,stock.period,0,Draft,Entwurf,0
+view,stock.period,0,Period,Periode,0
+view,stock.period,0,Periods,Lagerperioden,0
+view,stock.period.cache,0,Period Cache,Perioden Cache-Speicher,0
+view,stock.period.cache,0,Period Caches,Perioden Cache-Speicher,0
view,stock.product_stock_date.init,0,Product Quantity.,Artikel Mengen,0
view,stock.shipment.in,0,Cancel,Annullieren,0
view,stock.shipment.in,0,Done,Erledigt,0
diff --git a/fr_FR.csv b/fr_FR.csv
index 530c862..efb6dcf 100644
--- a/fr_FR.csv
+++ b/fr_FR.csv
@@ -5,14 +5,19 @@ error,stock.inventory.line,0,Product must be unique by inventory!,Chaque produit
error,stock.location,0,A location with existing moves cannot be changed to a type that does not support moves.,Un emplacement avec des mouvements ne peut pas être changé en un type qui ne supporte pas les mouvements.,0
error,stock.location,0,"Location ""%s"" must be a child of warehouse ""%s""!","L'emplacement ""%s"" doit être un sous-emplacement de l'entrepôt ""%s"" !",0
error,stock.location,0,You can not create recursive locations!,Vous ne pouvez pas créer des emplacements récursifs !,0
+error,stock.move,0,Internal move quantity must be positive,La quantité interne doit être positive,0
error,stock.move,0,Move can be on only one Shipment,Un mouvement ne peut être que sur une seule expédition,0
error,stock.move,0,Move quantity must be positive,La quantité sur le mouvement doit être positive.,0
error,stock.move,0,Source and destination location must be different,Les emplacements d'origine et de destination doivent être distincts,0
+error,stock.move,0,"You can not modify a move in the state: ""Assigned"", ""Done"" or ""Cancel""","Vous ne pouvez modifier un mouvement dans un des états : ""Assigné"", ""Terminé"" ou ""Annulé""",0
+error,stock.move,0,You can not modify move in closed period!,Vous ne pouvez modifier un mouvement d'une période fermée !,0
error,stock.move,0,You can not set state to assigned!,Vous ne pouvez pas mettre l'état à assigné !,0
error,stock.move,0,You can not set state to done!,Vous ne pouvez pas mettre l'état à fait !,0
error,stock.move,0,You can not set state to draft!,Vous ne pouvez pas mettre l'état à brouillon !,0
error,stock.move,0,You can not use service products for a move!,Vous ne pouvez pas utiliser un produit de type service sur un mouvement !,0
error,stock.move,0,You can only delete draft or cancelled moves!,Vous pouvez supprimer que des mouvements qui sont annulés ou a l'état de brouillon !,0
+error,stock.period,0,You can not close a period in the future or today!,Vous ne pouvez fermer une période qui se termine aujourd'hui ou dans le futur !,0
+error,stock.period,0,You can not close a period when there is still assigned moves!,Vous ne pouvez fermer une période alors que des mouvements sont toujours assignés !,0
error,stock.shipment.in,0,Incoming Moves must have the warehouse input location as destination location!,Les mouvements d'entrée doivent avoir l'emplacement d'entrée de l'entrepôt comme destination !,0
error,stock.shipment.in,0,Inventory Moves must have the warehouse input location as source location!,Les mouvements d'inventaire doivent avoir l'emplacement d'entrée de l'entrepôt comme source !,0
error,stock.shipment.out,0,Inventory Moves must have the warehouse output location as destination location!,Les mouvements d'inventaires doivent avoir une sortie d'entrepôt comme location de destination.,0
@@ -70,6 +75,7 @@ field,"stock.move,cost_price",0,Cost Price,Prix de revient,0
field,"stock.move,currency",0,Currency,Devise,0
field,"stock.move,effective_date",0,Effective Date,Date effective,0
field,"stock.move,from_location",0,From Location,Emplacement d'origine,0
+field,"stock.move,internal_quantity",0,Internal Quantity,Quantité interne,0
field,"stock.move,planned_date",0,Planned Date,Date planifiée,0
field,"stock.move,product",0,Product,Produit,0
field,"stock.move,quantity",0,Quantity,Quantité,0
@@ -85,6 +91,16 @@ field,"stock.move,unit_digits",0,Unit Digits,Décimales de l'unité,0
field,"stock.move,unit_price",0,Unit Price,Prix unitaire,0
field,"stock.move,unit_price_required",0,Unit Price Required,Prix unitaire requis,0
field,"stock.move,uom",0,Uom,UDM,0
+field,"stock.period,caches",0,Caches,,0
+field,"stock.period,company",0,Company,Société,1
+field,"stock.period,date",0,Date,date,1
+field,"stock.period,rec_name",0,Name,Nom de la pièce jointe,1
+field,"stock.period,state",0,State,Ãtat,1
+field,"stock.period.cache,internal_quantity",0,Internal Quantity,Quantité interne,0
+field,"stock.period.cache,location",0,Location,Emplacement,1
+field,"stock.period.cache,period",0,Period,Période,1
+field,"stock.period.cache,product",0,Product,Produit,1
+field,"stock.period.cache,rec_name",0,Name,Nom de la pièce jointe,1
field,"stock.product_stock_date.init,forecast_date",0,At Date,Ã la date,0
field,"stock.shipment.in,code",0,Code,Code,0
field,"stock.shipment.in,contact_address",0,Contact Address,Adresse de contact,0
@@ -158,13 +174,14 @@ help,"stock.product_stock_date.init,forecast_date",0,"Allow to compute expected
model,"ir.action,name",act_inventory_form,Inventories,Inventaires,0
model,"ir.action,name",act_inventory_form2,Inventories,Inventaires,0
model,"ir.action,name",act_inventory_form_draft,Draft Inventories,Inventaires brouillons,0
-model,"ir.action,name",act_location_form,Edit Locations,Ãditer les emplacements,0
+model,"ir.action,name",act_location_form,Locations,Ãditer les emplacements,0
model,"ir.action,name",act_location_quantity_tree,Product Stock,Quantités en stock,0
model,"ir.action,name",act_location_tree,Locations,Emplacements,0
model,"ir.action,name",act_move_form,Moves,Mouvements,0
model,"ir.action,name",act_move_form_cust,Moves to Customers,Mouvements clients,0
model,"ir.action,name",act_move_form_supp,Moves from Suppliers,Mouvements fournisseurs,0
model,"ir.action,name",act_move_form_supp_proceed,Moves from Suppliers Waiting Arrival,Mouvement fournisseur en attente de réception,0
+model,"ir.action,name",act_period_list,Periods,Périodes,1
model,"ir.action,name",act_product_by_location,Products by Locations,Produits par emplacements,0
model,"ir.action,name",act_shipment_in_form,Supplier Shipments,Expéditions fournisseur,0
model,"ir.action,name",act_shipment_in_form2,New Supplier Shipment,Nouvelle expédition fournisseur,0
@@ -211,12 +228,13 @@ model,"ir.ui.menu,name",menu_configuration,Configuration,Configuration,0
model,"ir.ui.menu,name",menu_inventory_form,Inventories,Inventaires,0
model,"ir.ui.menu,name",menu_inventory_form_draft,Draft Inventories,Inventaires brouillons,0
model,"ir.ui.menu,name",menu_inventory_form_new,New Inventory,Nouvel inventaire,0
-model,"ir.ui.menu,name",menu_location_form,Edit Locations,Ãditer les emplacements,0
+model,"ir.ui.menu,name",menu_location_form,Locations,Ãditer les emplacements,0
model,"ir.ui.menu,name",menu_location_tree,Locations,Emplacements,0
model,"ir.ui.menu,name",menu_move_form,Moves,Mouvements,0
model,"ir.ui.menu,name",menu_move_form_cust,Moves to Customers,Mouvements clients,0
model,"ir.ui.menu,name",menu_move_form_supp,Moves from Suppliers,Mouvements fournisseurs,0
model,"ir.ui.menu,name",menu_move_form_supp_proceed,Moves from Suppliers Waiting Arrival,Mouvements fournisseur en attente de réception,0
+model,"ir.ui.menu,name",menu_period_list,Periods,Périodes,1
model,"ir.ui.menu,name",menu_reporting,Reporting,Rapports,0
model,"ir.ui.menu,name",menu_shipment_in_form,Supplier Shipments,Expéditions fournisseur,0
model,"ir.ui.menu,name",menu_shipment_in_form2,New Supplier Shipment,Nouvelle expédition fournisseur,0
@@ -243,15 +261,21 @@ model,"stock.configuration,name",0,Stock Configuration,Configuration des stocks,
model,"stock.inventory,name",0,Stock Inventory,Inventaire du stock,0
model,"stock.inventory.line,name",0,Stock Inventory Line,Ligne d'inventaire de stock,0
model,"stock.location,name",0,Stock Location,Lieu de Stockage,0
-model,"stock.location,name",location_customer,Customer,Client,0
+model,"stock.location,name",location_customer,Customer,Client,1
model,"stock.location,name",location_input,Input Zone,Zone d'entrée,0
-model,"stock.location,name",location_lost_found,Lost and Found,Pertes et surplus,0
+model,"stock.location,name",location_lost_found,Lost and Found,Pertes et surplus,1
model,"stock.location,name",location_output,Output Zone,Zone de sortie,0
-model,"stock.location,name",location_storage,Storage Zone,Zone rangement,0
-model,"stock.location,name",location_supplier,Supplier,Fournisseur,0
-model,"stock.location,name",location_warehouse,Warehouse,Entrepôt,0
+model,"stock.location,name",location_storage,Storage Zone,Zone de stockage,0
+model,"stock.location,name",location_supplier,Supplier,Fournisseur,1
+model,"stock.location,name",location_warehouse,Warehouse,Entrepôt,1
model,"stock.location_stock_date.init,name",0,Compute stock quantities,Quantité de stock calculées,0
model,"stock.move,name",0,Stock Move,Mouvement de stock,0
+model,"stock.period,name",0,Stock Period,Période de stock,0
+model,"stock.period.cache,name",0,"
+ Stock Period Cache
+
+ It is used to store cached computation of stock quantities.
+ ",,0
model,"stock.product_stock_date.init,name",0,Compute stock quantities,Quantités de stock calculées,0
model,"stock.shipment.in,name",0,Supplier Shipment,Expédition fournisseur,0
model,"stock.shipment.in.return,name",0,Supplier Return Shipment,Retour d'expédition fournisseur,0
@@ -375,6 +399,8 @@ selection,"stock.move,state",0,Assigned,Assigné,0
selection,"stock.move,state",0,Canceled,Annulé,0
selection,"stock.move,state",0,Done,Fait,0
selection,"stock.move,state",0,Draft,Brouillon,0
+selection,"stock.period,state",0,Closed,Fermé,1
+selection,"stock.period,state",0,Draft,Brouillon,1
selection,"stock.shipment.in,state",0,Canceled,Annulé,0
selection,"stock.shipment.in,state",0,Done,Fait,0
selection,"stock.shipment.in,state",0,Draft,Brouillon,0
@@ -419,6 +445,12 @@ view,stock.location,0,Product Stock,Quantités en stock,0
view,stock.location_stock_date.init,0,Product Quantity.,Quantité de produit,0
view,stock.move,0,Move,Mouvement,0
view,stock.move,0,Moves,Mouvements,0
+view,stock.period,0,Close,Fermer,1
+view,stock.period,0,Draft,Brouillon,1
+view,stock.period,0,Period,Période,1
+view,stock.period,0,Periods,Périodes,1
+view,stock.period.cache,0,Period Cache,Cache de la période,0
+view,stock.period.cache,0,Period Caches,Caches des périodes,0
view,stock.product_stock_date.init,0,Product Quantity.,Quantité Produit :,0
view,stock.shipment.in,0,Cancel,Annuler,0
view,stock.shipment.in,0,Done,Fait,0
diff --git a/icons/LICENSE b/icons/LICENSE
new file mode 100644
index 0000000..11782c0
--- /dev/null
+++ b/icons/LICENSE
@@ -0,0 +1,264 @@
+ [1]Creative Commons
+
+ Creative Commons Legal Code
+
+ Attribution-ShareAlike 2.0
+ CREATIVE COMMONS CORPORATION IS NOT A LAW FIRM AND DOES NOT PROVIDE
+ LEGAL SERVICES. DISTRIBUTION OF THIS LICENSE DOES NOT CREATE AN
+ ATTORNEY-CLIENT RELATIONSHIP. CREATIVE COMMONS PROVIDES THIS
+ INFORMATION ON AN "AS-IS" BASIS. CREATIVE COMMONS MAKES NO WARRANTIES
+ REGARDING THE INFORMATION PROVIDED, AND DISCLAIMS LIABILITY FOR
+ DAMAGES RESULTING FROM ITS USE.
+
+ License
+
+ THE WORK (AS DEFINED BELOW) IS PROVIDED UNDER THE TERMS OF THIS
+ CREATIVE COMMONS PUBLIC LICENSE ("CCPL" OR "LICENSE"). THE WORK IS
+ PROTECTED BY COPYRIGHT AND/OR OTHER APPLICABLE LAW. ANY USE OF THE
+ WORK OTHER THAN AS AUTHORIZED UNDER THIS LICENSE OR COPYRIGHT LAW IS
+ PROHIBITED.
+
+ BY EXERCISING ANY RIGHTS TO THE WORK PROVIDED HERE, YOU ACCEPT AND
+ AGREE TO BE BOUND BY THE TERMS OF THIS LICENSE. THE LICENSOR GRANTS
+ YOU THE RIGHTS CONTAINED HERE IN CONSIDERATION OF YOUR ACCEPTANCE OF
+ SUCH TERMS AND CONDITIONS.
+
+ 1. Definitions
+ a. "Collective Work" means a work, such as a periodical issue,
+ anthology or encyclopedia, in which the Work in its entirety in
+ unmodified form, along with a number of other contributions,
+ constituting separate and independent works in themselves, are
+ assembled into a collective whole. A work that constitutes a
+ Collective Work will not be considered a Derivative Work (as
+ defined below) for the purposes of this License.
+ b. "Derivative Work" means a work based upon the Work or upon the
+ Work and other pre-existing works, such as a translation, musical
+ arrangement, dramatization, fictionalization, motion picture
+ version, sound recording, art reproduction, abridgment,
+ condensation, or any other form in which the Work may be recast,
+ transformed, or adapted, except that a work that constitutes a
+ Collective Work will not be considered a Derivative Work for the
+ purpose of this License. For the avoidance of doubt, where the
+ Work is a musical composition or sound recording, the
+ synchronization of the Work in timed-relation with a moving image
+ ("synching") will be considered a Derivative Work for the purpose
+ of this License.
+ c. "Licensor" means the individual or entity that offers the Work
+ under the terms of this License.
+ d. "Original Author" means the individual or entity who created the
+ Work.
+ e. "Work" means the copyrightable work of authorship offered under
+ the terms of this License.
+ f. "You" means an individual or entity exercising rights under this
+ License who has not previously violated the terms of this License
+ with respect to the Work, or who has received express permission
+ from the Licensor to exercise rights under this License despite a
+ previous violation.
+ g. "License Elements" means the following high-level license
+ attributes as selected by Licensor and indicated in the title of
+ this License: Attribution, ShareAlike.
+
+ 2. Fair Use Rights. Nothing in this license is intended to reduce,
+ limit, or restrict any rights arising from fair use, first sale or
+ other limitations on the exclusive rights of the copyright owner under
+ copyright law or other applicable laws.
+
+ 3. License Grant. Subject to the terms and conditions of this License,
+ Licensor hereby grants You a worldwide, royalty-free, non-exclusive,
+ perpetual (for the duration of the applicable copyright) license to
+ exercise the rights in the Work as stated below:
+ a. to reproduce the Work, to incorporate the Work into one or more
+ Collective Works, and to reproduce the Work as incorporated in the
+ Collective Works;
+ b. to create and reproduce Derivative Works;
+ c. to distribute copies or phonorecords of, display publicly, perform
+ publicly, and perform publicly by means of a digital audio
+ transmission the Work including as incorporated in Collective
+ Works;
+ d. to distribute copies or phonorecords of, display publicly, perform
+ publicly, and perform publicly by means of a digital audio
+ transmission Derivative Works.
+ e. For the avoidance of doubt, where the work is a musical
+ composition:
+ i. Performance Royalties Under Blanket Licenses. Licensor waives
+ the exclusive right to collect, whether individually or via a
+ performance rights society (e.g. ASCAP, BMI, SESAC),
+ royalties for the public performance or public digital
+ performance (e.g. webcast) of the Work.
+ ii. Mechanical Rights and Statutory Royalties. Licensor waives
+ the exclusive right to collect, whether individually or via a
+ music rights society or designated agent (e.g. Harry Fox
+ Agency), royalties for any phonorecord You create from the
+ Work ("cover version") and distribute, subject to the
+ compulsory license created by 17 USC Section 115 of the US
+ Copyright Act (or the equivalent in other jurisdictions).
+ f. Webcasting Rights and Statutory Royalties. For the avoidance of
+ doubt, where the Work is a sound recording, Licensor waives the
+ exclusive right to collect, whether individually or via a
+ performance-rights society (e.g. SoundExchange), royalties for the
+ public digital performance (e.g. webcast) of the Work, subject to
+ the compulsory license created by 17 USC Section 114 of the US
+ Copyright Act (or the equivalent in other jurisdictions).
+
+ The above rights may be exercised in all media and formats whether now
+ known or hereafter devised. The above rights include the right to make
+ such modifications as are technically necessary to exercise the rights
+ in other media and formats. All rights not expressly granted by
+ Licensor are hereby reserved.
+
+ 4. Restrictions.The license granted in Section 3 above is expressly
+ made subject to and limited by the following restrictions:
+ a. You may distribute, publicly display, publicly perform, or
+ publicly digitally perform the Work only under the terms of this
+ License, and You must include a copy of, or the Uniform Resource
+ Identifier for, this License with every copy or phonorecord of the
+ Work You distribute, publicly display, publicly perform, or
+ publicly digitally perform. You may not offer or impose any terms
+ on the Work that alter or restrict the terms of this License or
+ the recipients' exercise of the rights granted hereunder. You may
+ not sublicense the Work. You must keep intact all notices that
+ refer to this License and to the disclaimer of warranties. You may
+ not distribute, publicly display, publicly perform, or publicly
+ digitally perform the Work with any technological measures that
+ control access or use of the Work in a manner inconsistent with
+ the terms of this License Agreement. The above applies to the Work
+ as incorporated in a Collective Work, but this does not require
+ the Collective Work apart from the Work itself to be made subject
+ to the terms of this License. If You create a Collective Work,
+ upon notice from any Licensor You must, to the extent practicable,
+ remove from the Collective Work any reference to such Licensor or
+ the Original Author, as requested. If You create a Derivative
+ Work, upon notice from any Licensor You must, to the extent
+ practicable, remove from the Derivative Work any reference to such
+ Licensor or the Original Author, as requested.
+ b. You may distribute, publicly display, publicly perform, or
+ publicly digitally perform a Derivative Work only under the terms
+ of this License, a later version of this License with the same
+ License Elements as this License, or a Creative Commons iCommons
+ license that contains the same License Elements as this License
+ (e.g. Attribution-ShareAlike 2.0 Japan). You must include a copy
+ of, or the Uniform Resource Identifier for, this License or other
+ license specified in the previous sentence with every copy or
+ phonorecord of each Derivative Work You distribute, publicly
+ display, publicly perform, or publicly digitally perform. You may
+ not offer or impose any terms on the Derivative Works that alter
+ or restrict the terms of this License or the recipients' exercise
+ of the rights granted hereunder, and You must keep intact all
+ notices that refer to this License and to the disclaimer of
+ warranties. You may not distribute, publicly display, publicly
+ perform, or publicly digitally perform the Derivative Work with
+ any technological measures that control access or use of the Work
+ in a manner inconsistent with the terms of this License Agreement.
+ The above applies to the Derivative Work as incorporated in a
+ Collective Work, but this does not require the Collective Work
+ apart from the Derivative Work itself to be made subject to the
+ terms of this License.
+ c. If you distribute, publicly display, publicly perform, or publicly
+ digitally perform the Work or any Derivative Works or Collective
+ Works, You must keep intact all copyright notices for the Work and
+ give the Original Author credit reasonable to the medium or means
+ You are utilizing by conveying the name (or pseudonym if
+ applicable) of the Original Author if supplied; the title of the
+ Work if supplied; to the extent reasonably practicable, the
+ Uniform Resource Identifier, if any, that Licensor specifies to be
+ associated with the Work, unless such URI does not refer to the
+ copyright notice or licensing information for the Work; and in the
+ case of a Derivative Work, a credit identifying the use of the
+ Work in the Derivative Work (e.g., "French translation of the Work
+ by Original Author," or "Screenplay based on original Work by
+ Original Author"). Such credit may be implemented in any
+ reasonable manner; provided, however, that in the case of a
+ Derivative Work or Collective Work, at a minimum such credit will
+ appear where any other comparable authorship credit appears and in
+ a manner at least as prominent as such other comparable authorship
+ credit.
+
+ 5. Representations, Warranties and Disclaimer
+
+ UNLESS OTHERWISE AGREED TO BY THE PARTIES IN WRITING, LICENSOR OFFERS
+ THE WORK AS-IS AND MAKES NO REPRESENTATIONS OR WARRANTIES OF ANY KIND
+ CONCERNING THE MATERIALS, EXPRESS, IMPLIED, STATUTORY OR OTHERWISE,
+ INCLUDING, WITHOUT LIMITATION, WARRANTIES OF TITLE, MERCHANTIBILITY,
+ FITNESS FOR A PARTICULAR PURPOSE, NONINFRINGEMENT, OR THE ABSENCE OF
+ LATENT OR OTHER DEFECTS, ACCURACY, OR THE PRESENCE OF ABSENCE OF
+ ERRORS, WHETHER OR NOT DISCOVERABLE. SOME JURISDICTIONS DO NOT ALLOW
+ THE EXCLUSION OF IMPLIED WARRANTIES, SO SUCH EXCLUSION MAY NOT APPLY
+ TO YOU.
+
+ 6. Limitation on Liability. EXCEPT TO THE EXTENT REQUIRED BY
+ APPLICABLE LAW, IN NO EVENT WILL LICENSOR BE LIABLE TO YOU ON ANY
+ LEGAL THEORY FOR ANY SPECIAL, INCIDENTAL, CONSEQUENTIAL, PUNITIVE OR
+ EXEMPLARY DAMAGES ARISING OUT OF THIS LICENSE OR THE USE OF THE WORK,
+ EVEN IF LICENSOR HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
+
+ 7. Termination
+ a. This License and the rights granted hereunder will terminate
+ automatically upon any breach by You of the terms of this License.
+ Individuals or entities who have received Derivative Works or
+ Collective Works from You under this License, however, will not
+ have their licenses terminated provided such individuals or
+ entities remain in full compliance with those licenses. Sections
+ 1, 2, 5, 6, 7, and 8 will survive any termination of this License.
+ b. Subject to the above terms and conditions, the license granted
+ here is perpetual (for the duration of the applicable copyright in
+ the Work). Notwithstanding the above, Licensor reserves the right
+ to release the Work under different license terms or to stop
+ distributing the Work at any time; provided, however that any such
+ election will not serve to withdraw this License (or any other
+ license that has been, or is required to be, granted under the
+ terms of this License), and this License will continue in full
+ force and effect unless terminated as stated above.
+
+ 8. Miscellaneous
+ a. Each time You distribute or publicly digitally perform the Work or
+ a Collective Work, the Licensor offers to the recipient a license
+ to the Work on the same terms and conditions as the license
+ granted to You under this License.
+ b. Each time You distribute or publicly digitally perform a
+ Derivative Work, Licensor offers to the recipient a license to the
+ original Work on the same terms and conditions as the license
+ granted to You under this License.
+ c. If any provision of this License is invalid or unenforceable under
+ applicable law, it shall not affect the validity or enforceability
+ of the remainder of the terms of this License, and without further
+ action by the parties to this agreement, such provision shall be
+ reformed to the minimum extent necessary to make such provision
+ valid and enforceable.
+ d. No term or provision of this License shall be deemed waived and no
+ breach consented to unless such waiver or consent shall be in
+ writing and signed by the party to be charged with such waiver or
+ consent.
+ e. This License constitutes the entire agreement between the parties
+ with respect to the Work licensed here. There are no
+ understandings, agreements or representations with respect to the
+ Work not specified here. Licensor shall not be bound by any
+ additional provisions that may appear in any communication from
+ You. This License may not be modified without the mutual written
+ agreement of the Licensor and You.
+
+ Creative Commons is not a party to this License, and makes no warranty
+ whatsoever in connection with the Work. Creative Commons will not be
+ liable to You or any party on any legal theory for any damages
+ whatsoever, including without limitation any general, special,
+ incidental or consequential damages arising in connection to this
+ license. Notwithstanding the foregoing two (2) sentences, if Creative
+ Commons has expressly identified itself as the Licensor hereunder, it
+ shall have all rights and obligations of Licensor.
+
+ Except for the limited purpose of indicating to the public that the
+ Work is licensed under the CCPL, neither party will use the trademark
+ "Creative Commons" or any related trademark or logo of Creative
+ Commons without the prior written consent of Creative Commons. Any
+ permitted use will be in compliance with Creative Commons'
+ then-current trademark usage guidelines, as may be published on its
+ website or otherwise made available upon request from time to time.
+
+ Creative Commons may be contacted at [2]http://creativecommons.org/.
+
+ [3]« Back to Commons Deed
+
+References
+
+ 1. http://creativecommons.org/
+ 2. http://creativecommons.org/
+ 3. http://creativecommons.org/licenses/by-sa/2.0/
diff --git a/icons/__init__.py b/icons/__init__.py
new file mode 100644
index 0000000..e69de29
diff --git a/icons/tryton-inventory.svg b/icons/tryton-inventory.svg
new file mode 100644
index 0000000..dced3c4
--- /dev/null
+++ b/icons/tryton-inventory.svg
@@ -0,0 +1,483 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://web.resource.org/cc/"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ sodipodi:docname="package-x-generic.svg"
+ sodipodi:docbase="/home/jimmac/src/cvs/tango-icon-theme/scalable/mimetypes"
+ inkscape:version="0.43+devel"
+ sodipodi:version="0.32"
+ id="svg2963"
+ height="48px"
+ width="48px">
+ <defs
+ id="defs3">
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient5060"
+ id="radialGradient6719"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(-2.774389,0,0,1.969706,112.7623,-872.8854)"
+ cx="605.71429"
+ cy="486.64789"
+ fx="605.71429"
+ fy="486.64789"
+ r="117.14286" />
+ <linearGradient
+ inkscape:collect="always"
+ id="linearGradient5060">
+ <stop
+ style="stop-color:black;stop-opacity:1;"
+ offset="0"
+ id="stop5062" />
+ <stop
+ style="stop-color:black;stop-opacity:0;"
+ offset="1"
+ id="stop5064" />
+ </linearGradient>
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient5060"
+ id="radialGradient6717"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(2.774389,0,0,1.969706,-1891.633,-872.8854)"
+ cx="605.71429"
+ cy="486.64789"
+ fx="605.71429"
+ fy="486.64789"
+ r="117.14286" />
+ <linearGradient
+ id="linearGradient5048">
+ <stop
+ style="stop-color:black;stop-opacity:0;"
+ offset="0"
+ id="stop5050" />
+ <stop
+ id="stop5056"
+ offset="0.5"
+ style="stop-color:black;stop-opacity:1;" />
+ <stop
+ style="stop-color:black;stop-opacity:0;"
+ offset="1"
+ id="stop5052" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient5048"
+ id="linearGradient6715"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(2.774389,0,0,1.969706,-1892.179,-872.8854)"
+ x1="302.85715"
+ y1="366.64789"
+ x2="302.85715"
+ y2="609.50507" />
+ <linearGradient
+ inkscape:collect="always"
+ id="linearGradient2884">
+ <stop
+ style="stop-color:#000000;stop-opacity:1;"
+ offset="0"
+ id="stop2886" />
+ <stop
+ style="stop-color:#000000;stop-opacity:0;"
+ offset="1"
+ id="stop2888" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient2869">
+ <stop
+ style="stop-color:#ffffff;stop-opacity:1;"
+ offset="0"
+ id="stop2871" />
+ <stop
+ style="stop-color:#cccccc;stop-opacity:1.0000000;"
+ offset="1.0000000"
+ id="stop2873" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient4995">
+ <stop
+ id="stop4997"
+ offset="0"
+ style="stop-color:#de9523;stop-opacity:1;" />
+ <stop
+ id="stop4999"
+ offset="1.0000000"
+ style="stop-color:#a36d18;stop-opacity:1.0000000;" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient4987"
+ inkscape:collect="always">
+ <stop
+ id="stop4989"
+ offset="0"
+ style="stop-color:#a0670c;stop-opacity:1;" />
+ <stop
+ id="stop4991"
+ offset="1"
+ style="stop-color:#a0670c;stop-opacity:0;" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient4979">
+ <stop
+ id="stop4981"
+ offset="0.0000000"
+ style="stop-color:#fbf0e0;stop-opacity:1.0000000;" />
+ <stop
+ id="stop4983"
+ offset="1.0000000"
+ style="stop-color:#f0ce99;stop-opacity:1.0000000;" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient4946"
+ inkscape:collect="always">
+ <stop
+ id="stop4948"
+ offset="0"
+ style="stop-color:#000000;stop-opacity:1;" />
+ <stop
+ id="stop4950"
+ offset="1"
+ style="stop-color:#000000;stop-opacity:0;" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient4222">
+ <stop
+ id="stop4224"
+ offset="0"
+ style="stop-color:#ffffff;stop-opacity:1;" />
+ <stop
+ id="stop4226"
+ offset="1.0000000"
+ style="stop-color:#ffffff;stop-opacity:0.68639052;" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient4210">
+ <stop
+ id="stop4212"
+ offset="0.0000000"
+ style="stop-color:#eaba6f;stop-opacity:1.0000000;" />
+ <stop
+ id="stop4214"
+ offset="1.0000000"
+ style="stop-color:#b97a1b;stop-opacity:1.0000000;" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient4192">
+ <stop
+ id="stop4194"
+ offset="0"
+ style="stop-color:#e9b96e;stop-opacity:1;" />
+ <stop
+ id="stop4196"
+ offset="1.0000000"
+ style="stop-color:#f1d19e;stop-opacity:1.0000000;" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient4182">
+ <stop
+ id="stop4184"
+ offset="0.0000000"
+ style="stop-color:#a36d18;stop-opacity:1.0000000;" />
+ <stop
+ id="stop4186"
+ offset="1.0000000"
+ style="stop-color:#d79020;stop-opacity:1.0000000;" />
+ </linearGradient>
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4946"
+ id="radialGradient2252"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.000000,0.000000,0.000000,0.333333,2.658463e-16,23.58206)"
+ cx="22.930462"
+ cy="35.373093"
+ fx="22.930462"
+ fy="35.373093"
+ r="17.576654" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4979"
+ id="linearGradient2269"
+ gradientUnits="userSpaceOnUse"
+ x1="30.062469"
+ y1="13.444801"
+ x2="17.696169"
+ y2="12.333632" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4995"
+ id="linearGradient2274"
+ gradientUnits="userSpaceOnUse"
+ x1="36.288929"
+ y1="14.661557"
+ x2="47.065835"
+ y2="15.267649" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4192"
+ id="linearGradient2277"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.000000,0.000000,0.000000,0.986355,0.000000,0.316638)"
+ x1="25.381256"
+ y1="24.720648"
+ x2="24.119167"
+ y2="16.170370" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4182"
+ id="linearGradient2280"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.000000,0.000000,0.000000,1.039184,0.000000,-4.057054e-2)"
+ x1="16.148972"
+ y1="12.636667"
+ x2="34.193642"
+ y2="12.636667" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4987"
+ id="linearGradient2282"
+ gradientUnits="userSpaceOnUse"
+ x1="21.906841"
+ y1="9.7577486"
+ x2="22.071806"
+ y2="16.020695" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4222"
+ id="linearGradient2285"
+ gradientUnits="userSpaceOnUse"
+ x1="18.706615"
+ y1="19.912336"
+ x2="30.014812"
+ y2="47.388485" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4210"
+ id="linearGradient2288"
+ gradientUnits="userSpaceOnUse"
+ x1="24.990499"
+ y1="34.004856"
+ x2="24.990499"
+ y2="22.585211" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient2884"
+ id="radialGradient2896"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.353283,5.468101e-16,-1.144754e-13,0.635968,-8.458890,3.413470)"
+ cx="23.943670"
+ cy="20.800287"
+ fx="23.943670"
+ fy="20.800287"
+ r="6.4286140" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient2869"
+ id="radialGradient2898"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.749420,0.000000,0.000000,0.394055,6.226925,10.09253)"
+ cx="21.578989"
+ cy="9.0255041"
+ fx="21.578989"
+ fy="9.0255041"
+ r="9.5862970" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient2884"
+ id="radialGradient2906"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.353283,5.468101e-16,-1.144754e-13,0.635968,-8.458890,3.413470)"
+ cx="23.943670"
+ cy="20.800287"
+ fx="23.943670"
+ fy="20.800287"
+ r="6.4286140" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient2869"
+ id="radialGradient2908"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.749420,0.000000,0.000000,0.394055,6.226925,10.09253)"
+ cx="21.578989"
+ cy="9.8105707"
+ fx="21.578989"
+ fy="9.8105707"
+ r="9.5862970" />
+ </defs>
+ <sodipodi:namedview
+ inkscape:window-y="242"
+ inkscape:window-x="392"
+ inkscape:window-height="706"
+ inkscape:window-width="872"
+ stroke="#c17d11"
+ fill="#e9b96e"
+ inkscape:showpageshadow="false"
+ inkscape:document-units="px"
+ inkscape:grid-bbox="true"
+ showgrid="false"
+ inkscape:current-layer="layer1"
+ inkscape:cy="39.004018"
+ inkscape:cx="74.637005"
+ inkscape:zoom="1"
+ inkscape:pageshadow="2"
+ inkscape:pageopacity="0.0"
+ borderopacity="0.16470588"
+ bordercolor="#666666"
+ pagecolor="#ffffff"
+ id="base" />
+ <metadata
+ id="metadata4">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title>Package</dc:title>
+ <dc:creator>
+ <cc:Agent>
+ <dc:title>Jakub Steiner</dc:title>
+ </cc:Agent>
+ </dc:creator>
+ <dc:source>http://jimmac.musichall.cz/</dc:source>
+ <dc:subject>
+ <rdf:Bag>
+ <rdf:li>package</rdf:li>
+ <rdf:li>archive</rdf:li>
+ <rdf:li>tarball</rdf:li>
+ <rdf:li>tar</rdf:li>
+ <rdf:li>bzip</rdf:li>
+ <rdf:li>gzip</rdf:li>
+ <rdf:li>zip</rdf:li>
+ <rdf:li>arj</rdf:li>
+ <rdf:li>tar</rdf:li>
+ <rdf:li>jar</rdf:li>
+ </rdf:Bag>
+ </dc:subject>
+ <cc:license
+ rdf:resource="http://creativecommons.org/licenses/by-sa/2.0/" />
+ </cc:Work>
+ <cc:License
+ rdf:about="http://creativecommons.org/licenses/by-sa/2.0/">
+ <cc:permits
+ rdf:resource="http://web.resource.org/cc/Reproduction" />
+ <cc:permits
+ rdf:resource="http://web.resource.org/cc/Distribution" />
+ <cc:requires
+ rdf:resource="http://web.resource.org/cc/Notice" />
+ <cc:requires
+ rdf:resource="http://web.resource.org/cc/Attribution" />
+ <cc:permits
+ rdf:resource="http://web.resource.org/cc/DerivativeWorks" />
+ <cc:requires
+ rdf:resource="http://web.resource.org/cc/ShareAlike" />
+ </cc:License>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:groupmode="layer"
+ inkscape:label="Layer 1"
+ id="layer1">
+ <g
+ style="display:inline"
+ transform="matrix(2.105461e-2,0,0,2.086758e-2,42.60172,35.4036)"
+ id="g6707">
+ <rect
+ style="opacity:0.40206185;color:black;fill:url(#linearGradient6715);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+ id="rect6709"
+ width="1339.6335"
+ height="478.35718"
+ x="-1559.2523"
+ y="-150.69685" />
+ <path
+ style="opacity:0.40206185;color:black;fill:url(#radialGradient6717);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+ d="M -219.61876,-150.68038 C -219.61876,-150.68038 -219.61876,327.65041 -219.61876,327.65041 C -76.744594,328.55086 125.78146,220.48075 125.78138,88.454235 C 125.78138,-43.572302 -33.655436,-150.68036 -219.61876,-150.68038 z "
+ id="path6711"
+ sodipodi:nodetypes="cccc" />
+ <path
+ sodipodi:nodetypes="cccc"
+ id="path6713"
+ d="M -1559.2523,-150.68038 C -1559.2523,-150.68038 -1559.2523,327.65041 -1559.2523,327.65041 C -1702.1265,328.55086 -1904.6525,220.48075 -1904.6525,88.454235 C -1904.6525,-43.572302 -1745.2157,-150.68036 -1559.2523,-150.68038 z "
+ style="opacity:0.40206185;color:black;fill:url(#radialGradient6719);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" />
+ </g>
+ <rect
+ ry="2.3944440"
+ rx="2.4241352"
+ y="15.275433"
+ x="7.4623847"
+ height="23.112879"
+ width="31.978371"
+ id="rect3115"
+ style="opacity:1.0000000;color:#000000;fill:url(#linearGradient2288);fill-opacity:1.0000000;fill-rule:nonzero;stroke:#a0670c;stroke-width:1.0000007;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4.0000000;stroke-dasharray:none;stroke-dashoffset:0.0000000;stroke-opacity:1.0000000;visibility:visible;display:block;overflow:visible" />
+ <rect
+ style="opacity:0.48101267;color:#000000;fill:none;fill-opacity:1.0000000;fill-rule:nonzero;stroke:url(#linearGradient2285);stroke-width:1.0000011;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4.0000000;stroke-dasharray:none;stroke-dashoffset:0.0000000;stroke-opacity:1.0000000;visibility:visible;display:block;overflow:visible"
+ id="rect4220"
+ width="29.804138"
+ height="21.075352"
+ x="8.4989996"
+ y="16.243698"
+ rx="1.2846882"
+ ry="1.2846882" />
+ <path
+ sodipodi:nodetypes="ccccc"
+ id="path4162"
+ d="M 8.7697819,16.547178 L 13.819731,9.7363408 L 32.615291,9.6353255 L 37.835264,16.408941 L 8.7697819,16.547178 z "
+ style="fill:url(#linearGradient2280);fill-opacity:1.0000000;fill-rule:evenodd;stroke:url(#linearGradient2282);stroke-width:1.0000008;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4.0000000;stroke-dasharray:none;stroke-opacity:1.0000000" />
+ <path
+ sodipodi:nodetypes="ccccc"
+ id="path4164"
+ d="M 38.276321,16.325703 L 43.469269,23.520364 L 3.9609455,23.520364 L 8.6250143,16.320763 L 38.276321,16.325703 z "
+ style="opacity:1.0000000;color:#000000;fill:url(#linearGradient2277);fill-opacity:1.0000000;fill-rule:nonzero;stroke:#a0670c;stroke-width:1.0000005;stroke-linecap:round;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4.0000000;stroke-dasharray:none;stroke-dashoffset:0.0000000;stroke-opacity:1.0000000;visibility:visible;display:block;overflow:visible" />
+ <path
+ sodipodi:nodetypes="ccccc"
+ id="path4178"
+ d="M 32.849333,9.6141009 L 37.532219,16.536370 L 46.565835,20.921197 L 38.451329,12.008545 L 32.849333,9.6141009 z "
+ style="opacity:1.0000000;color:#000000;fill:url(#linearGradient2274);fill-opacity:1.0000000;fill-rule:nonzero;stroke:#a0670c;stroke-width:1.0000005;stroke-linecap:round;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4.0000000;stroke-dasharray:none;stroke-dashoffset:0.0000000;stroke-opacity:1.0000000;visibility:visible;display:block;overflow:visible" />
+ <path
+ sodipodi:nodetypes="ccccc"
+ style="opacity:1.0000000;color:#000000;fill:#f8e8cf;fill-opacity:1.0000000;fill-rule:nonzero;stroke:#a0670c;stroke-width:1.0000000;stroke-linecap:round;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4.0000000;stroke-dasharray:none;stroke-dashoffset:0.0000000;stroke-opacity:1.0000000;visibility:visible;display:block;overflow:visible"
+ d="M 13.617702,9.7151161 L 9.6419233,16.435355 L 0.50729183,20.820182 L 8.6217973,11.907530 L 13.617702,9.7151161 z "
+ id="path4180" />
+ <path
+ style="opacity:1.0000000;color:#000000;fill:none;fill-opacity:1.0000000;fill-rule:nonzero;stroke:#f4e3ca;stroke-width:1.0000000;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4.0000000;stroke-dasharray:none;stroke-dashoffset:0.0000000;stroke-opacity:1.0000000;visibility:visible;display:block;overflow:visible"
+ d="M 37.024959,16.436050 L 41.478871,22.493011 L 5.6482792,22.493011 L 9.7892982,16.312694 L 37.024959,16.436050 z "
+ id="path4954"
+ sodipodi:nodetypes="ccccc" />
+ <g
+ id="g2892"
+ transform="matrix(0.676538,0.000000,0.000000,1.000000,3.994869,0.000000)">
+ <path
+ style="opacity:1.0000000;color:#000000;fill:url(#radialGradient2896);fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:2.0000000;stroke-linecap:round;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4.0000000;stroke-dasharray:none;stroke-dashoffset:0.0000000;stroke-opacity:1.0000000;visibility:visible;display:inline;overflow:visible"
+ d="M 23.926073,12.101621 C 18.588065,12.101621 14.282569,14.129809 14.282569,16.641813 L 33.604773,16.641813 C 33.604773,14.129809 29.264081,12.101621 23.926073,12.101621 z "
+ id="path2882" />
+ <path
+ id="path2141"
+ d="M 23.931961,12.861168 C 20.379986,12.861168 17.515057,14.210748 17.515057,15.882266 L 30.372285,15.882266 C 30.372285,14.210748 27.483936,12.861168 23.931961,12.861168 z "
+ style="opacity:1.0000000;color:#000000;fill:url(#radialGradient2898);fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:2.0000000;stroke-linecap:round;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4.0000000;stroke-dasharray:none;stroke-dashoffset:0.0000000;stroke-opacity:1.0000000;visibility:visible;display:inline;overflow:visible" />
+ </g>
+ <g
+ transform="matrix(0.676538,0.000000,0.000000,1.000000,10.49487,0.000000)"
+ id="g2900">
+ <path
+ id="path2902"
+ d="M 23.926073,12.101621 C 18.588065,12.101621 14.282569,14.129809 14.282569,16.641813 L 33.604773,16.641813 C 33.604773,14.129809 29.264081,12.101621 23.926073,12.101621 z "
+ style="opacity:1.0000000;color:#000000;fill:url(#radialGradient2906);fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:2.0000000;stroke-linecap:round;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4.0000000;stroke-dasharray:none;stroke-dashoffset:0.0000000;stroke-opacity:1.0000000;visibility:visible;display:inline;overflow:visible" />
+ <path
+ style="opacity:1.0000000;color:#000000;fill:url(#radialGradient2908);fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:2.0000000;stroke-linecap:round;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4.0000000;stroke-dasharray:none;stroke-dashoffset:0.0000000;stroke-opacity:1.0000000;visibility:visible;display:inline;overflow:visible"
+ d="M 23.931961,12.861168 C 20.379986,12.861168 17.515057,14.210748 17.515057,15.882266 L 30.372285,15.882266 C 30.372285,14.210748 27.483936,12.861168 23.931961,12.861168 z "
+ id="path2904" />
+ </g>
+ <path
+ style="opacity:0.87974685;fill:none;fill-opacity:1.0000000;fill-rule:evenodd;stroke:url(#linearGradient2269);stroke-width:1.0000000;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4.0000000;stroke-dasharray:none;stroke-opacity:1.0000000"
+ d="M 9.6523127,16.371803 L 13.036643,10.593020 L 33.514841,10.517799 L 37.356782,16.369880 L 9.6523127,16.371803 z "
+ id="path4966"
+ sodipodi:nodetypes="ccccc" />
+ </g>
+</svg>
diff --git a/inventory.xml b/inventory.xml
index 04a0743..0790b01 100644
--- a/inventory.xml
+++ b/inventory.xml
@@ -67,7 +67,6 @@ this repository contains the full copyright notices and license terms. -->
<record model="ir.action.act_window" id="act_inventory_form">
<field name="name">Inventories</field>
<field name="res_model">stock.inventory</field>
- <field name="view_type">form</field>
<field name="search_value">{'create_date': ['between', Date(delta_years=-1)]}</field>
</record>
<record model="ir.action.act_window.view"
@@ -88,7 +87,6 @@ this repository contains the full copyright notices and license terms. -->
<record model="ir.action.act_window" id="act_inventory_form2">
<field name="name">Inventories</field>
<field name="res_model">stock.inventory</field>
- <field name="view_type">form</field>
</record>
<record model="ir.action.act_window.view"
id="act_inventory_form2_view1">
@@ -109,7 +107,6 @@ this repository contains the full copyright notices and license terms. -->
<record model="ir.action.act_window" id="act_inventory_form_draft">
<field name="name">Draft Inventories</field>
<field name="res_model">stock.inventory</field>
- <field name="view_type">form</field>
<field name="domain">[('state', '=', 'draft')]</field>
</record>
<record model="ir.action.act_window.view"
diff --git a/location.xml b/location.xml
index 5264578..5be334d 100644
--- a/location.xml
+++ b/location.xml
@@ -38,9 +38,27 @@ this repository contains the full copyright notices and license terms. -->
<record model="ir.ui.view" id="location_view_tree">
<field name="model">stock.location</field>
<field name="type">tree</field>
+ <field name="priority" eval="20"/>
<field name="field_childs">childs</field>
<field name="arch" type="xml">
<![CDATA[
+ <tree string="Locations" keyword_open="1">
+ <field name="name" select="1"/>
+ <field name="code" select="2"/>
+ <field name="type" select="1"/>
+ <field name="active" select="2" tree_invisible="1"/>
+ <field name="parent" tree_invisible="1"/>
+ <field name="childs" tree_invisible="1"/>
+ </tree>
+ ]]>
+ </field>
+ </record>
+ <record model="ir.ui.view" id="location_view_list">
+ <field name="model">stock.location</field>
+ <field name="type">tree</field>
+ <field name="priority" eval="10"/>
+ <field name="arch" type="xml">
+ <![CDATA[
<tree string="Locations">
<field name="name" select="1"/>
<field name="code" select="2"/>
@@ -54,29 +72,32 @@ 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="view_type">tree</field>
<field name="domain">[('parent', '=', False)]</field>
</record>
- <record model="ir.action.act_window.view" id="act_location_tree_view">
+ <record model="ir.action.act_window.view" id="act_location_tree_view1">
<field name="sequence" eval="10"/>
<field name="view" ref="location_view_tree"/>
<field name="act_window" ref="act_location_tree"/>
</record>
+ <record model="ir.action.act_window.view" id="act_location_tree_view2">
+ <field name="sequence" eval="20"/>
+ <field name="view" ref="location_view_form"/>
+ <field name="act_window" ref="act_location_tree"/>
+ </record>
<menuitem parent="menu_stock" sequence="10"
action="act_location_tree" id="menu_location_tree"/>
<record model="ir.action.act_window" id="act_location_form">
- <field name="name">Edit Locations</field>
+ <field name="name">Locations</field>
<field name="res_model">stock.location</field>
- <field name="view_type">form</field>
</record>
<record model="ir.action.act_window.view" id="act_location_form_view1">
- <field name="sequence" eval="1"/>
- <field name="view" ref="location_view_tree"/>
+ <field name="sequence" eval="10"/>
+ <field name="view" ref="location_view_list"/>
<field name="act_window" ref="act_location_form"/>
</record>
<record model="ir.action.act_window.view" id="act_location_form_view2">
- <field name="sequence" eval="2"/>
+ <field name="sequence" eval="20"/>
<field name="view" ref="location_view_form"/>
<field name="act_window" ref="act_location_form"/>
</record>
@@ -86,10 +107,20 @@ this repository contains the full copyright notices and license terms. -->
<record model="ir.action.act_window" id="act_product_by_location">
<field name="name">Products by Locations</field>
<field name="res_model">product.product</field>
- <field name="view_type">form</field>
<field name="window_name" eval="False"/>
<field name="domain">['OR', ('quantity', '!=', 0.0), ('forecast_quantity', '!=', 0.0)]</field>
</record>
+ <record model="ir.action.act_window.view" id="act_product_form_view2">
+ <field name="sequence" eval="10"/>
+ <field name="view" ref="product_view_tree_qty"/>
+ <field name="act_window" ref="act_product_by_location"/>
+ </record>
+ <record model="ir.action.act_window.view" id="act_product_form_view">
+ <field name="sequence" eval="20"/>
+ <field name="view" ref="product.product_view_form"/>
+ <field name="act_window" ref="act_product_by_location"/>
+ </record>
+
<record model="ir.action.wizard" id="wizard_product_open">
<field name="name">Product Quantities</field>
<field name="wiz_name">stock.product.open</field>
@@ -101,16 +132,6 @@ this repository contains the full copyright notices and license terms. -->
<field name="model">stock.location,0</field>
<field name="action" ref="wizard_product_open"/>
</record>
- <record model="ir.action.act_window.view" id="act_product_form_view">
- <field name="sequence" eval="20"/>
- <field name="view" ref="product.product_view_form"/>
- <field name="act_window" ref="act_product_by_location"/>
- </record>
- <record model="ir.action.act_window.view" id="act_product_form_view2">
- <field name="sequence" eval="10"/>
- <field name="view" ref="product_view_tree_qty"/>
- <field name="act_window" ref="act_product_by_location"/>
- </record>
<record model="ir.model.access" id="access_location">
<field name="model" search="[('model', '=', 'stock.location')]"/>
diff --git a/move.py b/move.py
index ec5575d..1922c98 100644
--- a/move.py
+++ b/move.py
@@ -4,11 +4,11 @@ from __future__ import with_statement
from decimal import Decimal
from trytond.model import ModelView, ModelSQL, fields, OPERATORS
from trytond.backend import TableHandler
-from trytond.pyson import In, Eval, Not, In, Equal, If, Get, Bool
+from trytond.pyson import In, Eval, Not, Equal, If, Get, Bool
from trytond.transaction import Transaction
STATES = {
- 'readonly': In(Eval('state'), ['cancel', 'done']),
+ 'readonly': In(Eval('state'), ['cancel', 'assigned', 'done']),
}
@@ -35,6 +35,8 @@ class Move(ModelSQL, ModelView):
on_change_with=['uom']), 'get_unit_digits')
quantity = fields.Float("Quantity", required=True,
digits=(16, Eval('unit_digits', 2)), states=STATES)
+ internal_quantity = fields.Float('Internal Quantity', readonly=True,
+ required=True)
from_location = fields.Many2One("stock.location", "From Location", select=1,
required=True, states=STATES,
domain=[('type', 'not in', ('warehouse', 'view'))])
@@ -90,6 +92,9 @@ class Move(ModelSQL, ModelView):
self._sql_constraints += [
('check_move_qty_pos',
'CHECK(quantity >= 0.0)', 'Move quantity must be positive'),
+ ('check_move_internal_qty_pos',
+ 'CHECK(internal_quantity >= 0.0)',
+ 'Internal move quantity must be positive'),
('check_from_to_locations',
'CHECK(from_location != to_location)',
'Source and destination location must be different'),
@@ -108,6 +113,7 @@ class Move(ModelSQL, ModelView):
]
self._constraints += [
('check_product_type', 'service_product'),
+ ('check_period_closed', 'period_closed'),
]
self._order[0] = ('id', 'DESC')
self._error_messages.update({
@@ -116,6 +122,9 @@ class Move(ModelSQL, ModelView):
'set_state_done': 'You can not set state to done!',
'del_draft_cancel': 'You can only delete draft or cancelled moves!',
'service_product': 'You can not use service products for a move!',
+ 'period_closed': 'You can not modify move in closed period!',
+ 'modify_assigned_done_cancel': ('You can not modify a move '
+ 'in the state: "Assigned", "Done" or "Cancel"'),
})
def init(self, module_name):
@@ -130,8 +139,29 @@ class Move(ModelSQL, ModelView):
table.index_action(old_column, action='remove')
table.drop_fk(old_column)
table.column_rename(old_column, new_column)
+
+ # Migration from 1.8: new field internal_quantity
+ internal_quantity_exist = table.column_exist('internal_quantity')
+
super(Move, self).init(module_name)
+ # Migration from 1.8: fill new field internal_quantity
+ if not internal_quantity_exist:
+ offset = 0
+ limit = cursor.IN_MAX
+ move_ids = True
+ while move_ids:
+ move_ids = self.search([], offset=offset, limit=limit)
+ offset += limit
+ for move in self.browse(move_ids):
+ internal_quantity = self._get_internal_quantity(
+ move.quantity, move.uom, move.product)
+ self.write(move.id, {
+ 'internal_quantity': internal_quantity,
+ })
+ table = TableHandler(cursor, self, module_name)
+ table.not_null_action('internal_quantity', action='add')
+
# Migration from 1.0 check_packing_in_out has been removed
table = TableHandler(cursor, self, module_name)
table.drop_constraint('check_packing_in_out')
@@ -325,6 +355,20 @@ class Move(ModelSQL, ModelView):
return False
return True
+ def check_period_closed(self, ids):
+ period_obj = self.pool.get('stock.period')
+ period_ids = period_obj.search([
+ ('state', '=', 'closed'),
+ ], order=[('date', 'DESC')], limit=1)
+ if period_ids:
+ period, = period_obj.browse(period_ids)
+ for move in self.browse(ids):
+ date = (move.effective_date if move.effective_date
+ else move.planned_date)
+ if date and date < period.date:
+ return False
+ return True
+
def get_rec_name(self, ids, name):
if not ids:
return {}
@@ -364,7 +408,7 @@ class Move(ModelSQL, ModelView):
order=order, count=count, query_string=query_string)
def _update_product_cost_price(self, product_id, quantity, uom, unit_price,
- currency, company):
+ currency, company, date):
"""
Update the cost price on the given product
@@ -375,6 +419,7 @@ class Move(ModelSQL, ModelView):
:param unit_price: the unit price of the product
:param currency: the currency of the unit price
:param company: the company id ot a BrowseRecord of the company
+ :param date: the date for the currency rate calculation
"""
uom_obj = self.pool.get('product.uom')
product_obj = self.pool.get('product.product')
@@ -401,8 +446,9 @@ class Move(ModelSQL, ModelView):
qty = Decimal(str(qty))
product_qty = Decimal(str(product.template.quantity))
# convert wrt currency
- unit_price = currency_obj.compute(currency, unit_price,
- company.currency, round=False)
+ with Transaction().set_context(date=date):
+ unit_price = currency_obj.compute(currency.id, unit_price,
+ company.currency.id, round=False)
# convert wrt to the uom
unit_price = uom_obj.compute_price(uom, unit_price,
product.default_uom)
@@ -425,37 +471,50 @@ class Move(ModelSQL, ModelView):
'cost_price': new_cost_price,
})
+ def _get_internal_quantity(self, quantity, uom, product):
+ uom_obj = self.pool.get('product.uom')
+ internal_quantity = uom_obj.compute_qty(uom, quantity,
+ product.default_uom, round=True)
+ return internal_quantity
+
+
def create(self, vals):
location_obj = self.pool.get('stock.location')
product_obj = self.pool.get('product.product')
+ uom_obj = self.pool.get('product.uom')
date_obj = self.pool.get('ir.date')
+ today = date_obj.today()
vals = vals.copy()
+ effective_date = vals.get('effective_date') or today
+ product = product_obj.browse(vals['product'])
if vals.get('state') == 'done':
- if not vals.get('effective_date'):
- vals['effective_date'] = date_obj.today()
+ vals['effective_date'] = effective_date
from_location = location_obj.browse(vals['from_location'])
to_location = location_obj.browse(vals['to_location'])
- product = product_obj.browse(vals['product'])
if from_location.type == 'supplier' \
and product.cost_price_method == 'average':
self._update_product_cost_price(vals['product'],
vals['quantity'], vals['uom'], vals['unit_price'],
- vals['currency'], vals['company'])
+ vals['currency'], vals['company'], effective_date)
if to_location.type == 'supplier' \
and product.cost_price_method == 'average':
self._update_product_cost_price(vals['product'],
-vals['quantity'], vals['uom'], vals['unit_price'],
- vals['currency'], vals['company'])
+ vals['currency'], vals['company'], effective_date)
if not vals.get('cost_price'):
# Re-read product to get the updated cost_price
product = product_obj.browse(vals['product'])
vals['cost_price'] = product.cost_price
elif vals.get('state') == 'assigned':
- if not vals.get('effective_date'):
- vals['effective_date'] = date_obj.today()
+ vals['effective_date'] = effective_date
+
+ uom = uom_obj.browse(vals['uom'])
+ internal_quantity = self._get_internal_quantity(vals['quantity'],
+ uom, product)
+ vals['internal_quantity'] = internal_quantity
return super(Move, self).create(vals)
def write(self, ids, vals):
@@ -463,9 +522,12 @@ class Move(ModelSQL, ModelView):
if isinstance(ids, (int, long)):
ids = [ids]
+ today = date_obj.today()
+ effective_date = vals.get('effective_date') or today
+ moves = self.browse(ids)
if 'state' in vals:
- for move in self.browse(ids):
+ for move in moves:
if vals['state'] == 'cancel':
vals['effective_date'] = False
if move.from_location.type == 'supplier' \
@@ -473,13 +535,13 @@ class Move(ModelSQL, ModelView):
and move.product.cost_price_method == 'average':
self._update_product_cost_price(move.product.id,
-move.quantity, move.uom, move.unit_price,
- move.currency, move.company)
+ move.currency, move.company, today)
if move.to_location.type == 'supplier' \
and move.state != 'cancel' \
and move.product.cost_price_method == 'average':
self._update_product_cost_price(move.product.id,
move.quantity, move.uom, move.unit_price,
- move.currency, move.company)
+ move.currency, move.company, today)
elif vals['state'] == 'draft':
if move.state == 'done':
@@ -487,24 +549,37 @@ class Move(ModelSQL, ModelView):
elif vals['state'] == 'assigned':
if move.state in ('cancel', 'done'):
self.raise_user_error('set_state_assigned')
- vals['effective_date'] = date_obj.today()
+ vals['effective_date'] = effective_date
elif vals['state'] == 'done':
if move.state in ('cancel'):
self.raise_user_error('set_state_done')
- vals['effective_date'] = date_obj.today()
+ vals['effective_date'] = effective_date
if move.from_location.type == 'supplier' \
and move.state != 'done' \
and move.product.cost_price_method == 'average':
self._update_product_cost_price(move.product.id,
move.quantity, move.uom, move.unit_price,
- move.currency, move.company)
+ move.currency, move.company, effective_date)
if move.to_location.type == 'supplier' \
and move.state != 'done' \
and move.product.cost_price_method == 'average':
self._update_product_cost_price( move.product.id,
-move.quantity, move.uom, move.unit_price,
- move.currency, move.company)
+ move.currency, move.company, effective_date)
+
+ if reduce(lambda x, y: x or y in vals, ('product', 'uom', 'quantity',
+ 'from_location', 'to_location', 'company', 'unit_price',
+ 'currency'), False):
+ for move in moves:
+ if move.state in ('assigned', 'done', 'cancel'):
+ self.raise_user_error('modify_assigned_done_cancel')
+ if reduce(lambda x, y: x or y in vals,
+ ('planned_date', 'effective_date'), False):
+ for move in moves:
+ if move.state in ('done', 'cancel'):
+ self.raise_user_error('modify_assigned_done_cancel')
+
res = super(Move, self).write(ids, vals)
if vals.get('state', '') == 'done':
@@ -514,6 +589,15 @@ class Move(ModelSQL, ModelView):
self.write(move.id, {
'cost_price': move.product.cost_price,
})
+
+ for move in self.browse(ids):
+ internal_quantity = self._get_internal_quantity(move.quantity,
+ move.uom, move.product)
+ if internal_quantity != move.internal_quantity:
+ # Use super to avoid infinite loop
+ super(Move, self).write(move.id, {
+ 'internal_quantity': internal_quantity,
+ })
return res
def delete(self, ids):
diff --git a/move.xml b/move.xml
index e9bca10..2e0419a 100644
--- a/move.xml
+++ b/move.xml
@@ -59,7 +59,6 @@ this repository contains the full copyright notices and license terms. -->
<record model="ir.action.act_window" id="act_move_form">
<field name="name">Moves</field>
<field name="res_model">stock.move</field>
- <field name="view_type">form</field>
<field name="search_value">{'create_date': ['between', Date(delta_years=-1)]}</field>
</record>
<record model="ir.action.act_window.view" id="act_move_form_view1">
@@ -79,7 +78,6 @@ this repository contains the full copyright notices and license terms. -->
<record model="ir.action.act_window" id="act_move_form_supp">
<field name="name">Moves from Suppliers</field>
<field name="res_model">stock.move</field>
- <field name="view_type">form</field>
<field name="domain">[('from_location.type', '=', 'supplier')]</field>
<field name="search_value">{'create_date': ['between', Date(delta_years=-1)]}</field>
</record>
@@ -100,7 +98,6 @@ this repository contains the full copyright notices and license terms. -->
<record model="ir.action.act_window" id="act_move_form_supp_proceed">
<field name="name">Moves from Suppliers Waiting Arrival</field>
<field name="res_model">stock.move</field>
- <field name="view_type">form</field>
<field name="domain">[('from_location.type', '=', 'supplier'), ('state', '=', 'draft'), ('shipment_in', '=', False)]</field>
</record>
<record model="ir.action.act_window.view"
@@ -122,7 +119,6 @@ this repository contains the full copyright notices and license terms. -->
<record model="ir.action.act_window" id="act_move_form_cust">
<field name="name">Moves to Customers</field>
<field name="res_model">stock.move</field>
- <field name="view_type">form</field>
<field name="domain">[('to_location.type', '=', 'customer')]</field>
<field name="search_value">{'create_date': ['between', Date(delta_years=-1)]}</field>
</record>
diff --git a/party.xml b/party.xml
index 88bfad2..012728c 100644
--- a/party.xml
+++ b/party.xml
@@ -6,7 +6,6 @@ this repository contains the full copyright notices and license terms. -->
<record model="ir.action.act_window" id="act_shipment_out_form2">
<field name="name">Customer Shipments</field>
<field name="res_model">stock.shipment.out</field>
- <field name="view_type">form</field>
<field name="domain">[("customer", "=", Eval('active_id'))]</field>
</record>
<record model="ir.action.keyword"
@@ -19,7 +18,6 @@ this repository contains the full copyright notices and license terms. -->
<record model="ir.action.act_window" id="act_shipment_out_form3">
<field name="name">Supplier Shipments</field>
<field name="res_model">stock.shipment.in</field>
- <field name="view_type">form</field>
<field name="domain">[("supplier", "=", Eval('active_id'))]</field>
</record>
<record model="ir.action.keyword"
diff --git a/period.py b/period.py
new file mode 100644
index 0000000..cb04205
--- /dev/null
+++ b/period.py
@@ -0,0 +1,122 @@
+#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 __future__ import with_statement
+from itertools import chain
+from trytond.model import ModelView, ModelSQL, fields
+from trytond.pyson import Equal, Eval, If, In, Get
+from trytond.transaction import Transaction
+
+
+class Period(ModelSQL, ModelView):
+ 'Stock Period'
+ _name = 'stock.period'
+ _description = __doc__
+ _rec_name = 'date'
+ date = fields.Date('Date', required=True, states={
+ 'readonly': Equal(Eval('state'), 'closed'),
+ })
+ company = fields.Many2One('company.company', 'Company', required=True,
+ domain=[
+ ('id', If(In('company', Eval('context', {})), '=', '!='),
+ Get(Eval('context', {}), 'company', 0)),
+ ])
+ caches = fields.One2Many('stock.period.cache', 'period', 'Caches')
+ state = fields.Selection([
+ ('draft', 'Draft'),
+ ('closed', 'Closed'),
+ ], 'State', select=1, readonly=True)
+
+ def __init__(self):
+ super(Period, self).__init__()
+ self._rpc.update({
+ 'button_draft': True,
+ 'button_close': True,
+ })
+ self._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 '
+ 'there is still assigned moves!'),
+ })
+
+ def button_draft(self, ids):
+ cache_obj = self.pool.get('stock.period.cache')
+ cache_ids = []
+ for i in xrange(0, len(ids), Transaction().cursor.IN_MAX):
+ cache_ids.append(cache_obj.search([
+ ('period', 'in', ids[i:i + Transaction().cursor.IN_MAX]),
+ ], order=[]))
+ cache_obj.delete(list(chain(*cache_ids)))
+ self.write(ids, {
+ 'state': 'draft',
+ })
+ return True
+
+ def button_close(self, ids):
+ product_obj = self.pool.get('product.product')
+ location_obj = self.pool.get('stock.location')
+ cache_obj = self.pool.get('stock.period.cache')
+ move_obj = self.pool.get('stock.move')
+ date_obj = self.pool.get('ir.date')
+
+ location_ids = location_obj.search([
+ ('type', 'not in', ['warehouse', 'view']),
+ ], order=[])
+ today = date_obj.today()
+ periods = self.browse(ids)
+
+ recent_date = max(period.date for period in periods)
+ if recent_date >= today:
+ self.raise_user_error('close_period_future_today')
+ if move_obj.search([
+ ('state', '=', 'assigned'),
+ ['OR', [
+ ('effective_date', '=', False),
+ ('planned_date', '<=', recent_date),
+ ],
+ ('effective_date', '<=', recent_date),
+ ]]):
+ self.raise_user_error('close_period_assigned_move')
+
+ 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_obj.products_by_location(location_ids)
+ for (location_id, product_id), quantity in pbl.iteritems():
+ cache_obj.create({
+ 'period': period.id,
+ 'location': location_id,
+ 'product': product_id,
+ 'internal_quantity': quantity,
+ })
+ self.write(ids, {
+ 'state': 'closed',
+ })
+ return True
+
+Period()
+
+
+class Cache(ModelSQL, ModelView):
+ '''
+ Stock Period Cache
+
+ It is used to store cached computation of stock quantities.
+ '''
+ _name = 'stock.period.cache'
+ _description = __doc__
+
+ period = fields.Many2One('stock.period', 'Period', required=True,
+ readonly=True, select=1, ondelete='CASCADE')
+ location = fields.Many2One('stock.location', 'Location', required=True,
+ readonly=True, select=1, ondelete='CASCADE')
+ product = fields.Many2One('product.product', 'Product', required=True,
+ readonly=True, select=1, ondelete='CASCADE')
+ internal_quantity = fields.Float('Internal Quantity', readonly=True)
+
+Cache()
diff --git a/period.xml b/period.xml
new file mode 100644
index 0000000..ec615cb
--- /dev/null
+++ b/period.xml
@@ -0,0 +1,124 @@
+<?xml version="1.0"?>
+<!-- This file is part of Tryton. The COPYRIGHT file at the top level of
+this repository contains the full copyright notices and license terms. -->
+<tryton>
+ <data>
+ <record model="ir.ui.view" id="period_view_form">
+ <field name="model">stock.period</field>
+ <field name="type">form</field>
+ <field name="arch" type="xml">
+ <![CDATA[
+ <form string="Period">
+ <label name="date"/>
+ <field name="date"/>
+ <label name="company"/>
+ <field name="company"/>
+ <label name="state"/>
+ <field name="state"/>
+ <group col="2" colspan="2" id="buttons">
+ <button name="button_draft" type="object" string="Draft"
+ states="{'invisible': Equal(Eval('state'), 'draft'), 'readonly': Not(In(%(group_stock_admin)d, Eval('groups', [])))}"/>
+ <button name="button_close" type="object" string="Close"
+ states="{'invisible': Equal(Eval('state'), 'closed'), 'readonly': Not(In(%(group_stock_admin)d, Eval('groups', [])))}"/>
+ </group>
+ </form>
+ ]]>
+ </field>
+ </record>
+ <record model="ir.ui.view" id="period_view_list">
+ <field name="model">stock.period</field>
+ <field name="type">tree</field>
+ <field name="arch" type="xml">
+ <![CDATA[
+ <tree string="Periods">
+ <field name="date"/>
+ <field name="company"/>
+ <field name="state"/>
+ </tree>
+ ]]>
+ </field>
+ </record>
+
+ <record model="ir.action.act_window" id="act_period_list">
+ <field name="name">Periods</field>
+ <field name="res_model">stock.period</field>
+ </record>
+ <record model="ir.action.act_window.view" id="act_period_list_view1">
+ <field name="sequence" eval="10"/>
+ <field name="view" ref="period_view_list"/>
+ <field name="act_window" ref="act_period_list"/>
+ </record>
+ <record model="ir.action.act_window.view" id="act_period_list_view2">
+ <field name="sequence" eval="20"/>
+ <field name="view" ref="period_view_form"/>
+ <field name="act_window" ref="act_period_list"/>
+ </record>
+ <menuitem parent="menu_configuration" sequence="20"
+ action="act_period_list" id="menu_period_list"/>
+
+ <record model="ir.model.access" id="access_period">
+ <field name="model" search="[('model', '=', 'stock.period')]"/>
+ <field name="perm_read" eval="True"/>
+ <field name="perm_write" eval="False"/>
+ <field name="perm_create" eval="False"/>
+ <field name="perm_delete" eval="False"/>
+ </record>
+ <record model="ir.model.access" id="access_period_admin">
+ <field name="model" search="[('model', '=', 'stock.period')]"/>
+ <field name="group" ref="group_stock_admin"/>
+ <field name="perm_read" eval="True"/>
+ <field name="perm_write" eval="True"/>
+ <field name="perm_create" eval="True"/>
+ <field name="perm_delete" eval="True"/>
+ </record>
+
+ <record model="ir.ui.view" id="period_cache_view_form">
+ <field name="model">stock.period.cache</field>
+ <field name="type">form</field>
+ <field name="arch" type="xml">
+ <![CDATA[
+ <form string="Period Cache" col="6">
+ <label name="period"/>
+ <field name="period" colspan="5"/>
+ <label name="location"/>
+ <field name="location"/>
+ <label name="product"/>
+ <field name="product"/>
+ <label name="internal_quantity"/>
+ <field name="internal_quantity"/>
+ </form>
+ ]]>
+ </field>
+ </record>
+ <record model="ir.ui.view" id="period_cache_view_list">
+ <field name="model">stock.period.cache</field>
+ <field name="type">tree</field>
+ <field name="arch" type="xml">
+ <![CDATA[
+ <tree string="Period Caches">
+ <field name="period"/>
+ <field name="location"/>
+ <field name="product"/>
+ <field name="internal_quantity"/>
+ </tree>
+ ]]>
+ </field>
+ </record>
+
+ <record model="ir.model.access" id="access_period_cache_cache">
+ <field name="model" search="[('model', '=', 'stock.period.cache')]"/>
+ <field name="perm_read" eval="True"/>
+ <field name="perm_write" eval="False"/>
+ <field name="perm_create" eval="False"/>
+ <field name="perm_delete" eval="False"/>
+ </record>
+ <record model="ir.model.access" id="access_period_cache_admin">
+ <field name="model" search="[('model', '=', 'stock.period.cache')]"/>
+ <field name="group" ref="group_stock_admin"/>
+ <field name="perm_read" eval="True"/>
+ <field name="perm_write" eval="True"/>
+ <field name="perm_create" eval="True"/>
+ <field name="perm_delete" eval="True"/>
+ </record>
+ </data>
+</tryton>
diff --git a/product.py b/product.py
index b8688f0..27a2ad9 100644
--- a/product.py
+++ b/product.py
@@ -173,6 +173,7 @@ class Product(ModelSQL, ModelView):
rule_obj = self.pool.get('ir.rule')
location_obj = self.pool.get('stock.location')
date_obj = self.pool.get('ir.date')
+ period_obj = self.pool.get('stock.period')
today = date_obj.today()
@@ -196,7 +197,9 @@ class Product(ModelSQL, ModelView):
wh_to_add[location.id] = location.storage_location.id
location_ids = list(location_ids)
- move_query, move_val = rule_obj.domain_get('stock.move')
+ move_rule_query, move_rule_val = rule_obj.domain_get('stock.move')
+
+ period_clause, period_vals = 'period = %s', [0]
if not context.get('stock_date_end'):
context['stock_date_end'] = datetime.date.max
@@ -350,6 +353,17 @@ class Product(ModelSQL, ModelView):
context['stock_date_start'], today,
context['stock_date_start'], today,
])
+ else:
+ period_ids = period_obj.search([
+ ('date', '<', context['stock_date_end']),
+ ], order=[('date', 'DESC')], limit=1)
+ if period_ids:
+ period_id, = period_ids
+ period = period_obj.browse(period_id)
+ state_date_clause += (' AND '
+ '(COALESCE(effective_date, planned_date) > %s)')
+ state_date_vals.append(period.date)
+ period_vals[0] = period.id
if with_childs:
query, args = location_obj.search([
@@ -362,11 +376,11 @@ class Product(ModelSQL, ModelView):
",".join(('%s',) * len(location_ids)) + ") "
where_vals = location_ids[:]
- if move_query:
- where_clause += " AND " + move_query + " "
- where_vals += move_val
+ if move_rule_query:
+ move_rule_query = " AND " + move_rule_query + " "
product_template_join = ""
+ product_template_join_period = ""
if product_ids:
where_clause += "AND product in (" + \
",".join(('%s',) * len(product_ids)) + ")"
@@ -379,7 +393,12 @@ class Product(ModelSQL, ModelView):
"ON (stock_move.product = product_product.id) "\
"JOIN product_template "\
"ON (product_product.template = "\
- "product_template.id) "\
+ "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) ")
if context.get('stock_destinations'):
@@ -392,59 +411,55 @@ class Product(ModelSQL, ModelView):
dest_clause_to += ") "
dest_vals = destinations
+ dest_clause_period = (' AND location IN ('
+ + ','.join(('%s',) * len(destinations)) + ') ')
+
else:
- dest_clause_from = dest_clause_to =""
+ dest_clause_from = dest_clause_to = dest_clause_period = ""
dest_vals = []
- # The main select clause is a union between two similar
- # subqueries. One that sums incoming moves towards locations
- # and on that sums outgoing moves. UNION ALL is used because
- # we already know that there will be no duplicates.
- select_clause = \
- "SELECT location, product, uom, sum(quantity) AS quantity "\
- "FROM ( "\
- "SELECT to_location AS location, product, uom, "\
- "sum(quantity) AS quantity "\
- "FROM stock_move " + product_template_join + \
- "WHERE (%s) " \
- "AND to_location %s "\
- "GROUP BY to_location, product ,uom "\
- "UNION ALL "\
- "SELECT from_location AS location, product, uom, "\
- "-sum(quantity) AS quantity "\
- "FROM stock_move " + product_template_join + \
- "WHERE (%s) " \
- "AND from_location %s "\
- "GROUP BY from_location, product, uom "\
- ") AS T GROUP BY T.location, T.product, T.uom"
+ # 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 + dest_clause_from,
- state_date_clause, where_clause + dest_clause_to),
- state_date_vals + where_vals + dest_vals + \
- state_date_vals + where_vals + dest_vals)
+ 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)
raw_lines = cursor.fetchall()
- res = {}
- res_location_ids = []
- uom_ids = []
- res_product_ids = []
- for line in raw_lines:
- for id_list, position in ((res_location_ids, 0), (uom_ids, 2),
- (res_product_ids, 1)):
- if line[position] not in id_list:
- id_list.append(line[position])
-
- uom_by_id = dict((x.id, x) for x in uom_obj.browse(uom_ids))
- default_uom = dict((x.id, x.default_uom) for x in product_obj.browse(
- product_ids or res_product_ids))
-
- for line in raw_lines:
- location, product, uom, quantity = line
- key = (location, product)
- res.setdefault(key, 0.0)
- res[key] += uom_obj.compute_qty(uom_by_id[uom], quantity,
- default_uom[product], round=False)
+ res_product_ids = set(product for _, product, _ in raw_lines)
+ res = dict(((location, product), quantity)
+ for location, product, quantity in raw_lines)
# Propagate quantities on from child locations to their parents
if with_childs:
@@ -479,12 +494,6 @@ class Product(ModelSQL, ModelView):
if location not in location_ids:
del res[(location, product)]
- # Round quantities
- for location, product in res:
- key = (location, product)
- res[key] = uom_obj.compute_qty(default_uom[product], res[key],
- default_uom[product], round=True)
-
# Complete result with missing products if asked
if not skip_zero:
# Search for all products, even if not linked with moves
diff --git a/product.xml b/product.xml
index 91844df..4676690 100644
--- a/product.xml
+++ b/product.xml
@@ -33,14 +33,16 @@ this repository contains the full copyright notices and license terms. -->
<field name="name"/>
<field name="quantity"/>
<field name="forecast_quantity"/>
+ <field name="parent" tree_invisible="1"/>
+ <field name="childs" tree_invisible="1"/>
</tree>
]]>
</field>
</record>
+
<record model="ir.action.act_window" id="act_location_quantity_tree">
<field name="name">Product Stock</field>
<field name="res_model">stock.location</field>
- <field name="view_type">tree</field>
<field name="domain">[('parent', '=', False)]</field>
<field name="window_name" eval="False"/>
</record>
diff --git a/ru_RU.csv b/ru_RU.csv
new file mode 100644
index 0000000..4cf45ed
--- /dev/null
+++ b/ru_RU.csv
@@ -0,0 +1,407 @@
+type,name,res_id,src,value,fuzzy
+error,product.template,0,You cannot change the default uom for a product which is associated to stock moves.,"ÐÑ Ð½Ðµ можеÑе измениÑÑ ÐµÐ´Ð¸Ð½Ð¸ÑÑ Ð¸Ð·Ð¼ÐµÑÐµÐ½Ð¸Ñ Ð¿Ð¾ ÑмолÑÐ°Ð½Ð¸Ñ Ð´Ð»Ñ Ð¿ÑодÑкÑа, коÑоÑÑй ÑвÑзан Ñо Ñкладом пеÑемеÑениÑ.",0
+error,stock.inventory.line,0,Line quantity must be positive!,Ðол-во должно бÑÑÑ Ð¿Ð¾Ð»Ð¾Ð¶Ð¸ÑелÑнÑм,0
+error,stock.inventory.line,0,Product must be unique by inventory!,ТÐЦ должен бÑÑÑ ÑникалÑнÑм по инвенÑаÑизаÑии!,0
+error,stock.location,0,A location with existing moves cannot be changed to a type that does not support moves.,,0
+error,stock.location,0,"Location ""%s"" must be a child of warehouse ""%s""!","ÐеÑÑо ""%s"" должно бÑÑÑ Ð½Ð° Ñкладе ""%s""!",0
+error,stock.location,0,You can not create recursive locations!,ÐÑ Ð½Ðµ можеÑе ÑоздаваÑÑ ÑекÑÑÑивнÑе меÑÑа!,0
+error,stock.move,0,Move can be on only one Shipment,ÐеÑемеÑение Ð¼Ð¾Ð¶ÐµÑ Ð¸Ð¼ÐµÑÑ ÑолÑко Ð¾Ð´Ð½Ñ Ð¾ÑгÑÑзкÑ,0
+error,stock.move,0,Move quantity must be positive,Ðол-во должно бÑÑÑ Ð¿Ð¾Ð»Ð¾Ð¶Ð¸ÑелÑнÑм,0
+error,stock.move,0,Source and destination location must be different,ÐÑÑоÑник и меÑÑо назнаÑÐµÐ½Ð¸Ñ Ð´Ð¾Ð»Ð¶Ð½Ñ Ð±ÑÑÑ ÑазнÑми,0
+error,stock.move,0,You can not set state to assigned!,ÐÑ Ð½Ðµ можеÑе ÑÑÑановиÑÑ ÑоÑÑоÑние 'пеÑедан'!,0
+error,stock.move,0,You can not set state to done!,ÐÑ Ð½Ðµ можеÑе ÑÑÑановиÑÑ ÑоÑÑоÑние 'гоÑово'!,0
+error,stock.move,0,You can not set state to draft!,ÐÑ Ð½Ðµ можеÑе ÑÑÑановиÑÑ ÑоÑÑоÑние 'ÑеÑновик'!,0
+error,stock.move,0,You can not use service products for a move!,ÐÑ Ð½Ðµ можеÑе вÑбÑаÑÑ ÑÑлÑÐ³Ñ Ð´Ð»Ñ Ð¿ÐµÑемеÑениÑ,0
+error,stock.move,0,You can only delete draft or cancelled moves!,ÐÑ Ð¼Ð¾Ð¶ÐµÑе ÑдалÑÑÑ ÑолÑко оÑмененнÑе пеÑемеÑÐµÐ½Ð¸Ñ Ð¸ ÑеÑновики,0
+error,stock.shipment.in,0,Incoming Moves must have the warehouse input location as destination location!,РпоÑÑÑплениÑÑ
должен бÑÑÑ Ñказан меÑÑом назнаÑÐµÐ½Ð¸Ñ ÑоваÑнÑй Ñклад,0
+error,stock.shipment.in,0,Inventory Moves must have the warehouse input location as source location!,,0
+error,stock.shipment.out.return,0,Incoming Moves must have the warehouse input location as destination location!,РвозвÑаÑаÑ
Ð¾Ñ Ð·Ð°ÐºÐ°Ð·Ñиков должен бÑÑÑ Ñказан меÑÑом назнаÑÐµÐ½Ð¸Ñ ÑоваÑнÑй Ñклад,0
+error,stock.shipment.out.return,0,Inventory Moves must have the warehouse input location as source location!,,0
+error,stock.shipment.out.return.create,0,The shipment with code %s is not yet sent.,ÐÑгÑÑзка Ñ ÐºÐ¾Ð´Ð¾Ð¼ %s еÑе не оÑпÑавлена.,0
+error,stock.shipment.out.return.create,0,You can not create return shipment,ÐÑ Ð½Ðµ можеÑе ÑоздаÑÑ Ð²Ð¾Ð·Ð²ÑаÑ,0
+field,"party.address,delivery",0,Delivery,ÐоÑÑавка,0
+field,"party.party,customer_location",0,Customer Location,ÐеÑÑо Ñ
ÑÐ°Ð½ÐµÐ½Ð¸Ñ Ð·Ð°ÐºÐ°Ð·Ñика,0
+field,"party.party,supplier_location",0,Supplier Location,ÐеÑÑо Ñ
ÑÐ°Ð½ÐµÐ½Ð¸Ñ Ð¿Ð¾ÑÑавÑика,0
+field,"product.product,forecast_quantity",0,Forecast Quantity,ÐÑогноз ÐолиÑеÑÑво,0
+field,"product.product,quantity",0,Quantity,Ðол-во,0
+field,"product.template,forecast_quantity",0,Forecast Quantity,ÐÑогноз ÐолиÑеÑÑво,0
+field,"product.template,quantity",0,Quantity,Ðол-во,0
+field,"stock.configuration,rec_name",0,Name,Ðаименование,0
+field,"stock.configuration,shipment_in_return_sequence",0,Supplier Return Shipment Sequence,ÐозвÑÐ°Ñ Ð¿Ð¾ÑÑавÑÐ¸ÐºÑ Ð¿Ð¾ÑледоваÑелÑноÑÑÑ,0
+field,"stock.configuration,shipment_in_sequence",0,Supplier Shipment Sequence,ÐÑиÑ
од Ð¾Ñ Ð¿Ð¾ÑÑавÑика поÑледоваÑелÑноÑÑÑ,0
+field,"stock.configuration,shipment_internal_sequence",0,Internal Shipment Sequence,ÐнÑÑÑенние пеÑемеÑение поÑледоваÑелÑноÑÑÑ,0
+field,"stock.configuration,shipment_out_return_sequence",0,Customer Return Shipment Sequence,ÐозвÑÐ°Ñ Ð¾Ñ Ð·Ð°ÐºÐ°Ð·Ñика поÑледоваÑелÑноÑÑÑ,0
+field,"stock.configuration,shipment_out_sequence",0,Customer Shipment Sequence,ÐÑгÑÑзка заказÑÐ¸ÐºÑ Ð¿Ð¾ÑледоваÑелÑноÑÑÑ,0
+field,"stock.inventory,company",0,Company,ÐомпаниÑ,0
+field,"stock.inventory,date",0,Date,ÐаÑа,0
+field,"stock.inventory,lines",0,Lines,СÑÑоки,0
+field,"stock.inventory,location",0,Location,ÐеÑÑо,0
+field,"stock.inventory,lost_found",0,Lost and Found,УÑÑаÑеннÑй и обÑеÑеннÑй,0
+field,"stock.inventory,rec_name",0,Name,Ðаименование,0
+field,"stock.inventory,state",0,State,СоÑÑоÑние,0
+field,"stock.inventory.line,expected_quantity",0,Expected Quantity,Ðжидаемое колиÑеÑÑво,0
+field,"stock.inventory.line,inventory",0,Inventory,ÐнвенÑаÑизаÑиÑ,0
+field,"stock.inventory.line,move",0,Move,ÐеÑемеÑение,0
+field,"stock.inventory.line,product",0,Product,ТÐЦ,0
+field,"stock.inventory.line,quantity",0,Quantity,Ðол-во,0
+field,"stock.inventory.line,rec_name",0,Name,Ðаименование,0
+field,"stock.inventory.line,unit_digits",0,Unit Digits,ÐÑÑппа ÑиÑÑ,0
+field,"stock.inventory.line,uom",0,UOM,Ðд.изм.,0
+field,"stock.location,active",0,Active,ÐейÑÑвиÑелÑннÑй,0
+field,"stock.location,address",0,Address,ÐдÑеÑ,0
+field,"stock.location,childs",0,Children,ÐодÑиненÑй,0
+field,"stock.location,code",0,Code,Ðод локаÑии,0
+field,"stock.location,forecast_quantity",0,Forecast Quantity,ÐÑогноз ÐолиÑеÑÑво,0
+field,"stock.location,input_location",0,Input,ÐÑ
одÑÑий,0
+field,"stock.location,left",0,Left,ÐÐµÐ²Ð°Ñ ÑÑоÑона,0
+field,"stock.location,name",0,Name,Ðаименование,0
+field,"stock.location,output_location",0,Output,ÐÑÑ
одÑÑий,0
+field,"stock.location,parent",0,Parent,ÐÑновной,0
+field,"stock.location,quantity",0,Quantity,Ðол-во,0
+field,"stock.location,rec_name",0,Name,Ðаименование,0
+field,"stock.location,right",0,Right,ÐÑÐ°Ð²Ð°Ñ ÑÑоÑона,0
+field,"stock.location,storage_location",0,Storage,Ð¥ÑанилиÑе,0
+field,"stock.location,type",0,Location type,Тип ÑаÑположение,0
+field,"stock.location_stock_date.init,forecast_date",0,At Date,Ðо даÑе,0
+field,"stock.move,company",0,Company,ÐомпаниÑ,0
+field,"stock.move,cost_price",0,Cost Price,СебеÑÑоимоÑÑÑ,0
+field,"stock.move,currency",0,Currency,ÐалÑÑа,0
+field,"stock.move,effective_date",0,Effective Date,УÑеÑÐ½Ð°Ñ Ð´Ð°Ñа,0
+field,"stock.move,from_location",0,From Location,Ðз меÑÑа,0
+field,"stock.move,planned_date",0,Planned Date,ÐÐ»Ð°Ð½Ð¾Ð²Ð°Ñ Ð´Ð°Ñа,0
+field,"stock.move,product",0,Product,ТÐЦ,0
+field,"stock.move,quantity",0,Quantity,Ðол-во,0
+field,"stock.move,rec_name",0,Name,Ðаименование,0
+field,"stock.move,shipment_in",0,Supplier Shipment,ÐÑиÑ
од Ð¾Ñ Ð¿Ð¾ÑÑавÑика,0
+field,"stock.move,shipment_in_return",0,Supplier Return Shipment,ÐозвÑÐ°Ñ Ð¿Ð¾ÑÑавÑикÑ,0
+field,"stock.move,shipment_internal",0,Internal Shipment,ÐнÑÑÑеннее пеÑемеÑение,0
+field,"stock.move,shipment_out",0,Customer Shipment,ÐÑгÑÑзка заказÑикÑ,0
+field,"stock.move,shipment_out_return",0,Customer Return Shipment,ÐозвÑÐ°Ñ Ð¾Ñ Ð·Ð°ÐºÐ°Ð·Ñика,0
+field,"stock.move,state",0,State,СоÑÑоÑние,0
+field,"stock.move,to_location",0,To Location,РмеÑÑо,0
+field,"stock.move,unit_digits",0,Unit Digits,ÐÑÑппа ÑиÑÑ,0
+field,"stock.move,unit_price",0,Unit Price,Цена за единиÑÑ,0
+field,"stock.move,unit_price_required",0,Unit Price Required,ТÑебÑеÑÑÑ Ñена за единиÑÑ,0
+field,"stock.move,uom",0,Uom,Ðд.изм.,0
+field,"stock.product_stock_date.init,forecast_date",0,At Date,Ðо даÑе,0
+field,"stock.shipment.in,code",0,Code,Ðод оÑгÑÑзки,0
+field,"stock.shipment.in,contact_address",0,Contact Address,ÐонÑакÑнÑй адÑеÑ,0
+field,"stock.shipment.in,effective_date",0,Effective Date,УÑеÑÐ½Ð°Ñ Ð´Ð°Ñа,0
+field,"stock.shipment.in,incoming_moves",0,Incoming Moves,ÐÑ
одÑÑÐ°Ñ Ð¿Ð¾ÑÑавка,0
+field,"stock.shipment.in,inventory_moves",0,Inventory Moves,УÑÐµÑ Ð¿ÐµÑемеÑений,0
+field,"stock.shipment.in,moves",0,Moves,ÐеÑемеÑениÑ,0
+field,"stock.shipment.in,planned_date",0,Planned Date,ÐÐ»Ð°Ð½Ð¾Ð²Ð°Ñ Ð´Ð°Ñа,0
+field,"stock.shipment.in,rec_name",0,Name,Ðаименование,0
+field,"stock.shipment.in,reference",0,Reference,СÑÑлка,0
+field,"stock.shipment.in,state",0,State,СоÑÑоÑние,0
+field,"stock.shipment.in,supplier",0,Supplier,ÐоÑÑавÑик,0
+field,"stock.shipment.in,warehouse",0,Warehouse,ТоваÑнÑй Ñклад,0
+field,"stock.shipment.in.return,code",0,Code,Ðод возвÑаÑа оÑгÑÑзки,0
+field,"stock.shipment.in.return,effective_date",0,Effective Date,УÑеÑÐ½Ð°Ñ Ð´Ð°Ñа,0
+field,"stock.shipment.in.return,from_location",0,From Location,Ðз меÑÑа,0
+field,"stock.shipment.in.return,moves",0,Moves,ÐеÑемеÑениÑ,0
+field,"stock.shipment.in.return,planned_date",0,Planned Date,ÐÐ»Ð°Ð½Ð¾Ð²Ð°Ñ Ð´Ð°Ñа,0
+field,"stock.shipment.in.return,rec_name",0,Name,Ðаименование,0
+field,"stock.shipment.in.return,reference",0,Reference,СÑÑлка,0
+field,"stock.shipment.in.return,state",0,State,СоÑÑоÑние,0
+field,"stock.shipment.in.return,to_location",0,To Location,РмеÑÑо,0
+field,"stock.shipment.in.return.assign.ask_force,moves",0,Moves,ÐеÑемеÑениÑ,0
+field,"stock.shipment.internal,code",0,Code,Ðод внÑÑÑенней оÑгÑÑзки,0
+field,"stock.shipment.internal,effective_date",0,Effective Date,УÑеÑÐ½Ð°Ñ Ð´Ð°Ñа,0
+field,"stock.shipment.internal,from_location",0,From Location,Ðз меÑÑа,0
+field,"stock.shipment.internal,moves",0,Moves,ÐеÑемеÑениÑ,0
+field,"stock.shipment.internal,planned_date",0,Planned Date,ÐÐ»Ð°Ð½Ð¾Ð²Ð°Ñ Ð´Ð°Ñа,0
+field,"stock.shipment.internal,rec_name",0,Name,Ðаименование,0
+field,"stock.shipment.internal,reference",0,Reference,СÑÑлка,0
+field,"stock.shipment.internal,state",0,State,СоÑÑоÑние,0
+field,"stock.shipment.internal,to_location",0,To Location,РмеÑÑо,0
+field,"stock.shipment.internal.assign.ask_force,moves",0,Moves,ÐеÑемеÑениÑ,0
+field,"stock.shipment.out,code",0,Code,Ðод иÑÑ
одÑÑей оÑгÑÑзки,0
+field,"stock.shipment.out,customer",0,Customer,ÐаказÑик,0
+field,"stock.shipment.out,delivery_address",0,Delivery Address,ÐдÑÐµÑ Ð´Ð¾ÑÑавки,0
+field,"stock.shipment.out,effective_date",0,Effective Date,УÑеÑÐ½Ð°Ñ Ð´Ð°Ñа,0
+field,"stock.shipment.out,inventory_moves",0,Inventory Moves,УÑÐµÑ Ð¿ÐµÑемеÑений,0
+field,"stock.shipment.out,moves",0,Moves,ÐеÑемеÑениÑ,0
+field,"stock.shipment.out,outgoing_moves",0,Outgoing Moves,ÐнеÑнее пеÑемеÑение,0
+field,"stock.shipment.out,planned_date",0,Planned Date,ÐÐ»Ð°Ð½Ð¾Ð²Ð°Ñ Ð´Ð°Ñа,0
+field,"stock.shipment.out,rec_name",0,Name,Ðаименование,0
+field,"stock.shipment.out,reference",0,Reference,СÑÑлка,0
+field,"stock.shipment.out,state",0,State,СоÑÑоÑние,0
+field,"stock.shipment.out,warehouse",0,Warehouse,ТоваÑнÑй Ñклад,0
+field,"stock.shipment.out.assign.ask_force,inventory_moves",0,Inventory Moves,УÑÐµÑ Ð¿ÐµÑемеÑений,0
+field,"stock.shipment.out.return,code",0,Code,Ðод возвÑаÑа оÑгÑÑзки,0
+field,"stock.shipment.out.return,customer",0,Customer,ÐаказÑик,0
+field,"stock.shipment.out.return,delivery_address",0,Delivery Address,ÐдÑÐµÑ Ð´Ð¾ÑÑавки,0
+field,"stock.shipment.out.return,effective_date",0,Effective Date,УÑеÑÐ½Ð°Ñ Ð´Ð°Ñа,0
+field,"stock.shipment.out.return,incoming_moves",0,Incoming Moves,ÐÑ
одÑÑÐ°Ñ Ð¿Ð¾ÑÑавка,0
+field,"stock.shipment.out.return,inventory_moves",0,Inventory Moves,УÑÐµÑ Ð¿ÐµÑемеÑений,0
+field,"stock.shipment.out.return,moves",0,Moves,ÐеÑемеÑениÑ,0
+field,"stock.shipment.out.return,planned_date",0,Planned Date,ÐÐ»Ð°Ð½Ð¾Ð²Ð°Ñ Ð´Ð°Ñа,0
+field,"stock.shipment.out.return,rec_name",0,Name,Ðаименование,0
+field,"stock.shipment.out.return,reference",0,Reference,СÑÑлка,0
+field,"stock.shipment.out.return,state",0,State,СоÑÑоÑние,0
+field,"stock.shipment.out.return,warehouse",0,Warehouse,ТоваÑнÑй Ñклад,0
+help,"party.party,customer_location",0,The default destination location when sending products to the party.,ÐеÑÑо назнаÑÐµÐ½Ð¸Ñ Ð¿Ð¾ ÑмолÑÐ°Ð½Ð¸Ñ Ð¿Ñи оÑпÑавке пÑодÑкÑии конÑÑагенÑÑ.,0
+help,"party.party,supplier_location",0,The default source location when receiving products from the party.,"Ðо ÑмолÑаниÑ, меÑÑоположение пÑи полÑÑении пÑодÑкÑии Ð¾Ñ ÐºÐ¾Ð½ÑÑагенÑа.",0
+help,"stock.location_stock_date.init,forecast_date",0,"Allow to compute expected stock quantities for this date.
+* An empty value is an infinite date in the future.
+* A date in the past will provide historical values.",,0
+help,"stock.product_stock_date.init,forecast_date",0,"Allow to compute expected stock quantities for this date.
+* An empty value is an infinite date in the future.
+* A date in the past will provide historical values.",,0
+model,"ir.action,name",act_inventory_form,Inventories,ÐнвенÑаÑизаÑиÑ,0
+model,"ir.action,name",act_location_form,Edit Locations,ÐзмениÑÑ Ð¼ÐµÑÑа Ñ
ÑанениÑ,0
+model,"ir.action,name",act_location_quantity_tree,Product Stock,Ð¥ÑанилиÑе ТÐЦ,0
+model,"ir.action,name",act_location_tree,Locations,ÐеÑÑа,0
+model,"ir.action,name",act_move_form,Moves,ÐеÑемеÑениÑ,0
+model,"ir.action,name",act_move_form_cust,Moves to Customers,ÐÑгÑÑзка заказÑикам,0
+model,"ir.action,name",act_move_form_supp,Moves from Suppliers,ÐоÑÑавки Ð¾Ñ Ð¿Ð¾ÑÑавÑиков,0
+model,"ir.action,name",act_move_form_supp_proceed,Moves from Suppliers Waiting Arrival,ÐжидаÑÑийÑÑ Ð¿ÑиÑ
од Ð¾Ñ Ð¿Ð¾ÑÑавÑика,0
+model,"ir.action,name",act_product_by_location,Products by Locations,ТÐЦ по меÑÑонаÑ
ождениÑм,0
+model,"ir.action,name",act_shipment_in_form,Supplier Shipments,ÐÑиÑ
од Ð¾Ñ Ð¿Ð¾ÑÑавÑиков,0
+model,"ir.action,name",act_shipment_in_form2,New Supplier Shipment,ÐÐ¾Ð²Ð°Ñ Ð¿Ð¾ÑÑавка,0
+model,"ir.action,name",act_shipment_in_form_received,Received Supplier shipments,ÐоÑÑÑÐ¿Ð»ÐµÐ½Ð¸Ñ Ð¾Ñ Ð¿Ð¾ÑÑавÑика,0
+model,"ir.action,name",act_shipment_in_return_form,Supplier Return Shipments,ÐозвÑаÑÑ Ð¿Ð¾ÑÑавÑикÑ,0
+model,"ir.action,name",act_shipment_in_return_new_form,New Supplier Return Shipment,ÐовÑй возвÑÐ°Ñ Ð¿Ð¾ÑÑавÑикÑ,0
+model,"ir.action,name",act_shipment_internal_assigned_form,Assigned Internal Shipments,ÐÑполненнÑе внÑÑÑенние пеÑемеÑениÑ,0
+model,"ir.action,name",act_shipment_internal_draft_form,Draft Internal Shipments,ЧеÑновик внÑÑÑенниÑ
пеÑемеÑений,0
+model,"ir.action,name",act_shipment_internal_form,Internal Shipments,ÐнÑÑÑенние пеÑемеÑениÑ,0
+model,"ir.action,name",act_shipment_internal_new_form,New Internal Shipment,Ðовое внÑÑÑеннее пеÑемеÑение,0
+model,"ir.action,name",act_shipment_internal_waiting_form,Internal Shipments Waiting Assignation,ÐнÑÑÑенние пеÑемеÑÐµÐ½Ð¸Ñ Ð² ожидании,0
+model,"ir.action,name",act_shipment_out_form,Customer Shipments,ÐÑгÑÑзки заказÑикÑ,0
+model,"ir.action,name",act_shipment_out_form2,Customer Shipments,ÐÑгÑÑзки заказÑикÑ,0
+model,"ir.action,name",act_shipment_out_form3,Supplier Shipments,ÐÑиÑ
од Ð¾Ñ Ð¿Ð¾ÑÑавÑиков,0
+model,"ir.action,name",act_shipment_out_form_assigned,Assigned Customer Shipments,ÐÑÑÐ·Ñ Ð¿ÐµÑеданнÑе заказÑикÑ,0
+model,"ir.action,name",act_shipment_out_form_ready,Customer Shipments Ready for Shipping,ÐÑÑз заказÑика гоÑовÑй к оÑгÑÑзке,0
+model,"ir.action,name",act_shipment_out_form_waiting,Customer Shipments Waiting Assignation,ÐлиенÑÑкий гÑÑз ожидаÑÑий назнаÑениÑ,0
+model,"ir.action,name",act_shipment_out_return_form,Customer Return Shipments,ÐозвÑаÑÑ Ð¾Ñ Ð·Ð°ÐºÐ°Ð·Ñика,0
+model,"ir.action,name",act_shipment_out_return_form2,New Customer Return Shipment,ÐовÑй возвÑÐ°Ñ Ð¾Ñ Ð·Ð°ÐºÐ°Ð·Ñика,0
+model,"ir.action,name",create_shipment_out_return,Create Return Shipment,Создание обÑаÑной оÑпÑавки,0
+model,"ir.action,name",report_shipment_in_restocking_list,Restocking List,СпиÑок пополнениÑ,0
+model,"ir.action,name",report_shipment_internal,Internal Shipment,ÐнÑÑÑеннее пеÑемеÑение,0
+model,"ir.action,name",report_shipment_out_delivery_note,Delivery Note,Ðакладной,0
+model,"ir.action,name",report_shipment_out_picking_list,Picking List,Ð¡Ð±Ð¾Ñ Ð¡Ð¿Ð¸Ñок,0
+model,"ir.action,name",report_shipment_out_return_restocking_list,Restocking List,СпиÑок пополнениÑ,0
+model,"ir.action,name",wizard_complete_inventory,Complete Inventory,ÐÐ¾Ð»Ð½Ð°Ñ Ð¸Ð½Ð²ÐµÐ½ÑаÑизаÑиÑ,0
+model,"ir.action,name",wizard_location_open,Product by Location,ТÐЦ по меÑÑонаÑ
ождениÑ,0
+model,"ir.action,name",wizard_product_open,Product Quantities,ÐолиÑеÑÑва ТоваÑа,0
+model,"ir.action,name",wizard_shipment_in_return_assign,Assign Purchase Return Shipment,,0
+model,"ir.action,name",wizard_shipment_internal_assign,Assign Shipment Internal,ÐнÑÑÑенние назнаÑение поÑÑавки ,0
+model,"ir.action,name",wizard_shipment_out_assign,Assign Shipment Out,ÐнеÑнее назнаÑение гÑÑза,0
+model,"ir.sequence,name",sequence_shipment_in,Supplier Shipment,ÐÑиÑ
од Ð¾Ñ Ð¿Ð¾ÑÑавÑика,0
+model,"ir.sequence,name",sequence_shipment_in_return,Supplier Return Shipment,ÐозвÑÐ°Ñ Ð¿Ð¾ÑÑавÑикÑ,0
+model,"ir.sequence,name",sequence_shipment_internal,Internal Shipment,ÐнÑÑÑеннее пеÑемеÑение,0
+model,"ir.sequence,name",sequence_shipment_out,Customer Shipment,ÐÑгÑÑзка заказÑикÑ,0
+model,"ir.sequence,name",sequence_shipment_out_return,Customer Return Shipment,ÐозвÑÐ°Ñ Ð¾Ñ Ð·Ð°ÐºÐ°Ð·Ñика,0
+model,"ir.sequence.type,name",sequence_type_shipment_in,Supplier Shipment,ÐÑиÑ
од Ð¾Ñ Ð¿Ð¾ÑÑавÑика,0
+model,"ir.sequence.type,name",sequence_type_shipment_in_return,Supplier Return Shipment,ÐозвÑÐ°Ñ Ð¿Ð¾ÑÑавÑикÑ,0
+model,"ir.sequence.type,name",sequence_type_shipment_internal,Internal Shipment,ÐнÑÑÑеннее пеÑемеÑение,0
+model,"ir.sequence.type,name",sequence_type_shipment_out,Customer Shipment,ÐÑгÑÑзка заказÑикÑ,0
+model,"ir.sequence.type,name",sequence_type_shipment_out_return,Customer Return Shipment,ÐозвÑÐ°Ñ Ð¾Ñ Ð·Ð°ÐºÐ°Ð·Ñика,0
+model,"ir.ui.menu,name",menu_configuration,Configuration,ÐонÑигÑÑаÑиÑ,0
+model,"ir.ui.menu,name",menu_inventory_form,Inventories,ÐнвенÑаÑизаÑии,0
+model,"ir.ui.menu,name",menu_inventory_form_draft,Draft Inventories,ЧеÑновики инвенÑаÑизаÑий,0
+model,"ir.ui.menu,name",menu_inventory_form_new,New Inventory,ÐÐ¾Ð²Ð°Ñ Ð¸Ð½Ð²ÐµÐ½ÑаÑизаÑиÑ,0
+model,"ir.ui.menu,name",menu_location_form,Edit Locations,ÐзмениÑÑ Ð¼ÐµÑÑа Ñ
ÑанениÑ,0
+model,"ir.ui.menu,name",menu_location_tree,Locations,ÐеÑÑа Ñ
ÑанениÑ,0
+model,"ir.ui.menu,name",menu_move_form,Moves,ÐеÑемеÑениÑ,0
+model,"ir.ui.menu,name",menu_move_form_cust,Moves to Customers,ÐÑгÑÑзки заказÑикам,0
+model,"ir.ui.menu,name",menu_move_form_supp,Moves from Suppliers,ÐоÑÑавки Ð¾Ñ Ð¿Ð¾ÑÑавÑиков,0
+model,"ir.ui.menu,name",menu_move_form_supp_proceed,Moves from Suppliers Waiting Arrival,ÐжидаÑÑийÑÑ Ð¿ÑиÑ
од Ð¾Ñ Ð¿Ð¾ÑÑавÑика,0
+model,"ir.ui.menu,name",menu_reporting,Reporting,ÐÑÑеÑноÑÑÑ,0
+model,"ir.ui.menu,name",menu_shipment_in_form,Supplier Shipments,ÐÑиÑ
од Ð¾Ñ Ð¿Ð¾ÑÑавÑиков,0
+model,"ir.ui.menu,name",menu_shipment_in_form2,New Supplier Shipment,ÐÐ¾Ð²Ð°Ñ Ð¿Ð¾ÑÑака,0
+model,"ir.ui.menu,name",menu_shipment_in_received,Received Supplier shipments,ÐоÑÑÑÐ¿Ð»ÐµÐ½Ð¸Ñ Ð¾Ñ Ð¿Ð¾ÑÑавÑика,0
+model,"ir.ui.menu,name",menu_shipment_in_return_form,Supplier Return Shipments,ÐозвÑаÑÑ Ð¿Ð¾ÑÑавÑикÑ,0
+model,"ir.ui.menu,name",menu_shipment_in_return_new_form,New Supplier Return Shipment,ÐовÑй возвÑÐ°Ñ Ð¿Ð¾ÑÑавÑикÑ,0
+model,"ir.ui.menu,name",menu_shipment_internal_assigned_form,Assigned Internal Shipments,ÐÑполненнÑе внÑÑÑенние пеÑемеÑениÑ,0
+model,"ir.ui.menu,name",menu_shipment_internal_draft_form,Draft Internal Shipments,ЧеÑновик внÑÑÑенниÑ
пеÑемеÑений,0
+model,"ir.ui.menu,name",menu_shipment_internal_form,Internal Shipments,ÐнÑÑÑенние пеÑемеÑениÑ,0
+model,"ir.ui.menu,name",menu_shipment_internal_new_form,New Internal Shipment,Ðовое внÑÑÑеннее пеÑемеÑение,0
+model,"ir.ui.menu,name",menu_shipment_internal_waiting_form,Internal Shipments Waiting Assignation,ÐнÑÑÑенние пеÑемеÑÐµÐ½Ð¸Ñ Ð² ожидании,0
+model,"ir.ui.menu,name",menu_shipment_out_assigned,Assigned Customer Shipments,ÐодÑвеÑжденнÑе оÑгÑÑзки заказÑикам,0
+model,"ir.ui.menu,name",menu_shipment_out_form,Customer Shipments,ÐÑгÑÑзки заказÑикам,0
+model,"ir.ui.menu,name",menu_shipment_out_ready,Customer Shipments Ready for Shipping,ÐÑгÑÑзки заказÑикам гоÑовÑе к оÑпÑавке,0
+model,"ir.ui.menu,name",menu_shipment_out_return_form,Customer Return Shipments,ÐозвÑаÑÑ Ð¾Ñ Ð·Ð°ÐºÐ°Ð·Ñика,0
+model,"ir.ui.menu,name",menu_shipment_out_return_form2,New Customer Return Shipment,ÐовÑй возвÑÐ°Ñ Ð¾Ñ Ð·Ð°ÐºÐ°Ð·Ñика,0
+model,"ir.ui.menu,name",menu_shipment_out_waiting,Customer Shipments Waiting Assignation,ÐÑгÑÑзки заказÑикам в ожидании,0
+model,"ir.ui.menu,name",menu_stock,Inventory Management,УпÑавление Ñкладами,0
+model,"ir.ui.menu,name",menu_stock_configuration,Stock Configuration,ÐонÑигÑÑаÑÐ¸Ñ Ñклада,0
+model,"res.group,name",group_stock,Stock,Ð¥ÑанилиÑе,0
+model,"res.group,name",group_stock_admin,Stock Administration,Ð¥ÑанилиÑе ÐдминиÑÑÑиÑование,0
+model,"res.group,name",group_stock_force_assignment,Stock Force Assignment,Склад ÑÑкоÑенной погÑÑзки,0
+model,"stock.configuration,name",0,Stock Configuration,ÐонÑигÑÑаÑÐ¸Ñ Ñклада,0
+model,"stock.inventory,name",0,Stock Inventory,Ð¥ÑанилиÑе опиÑÑ,0
+model,"stock.inventory.line,name",0,Stock Inventory Line,Ð¥ÑанилиÑе ÑÑÑока опиÑи,0
+model,"stock.location,name",0,Stock Location,ÐеÑÑонаÑ
ождение Ñ
ÑанилиÑа,0
+model,"stock.location,name",location_customer,Customer,ÐаказÑик,0
+model,"stock.location,name",location_input,Input Zone,Ðона поÑÑавки,0
+model,"stock.location,name",location_lost_found,Lost and Found,УÑÑаÑеннÑй и обÑеÑеннÑй,0
+model,"stock.location,name",location_output,Output Zone,Ðона оÑгÑÑзки,0
+model,"stock.location,name",location_storage,Storage Zone,Ðона Ñ
ÑанениÑ,0
+model,"stock.location,name",location_supplier,Supplier,ÐоÑÑавÑик,0
+model,"stock.location,name",location_warehouse,Warehouse,ТоваÑнÑй Ñклад,0
+model,"stock.location_stock_date.init,name",0,Compute stock quantities,ÐÑÑиÑление колиÑеÑÑво на Ñкладе,0
+model,"stock.move,name",0,Stock Move,Ð¥ÑанилиÑе пеÑемеÑение ÑоваÑа,0
+model,"stock.product_stock_date.init,name",0,Compute stock quantities,ÐÑÑиÑление колиÑеÑÑво на Ñкладе,0
+model,"stock.shipment.in,name",0,Supplier Shipment,ÐÑиÑ
од Ð¾Ñ Ð¿Ð¾ÑÑавÑика,0
+model,"stock.shipment.in.return,name",0,Supplier Return Shipment,ÐозвÑÐ°Ñ Ð¿Ð¾ÑÑавÑикÑ,0
+model,"stock.shipment.in.return.assign.ask_force,name",0,Assign Supplier Return Shipment Ask Force,,0
+model,"stock.shipment.internal,name",0,Internal Shipment,ÐнÑÑÑеннее пеÑемеÑение,0
+model,"stock.shipment.internal.assign.ask_force,name",0,Assign Shipment Internal Ask Force,ÐнÑÑÑенние назнаÑение поÑÑавки (УÑкоÑеннÑй),0
+model,"stock.shipment.out,name",0,Customer Shipment,ÐÑгÑÑзка заказÑикÑ,0
+model,"stock.shipment.out.assign.ask_force,name",0,Assign Shipment Out Ask Force,ÐнеÑнее назнаÑение гÑÑза (УÑкоÑеннÑй),0
+model,"stock.shipment.out.return,name",0,Customer Return Shipment,ÐозвÑÐ°Ñ Ð¾Ñ Ð·Ð°ÐºÐ°Ð·Ñика,0
+model,"workflow,name",wkf_inventory,Inventory,ÐнвенÑаÑизаÑиÑ,0
+model,"workflow,name",wkf_shipment_in_return,Supplier Return Shipment,ÐозвÑÐ°Ñ Ð¿Ð¾ÑÑавÑикÑ,0
+model,"workflow,name",wkf_shipment_out_return,Customer Return Shipment,ÐозвÑÐ°Ñ Ð¾Ñ Ð·Ð°ÐºÐ°Ð·Ñика,0
+model,"workflow,name",wkf_shipmentin,Supplier Shipment,ÐÑиÑ
од Ð¾Ñ Ð¿Ð¾ÑÑавÑика,0
+model,"workflow,name",wkf_shipmentinternal,Internal Shipment,ÐнÑÑÑеннее пеÑемеÑение,0
+model,"workflow,name",wkf_shipmentout,Customer Shipment,ÐÑгÑÑзка заказÑикÑ,0
+model,"workflow.activity,name",inventory_act_cancel,Canceled,ÐÑменено,0
+model,"workflow.activity,name",inventory_act_done,Done,ÐÑполнено,0
+model,"workflow.activity,name",inventory_act_draft,Draft,ЧеÑновик,0
+model,"workflow.activity,name",shipment_in_return_act_assigned,Assigned,ÐеÑеданнÑй,0
+model,"workflow.activity,name",shipment_in_return_act_cancel,Canceled,ÐÑменено,0
+model,"workflow.activity,name",shipment_in_return_act_done,Done,ÐÑполнено,0
+model,"workflow.activity,name",shipment_in_return_act_draft,Draft,ЧеÑновик,0
+model,"workflow.activity,name",shipment_in_return_act_waiting,Waiting,Ðжидание,0
+model,"workflow.activity,name",shipment_out_return_act_cancel,Canceled,ÐÑменено,0
+model,"workflow.activity,name",shipment_out_return_act_done,Done,ÐÑполнено,0
+model,"workflow.activity,name",shipment_out_return_act_draft,Draft,ЧеÑновик,0
+model,"workflow.activity,name",shipment_out_return_act_received,Received,ÐоÑÑÑпило,0
+model,"workflow.activity,name",shipmentin_act_cancel,Canceled,ÐÑменено,0
+model,"workflow.activity,name",shipmentin_act_done,Done,ÐÑполнено,0
+model,"workflow.activity,name",shipmentin_act_draft,Draft,ЧеÑновик,0
+model,"workflow.activity,name",shipmentin_act_received,Received,ÐоÑÑÑпило,0
+model,"workflow.activity,name",shipmentinternal_act_assigned,Assigned,ÐеÑеданнÑй,0
+model,"workflow.activity,name",shipmentinternal_act_cancel,Canceled,ÐÑменено,0
+model,"workflow.activity,name",shipmentinternal_act_done,Done,ÐÑполнено,0
+model,"workflow.activity,name",shipmentinternal_act_draft,Draft,ЧеÑновик,0
+model,"workflow.activity,name",shipmentinternal_act_waiting,Waiting,Ðжидание,0
+model,"workflow.activity,name",shipmentout_act_assigned,Assigned,ÐеÑеданнÑй,0
+model,"workflow.activity,name",shipmentout_act_cancel,Canceled,ÐÑменено,0
+model,"workflow.activity,name",shipmentout_act_done,Done,ÐÑполнено,0
+model,"workflow.activity,name",shipmentout_act_draft,Draft,ЧеÑновик,0
+model,"workflow.activity,name",shipmentout_act_packed,Packed,УпакованнÑй,0
+model,"workflow.activity,name",shipmentout_act_waiting,Waiting,Ðжидание,0
+selection,"stock.inventory,state",0,Canceled,ÐÑменено,0
+selection,"stock.inventory,state",0,Done,ÐÑполнено,0
+selection,"stock.inventory,state",0,Draft,ЧеÑновик,0
+selection,"stock.location,type",0,Customer,ÐаказÑик,0
+selection,"stock.location,type",0,Lost and Found,УÑÑаÑеннÑй и обÑеÑеннÑй,0
+selection,"stock.location,type",0,Production,ÐÑоизводÑÑво,0
+selection,"stock.location,type",0,Storage,Ð¥ÑанилиÑе,0
+selection,"stock.location,type",0,Supplier,ÐоÑÑавÑик,0
+selection,"stock.location,type",0,View,ÐÑоÑмоÑÑ,0
+selection,"stock.location,type",0,Warehouse,ТоваÑнÑй Ñклад,0
+selection,"stock.move,state",0,Assigned,ÐеÑеданнÑй,0
+selection,"stock.move,state",0,Canceled,ÐÑменено,0
+selection,"stock.move,state",0,Done,ÐÑполнено,0
+selection,"stock.move,state",0,Draft,ЧеÑновик,0
+selection,"stock.shipment.in,state",0,Canceled,ÐÑменено,0
+selection,"stock.shipment.in,state",0,Done,ÐÑполнено,0
+selection,"stock.shipment.in,state",0,Draft,ЧеÑновик,0
+selection,"stock.shipment.in,state",0,Received,ÐоÑÑÑпило,0
+selection,"stock.shipment.in.return,state",0,Assigned,ÐеÑеданнÑй,0
+selection,"stock.shipment.in.return,state",0,Canceled,ÐÑменено,0
+selection,"stock.shipment.in.return,state",0,Done,ÐÑполнено,0
+selection,"stock.shipment.in.return,state",0,Draft,ЧеÑновик,0
+selection,"stock.shipment.in.return,state",0,Waiting,Ðжидание,0
+selection,"stock.shipment.internal,state",0,Assigned,ÐеÑеданнÑй,0
+selection,"stock.shipment.internal,state",0,Canceled,ÐÑменено,0
+selection,"stock.shipment.internal,state",0,Done,ÐÑполнено,0
+selection,"stock.shipment.internal,state",0,Draft,ЧеÑновик,0
+selection,"stock.shipment.internal,state",0,Waiting,Ðжидание,0
+selection,"stock.shipment.out,state",0,Assigned,ÐеÑеданнÑй,0
+selection,"stock.shipment.out,state",0,Canceled,ÐÑменено,0
+selection,"stock.shipment.out,state",0,Done,ÐÑполнено,0
+selection,"stock.shipment.out,state",0,Draft,ЧеÑновик,0
+selection,"stock.shipment.out,state",0,Packed,УпакованнÑй,0
+selection,"stock.shipment.out,state",0,Waiting,Ðжидание,0
+selection,"stock.shipment.out.return,state",0,Canceled,ÐÑменено,0
+selection,"stock.shipment.out.return,state",0,Done,ÐÑполнено,0
+selection,"stock.shipment.out.return,state",0,Draft,ЧеÑновик,0
+selection,"stock.shipment.out.return,state",0,Received,ÐоÑÑÑпило,0
+view,party.party,0,Stock,Ð¥ÑанилиÑе,0
+view,product.product,0,Products,ТÐЦ,0
+view,stock.configuration,0,Stock Configuration,ÐонÑигÑÑаÑÐ¸Ñ Ñклада,0
+view,stock.inventory,0,Add an inventory line for each missing products,ÐобавиÑÑ ÑÑÑÐ¾ÐºÑ Ð² ÑпиÑок Ð´Ð»Ñ ÐºÐ°Ð¶Ð´Ð¾Ð³Ð¾ оÑÑÑÑÑÑвÑÑÑего ÑоваÑа,0
+view,stock.inventory,0,Cancel,ÐÑмениÑÑ,0
+view,stock.inventory,0,Complete Inventory,ÐÐ¾Ð»Ð½Ð°Ñ Ð¸Ð½Ð²ÐµÐ½ÑаÑизаÑиÑ,0
+view,stock.inventory,0,Confirm,ÐодÑвеÑждаÑÑ,0
+view,stock.inventory,0,Inventories,ÐнвенÑаÑизаÑиÑ,0
+view,stock.inventory,0,Inventory,ÐнвенÑаÑизаÑиÑ,0
+view,stock.inventory.line,0,Inventory Line,СÑÑока инвенÑаÑизаÑии,0
+view,stock.inventory.line,0,Inventory Lines,СÑÑоки инвенÑаÑизаÑии,0
+view,stock.location,0,Location,ÐеÑÑо,0
+view,stock.location,0,Locations,ÐеÑÑа Ñ
ÑанениÑ,0
+view,stock.location,0,Product Stock,Ð¥ÑанилиÑе ТÐЦ,0
+view,stock.location_stock_date.init,0,Product Quantity.,ÐолиÑеÑÑво ТоваÑов.,0
+view,stock.move,0,Move,ÐеÑемеÑение,0
+view,stock.move,0,Moves,ÐеÑемеÑениÑ,0
+view,stock.product_stock_date.init,0,Product Quantity.,ÐолиÑеÑÑво ТоваÑов.,0
+view,stock.shipment.in,0,Cancel,ÐÑмениÑÑ,0
+view,stock.shipment.in,0,Done,ÐÑполнено,0
+view,stock.shipment.in,0,Incoming Moves,ÐÑ
одÑÑий гÑÑз,0
+view,stock.shipment.in,0,Inventory Moves,УÑÐµÑ Ð¿ÐµÑемеÑений,0
+view,stock.shipment.in,0,Moves,ÐеÑемеÑениÑ,0
+view,stock.shipment.in,0,Received,ÐоÑÑÑпило,0
+view,stock.shipment.in,0,Reset to Draft,СбÑÐ¾Ñ Ð² ÑеÑновик,0
+view,stock.shipment.in,0,Supplier Shipment,ÐÑиÑ
од Ð¾Ñ Ð¿Ð¾ÑÑавÑика,0
+view,stock.shipment.in,0,Supplier Shipments,ÐÑиÑ
од Ð¾Ñ Ð¿Ð¾ÑÑавÑиков,0
+view,stock.shipment.in.return,0,Assign,ÐазнаÑение,0
+view,stock.shipment.in.return,0,Cancel,ÐÑмениÑÑ,0
+view,stock.shipment.in.return,0,Done,ÐÑполнено,0
+view,stock.shipment.in.return,0,Draft,ЧеÑновик,0
+view,stock.shipment.in.return,0,Reset to Draft,СбÑÐ¾Ñ Ð² ÑеÑновик,0
+view,stock.shipment.in.return,0,Supplier Return Shipment,ÐозвÑÐ°Ñ Ð¿Ð¾ÑÑавÑикÑ,0
+view,stock.shipment.in.return,0,Supplier Return Shipments,ÐозвÑаÑÑ Ð¿Ð¾ÑÑавÑикÑ,0
+view,stock.shipment.in.return,0,Waiting,Ðжидание,0
+view,stock.shipment.in.return.assign.ask_force,0,Moves,ÐеÑемеÑениÑ,0
+view,stock.shipment.in.return.assign.ask_force,0,Unable to Assign,Ðевозможно ÐазнаÑение,0
+view,stock.shipment.in.return.assign.ask_force,0,Unable to assign those products:,Ðевозможно назнаÑиÑÑ ÑÑи ÑоваÑÑ:,0
+view,stock.shipment.internal,0,Assign,ÐазнаÑение,0
+view,stock.shipment.internal,0,Cancel,ÐÑмениÑÑ,0
+view,stock.shipment.internal,0,Done,ÐÑполнено,0
+view,stock.shipment.internal,0,Draft,ЧеÑновик,0
+view,stock.shipment.internal,0,Internal Shipment,ÐнÑÑÑеннее пеÑемеÑение,0
+view,stock.shipment.internal,0,Internal Shipments,ÐнÑÑÑенние пеÑемеÑениÑ,0
+view,stock.shipment.internal,0,Reset to Draft,СбÑÐ¾Ñ Ð² ÑеÑновик,0
+view,stock.shipment.internal,0,Waiting,Ðжидание,0
+view,stock.shipment.internal.assign.ask_force,0,Moves,ÐеÑемеÑениÑ,0
+view,stock.shipment.internal.assign.ask_force,0,Unable to Assign,Ðевозможно ÐазнаÑение,0
+view,stock.shipment.internal.assign.ask_force,0,Unable to assign those products:,Ðевозможно назнаÑиÑÑ ÑÑи ÑоваÑÑ:,0
+view,stock.shipment.out,0,Assign,ÐазнаÑение,0
+view,stock.shipment.out,0,Cancel,ÐÑмениÑÑ,0
+view,stock.shipment.out,0,Customer Shipment,ÐÑгÑÑзка заказÑикÑ,0
+view,stock.shipment.out,0,Customer Shipments,ÐÑгÑÑзки заказÑикам,0
+view,stock.shipment.out,0,Done,ÐÑполнено,0
+view,stock.shipment.out,0,Draft,ЧеÑновик,0
+view,stock.shipment.out,0,Inventory Moves,УÑÐµÑ Ð¿ÐµÑемеÑений,0
+view,stock.shipment.out,0,Make shipment,СделаÑÑ Ð¾ÑгÑÑзкÑ,0
+view,stock.shipment.out,0,Outgoing Moves,ÐнеÑнее пеÑемеÑение,0
+view,stock.shipment.out,0,Reset to Draft,СбÑÐ¾Ñ Ð² ÑеÑновик,0
+view,stock.shipment.out,0,Waiting,Ðжидание,0
+view,stock.shipment.out.assign.ask_force,0,Inventory Moves,УÑÐµÑ Ð¿ÐµÑемеÑений,0
+view,stock.shipment.out.assign.ask_force,0,Unable to Assign,Ðевозможно ÐазнаÑение,0
+view,stock.shipment.out.assign.ask_force,0,Unable to assign those products:,Ðевозможно назнаÑиÑÑ ÑÑи ÑоваÑÑ:,0
+view,stock.shipment.out.return,0,Cancel,ÐÑмениÑÑ,0
+view,stock.shipment.out.return,0,Customer Return Shipment,ÐозвÑÐ°Ñ Ð¾Ñ Ð·Ð°ÐºÐ°Ð·Ñика,0
+view,stock.shipment.out.return,0,Customer Return Shipments,ÐозвÑаÑÑ Ð¾Ñ Ð·Ð°ÐºÐ°Ð·Ñиков,0
+view,stock.shipment.out.return,0,Done,ÐÑполнено,0
+view,stock.shipment.out.return,0,Incoming Moves,ÐÑ
одÑÑий гÑÑз,0
+view,stock.shipment.out.return,0,Inventory Moves,УÑÐµÑ Ð¿ÐµÑемеÑений,0
+view,stock.shipment.out.return,0,Moves,ÐеÑемеÑениÑ,0
+view,stock.shipment.out.return,0,Received,ÐоÑÑÑпило,0
+view,stock.shipment.out.return,0,Reset to Draft,СбÑÐ¾Ñ Ð² ÑеÑновики,0
+wizard_button,"stock.location.open,init,end",0,Cancel,ÐÑмениÑÑ,0
+wizard_button,"stock.location.open,init,open",0,Open,ÐÑкÑÑÑÑ,0
+wizard_button,"stock.product.open,init,end",0,Cancel,ÐÑмениÑÑ,0
+wizard_button,"stock.product.open,init,open",0,Open,ÐÑкÑÑÑÑ,0
+wizard_button,"stock.shipment.in.return.assign,ask_force,end",0,Ok,Ðа,0
+wizard_button,"stock.shipment.in.return.assign,ask_force,force",0,Force Assign,УÑкоÑÐµÐ½Ð½Ð°Ñ Ð¾ÑгÑÑзка,0
+wizard_button,"stock.shipment.internal.assign,ask_force,end",0,Ok,Ðа,0
+wizard_button,"stock.shipment.internal.assign,ask_force,force",0,Force Assign,УÑкоÑÐµÐ½Ð½Ð°Ñ Ð¿ÐµÑедаÑа,0
+wizard_button,"stock.shipment.out.assign,ask_force,end",0,Ok,Ðа,0
+wizard_button,"stock.shipment.out.assign,ask_force,force",0,Force Assign,УÑкоÑÐµÐ½Ð½Ð°Ñ Ð¾ÑгÑÑзка,0
diff --git a/setup.py b/setup.py
index fe50a16..90d2835 100644
--- a/setup.py
+++ b/setup.py
@@ -31,6 +31,7 @@ setup(name='trytond_stock',
packages=[
'trytond.modules.stock',
'trytond.modules.stock.tests',
+ 'trytond.modules.stock.icons',
],
package_data={
'trytond.modules.stock': info.get('xml', []) \
@@ -40,6 +41,7 @@ setup(name='trytond_stock',
'internal_shipment.odt',
'picking_list.odt',
'supplier_restocking_list.odt'],
+ 'trytond.modules.stock.icons': ['tryton-inventory.svg'],
},
classifiers=[
'Development Status :: 5 - Production/Stable',
@@ -49,12 +51,16 @@ setup(name='trytond_stock',
'Intended Audience :: Legal Industry',
'Intended Audience :: Manufacturing',
'License :: OSI Approved :: GNU General Public License (GPL)',
+ 'Natural Language :: Bulgarian',
'Natural Language :: English',
'Natural Language :: French',
'Natural Language :: German',
+ 'Natural Language :: Russian',
'Natural Language :: Spanish',
'Operating System :: OS Independent',
- 'Programming Language :: Python',
+ 'Programming Language :: Python :: 2.5',
+ 'Programming Language :: Python :: 2.6',
+ 'Programming Language :: Python :: 2.7',
'Topic :: Office/Business',
],
license='GPL-3',
diff --git a/shipment.xml b/shipment.xml
index 7f380d1..85a2f98 100644
--- a/shipment.xml
+++ b/shipment.xml
@@ -88,7 +88,6 @@ this repository contains the full copyright notices and license terms. -->
<record model="ir.action.act_window" id="act_shipment_in_form">
<field name="name">Supplier Shipments</field>
<field name="res_model">stock.shipment.in</field>
- <field name="view_type">form</field>
<field name="search_value">{'create_date': ['between', Date(delta_years=-1)]}</field>
</record>
<record model="ir.action.act_window.view"
@@ -109,7 +108,6 @@ this repository contains the full copyright notices and license terms. -->
<record model="ir.action.act_window" id="act_shipment_in_form2">
<field name="name">New Supplier Shipment</field>
<field name="res_model">stock.shipment.in</field>
- <field name="view_type">form</field>
</record>
<record model="ir.action.act_window.view"
id="act_shipment_in_form2_view1">
@@ -129,7 +127,6 @@ this repository contains the full copyright notices and license terms. -->
<record model="ir.action.act_window" id="act_shipment_in_form_received">
<field name="name">Received Supplier shipments</field>
<field name="res_model">stock.shipment.in</field>
- <field name="view_type">form</field>
<field name="domain">[('state', '=', 'received')]</field>
</record>
<record model="ir.action.act_window.view"
@@ -223,7 +220,6 @@ this repository contains the full copyright notices and license terms. -->
<record model="ir.action.act_window" id="act_shipment_in_return_form">
<field name="name">Supplier Return Shipments</field>
<field name="res_model">stock.shipment.in.return</field>
- <field name="view_type">form</field>
<field name="search_value">{'create_date': ['between', Date(delta_years=-1)]}</field>
</record>
<record model="ir.action.act_window.view"
@@ -245,7 +241,6 @@ this repository contains the full copyright notices and license terms. -->
<record model="ir.action.act_window" id="act_shipment_in_return_new_form">
<field name="name">New Supplier Return Shipment</field>
<field name="res_model">stock.shipment.in.return</field>
- <field name="view_type">form</field>
</record>
<record model="ir.action.act_window.view"
id="act_shipment_in_return_new_form_view1">
@@ -387,7 +382,6 @@ this repository contains the full copyright notices and license terms. -->
<record model="ir.action.act_window" id="act_shipment_out_form">
<field name="name">Customer Shipments</field>
<field name="res_model">stock.shipment.out</field>
- <field name="view_type">form</field>
<field name="search_value">{'create_date': ['between', Date(delta_years=-1)]}</field>
</record>
<record model="ir.action.act_window.view"
@@ -408,7 +402,6 @@ this repository contains the full copyright notices and license terms. -->
<record model="ir.action.act_window" id="act_shipment_out_form_waiting">
<field name="name">Customer Shipments Waiting Assignation</field>
<field name="res_model">stock.shipment.out</field>
- <field name="view_type">form</field>
<field name="domain">[('state', '=', 'waiting')]</field>
</record>
<record model="ir.action.act_window.view"
@@ -431,7 +424,6 @@ this repository contains the full copyright notices and license terms. -->
id="act_shipment_out_form_assigned">
<field name="name">Assigned Customer Shipments</field>
<field name="res_model">stock.shipment.out</field>
- <field name="view_type">form</field>
<field name="domain">[('state', '=', 'assigned')]</field>
</record>
<record model="ir.action.act_window.view"
@@ -453,7 +445,6 @@ this repository contains the full copyright notices and license terms. -->
<record model="ir.action.act_window" id="act_shipment_out_form_ready">
<field name="name">Customer Shipments Ready for Shipping</field>
<field name="res_model">stock.shipment.out</field>
- <field name="view_type">form</field>
<field name="domain">[('state', '=', 'packed')]</field>
</record>
<record model="ir.action.act_window.view"
@@ -570,7 +561,6 @@ this repository contains the full copyright notices and license terms. -->
<record model="ir.action.act_window" id="act_shipment_internal_form">
<field name="name">Internal Shipments</field>
<field name="res_model">stock.shipment.internal</field>
- <field name="view_type">form</field>
<field name="search_value">{'create_date': ['between', Date(delta_years=-1)]}</field>
</record>
<record model="ir.action.act_window.view"
@@ -592,7 +582,6 @@ this repository contains the full copyright notices and license terms. -->
<record model="ir.action.act_window" id="act_shipment_internal_new_form">
<field name="name">New Internal Shipment</field>
<field name="res_model">stock.shipment.internal</field>
- <field name="view_type">form</field>
</record>
<record model="ir.action.act_window.view"
id="act_shipment_internal_new_form_view1">
@@ -613,7 +602,6 @@ this repository contains the full copyright notices and license terms. -->
<record model="ir.action.act_window" id="act_shipment_internal_draft_form">
<field name="name">Draft Internal Shipments</field>
<field name="res_model">stock.shipment.internal</field>
- <field name="view_type">form</field>
<field name="domain">[('state', '=', 'draft')]</field>
</record>
<record model="ir.action.act_window.view"
@@ -635,7 +623,6 @@ this repository contains the full copyright notices and license terms. -->
<record model="ir.action.act_window" id="act_shipment_internal_waiting_form">
<field name="name">Internal Shipments Waiting Assignation</field>
<field name="res_model">stock.shipment.internal</field>
- <field name="view_type">form</field>
<field name="domain">[('state', '=', 'waiting')]</field>
</record>
<record model="ir.action.act_window.view"
@@ -657,7 +644,6 @@ this repository contains the full copyright notices and license terms. -->
<record model="ir.action.act_window" id="act_shipment_internal_assigned_form">
<field name="name">Assigned Internal Shipments</field>
<field name="res_model">stock.shipment.internal</field>
- <field name="view_type">form</field>
<field name="domain">[('state', '=', 'assigned')]</field>
</record>
<record model="ir.action.act_window.view"
@@ -785,7 +771,6 @@ this repository contains the full copyright notices and license terms. -->
<record model="ir.action.act_window" id="act_shipment_out_return_form">
<field name="name">Customer Return Shipments</field>
<field name="res_model">stock.shipment.out.return</field>
- <field name="view_type">form</field>
<field name="search_value">{'create_date': ['between', Date(delta_years=-1)]}</field>
</record>
<record model="ir.action.act_window.view"
@@ -807,7 +792,6 @@ this repository contains the full copyright notices and license terms. -->
<record model="ir.action.act_window" id="act_shipment_out_return_form2">
<field name="name">New Customer Return Shipment</field>
<field name="res_model">stock.shipment.out.return</field>
- <field name="view_type">form</field>
</record>
<record model="ir.action.act_window.view"
id="act_shipment_out_return_form2_view1">
diff --git a/stock.xml b/stock.xml
index 15752b9..6bc146b 100644
--- a/stock.xml
+++ b/stock.xml
@@ -19,8 +19,12 @@ this repository contains the full copyright notices and license terms. -->
<field name="groups" eval="[('add', ref('group_stock_admin')), ('add', ref('group_stock')), ('add', ref('group_stock_force_assignment'))]"/>
</record>
+ <record model="ir.ui.icon" id="inventory_icon">
+ <field name="name">tryton-inventory</field>
+ <field name="path">icons/tryton-inventory.svg</field>
+ </record>
<menuitem name="Inventory Management" sequence="3" id="menu_stock"
- icon="tryton-package"/>
+ icon="tryton-inventory"/>
<menuitem name="Configuration" parent="menu_stock"
id="menu_configuration" groups="group_stock_admin"
sequence="0" icon="tryton-preferences"/>
diff --git a/tests/test_stock.py b/tests/test_stock.py
index d5f9b30..dcf0de6 100644
--- a/tests/test_stock.py
+++ b/tests/test_stock.py
@@ -1,6 +1,7 @@
#!/usr/bin/env python
#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 __future__ import with_statement
import sys, os
DIR = os.path.abspath(os.path.normpath(os.path.join(__file__,
@@ -9,8 +10,14 @@ if os.path.isdir(DIR):
sys.path.insert(0, os.path.dirname(DIR))
import unittest
+import datetime
+from decimal import Decimal
+from dateutil.relativedelta import relativedelta
+from functools import partial
import trytond.tests.test_tryton
-from trytond.tests.test_tryton import test_view
+from trytond.tests.test_tryton import POOL, DB_NAME, USER, CONTEXT, test_view
+from trytond.transaction import Transaction
+
class StockTestCase(unittest.TestCase):
'''
@@ -19,6 +26,15 @@ class StockTestCase(unittest.TestCase):
def setUp(self):
trytond.tests.test_tryton.install_module('stock')
+ self.product = POOL.get('product.product')
+ self.category = POOL.get('product.category')
+ self.uom = POOL.get('product.uom')
+ self.location = POOL.get('stock.location')
+ self.move = POOL.get('stock.move')
+ self.company = POOL.get('company.company')
+ self.user = POOL.get('res.user')
+ self.period = POOL.get('stock.period')
+ self.cache = POOL.get('stock.period.cache')
def test0005views(self):
'''
@@ -26,8 +42,404 @@ class StockTestCase(unittest.TestCase):
'''
test_view('stock')
+ def test0010move_internal_quantity(self):
+ '''
+ Test Move.internal_quantity.
+ '''
+ with Transaction().start(DB_NAME, USER, CONTEXT) as transaction:
+ category_id = self.category.create({
+ 'name': 'Test Move.internal_quantity',
+ })
+ kg_id, = self.uom.search([('name', '=', 'Kilogram')])
+ g_id, = self.uom.search([('name', '=', 'Gram')])
+ product_id = self.product.create({
+ 'name': 'Test Move.internal_quantity',
+ 'type': 'stockable',
+ 'category': category_id,
+ 'cost_price_method': 'fixed',
+ 'default_uom': kg_id,
+ })
+ supplier_id, = self.location.search([('code', '=', 'SUP')])
+ storage_id, = self.location.search([('code', '=', 'STO')])
+ company_id, = self.company.search([('name', '=', 'B2CK')])
+ currency_id = self.company.read(company_id,
+ ['currency'])['currency']
+ self.user.write(USER, {
+ 'main_company': company_id,
+ 'company': company_id,
+ })
+
+ tests = [
+ (kg_id, 10, 10),
+ (g_id, 100, 0.1),
+ (g_id, 1, 0), # rounded
+ ]
+ for uom_id, quantity, internal_quantity in tests:
+ move_id = self.move.create({
+ 'product': product_id,
+ 'uom': uom_id,
+ 'quantity': quantity,
+ 'from_location': supplier_id,
+ 'to_location': storage_id,
+ 'company': company_id,
+ 'unit_price': Decimal('1'),
+ 'currency': currency_id,
+ })
+ self.assertEqual(self.move.read(move_id,
+ ['internal_quantity'])['internal_quantity'],
+ internal_quantity)
+
+ for uom_id, quantity, internal_quantity in tests:
+ self.move.write(move_id, {
+ 'uom': uom_id,
+ 'quantity': quantity,
+ })
+ self.assertEqual(self.move.read(move_id,
+ ['internal_quantity'])['internal_quantity'],
+ internal_quantity)
+
+ def test0020products_by_location(self):
+ '''
+ Test products_by_location.
+ '''
+ with Transaction().start(DB_NAME, USER, CONTEXT) as transaction:
+ category_id = self.category.create({
+ 'name': 'Test products_by_location',
+ })
+ unit_id, = self.uom.search([('name', '=', 'Unit')])
+ product_id = self.product.create({
+ 'name': 'Test products_by_location',
+ 'type': 'stockable',
+ 'category': category_id,
+ 'cost_price_method': 'fixed',
+ 'default_uom': unit_id,
+ })
+ supplier_id, = self.location.search([('code', '=', 'SUP')])
+ customer_id, = self.location.search([('code', '=', 'CUS')])
+ storage_id, = self.location.search([('code', '=', 'STO')])
+ company_id, = self.company.search([('name', '=', 'B2CK')])
+ currency_id = self.company.read(company_id,
+ ['currency'])['currency']
+ self.user.write(USER, {
+ 'main_company': company_id,
+ 'company': company_id,
+ })
+
+ today = datetime.date.today()
+
+ self.move.create({
+ 'product': product_id,
+ 'uom': unit_id,
+ 'quantity': 5,
+ 'from_location': supplier_id,
+ 'to_location': storage_id,
+ 'planned_date': today + relativedelta(days=-5),
+ 'effective_date': today + relativedelta(days=-5),
+ 'state': 'done',
+ 'company': company_id,
+ 'unit_price': Decimal('1'),
+ 'currency': currency_id,
+ })
+ self.move.create({
+ 'product': product_id,
+ 'uom': unit_id,
+ 'quantity': 1,
+ 'from_location': supplier_id,
+ 'to_location': storage_id,
+ 'planned_date': today + relativedelta(days=-4),
+ 'state': 'draft',
+ 'company': company_id,
+ 'unit_price': Decimal('1'),
+ 'currency': currency_id,
+ })
+ self.move.create({
+ 'product': product_id,
+ 'uom': unit_id,
+ 'quantity': 1,
+ 'from_location': storage_id,
+ 'to_location': customer_id,
+ 'planned_date': today,
+ 'effective_date': today,
+ 'state': 'done',
+ 'company': company_id,
+ 'unit_price': Decimal('1'),
+ 'currency': currency_id,
+ })
+ self.move.create({
+ 'product': product_id,
+ 'uom': unit_id,
+ 'quantity': 1,
+ 'from_location': storage_id,
+ 'to_location': customer_id,
+ 'planned_date': today,
+ 'state': 'draft',
+ 'company': company_id,
+ 'unit_price': Decimal('1'),
+ 'currency': currency_id,
+ })
+ self.move.create({
+ 'product': product_id,
+ 'uom': unit_id,
+ 'quantity': 2,
+ 'from_location': storage_id,
+ 'to_location': customer_id,
+ 'planned_date': today + relativedelta(days=5),
+ 'state': 'draft',
+ 'company': company_id,
+ 'unit_price': Decimal('1'),
+ 'currency': currency_id,
+ })
+ self.move.create({
+ 'product': product_id,
+ 'uom': unit_id,
+ 'quantity': 5,
+ 'from_location': supplier_id,
+ 'to_location': storage_id,
+ 'planned_date': today + relativedelta(days=7),
+ 'state': 'draft',
+ 'company': company_id,
+ 'unit_price': Decimal('1'),
+ 'currency': currency_id,
+ })
+
+ 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),
+ }, 0),
+ ({'stock_date_end': today + relativedelta(days=-5),
+ }, 5),
+ ({'stock_date_end': today + relativedelta(days=-4),
+ }, 5),
+ ({'stock_date_end': today + relativedelta(days=-3),
+ }, 5),
+ ({'stock_date_end': today,
+ }, 4),
+ ({'stock_date_end': today + relativedelta(days=1),
+ }, 3),
+ ({'stock_date_end': today + relativedelta(days=5),
+ }, 1),
+ ({'stock_date_end': today + relativedelta(days=6),
+ }, 1),
+ ({'stock_date_end': today + relativedelta(days=7),
+ }, 6),
+ ({'stock_date_end': today + relativedelta(days=8),
+ }, 6),
+ ({'stock_date_end': False,
+ }, 6),
+ ({'stock_date_end': today + relativedelta(days=-6),
+ 'forecast': True,
+ }, 0),
+ ({'stock_date_end': today + relativedelta(days=-5),
+ 'forecast': True,
+ }, 5),
+ ({'stock_date_end': today + relativedelta(days=-4),
+ 'forecast': True,
+ }, 5),
+ ({'stock_date_end': today + relativedelta(days=-3),
+ 'forecast': True,
+ }, 5),
+ ({'stock_date_end': today,
+ 'forecast': True,
+ }, 3),
+ ({'stock_date_end': today + relativedelta(days=1),
+ 'forecast': True,
+ }, 3),
+ ({'stock_date_end': today + relativedelta(days=5),
+ 'forecast': True,
+ }, 1),
+ ({'stock_date_end': today + relativedelta(days=6),
+ 'forecast': True,
+ }, 1),
+ ({'stock_date_end': today + relativedelta(days=7),
+ 'forecast': True,
+ }, 6),
+ ({'stock_date_end': False,
+ 'forecast': True,
+ }, 6),
+ ]
+
+ 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})
+
+ test_products_by_location()
+
+ periods = [
+ today + relativedelta(days=-6),
+ today + relativedelta(days=-5),
+ today + relativedelta(days=-4),
+ today + relativedelta(days=-3),
+ today + relativedelta(days=-2),
+ ]
+ for period_date in periods:
+ period_id = self.period.create({
+ 'date': period_date,
+ 'company': company_id,
+ })
+ self.period.button_close([period_id])
+ test_products_by_location()
+
+ def test0030period(self):
+ '''
+ Test period.
+ '''
+ with Transaction().start(DB_NAME, USER, CONTEXT) as transaction:
+ category_id = self.category.create({
+ 'name': 'Test period',
+ })
+ unit_id, = self.uom.search([('name', '=', 'Unit')])
+ product_id = self.product.create({
+ 'name': 'Test period',
+ 'type': 'stockable',
+ 'category': category_id,
+ 'cost_price_method': 'fixed',
+ 'default_uom': unit_id,
+ })
+ supplier_id, = self.location.search([('code', '=', 'SUP')])
+ customer_id, = self.location.search([('code', '=', 'CUS')])
+ storage_id, = self.location.search([('code', '=', 'STO')])
+ company_id, = self.company.search([('name', '=', 'B2CK')])
+ currency_id = self.company.read(company_id,
+ ['currency'])['currency']
+ self.user.write(USER, {
+ 'main_company': company_id,
+ 'company': company_id,
+ })
+
+ today = datetime.date.today()
+
+ self.move.create({
+ 'product': product_id,
+ 'uom': unit_id,
+ 'quantity': 10,
+ 'from_location': supplier_id,
+ 'to_location': storage_id,
+ 'planned_date': today + relativedelta(days=-5),
+ 'effective_date': today + relativedelta(days=-5),
+ 'state': 'done',
+ 'company': company_id,
+ 'unit_price': Decimal('1'),
+ 'currency': currency_id,
+ })
+ self.move.create({
+ 'product': product_id,
+ 'uom': unit_id,
+ 'quantity': 15,
+ 'from_location': supplier_id,
+ 'to_location': storage_id,
+ 'planned_date': today + relativedelta(days=-4),
+ 'effective_date': today + relativedelta(days=-4),
+ 'state': 'done',
+ 'company': company_id,
+ 'unit_price': Decimal('1'),
+ 'currency': currency_id,
+ })
+ self.move.create({
+ 'product': product_id,
+ 'uom': unit_id,
+ 'quantity': 5,
+ 'from_location': storage_id,
+ 'to_location': customer_id,
+ 'planned_date': today + relativedelta(days=-3),
+ 'effective_date': today + relativedelta(days=-3),
+ 'state': 'done',
+ 'company': company_id,
+ 'unit_price': Decimal('1'),
+ 'currency': currency_id,
+ })
+
+ tests = [
+ (-5, {
+ supplier_id: -10,
+ storage_id: 10,
+ }),
+ (-3, {
+ supplier_id: -25,
+ storage_id: 20,
+ customer_id: 5,
+ })
+ ]
+
+ for days, quantities in tests:
+ period_id = self.period.create({
+ 'date': today + relativedelta(days=days),
+ 'company': company_id,
+ })
+ self.period.button_close([period_id])
+
+ period = self.period.read(period_id, ['state', 'caches'])
+ self.assertEqual(period['state'], 'closed')
+
+ cache_ids = period['caches']
+ caches = self.cache.read(cache_ids,
+ ['location', 'product', 'internal_quantity'])
+ for cache in caches:
+ location_id = cache['location']
+ self.assertEqual(cache['product'], product_id)
+ self.assertEqual(cache['internal_quantity'],
+ quantities[location_id])
+
+ # Test check_period_closed
+ self.move.create({
+ 'product': product_id,
+ 'uom': unit_id,
+ 'quantity': 10,
+ 'from_location': supplier_id,
+ 'to_location': storage_id,
+ 'planned_date': today,
+ 'effective_date': today,
+ 'state': 'done',
+ 'company': company_id,
+ 'unit_price': Decimal('1'),
+ 'currency': currency_id,
+ })
+
+ self.assertRaises(Exception, self.move.create, {
+ 'product': product_id,
+ 'uom': unit_id,
+ 'quantity': 10,
+ 'from_location': supplier_id,
+ 'to_location': storage_id,
+ 'planned_date': today + relativedelta(days=-5),
+ 'effective_date': today + relativedelta(days=-5),
+ 'state': 'done',
+ 'company': company_id,
+ 'unit_price': Decimal('1'),
+ 'currency': currency_id,
+ })
+
+ # Test close period check
+ period_id = self.period.create({
+ 'date': today,
+ 'company': company_id,
+ })
+ self.assertRaises(Exception, self.period.button_close, [period_id])
+
+ period_id = self.period.create({
+ 'date': today + relativedelta(days=1),
+ 'company': company_id,
+ })
+ self.assertRaises(Exception, self.period.button_close, [period_id])
+
+
def suite():
suite = trytond.tests.test_tryton.suite()
+ from trytond.modules.company.tests import test_company
+ for test in test_company.suite():
+ if test not in suite:
+ suite.addTest(test)
suite.addTests(unittest.TestLoader().loadTestsFromTestCase(StockTestCase))
return suite
diff --git a/trytond_stock.egg-info/PKG-INFO b/trytond_stock.egg-info/PKG-INFO
index f1493d5..64491bc 100644
--- a/trytond_stock.egg-info/PKG-INFO
+++ b/trytond_stock.egg-info/PKG-INFO
@@ -1,6 +1,6 @@
Metadata-Version: 1.0
Name: trytond-stock
-Version: 1.8.0
+Version: 2.0.0
Summary: Stock Management and Inventory Control with:
- Location definition
- Stock move
@@ -17,7 +17,7 @@ Home-page: http://www.tryton.org/
Author: B2CK
Author-email: info at b2ck.com
License: GPL-3
-Download-URL: http://downloads.tryton.org/1.8/
+Download-URL: http://downloads.tryton.org/2.0/
Description: UNKNOWN
Platform: UNKNOWN
Classifier: Development Status :: 5 - Production/Stable
@@ -27,10 +27,14 @@ Classifier: Intended Audience :: Financial and Insurance Industry
Classifier: Intended Audience :: Legal Industry
Classifier: Intended Audience :: Manufacturing
Classifier: License :: OSI Approved :: GNU General Public License (GPL)
+Classifier: Natural Language :: Bulgarian
Classifier: Natural Language :: English
Classifier: Natural Language :: French
Classifier: Natural Language :: German
+Classifier: Natural Language :: Russian
Classifier: Natural Language :: Spanish
Classifier: Operating System :: OS Independent
-Classifier: Programming Language :: Python
+Classifier: Programming Language :: Python :: 2.5
+Classifier: Programming Language :: Python :: 2.6
+Classifier: Programming Language :: Python :: 2.7
Classifier: Topic :: Office/Business
diff --git a/trytond_stock.egg-info/SOURCES.txt b/trytond_stock.egg-info/SOURCES.txt
index 47215bf..7389bbc 100644
--- a/trytond_stock.egg-info/SOURCES.txt
+++ b/trytond_stock.egg-info/SOURCES.txt
@@ -5,6 +5,7 @@ LICENSE
MANIFEST.in
README
TODO
+bg_BG.csv
configuration.xml
customer_return_restocking_list.odt
de_DE.csv
@@ -17,8 +18,10 @@ inventory.xml
location.xml
move.xml
party.xml
+period.xml
picking_list.odt
product.xml
+ru_RU.csv
setup.py
shipment.xml
stock.xml
@@ -29,11 +32,16 @@ supplier_restocking_list.odt
./inventory.py
./location.py
./move.py
+./period.py
./product.py
./shipment.py
+./icons/__init__.py
./tests/__init__.py
./tests/test_stock.py
doc/index.rst
+icons/LICENSE
+icons/__init__.py
+icons/tryton-inventory.svg
trytond_stock.egg-info/PKG-INFO
trytond_stock.egg-info/SOURCES.txt
trytond_stock.egg-info/dependency_links.txt
diff --git a/trytond_stock.egg-info/requires.txt b/trytond_stock.egg-info/requires.txt
index d599c48..05d3f8e 100644
--- a/trytond_stock.egg-info/requires.txt
+++ b/trytond_stock.egg-info/requires.txt
@@ -1,5 +1,5 @@
-trytond_party >= 1.8, < 1.9
-trytond_product >= 1.8, < 1.9
-trytond_company >= 1.8, < 1.9
-trytond_currency >= 1.8, < 1.9
-trytond >= 1.8, < 1.9
\ No newline at end of file
+trytond_party >= 2.0, < 2.1
+trytond_product >= 2.0, < 2.1
+trytond_company >= 2.0, < 2.1
+trytond_currency >= 2.0, < 2.1
+trytond >= 2.0, < 2.1
\ No newline at end of file
commit 3e79350db72a8b7310ed959dab124e8d00758bd4
Author: Daniel Baumann <daniel at debian.org>
Date: Thu Nov 4 20:12:33 2010 +0100
Adding upstream version 1.8.0.
diff --git a/CHANGELOG b/CHANGELOG
index 14170ff..a06290d 100644
--- a/CHANGELOG
+++ b/CHANGELOG
@@ -1,6 +1,5 @@
-Version 1.6.1 - 2010-08-31
+Version 1.8.0 - 2010-11-01
* Bug fixes (see mercurial logs for details)
-* Security fix to use safe_eval instead of eval
Version 1.6.0 - 2010-05-11
* Bug fixes (see mercurial logs for details)
diff --git a/INSTALL b/INSTALL
index 0c3a654..0be4770 100644
--- a/INSTALL
+++ b/INSTALL
@@ -4,7 +4,7 @@ Installing trytond_stock
Prerequisites
-------------
- * Python 2.4 or later (http://www.python.org/)
+ * Python 2.5 or later (http://www.python.org/)
* trytond (http://www.tryton.org/)
* trytond_party (http://www.tryton.org/)
* trytond_product (http://www.tryton.org/)
diff --git a/PKG-INFO b/PKG-INFO
index 1e25d37..9ba5984 100644
--- a/PKG-INFO
+++ b/PKG-INFO
@@ -1,6 +1,6 @@
Metadata-Version: 1.0
Name: trytond_stock
-Version: 1.6.1
+Version: 1.8.0
Summary: Stock Management and Inventory Control with:
- Location definition
- Stock move
@@ -17,7 +17,7 @@ Home-page: http://www.tryton.org/
Author: B2CK
Author-email: info at b2ck.com
License: GPL-3
-Download-URL: http://downloads.tryton.org/1.6/
+Download-URL: http://downloads.tryton.org/1.8/
Description: UNKNOWN
Platform: UNKNOWN
Classifier: Development Status :: 5 - Production/Stable
diff --git a/__tryton__.py b/__tryton__.py
index 89bbb17..c2f9bab 100644
--- a/__tryton__.py
+++ b/__tryton__.py
@@ -6,7 +6,7 @@
'name_es_CO': 'Inventarios',
'name_es_ES': 'Gestión de existencias',
'name_fr_FR': 'Gestion des stocks',
- 'version': '1.6.1',
+ 'version': '1.8.0',
'author': 'B2CK',
'email': 'info at b2ck.com',
'website': 'http://www.tryton.org/',
diff --git a/de_DE.csv b/de_DE.csv
index 5e31c75..1e003fc 100644
--- a/de_DE.csv
+++ b/de_DE.csv
@@ -12,7 +12,7 @@ error,stock.move,0,You can not set state to assigned!,Status kann nicht auf Zuge
error,stock.move,0,You can not set state to done!,Status kann nicht auf Erledigt gesetzt werden!,0
error,stock.move,0,You can not set state to draft!,"Status ""Entwurf"" kann nicht gesetzt werden!",0
error,stock.move,0,You can not use service products for a move!,Dienstleistungen können nicht in Warenbewegungen verwendet werden!,0
-error,stock.move,0,You can only delete draft or cancelled moves!,"Nur Bewegungen mit Status ""Entwurf"" oder ""Abgebrochen"" können gelöscht werden!",0
+error,stock.move,0,You can only delete draft or cancelled moves!,"Nur Bewegungen mit Status ""Entwurf"" oder ""Annulliert"" können gelöscht werden!",0
error,stock.shipment.in,0,Incoming Moves must have the warehouse input location as destination location!,Eingehende Bewegungen müssen den Eingangsbereich des Warenlagers als Zielort haben!,0
error,stock.shipment.in,0,Inventory Moves must have the warehouse input location as source location!,Bestandsänderungen müssen den Eingangsbereich des Warenlagers als Herkunftsort haben!,0
error,stock.shipment.out,0,Inventory Moves must have the warehouse output location as destination location!,Bestandsänderungen müssen den Ausgangsbereich des Warenlagers als Zielort haben!,0
@@ -36,19 +36,19 @@ field,"stock.configuration,shipment_out_return_sequence",0,Customer Return Shipm
field,"stock.configuration,shipment_out_sequence",0,Customer Shipment Sequence,Nummernkreis Lieferposten an Kunde,0
field,"stock.inventory,company",0,Company,Unternehmen,0
field,"stock.inventory,date",0,Date,Datum,0
+field,"stock.inventory,lines",0,Lines,Positionen,0
+field,"stock.inventory,location",0,Location,Ort,0
+field,"stock.inventory,lost_found",0,Lost and Found,Inventurdifferenz,0
+field,"stock.inventory,rec_name",0,Name,Name,0
+field,"stock.inventory,state",0,State,Status,0
field,"stock.inventory.line,expected_quantity",0,Expected Quantity,Erwartete Anzahl,0
field,"stock.inventory.line,inventory",0,Inventory,Lagerbestand,0
field,"stock.inventory.line,move",0,Move,Bewegung,0
field,"stock.inventory.line,product",0,Product,Artikel,0
field,"stock.inventory.line,quantity",0,Quantity,Anzahl,0
field,"stock.inventory.line,rec_name",0,Name,Name,0
-field,"stock.inventory,lines",0,Lines,Positionen,0
field,"stock.inventory.line,unit_digits",0,Unit Digits,Anzahl Stellen,0
field,"stock.inventory.line,uom",0,UOM,MaÃeinheit,0
-field,"stock.inventory,location",0,Location,Ort,0
-field,"stock.inventory,lost_found",0,Lost and Found,Inventurdifferenz,0
-field,"stock.inventory,rec_name",0,Name,Name,0
-field,"stock.inventory,state",0,State,Status,0
field,"stock.location,active",0,Active,Aktiv,0
field,"stock.location,address",0,Address,Adresse,0
field,"stock.location,childs",0,Children,Untergeordnet (Lagerorte),0
@@ -62,9 +62,9 @@ field,"stock.location,parent",0,Parent,Ãbergeordnet (Lagerort),0
field,"stock.location,quantity",0,Quantity,Anzahl,0
field,"stock.location,rec_name",0,Name,Name,0
field,"stock.location,right",0,Right,Rechts,0
-field,"stock.location_stock_date.init,forecast_date",0,At Date,Zum,0
field,"stock.location,storage_location",0,Storage,Lager,0
field,"stock.location,type",0,Location type,Lagertyp,0
+field,"stock.location_stock_date.init,forecast_date",0,At Date,Zum,0
field,"stock.move,company",0,Company,Unternehmen,0
field,"stock.move,cost_price",0,Cost Price,Einkaufspreis,0
field,"stock.move,currency",0,Currency,Währung,0
@@ -95,7 +95,9 @@ field,"stock.shipment.in,moves",0,Moves,Bewegungen,0
field,"stock.shipment.in,planned_date",0,Planned Date,Geplantes Datum,0
field,"stock.shipment.in,rec_name",0,Name,Name,0
field,"stock.shipment.in,reference",0,Reference,Beleg-Nr.,0
-field,"stock.shipment.in.return.assign.assign_failed,moves",0,Moves,Lagerbewegungen,0
+field,"stock.shipment.in,state",0,State,Status,0
+field,"stock.shipment.in,supplier",0,Supplier,Lieferant,0
+field,"stock.shipment.in,warehouse",0,Warehouse,Warenlager,0
field,"stock.shipment.in.return,code",0,Code,Code,0
field,"stock.shipment.in.return,effective_date",0,Effective Date,Effektives Datum,0
field,"stock.shipment.in.return,from_location",0,From Location,Von Lagerort,0
@@ -105,9 +107,7 @@ field,"stock.shipment.in.return,rec_name",0,Name,Name,0
field,"stock.shipment.in.return,reference",0,Reference,Beleg-Nr.,0
field,"stock.shipment.in.return,state",0,State,Status,0
field,"stock.shipment.in.return,to_location",0,To Location,Zu Lagerort,0
-field,"stock.shipment.in,state",0,State,Status,0
-field,"stock.shipment.in,supplier",0,Supplier,Lieferant,0
-field,"stock.shipment.internal.assign.assign_failed,moves",0,Moves,Bewegungen,0
+field,"stock.shipment.in.return.assign.assign_failed,moves",0,Moves,Lagerbewegungen,0
field,"stock.shipment.internal,code",0,Code,Code,0
field,"stock.shipment.internal,effective_date",0,Effective Date,Effektives Datum,0
field,"stock.shipment.internal,from_location",0,From Location,Von Lagerort,0
@@ -117,8 +117,7 @@ field,"stock.shipment.internal,rec_name",0,Name,Name,0
field,"stock.shipment.internal,reference",0,Reference,Beleg-Nr.,0
field,"stock.shipment.internal,state",0,State,Status,0
field,"stock.shipment.internal,to_location",0,To Location,Zu Lagerort,0
-field,"stock.shipment.in,warehouse",0,Warehouse,Warenlager,0
-field,"stock.shipment.out.assign.assign_failed,inventory_moves",0,Inventory Moves,Bestandsänderungen,0
+field,"stock.shipment.internal.assign.assign_failed,moves",0,Moves,Bewegungen,0
field,"stock.shipment.out,code",0,Code,Code,0
field,"stock.shipment.out,customer",0,Customer,Kunde,0
field,"stock.shipment.out,delivery_address",0,Delivery Address,Lieferadresse,0
@@ -129,6 +128,9 @@ field,"stock.shipment.out,outgoing_moves",0,Outgoing Moves,Ausgehende Bewegungen
field,"stock.shipment.out,planned_date",0,Planned Date,Geplantes Datum,0
field,"stock.shipment.out,rec_name",0,Name,Name,0
field,"stock.shipment.out,reference",0,Reference,Beleg-Nr.,0
+field,"stock.shipment.out,state",0,State,Status,0
+field,"stock.shipment.out,warehouse",0,Warehouse,Warenlager,0
+field,"stock.shipment.out.assign.assign_failed,inventory_moves",0,Inventory Moves,Bestandsänderungen,0
field,"stock.shipment.out.return,code",0,Code,Code,0
field,"stock.shipment.out.return,customer",0,Customer,Kunde,0
field,"stock.shipment.out.return,delivery_address",0,Delivery Address,Lieferadresse,0
@@ -141,8 +143,6 @@ field,"stock.shipment.out.return,rec_name",0,Name,Name,0
field,"stock.shipment.out.return,reference",0,Reference,Beleg-Nr.,0
field,"stock.shipment.out.return,state",0,State,Status,0
field,"stock.shipment.out.return,warehouse",0,Warehouse,Warenlager,0
-field,"stock.shipment.out,state",0,State,Status,0
-field,"stock.shipment.out,warehouse",0,Warehouse,Warenlager,0
help,"party.party,customer_location",0,The default destination location when sending products to the party.,Standardbestimmungsort für Sendungen zum Geschäftspartner,0
help,"party.party,supplier_location",0,The default source location when receiving products from the party.,Standardbestimmungsort für Sendungen vom Geschäftspartner,0
help,"stock.location_stock_date.init,forecast_date",0,"Allow to compute expected stock quantities for this date.
@@ -157,98 +157,98 @@ help,"stock.product_stock_date.init,forecast_date",0,"Allow to compute expected
* ein leerer Wert ist ein unbegrenztes Datum in der Zukunft
* ein Datum in der Vergangenheit berechnet historische Werte
",0
-model,"ir.action,name",act_shipment_out_form_assigned,Assigned Customer Shipments,Zugewiesene Lieferposten an Kunden,0
-model,"ir.action,name",act_shipment_internal_assigned_form,Assigned Internal Shipments,Zugewiesene Interne Lieferposten,0
-model,"ir.action,name",wizard_shipment_in_return_assign,Assign Purchase Return Shipment,Zuweisung Lieferposten Warenrückgabe,0
-model,"ir.action,name",wizard_shipment_internal_assign,Assign Shipment Internal,Zuweisung Lieferposten Intern,0
-model,"ir.action,name",wizard_shipment_out_assign,Assign Shipment Out,Zuweisung Lieferposten Ausgehend,0
-model,"ir.action,name",wizard_complete_inventory,Complete Inventory,Lagerbestandspositionen komplettieren,0
-model,"ir.action,name",create_shipment_out_return,Create Return Shipment,Warenrücknahme erstellen,0
-model,"ir.action,name",act_shipment_out_return_form,Customer Return Shipments,Warenrücknahmen (von Kunden),0
-model,"ir.action,name",act_shipment_out_form,Customer Shipments,Lieferposten an Kunden,0
-model,"ir.action,name",act_shipment_out_form2,Customer Shipments,Lieferposten als Kunde,0
-model,"ir.action,name",act_shipment_out_form_ready,Customer Shipments Ready for Shipping,Versandbereite Lieferposten an Kunden,0
-model,"ir.action,name",act_shipment_out_form_waiting,Customer Shipments Waiting Assignation,Zuzuweisende Lieferposten an Kunden,0
-model,"ir.action,name",report_shipment_out_delivery_note,Delivery Note,Lieferschein,0
-model,"ir.action,name",act_shipment_internal_draft_form,Draft Internal Shipments,Entwürfe (Interne Lieferposten),0
-model,"ir.action,name",act_inventory_form_draft,Draft Inventories,Entwürfe Bestandskorrekturen,0
-model,"ir.action,name",act_location_form,Edit Locations,Lagerorte bearbeiten,0
-model,"ir.action,name",report_shipment_internal,Internal Shipment,Interner Lieferposten,0
-model,"ir.action,name",act_shipment_internal_form,Internal Shipments,Interne Lieferposten,0
-model,"ir.action,name",act_shipment_internal_waiting_form,Internal Shipments Waiting Assignation,Zuzuweisende Interne Lieferposten,0
model,"ir.action,name",act_inventory_form,Inventories,Bestandskorrekturen,0
model,"ir.action,name",act_inventory_form2,Inventories,Bestandskorrekturen,0
+model,"ir.action,name",act_inventory_form_draft,Draft Inventories,Entwürfe Bestandskorrekturen,0
+model,"ir.action,name",act_location_form,Edit Locations,Lagerorte bearbeiten,0
+model,"ir.action,name",act_location_quantity_tree,Product Stock,Lagerbestand,0
model,"ir.action,name",act_location_tree,Locations,Lagerorte,0
model,"ir.action,name",act_move_form,Moves,Lagerbewegungen,0
+model,"ir.action,name",act_move_form_cust,Moves to Customers,Bewegungen zu Kunden,0
model,"ir.action,name",act_move_form_supp,Moves from Suppliers,Bewegungen von Lieferanten,0
model,"ir.action,name",act_move_form_supp_proceed,Moves from Suppliers Waiting Arrival,Erwartete Bewegungen von Lieferanten,0
-model,"ir.action,name",act_move_form_cust,Moves to Customers,Bewegungen zu Kunden,0
-model,"ir.action,name",act_shipment_out_return_form2,New Customer Return Shipment,Neue Warenrücknahme (von Kunde),0
-model,"ir.action,name",act_shipment_internal_new_form,New Internal Shipment,Neuer Interner Lieferposten,0
-model,"ir.action,name",act_shipment_in_return_new_form,New Supplier Return Shipment,Neue Warenrückgabe (an Lieferant),0
-model,"ir.action,name",act_shipment_in_form2,New Supplier Shipment,Neuer Lieferposten von Lieferant,0
-model,"ir.action,name",report_shipment_out_picking_list,Picking List,Pick Liste,0
-model,"ir.action,name",wizard_location_open,Product by Location,Artikel nach Lagerort,0
-model,"ir.action,name",wizard_product_open,Product Quantities,Artikelbestand,0
model,"ir.action,name",act_product_by_location,Products by Locations,Artikel nach Lagerort,0
-model,"ir.action,name",act_location_quantity_tree,Product Stock,Lagerbestand,0
+model,"ir.action,name",act_shipment_in_form,Supplier Shipments,Lieferposten von Lieferanten,0
+model,"ir.action,name",act_shipment_in_form2,New Supplier Shipment,Neuer Lieferposten von Lieferant,0
model,"ir.action,name",act_shipment_in_form_received,Received Supplier shipments,Erhaltene Lieferposten von Lieferanten,0
-model,"ir.action,name",report_shipment_in_restocking_list,Restocking List,Einlagerungsliste,0
-model,"ir.action,name",report_shipment_out_return_restocking_list,Restocking List,Einlagerungsliste,0
-model,"ir.action,name",act_stock_configuration_form,Stock Configuration,Einstellungen Lager,0
model,"ir.action,name",act_shipment_in_return_form,Supplier Return Shipments,Warenrückgaben (an Lieferanten),0
-model,"ir.action,name",act_shipment_in_form,Supplier Shipments,Lieferposten von Lieferanten,0
+model,"ir.action,name",act_shipment_in_return_new_form,New Supplier Return Shipment,Neue Warenrückgabe (an Lieferant),0
+model,"ir.action,name",act_shipment_internal_assigned_form,Assigned Internal Shipments,Zugewiesene Interne Lieferposten,0
+model,"ir.action,name",act_shipment_internal_draft_form,Draft Internal Shipments,Entwürfe (Interne Lieferposten),0
+model,"ir.action,name",act_shipment_internal_form,Internal Shipments,Interne Lieferposten,0
+model,"ir.action,name",act_shipment_internal_new_form,New Internal Shipment,Neuer Interner Lieferposten,0
+model,"ir.action,name",act_shipment_internal_waiting_form,Internal Shipments Waiting Assignation,Zuzuweisende Interne Lieferposten,0
+model,"ir.action,name",act_shipment_out_form,Customer Shipments,Lieferposten an Kunden,0
+model,"ir.action,name",act_shipment_out_form2,Customer Shipments,Lieferposten als Kunde,0
model,"ir.action,name",act_shipment_out_form3,Supplier Shipments,Lieferposten als Lieferant,0
-model,"ir.sequence,name",sequence_shipment_out_return,Customer Return Shipment,Warenrücknahme Kunde,0
-model,"ir.sequence,name",sequence_shipment_out,Customer Shipment,Lieferposten Kunde,0
-model,"ir.sequence,name",sequence_shipment_internal,Internal Shipment,Interner Lieferposten,0
-model,"ir.sequence,name",sequence_shipment_in_return,Supplier Return Shipment,Warenrückgabe Lieferant,0
+model,"ir.action,name",act_shipment_out_form_assigned,Assigned Customer Shipments,Zugewiesene Lieferposten an Kunden,0
+model,"ir.action,name",act_shipment_out_form_ready,Customer Shipments Ready for Shipping,Versandbereite Lieferposten an Kunden,0
+model,"ir.action,name",act_shipment_out_form_waiting,Customer Shipments Waiting Assignation,Zuzuweisende Lieferposten an Kunden,0
+model,"ir.action,name",act_shipment_out_return_form,Customer Return Shipments,Warenrücknahmen (von Kunden),0
+model,"ir.action,name",act_shipment_out_return_form2,New Customer Return Shipment,Neue Warenrücknahme (von Kunde),0
+model,"ir.action,name",act_stock_configuration_form,Stock Configuration,Einstellungen Lager,0
+model,"ir.action,name",create_shipment_out_return,Create Return Shipment,Warenrücknahme erstellen,0
+model,"ir.action,name",report_shipment_in_restocking_list,Restocking List,Einlagerungsliste,0
+model,"ir.action,name",report_shipment_internal,Internal Shipment,Interner Lieferposten,0
+model,"ir.action,name",report_shipment_out_delivery_note,Delivery Note,Lieferschein,0
+model,"ir.action,name",report_shipment_out_picking_list,Picking List,Pick Liste,0
+model,"ir.action,name",report_shipment_out_return_restocking_list,Restocking List,Einlagerungsliste,0
+model,"ir.action,name",wizard_complete_inventory,Complete Inventory,Lagerbestandspositionen komplettieren,0
+model,"ir.action,name",wizard_location_open,Product by Location,Artikel nach Lagerort,0
+model,"ir.action,name",wizard_product_open,Product Quantities,Artikelbestand,0
+model,"ir.action,name",wizard_shipment_in_return_assign,Assign Purchase Return Shipment,Zuweisung Lieferposten Warenrückgabe,0
+model,"ir.action,name",wizard_shipment_internal_assign,Assign Shipment Internal,Zuweisung Lieferposten Intern,0
+model,"ir.action,name",wizard_shipment_out_assign,Assign Shipment Out,Zuweisung Lieferposten Ausgehend,0
model,"ir.sequence,name",sequence_shipment_in,Supplier Shipment,Lieferposten Lieferant,0
-model,"ir.sequence.type,name",sequence_type_shipment_out_return,Customer Return Shipment,Warenrücknahme Kunde,0
-model,"ir.sequence.type,name",sequence_type_shipment_out,Customer Shipment,Lieferposten Kunde,0
-model,"ir.sequence.type,name",sequence_type_shipment_internal,Internal Shipment,Interner Lieferposten,0
-model,"ir.sequence.type,name",sequence_type_shipment_in_return,Supplier Return Shipment,Warenrückgabe Lieferant,0
+model,"ir.sequence,name",sequence_shipment_in_return,Supplier Return Shipment,Warenrückgabe Lieferant,0
+model,"ir.sequence,name",sequence_shipment_internal,Internal Shipment,Interner Lieferposten,0
+model,"ir.sequence,name",sequence_shipment_out,Customer Shipment,Lieferposten Kunde,0
+model,"ir.sequence,name",sequence_shipment_out_return,Customer Return Shipment,Warenrücknahme Kunde,0
model,"ir.sequence.type,name",sequence_type_shipment_in,Supplier Shipment,Lieferposten Lieferant,0
-model,"ir.ui.menu,name",menu_shipment_out_assigned,Assigned Customer Shipments,Zugewiesene Lieferposten an Kunden,0
-model,"ir.ui.menu,name",menu_shipment_internal_assigned_form,Assigned Internal Shipments,Zugewiesene Interne Lieferposten,0
+model,"ir.sequence.type,name",sequence_type_shipment_in_return,Supplier Return Shipment,Warenrückgabe Lieferant,0
+model,"ir.sequence.type,name",sequence_type_shipment_internal,Internal Shipment,Interner Lieferposten,0
+model,"ir.sequence.type,name",sequence_type_shipment_out,Customer Shipment,Lieferposten Kunde,0
+model,"ir.sequence.type,name",sequence_type_shipment_out_return,Customer Return Shipment,Warenrücknahme Kunde,0
model,"ir.ui.menu,name",menu_configuration,Configuration,Einstellungen,0
-model,"ir.ui.menu,name",menu_shipment_out_return_form,Customer Return Shipments,Warenrücknahmen (von Kunden),0
-model,"ir.ui.menu,name",menu_shipment_out_form,Customer Shipments,Lieferposten an Kunden,0
-model,"ir.ui.menu,name",menu_shipment_out_ready,Customer Shipments Ready for Shipping,Versandbereite Lieferposten an Kunden,0
-model,"ir.ui.menu,name",menu_shipment_out_waiting,Customer Shipments Waiting Assignation,Zuzuweisende Lieferposten an Kunden,0
-model,"ir.ui.menu,name",menu_shipment_internal_draft_form,Draft Internal Shipments,Entwürfe (Interne Lieferposten),0
+model,"ir.ui.menu,name",menu_inventory_form,Inventories,Bestandskorrektur,0
model,"ir.ui.menu,name",menu_inventory_form_draft,Draft Inventories,Entwürfe Bestandskorrekturen,0
+model,"ir.ui.menu,name",menu_inventory_form_new,New Inventory,Neue Bestandskorrektur,0
model,"ir.ui.menu,name",menu_location_form,Edit Locations,Lagerorte bearbeiten,0
-model,"ir.ui.menu,name",menu_shipment_internal_form,Internal Shipments,Interne Lieferposten,0
-model,"ir.ui.menu,name",menu_shipment_internal_waiting_form,Internal Shipments Waiting Assignation,Zuzuweisende Interne Lieferposten,0
-model,"ir.ui.menu,name",menu_inventory_form,Inventories,Bestandskorrektur,0
-model,"ir.ui.menu,name",menu_stock,Inventory Management,Lager,0
model,"ir.ui.menu,name",menu_location_tree,Locations,Lagerorte,0
model,"ir.ui.menu,name",menu_move_form,Moves,Bewegungen,0
+model,"ir.ui.menu,name",menu_move_form_cust,Moves to Customers,Bewegungen zu Kunden,0
model,"ir.ui.menu,name",menu_move_form_supp,Moves from Suppliers,Bewegungen von Lieferanten,0
model,"ir.ui.menu,name",menu_move_form_supp_proceed,Moves from Suppliers Waiting Arrival,Erwartete Bewegungen von Lieferanten,0
-model,"ir.ui.menu,name",menu_move_form_cust,Moves to Customers,Bewegungen zu Kunden,0
-model,"ir.ui.menu,name",menu_shipment_out_return_form2,New Customer Return Shipment,Neue Warenrücknahme (von Kunde),0
-model,"ir.ui.menu,name",menu_shipment_internal_new_form,New Internal Shipment,Neuer Interner Lieferposten,0
-model,"ir.ui.menu,name",menu_inventory_form_new,New Inventory,Neue Bestandskorrektur,0
-model,"ir.ui.menu,name",menu_shipment_in_return_new_form,New Supplier Return Shipment,Neue Warenrückgabe (an Lieferant),0
+model,"ir.ui.menu,name",menu_reporting,Reporting,Berichte,0
+model,"ir.ui.menu,name",menu_shipment_in_form,Supplier Shipments,Lieferposten von Lieferanten,0
model,"ir.ui.menu,name",menu_shipment_in_form2,New Supplier Shipment,Neuer Lieferposten von Lieferant,0
model,"ir.ui.menu,name",menu_shipment_in_received,Received Supplier shipments,Erhaltene Lieferposten von Lieferanten,0
-model,"ir.ui.menu,name",menu_reporting,Reporting,Berichte,0
-model,"ir.ui.menu,name",menu_stock_configuration,Stock Configuration,Einstellungen Lager,0
model,"ir.ui.menu,name",menu_shipment_in_return_form,Supplier Return Shipments,Warenrückgaben (an Lieferanten),0
-model,"ir.ui.menu,name",menu_shipment_in_form,Supplier Shipments,Lieferposten von Lieferanten,0
+model,"ir.ui.menu,name",menu_shipment_in_return_new_form,New Supplier Return Shipment,Neue Warenrückgabe (an Lieferant),0
+model,"ir.ui.menu,name",menu_shipment_internal_assigned_form,Assigned Internal Shipments,Zugewiesene Interne Lieferposten,0
+model,"ir.ui.menu,name",menu_shipment_internal_draft_form,Draft Internal Shipments,Entwürfe (Interne Lieferposten),0
+model,"ir.ui.menu,name",menu_shipment_internal_form,Internal Shipments,Interne Lieferposten,0
+model,"ir.ui.menu,name",menu_shipment_internal_new_form,New Internal Shipment,Neuer Interner Lieferposten,0
+model,"ir.ui.menu,name",menu_shipment_internal_waiting_form,Internal Shipments Waiting Assignation,Zuzuweisende Interne Lieferposten,0
+model,"ir.ui.menu,name",menu_shipment_out_assigned,Assigned Customer Shipments,Zugewiesene Lieferposten an Kunden,0
+model,"ir.ui.menu,name",menu_shipment_out_form,Customer Shipments,Lieferposten an Kunden,0
+model,"ir.ui.menu,name",menu_shipment_out_ready,Customer Shipments Ready for Shipping,Versandbereite Lieferposten an Kunden,0
+model,"ir.ui.menu,name",menu_shipment_out_return_form,Customer Return Shipments,Warenrücknahmen (von Kunden),0
+model,"ir.ui.menu,name",menu_shipment_out_return_form2,New Customer Return Shipment,Neue Warenrücknahme (von Kunde),0
+model,"ir.ui.menu,name",menu_shipment_out_waiting,Customer Shipments Waiting Assignation,Zuzuweisende Lieferposten an Kunden,0
+model,"ir.ui.menu,name",menu_stock,Inventory Management,Lager,0
+model,"ir.ui.menu,name",menu_stock_configuration,Stock Configuration,Einstellungen Lager,0
model,"res.group,name",group_stock,Stock,Lager,0
model,"res.group,name",group_stock_admin,Stock Administration,Lager Administration,0
model,"res.group,name",group_stock_force_assignment,Stock Force Assignment,Lager Zuweisungserzwingung,0
model,"stock.configuration,name",0,Stock Configuration,Einstellungen Lager,0
-model,"stock.inventory.line,name",0,Stock Inventory Line,Lager Lagerbestand Position,0
model,"stock.inventory,name",0,Stock Inventory,Lager Lagerbestand,0
+model,"stock.inventory.line,name",0,Stock Inventory Line,Lager Lagerbestand Position,0
+model,"stock.location,name",0,Stock Location,Lager Lagerort,0
model,"stock.location,name",location_customer,Customer,Kunde,0
model,"stock.location,name",location_input,Input Zone,Wareneingang,0
model,"stock.location,name",location_lost_found,Lost and Found,Inventurdifferenz,0
model,"stock.location,name",location_output,Output Zone,Warenausgang,0
-model,"stock.location,name",0,Stock Location,Lager Lagerort,0
model,"stock.location,name",location_storage,Storage Zone,Lagerzone,0
model,"stock.location,name",location_supplier,Supplier,Lieferant,0
model,"stock.location,name",location_warehouse,Warehouse,Warenlager,0
@@ -256,46 +256,46 @@ model,"stock.location_stock_date.init,name",0,Compute stock quantities,Berechnun
model,"stock.move,name",0,Stock Move,Lager Bewegung,0
model,"stock.product_stock_date.init,name",0,Compute stock quantities,Berechnung Lagerbestände,0
model,"stock.shipment.in,name",0,Supplier Shipment,Lieferant Lieferposten,0
-model,"stock.shipment.in.return.assign.assign_failed,name",0,Assign Supplier Return Shipment Assign Failed,Zuweisung Lieferposten Warenrückgabe Erzwungen,0
model,"stock.shipment.in.return,name",0,Supplier Return Shipment,Warenrückgabe Lieferant,0
-model,"stock.shipment.internal.assign.assign_failed,name",0,Assign Shipment Internal Assign Failed,Zuweisung Lieferposten Intern Erzwungen,0
+model,"stock.shipment.in.return.assign.assign_failed,name",0,Assign Supplier Return Shipment Assign Failed,Zuweisung Lieferposten Warenrückgabe Erzwungen,0
model,"stock.shipment.internal,name",0,Internal Shipment,Interner Lieferposten,0
-model,"stock.shipment.out.assign.assign_failed,name",0,Assign Shipment Out Assign Failed,Zuweisung Lieferposten Ausgehend Erzwungen,0
+model,"stock.shipment.internal.assign.assign_failed,name",0,Assign Shipment Internal Assign Failed,Zuweisung Lieferposten Intern Erzwungen,0
model,"stock.shipment.out,name",0,Customer Shipment,Lieferposten Kunde,0
+model,"stock.shipment.out.assign.assign_failed,name",0,Assign Shipment Out Assign Failed,Zuweisung Lieferposten Ausgehend Erzwungen,0
model,"stock.shipment.out.return,name",0,Customer Return Shipment,Warenrücknahme Kunde,0
-model,"workflow.activity,name",shipmentout_act_assigned,Assigned,Zugewiesen,0
-model,"workflow.activity,name",shipmentinternal_act_assigned,Assigned,Zugewiesen,0
+model,"workflow,name",wkf_inventory,Inventory,Lagerbestand,0
+model,"workflow,name",wkf_shipment_in_return,Supplier Return Shipment,Warenrückgabe Lieferant,0
+model,"workflow,name",wkf_shipment_out_return,Customer Return Shipment,Warenrücknahme Kunde,0
+model,"workflow,name",wkf_shipmentin,Supplier Shipment,Lieferposten Lieferant,0
+model,"workflow,name",wkf_shipmentinternal,Internal Shipment,Interner Lieferposten,0
+model,"workflow,name",wkf_shipmentout,Customer Shipment,Lieferposten Kunde,0
+model,"workflow.activity,name",inventory_act_cancel,Canceled,Annulliert,0
+model,"workflow.activity,name",inventory_act_done,Done,Erledigt,0
+model,"workflow.activity,name",inventory_act_draft,Draft,Entwurf,0
model,"workflow.activity,name",shipment_in_return_act_assigned,Assigned,Zugewiesen,0
-model,"workflow.activity,name",shipmentin_act_cancel,Canceled,Annulliert,0
-model,"workflow.activity,name",shipmentout_act_cancel,Canceled,Annulliert,0
-model,"workflow.activity,name",shipmentinternal_act_cancel,Canceled,Annulliert,0
-model,"workflow.activity,name",shipment_out_return_act_cancel,Canceled,Annulliert,0
model,"workflow.activity,name",shipment_in_return_act_cancel,Canceled,Annulliert,0
-model,"workflow.activity,name",inventory_act_cancel,Canceled,Annulliert,0
-model,"workflow.activity,name",shipmentin_act_done,Done,Erledigt,0
-model,"workflow.activity,name",shipmentout_act_done,Done,Erledigt,0
-model,"workflow.activity,name",shipmentinternal_act_done,Done,Erledigt,0
-model,"workflow.activity,name",shipment_out_return_act_done,Done,Erledigt,0
model,"workflow.activity,name",shipment_in_return_act_done,Done,Erledigt,0
-model,"workflow.activity,name",inventory_act_done,Done,Erledigt,0
+model,"workflow.activity,name",shipment_in_return_act_draft,Draft,Entwurf,0
+model,"workflow.activity,name",shipment_in_return_act_waiting,Waiting,Wartend,0
+model,"workflow.activity,name",shipment_out_return_act_cancel,Canceled,Annulliert,0
+model,"workflow.activity,name",shipment_out_return_act_done,Done,Erledigt,0
+model,"workflow.activity,name",shipment_out_return_act_draft,Draft,Entwurf,0
+model,"workflow.activity,name",shipment_out_return_act_received,Received,Erhalten,0
+model,"workflow.activity,name",shipmentin_act_cancel,Canceled,Annulliert,0
+model,"workflow.activity,name",shipmentin_act_done,Done,Erledigt,0
model,"workflow.activity,name",shipmentin_act_draft,Draft,Entwurf,0
-model,"workflow.activity,name",shipmentout_act_draft,Draft,Entwurf,0
+model,"workflow.activity,name",shipmentin_act_received,Received,Erhalten,0
+model,"workflow.activity,name",shipmentinternal_act_assigned,Assigned,Zugewiesen,0
+model,"workflow.activity,name",shipmentinternal_act_cancel,Canceled,Annulliert,0
+model,"workflow.activity,name",shipmentinternal_act_done,Done,Erledigt,0
model,"workflow.activity,name",shipmentinternal_act_draft,Draft,Entwurf,0
-model,"workflow.activity,name",shipment_out_return_act_draft,Draft,Entwurf,0
-model,"workflow.activity,name",shipment_in_return_act_draft,Draft,Entwurf,0
-model,"workflow.activity,name",inventory_act_draft,Draft,Entwurf,0
+model,"workflow.activity,name",shipmentinternal_act_waiting,Waiting,Wartend,0
+model,"workflow.activity,name",shipmentout_act_assigned,Assigned,Zugewiesen,0
+model,"workflow.activity,name",shipmentout_act_cancel,Canceled,Annulliert,0
+model,"workflow.activity,name",shipmentout_act_done,Done,Erledigt,0
+model,"workflow.activity,name",shipmentout_act_draft,Draft,Entwurf,0
model,"workflow.activity,name",shipmentout_act_packed,Packed,Gepackt,0
-model,"workflow.activity,name",shipmentin_act_received,Received,Erhalten,0
-model,"workflow.activity,name",shipment_out_return_act_received,Received,Erhalten,0
model,"workflow.activity,name",shipmentout_act_waiting,Waiting,Wartend,0
-model,"workflow.activity,name",shipmentinternal_act_waiting,Waiting,Wartend,0
-model,"workflow.activity,name",shipment_in_return_act_waiting,Waiting,Wartend,0
-model,"workflow,name",wkf_shipment_out_return,Customer Return Shipment,Warenrücknahme Kunde,0
-model,"workflow,name",wkf_shipmentout,Customer Shipment,Lieferposten Kunde,0
-model,"workflow,name",wkf_shipmentinternal,Internal Shipment,Interner Lieferposten,0
-model,"workflow,name",wkf_inventory,Inventory,Lagerbestand,0
-model,"workflow,name",wkf_shipment_in_return,Supplier Return Shipment,Warenrückgabe Lieferant,0
-model,"workflow,name",wkf_shipmentin,Supplier Shipment,Lieferposten Lieferant,0
odt,stock.shipment.in.restocking_list,0,/,/,0
odt,stock.shipment.in.restocking_list,0,Code:,Code:,0
odt,stock.shipment.in.restocking_list,0,E-Mail:,E-Mail:,0
@@ -308,6 +308,7 @@ odt,stock.shipment.in.restocking_list,0,Reference:,Beleg-Nr.:,0
odt,stock.shipment.in.restocking_list,0,Restocking List,Einlagerungsliste,0
odt,stock.shipment.in.restocking_list,0,Supplier:,Lieferant:,0
odt,stock.shipment.in.restocking_list,0,To Location,Zu Lagerort,0
+odt,stock.shipment.in.restocking_list,0,VAT Number:,USt-ID-Nr.:,0
odt,stock.shipment.in.restocking_list,0,Warehouse:,Warenlager:,0
odt,stock.shipment.internal.report,0,/,/,0
odt,stock.shipment.internal.report,0,Code:,Code:,0
@@ -322,6 +323,7 @@ odt,stock.shipment.internal.report,0,Quantity,Anzahl,0
odt,stock.shipment.internal.report,0,Reference:,Beleg-Nr.:,0
odt,stock.shipment.internal.report,0,To Location,Zu Lagerort,0
odt,stock.shipment.internal.report,0,To Location:,Zu Lagerort:,0
+odt,stock.shipment.internal.report,0,VAT Number:,USt-ID-Nr.:,0
odt,stock.shipment.out.delivery_note,0,/,/,0
odt,stock.shipment.out.delivery_note,0,Customer Code:,Kundennr:,0
odt,stock.shipment.out.delivery_note,0,Date:,Datum:,0
@@ -332,6 +334,7 @@ odt,stock.shipment.out.delivery_note,0,Product,Artikel,0
odt,stock.shipment.out.delivery_note,0,Quantity,Anzahl,0
odt,stock.shipment.out.delivery_note,0,Reference:,Beleg-Nr.:,0
odt,stock.shipment.out.delivery_note,0,Shipment Number:,Lieferposten Nr.:,0
+odt,stock.shipment.out.delivery_note,0,VAT Number:,USt-ID-Nr.:,0
odt,stock.shipment.out.picking_list,0,/,/,0
odt,stock.shipment.out.picking_list,0,Code:,Code:,0
odt,stock.shipment.out.picking_list,0,Customer:,Kunde:,0
@@ -344,6 +347,7 @@ odt,stock.shipment.out.picking_list,0,Product,Artikel,0
odt,stock.shipment.out.picking_list,0,Quantity,Anzahl,0
odt,stock.shipment.out.picking_list,0,Reference:,Beleg-Nr.:,0
odt,stock.shipment.out.picking_list,0,To Location,Zu Lagerort,0
+odt,stock.shipment.out.picking_list,0,VAT Number:,USt-ID-Nr.:,0
odt,stock.shipment.out.picking_list,0,Warehouse:,Warenlager:,0
odt,stock.shipment.out.return.restocking_list,0,/,/,0
odt,stock.shipment.out.return.restocking_list,0,Code:,Code:,0
@@ -357,6 +361,7 @@ odt,stock.shipment.out.return.restocking_list,0,Reference:,Beleg-Nr.:,0
odt,stock.shipment.out.return.restocking_list,0,Restocking List,Einlagerungsliste,0
odt,stock.shipment.out.return.restocking_list,0,Supplier:,Lieferant:,0
odt,stock.shipment.out.return.restocking_list,0,To Location,Zu Lagerort,0
+odt,stock.shipment.out.return.restocking_list,0,VAT Number:,USt-ID-Nr.:,0
odt,stock.shipment.out.return.restocking_list,0,Warehouse:,Warenlager:,0
selection,"stock.inventory,state",0,Canceled,Annulliert,0
selection,"stock.inventory,state",0,Done,Erledigt,0
@@ -372,30 +377,30 @@ selection,"stock.move,state",0,Assigned,Zugewiesen,0
selection,"stock.move,state",0,Canceled,Annulliert,0
selection,"stock.move,state",0,Done,Erledigt,0
selection,"stock.move,state",0,Draft,Entwurf,0
+selection,"stock.shipment.in,state",0,Canceled,Annulliert,0
+selection,"stock.shipment.in,state",0,Done,Erledigt,0
+selection,"stock.shipment.in,state",0,Draft,Entwurf,0
+selection,"stock.shipment.in,state",0,Received,Erhalten,0
selection,"stock.shipment.in.return,state",0,Assigned,Zugewiesen,0
selection,"stock.shipment.in.return,state",0,Canceled,Annulliert,0
selection,"stock.shipment.in.return,state",0,Done,Erledigt,0
selection,"stock.shipment.in.return,state",0,Draft,Entwurf,0
selection,"stock.shipment.in.return,state",0,Waiting,Wartend,0
-selection,"stock.shipment.in,state",0,Canceled,Annulliert,0
-selection,"stock.shipment.in,state",0,Done,Erledigt,0
-selection,"stock.shipment.in,state",0,Draft,Entwurf,0
-selection,"stock.shipment.in,state",0,Received,Erhalten,0
selection,"stock.shipment.internal,state",0,Assigned,Zugewiesen,0
selection,"stock.shipment.internal,state",0,Canceled,Annulliert,0
selection,"stock.shipment.internal,state",0,Done,Erledigt,0
selection,"stock.shipment.internal,state",0,Draft,Entwurf,0
selection,"stock.shipment.internal,state",0,Waiting,Wartend,0
-selection,"stock.shipment.out.return,state",0,Canceled,Annulliert,0
-selection,"stock.shipment.out.return,state",0,Done,Erledigt,0
-selection,"stock.shipment.out.return,state",0,Draft,Entwurf,0
-selection,"stock.shipment.out.return,state",0,Received,Erhalten,0
selection,"stock.shipment.out,state",0,Assigned,Zugewiesen,0
selection,"stock.shipment.out,state",0,Canceled,Annulliert,0
selection,"stock.shipment.out,state",0,Done,Erledigt,0
selection,"stock.shipment.out,state",0,Draft,Entwurf,0
selection,"stock.shipment.out,state",0,Packed,Gepackt,0
selection,"stock.shipment.out,state",0,Waiting,Wartend,0
+selection,"stock.shipment.out.return,state",0,Canceled,Annulliert,0
+selection,"stock.shipment.out.return,state",0,Done,Erledigt,0
+selection,"stock.shipment.out.return,state",0,Draft,Entwurf,0
+selection,"stock.shipment.out.return,state",0,Received,Erhalten,0
view,party.party,0,Stock,Lager,0
view,party.party,0,_Stock,_Lager,0
view,product.product,0,Products,Artikel,0
diff --git a/fr_FR.csv b/fr_FR.csv
index 7cf6795..530c862 100644
--- a/fr_FR.csv
+++ b/fr_FR.csv
@@ -15,6 +15,8 @@ error,stock.move,0,You can not use service products for a move!,Vous ne pouvez p
error,stock.move,0,You can only delete draft or cancelled moves!,Vous pouvez supprimer que des mouvements qui sont annulés ou a l'état de brouillon !,0
error,stock.shipment.in,0,Incoming Moves must have the warehouse input location as destination location!,Les mouvements d'entrée doivent avoir l'emplacement d'entrée de l'entrepôt comme destination !,0
error,stock.shipment.in,0,Inventory Moves must have the warehouse input location as source location!,Les mouvements d'inventaire doivent avoir l'emplacement d'entrée de l'entrepôt comme source !,0
+error,stock.shipment.out,0,Inventory Moves must have the warehouse output location as destination location!,Les mouvements d'inventaires doivent avoir une sortie d'entrepôt comme location de destination.,0
+error,stock.shipment.out,0,Outgoing Moves must have the warehouse output location as source location!,Les mouvements de sortie doivent avoir une sortie d'entrepôt comme location source !,0
error,stock.shipment.out.return,0,Incoming Moves must have the warehouse input location as destination location!,Les mouvements d'entrée doivent avoir l'emplacement d'entrée de l'entrepôt comme destination !,0
error,stock.shipment.out.return,0,Inventory Moves must have the warehouse input location as source location!,Les mouvements d'inventaire doivent avoir l'emplacement d'entrée de l'entrepôt comme source !,0
error,stock.shipment.out.return.create,0,The shipment with code %s is not yet sent.,L'emballage avec le code %s n'est pas encore envoyé.,0
@@ -34,19 +36,19 @@ field,"stock.configuration,shipment_out_return_sequence",0,Customer Return Shipm
field,"stock.configuration,shipment_out_sequence",0,Customer Shipment Sequence,Séquence des expéditions client,0
field,"stock.inventory,company",0,Company,Société,0
field,"stock.inventory,date",0,Date,Date,0
+field,"stock.inventory,lines",0,Lines,Lignes,0
+field,"stock.inventory,location",0,Location,Emplacement,0
+field,"stock.inventory,lost_found",0,Lost and Found,Pertes et surplus,0
+field,"stock.inventory,rec_name",0,Name,Nom,0
+field,"stock.inventory,state",0,State,Ãtat,0
field,"stock.inventory.line,expected_quantity",0,Expected Quantity,Quantité attendue,0
field,"stock.inventory.line,inventory",0,Inventory,Inventaire,0
field,"stock.inventory.line,move",0,Move,Mouvement,0
field,"stock.inventory.line,product",0,Product,Produit,0
field,"stock.inventory.line,quantity",0,Quantity,Quantité,0
field,"stock.inventory.line,rec_name",0,Name,Nom,0
-field,"stock.inventory,lines",0,Lines,Lignes,0
field,"stock.inventory.line,unit_digits",0,Unit Digits,Décimales de l'unité,0
field,"stock.inventory.line,uom",0,UOM,UDM,0
-field,"stock.inventory,location",0,Location,Emplacement,0
-field,"stock.inventory,lost_found",0,Lost and Found,Pertes et surplus,0
-field,"stock.inventory,rec_name",0,Name,Nom,0
-field,"stock.inventory,state",0,State,Ãtat,0
field,"stock.location,active",0,Active,Actif,0
field,"stock.location,address",0,Address,Adresse,0
field,"stock.location,childs",0,Children,Enfants,0
@@ -60,9 +62,9 @@ field,"stock.location,parent",0,Parent,Parent,0
field,"stock.location,quantity",0,Quantity,Quantité,0
field,"stock.location,rec_name",0,Name,Nom,0
field,"stock.location,right",0,Right,Droit,0
-field,"stock.location_stock_date.init,forecast_date",0,At Date,Ã la date,0
field,"stock.location,storage_location",0,Storage,Magasin,0
field,"stock.location,type",0,Location type,Type d'emplacement,0
+field,"stock.location_stock_date.init,forecast_date",0,At Date,Ã la date,0
field,"stock.move,company",0,Company,Société,0
field,"stock.move,cost_price",0,Cost Price,Prix de revient,0
field,"stock.move,currency",0,Currency,Devise,0
@@ -93,7 +95,9 @@ field,"stock.shipment.in,moves",0,Moves,Mouvements,0
field,"stock.shipment.in,planned_date",0,Planned Date,Date planifiée,0
field,"stock.shipment.in,rec_name",0,Name,Nom,0
field,"stock.shipment.in,reference",0,Reference,Référence,0
-field,"stock.shipment.in.return.assign.assign_failed,moves",0,Moves,Mouvements,0
+field,"stock.shipment.in,state",0,State,Ãtat,0
+field,"stock.shipment.in,supplier",0,Supplier,Fournisseur,0
+field,"stock.shipment.in,warehouse",0,Warehouse,Entrepôt,0
field,"stock.shipment.in.return,code",0,Code,Code,0
field,"stock.shipment.in.return,effective_date",0,Effective Date,Date effective,0
field,"stock.shipment.in.return,from_location",0,From Location,Emplacement d'origine,0
@@ -103,9 +107,7 @@ field,"stock.shipment.in.return,rec_name",0,Name,Nom,0
field,"stock.shipment.in.return,reference",0,Reference,Référence,0
field,"stock.shipment.in.return,state",0,State,Ãtat,0
field,"stock.shipment.in.return,to_location",0,To Location,Emplacement de destination,0
-field,"stock.shipment.in,state",0,State,Ãtat,0
-field,"stock.shipment.in,supplier",0,Supplier,Fournisseur,0
-field,"stock.shipment.internal.assign.assign_failed,moves",0,Moves,Mouvements,0
+field,"stock.shipment.in.return.assign.assign_failed,moves",0,Moves,Mouvements,0
field,"stock.shipment.internal,code",0,Code,Code,0
field,"stock.shipment.internal,effective_date",0,Effective Date,Date effective,0
field,"stock.shipment.internal,from_location",0,From Location,Emplacement d'origine,0
@@ -115,8 +117,7 @@ field,"stock.shipment.internal,rec_name",0,Name,Nom,0
field,"stock.shipment.internal,reference",0,Reference,Référence,0
field,"stock.shipment.internal,state",0,State,Ãtat,0
field,"stock.shipment.internal,to_location",0,To Location,Emplacement de destination,0
-field,"stock.shipment.in,warehouse",0,Warehouse,Entrepôt,0
-field,"stock.shipment.out.assign.assign_failed,inventory_moves",0,Inventory Moves,Mouvements internes,0
+field,"stock.shipment.internal.assign.assign_failed,moves",0,Moves,Mouvements,0
field,"stock.shipment.out,code",0,Code,Code,0
field,"stock.shipment.out,customer",0,Customer,Client,0
field,"stock.shipment.out,delivery_address",0,Delivery Address,Adresse de livraison,0
@@ -127,6 +128,9 @@ field,"stock.shipment.out,outgoing_moves",0,Outgoing Moves,Mouvements de sortie,
field,"stock.shipment.out,planned_date",0,Planned Date,Date planifiée,0
field,"stock.shipment.out,rec_name",0,Name,Nom,0
field,"stock.shipment.out,reference",0,Reference,Référence,0
+field,"stock.shipment.out,state",0,State,Ãtat,0
+field,"stock.shipment.out,warehouse",0,Warehouse,Entrepôt,0
+field,"stock.shipment.out.assign.assign_failed,inventory_moves",0,Inventory Moves,Mouvements internes,0
field,"stock.shipment.out.return,code",0,Code,Code,0
field,"stock.shipment.out.return,customer",0,Customer,Client,0
field,"stock.shipment.out.return,delivery_address",0,Delivery Address,Adresse de livraison,0
@@ -139,8 +143,6 @@ field,"stock.shipment.out.return,rec_name",0,Name,Nom,0
field,"stock.shipment.out.return,reference",0,Reference,Référence,0
field,"stock.shipment.out.return,state",0,State,Ãtat,0
field,"stock.shipment.out.return,warehouse",0,Warehouse,Entrepôt,0
-field,"stock.shipment.out,state",0,State,Ãtat,0
-field,"stock.shipment.out,warehouse",0,Warehouse,Entrepôt,0
help,"party.party,customer_location",0,The default destination location when sending products to the party.,L'emplacement de destination par défaut quand des produits sont envoyés vers ce tiers.,0
help,"party.party,supplier_location",0,The default source location when receiving products from the party.,L'emplacement d'origine par défaut quand des produits sont reçus depuis ce tiers.,0
help,"stock.location_stock_date.init,forecast_date",0,"Allow to compute expected stock quantities for this date.
@@ -153,98 +155,98 @@ help,"stock.product_stock_date.init,forecast_date",0,"Allow to compute expected
* A date in the past will provide historical values.","Permet de calculer les quantités en stock attendues pour cette date.
* Une valeur vide correspond à une date infinie dans le futur.
* Une date dans le passé retournera des données historiques.",0
-model,"ir.action,name",act_shipment_out_form_assigned,Assigned Customer Shipments,Expéditions client assignées,0
-model,"ir.action,name",act_shipment_internal_assigned_form,Assigned Internal Shipments,Expédition internes assignées,0
-model,"ir.action,name",wizard_shipment_in_return_assign,Assign Purchase Return Shipment,Assigner le retour d'expédition fournisseur,0
-model,"ir.action,name",wizard_shipment_internal_assign,Assign Shipment Internal,Assigner l'expédition interne,0
-model,"ir.action,name",wizard_shipment_out_assign,Assign Shipment Out,Assigner l'expédition de sortie,0
-model,"ir.action,name",wizard_complete_inventory,Complete Inventory,Compléter l'inventaire,0
-model,"ir.action,name",create_shipment_out_return,Create Return Shipment,Créer l'expédition de retour,0
-model,"ir.action,name",act_shipment_out_return_form,Customer Return Shipments,Retour d'expéditions client,0
-model,"ir.action,name",act_shipment_out_form,Customer Shipments,Expéditions client,0
-model,"ir.action,name",act_shipment_out_form2,Customer Shipments,Expéditions client,0
-model,"ir.action,name",act_shipment_out_form_ready,Customer Shipments Ready for Shipping,Expéditions client prêtes à livrer,0
-model,"ir.action,name",act_shipment_out_form_waiting,Customer Shipments Waiting Assignation,Expéditions client en attente d'assignation,0
-model,"ir.action,name",report_shipment_out_delivery_note,Delivery Note,Bon de livraison,0
-model,"ir.action,name",act_shipment_internal_draft_form,Draft Internal Shipments,Expéditions internes brouillon,0
-model,"ir.action,name",act_inventory_form_draft,Draft Inventories,Inventaires brouillons,0
-model,"ir.action,name",act_location_form,Edit Locations,Ãditer les emplacements,0
-model,"ir.action,name",report_shipment_internal,Internal Shipment,Expédition interne,0
-model,"ir.action,name",act_shipment_internal_form,Internal Shipments,Expédition interne,0
-model,"ir.action,name",act_shipment_internal_waiting_form,Internal Shipments Waiting Assignation,Expéditions internes en attente d'assignation,0
model,"ir.action,name",act_inventory_form,Inventories,Inventaires,0
model,"ir.action,name",act_inventory_form2,Inventories,Inventaires,0
+model,"ir.action,name",act_inventory_form_draft,Draft Inventories,Inventaires brouillons,0
+model,"ir.action,name",act_location_form,Edit Locations,Ãditer les emplacements,0
+model,"ir.action,name",act_location_quantity_tree,Product Stock,Quantités en stock,0
model,"ir.action,name",act_location_tree,Locations,Emplacements,0
model,"ir.action,name",act_move_form,Moves,Mouvements,0
+model,"ir.action,name",act_move_form_cust,Moves to Customers,Mouvements clients,0
model,"ir.action,name",act_move_form_supp,Moves from Suppliers,Mouvements fournisseurs,0
model,"ir.action,name",act_move_form_supp_proceed,Moves from Suppliers Waiting Arrival,Mouvement fournisseur en attente de réception,0
-model,"ir.action,name",act_move_form_cust,Moves to Customers,Mouvements clients,0
-model,"ir.action,name",act_shipment_out_return_form2,New Customer Return Shipment,Nouveau retour d'expédition client,0
-model,"ir.action,name",act_shipment_internal_new_form,New Internal Shipment,Nouvelle expédition Interne,0
-model,"ir.action,name",act_shipment_in_return_new_form,New Supplier Return Shipment,Nouveau retour d'expédition fournisseur,0
-model,"ir.action,name",act_shipment_in_form2,New Supplier Shipment,Nouvelle expédition fournisseur,0
-model,"ir.action,name",report_shipment_out_picking_list,Picking List,Liste de prélèvement,0
-model,"ir.action,name",wizard_location_open,Product by Location,Produits par emplacement,0
-model,"ir.action,name",wizard_product_open,Product Quantities,Quantités de produit,0
model,"ir.action,name",act_product_by_location,Products by Locations,Produits par emplacements,0
-model,"ir.action,name",act_location_quantity_tree,Product Stock,Quantités en stock,0
+model,"ir.action,name",act_shipment_in_form,Supplier Shipments,Expéditions fournisseur,0
+model,"ir.action,name",act_shipment_in_form2,New Supplier Shipment,Nouvelle expédition fournisseur,0
model,"ir.action,name",act_shipment_in_form_received,Received Supplier shipments,Expéditions fournisseur reçues,0
-model,"ir.action,name",report_shipment_in_restocking_list,Restocking List,Liste de restockage,0
-model,"ir.action,name",report_shipment_out_return_restocking_list,Restocking List,Liste de restockage,0
-model,"ir.action,name",act_stock_configuration_form,Stock Configuration,Configuration des stocks,0
model,"ir.action,name",act_shipment_in_return_form,Supplier Return Shipments,Retour d'expéditions fournisseur,0
-model,"ir.action,name",act_shipment_in_form,Supplier Shipments,Expéditions fournisseur,0
+model,"ir.action,name",act_shipment_in_return_new_form,New Supplier Return Shipment,Nouveau retour d'expédition fournisseur,0
+model,"ir.action,name",act_shipment_internal_assigned_form,Assigned Internal Shipments,Expédition internes assignées,0
+model,"ir.action,name",act_shipment_internal_draft_form,Draft Internal Shipments,Expéditions internes brouillon,0
+model,"ir.action,name",act_shipment_internal_form,Internal Shipments,Expédition interne,0
+model,"ir.action,name",act_shipment_internal_new_form,New Internal Shipment,Nouvelle expédition Interne,0
+model,"ir.action,name",act_shipment_internal_waiting_form,Internal Shipments Waiting Assignation,Expéditions internes en attente d'assignation,0
+model,"ir.action,name",act_shipment_out_form,Customer Shipments,Expéditions client,0
+model,"ir.action,name",act_shipment_out_form2,Customer Shipments,Expéditions client,0
model,"ir.action,name",act_shipment_out_form3,Supplier Shipments,Expéditions fournisseur,0
-model,"ir.sequence,name",sequence_shipment_out_return,Customer Return Shipment,Retour d'expédition client,0
-model,"ir.sequence,name",sequence_shipment_out,Customer Shipment,Expédition client,0
-model,"ir.sequence,name",sequence_shipment_internal,Internal Shipment,Expédition Interne,0
-model,"ir.sequence,name",sequence_shipment_in_return,Supplier Return Shipment,Retour d'expédition fournisseur,0
+model,"ir.action,name",act_shipment_out_form_assigned,Assigned Customer Shipments,Expéditions client assignées,0
+model,"ir.action,name",act_shipment_out_form_ready,Customer Shipments Ready for Shipping,Expéditions client prêtes à livrer,0
+model,"ir.action,name",act_shipment_out_form_waiting,Customer Shipments Waiting Assignation,Expéditions client en attente d'assignation,0
+model,"ir.action,name",act_shipment_out_return_form,Customer Return Shipments,Retour d'expéditions client,0
+model,"ir.action,name",act_shipment_out_return_form2,New Customer Return Shipment,Nouveau retour d'expédition client,0
+model,"ir.action,name",act_stock_configuration_form,Stock Configuration,Configuration des stocks,0
+model,"ir.action,name",create_shipment_out_return,Create Return Shipment,Créer l'expédition de retour,0
+model,"ir.action,name",report_shipment_in_restocking_list,Restocking List,Liste de restockage,0
+model,"ir.action,name",report_shipment_internal,Internal Shipment,Expédition interne,0
+model,"ir.action,name",report_shipment_out_delivery_note,Delivery Note,Bon de livraison,0
+model,"ir.action,name",report_shipment_out_picking_list,Picking List,Liste de prélèvement,0
+model,"ir.action,name",report_shipment_out_return_restocking_list,Restocking List,Liste de restockage,0
+model,"ir.action,name",wizard_complete_inventory,Complete Inventory,Compléter l'inventaire,0
+model,"ir.action,name",wizard_location_open,Product by Location,Produits par emplacement,0
+model,"ir.action,name",wizard_product_open,Product Quantities,Quantités de produit,0
+model,"ir.action,name",wizard_shipment_in_return_assign,Assign Purchase Return Shipment,Assigner le retour d'expédition fournisseur,0
+model,"ir.action,name",wizard_shipment_internal_assign,Assign Shipment Internal,Assigner l'expédition interne,0
+model,"ir.action,name",wizard_shipment_out_assign,Assign Shipment Out,Assigner l'expédition de sortie,0
model,"ir.sequence,name",sequence_shipment_in,Supplier Shipment,Expédition fournisseur,0
-model,"ir.sequence.type,name",sequence_type_shipment_out_return,Customer Return Shipment,Retour d'expédition client,0
-model,"ir.sequence.type,name",sequence_type_shipment_out,Customer Shipment,Expédition client,0
-model,"ir.sequence.type,name",sequence_type_shipment_internal,Internal Shipment,Expédition interne,0
-model,"ir.sequence.type,name",sequence_type_shipment_in_return,Supplier Return Shipment,Retour d'expédition fournisseur,0
+model,"ir.sequence,name",sequence_shipment_in_return,Supplier Return Shipment,Retour d'expédition fournisseur,0
+model,"ir.sequence,name",sequence_shipment_internal,Internal Shipment,Expédition Interne,0
+model,"ir.sequence,name",sequence_shipment_out,Customer Shipment,Expédition client,0
+model,"ir.sequence,name",sequence_shipment_out_return,Customer Return Shipment,Retour d'expédition client,0
model,"ir.sequence.type,name",sequence_type_shipment_in,Supplier Shipment,Expédition fournisseur,0
-model,"ir.ui.menu,name",menu_shipment_out_assigned,Assigned Customer Shipments,Expéditions client assignées,0
-model,"ir.ui.menu,name",menu_shipment_internal_assigned_form,Assigned Internal Shipments,Expéditions internes assignées,0
+model,"ir.sequence.type,name",sequence_type_shipment_in_return,Supplier Return Shipment,Retour d'expédition fournisseur,0
+model,"ir.sequence.type,name",sequence_type_shipment_internal,Internal Shipment,Expédition interne,0
+model,"ir.sequence.type,name",sequence_type_shipment_out,Customer Shipment,Expédition client,0
+model,"ir.sequence.type,name",sequence_type_shipment_out_return,Customer Return Shipment,Retour d'expédition client,0
model,"ir.ui.menu,name",menu_configuration,Configuration,Configuration,0
-model,"ir.ui.menu,name",menu_shipment_out_return_form,Customer Return Shipments,Retour d'expédition client,0
-model,"ir.ui.menu,name",menu_shipment_out_form,Customer Shipments,Expéditions client,0
-model,"ir.ui.menu,name",menu_shipment_out_ready,Customer Shipments Ready for Shipping,Expéditions client prêtes pour la livraison,0
-model,"ir.ui.menu,name",menu_shipment_out_waiting,Customer Shipments Waiting Assignation,Expéditions client en attente d'assignation,0
-model,"ir.ui.menu,name",menu_shipment_internal_draft_form,Draft Internal Shipments,Expéditions internes brouillons,0
+model,"ir.ui.menu,name",menu_inventory_form,Inventories,Inventaires,0
model,"ir.ui.menu,name",menu_inventory_form_draft,Draft Inventories,Inventaires brouillons,0
+model,"ir.ui.menu,name",menu_inventory_form_new,New Inventory,Nouvel inventaire,0
model,"ir.ui.menu,name",menu_location_form,Edit Locations,Ãditer les emplacements,0
-model,"ir.ui.menu,name",menu_shipment_internal_form,Internal Shipments,Expéditions internes,0
-model,"ir.ui.menu,name",menu_shipment_internal_waiting_form,Internal Shipments Waiting Assignation,Expéditions internes en attente d'assignation,0
-model,"ir.ui.menu,name",menu_inventory_form,Inventories,Inventaires,0
-model,"ir.ui.menu,name",menu_stock,Inventory Management,Gestion des stocks,0
model,"ir.ui.menu,name",menu_location_tree,Locations,Emplacements,0
model,"ir.ui.menu,name",menu_move_form,Moves,Mouvements,0
+model,"ir.ui.menu,name",menu_move_form_cust,Moves to Customers,Mouvements clients,0
model,"ir.ui.menu,name",menu_move_form_supp,Moves from Suppliers,Mouvements fournisseurs,0
model,"ir.ui.menu,name",menu_move_form_supp_proceed,Moves from Suppliers Waiting Arrival,Mouvements fournisseur en attente de réception,0
-model,"ir.ui.menu,name",menu_move_form_cust,Moves to Customers,Mouvements clients,0
-model,"ir.ui.menu,name",menu_shipment_out_return_form2,New Customer Return Shipment,Nouveau retour d'expédition client,0
-model,"ir.ui.menu,name",menu_shipment_internal_new_form,New Internal Shipment,Nouvelle expédition Interne,0
-model,"ir.ui.menu,name",menu_inventory_form_new,New Inventory,Nouvel inventaire,0
-model,"ir.ui.menu,name",menu_shipment_in_return_new_form,New Supplier Return Shipment,Nouveau retour d'expédition fournisseur,0
+model,"ir.ui.menu,name",menu_reporting,Reporting,Rapports,0
+model,"ir.ui.menu,name",menu_shipment_in_form,Supplier Shipments,Expéditions fournisseur,0
model,"ir.ui.menu,name",menu_shipment_in_form2,New Supplier Shipment,Nouvelle expédition fournisseur,0
model,"ir.ui.menu,name",menu_shipment_in_received,Received Supplier shipments,Expéditions fournisseur reçues,0
-model,"ir.ui.menu,name",menu_reporting,Reporting,Rapports,0
-model,"ir.ui.menu,name",menu_stock_configuration,Stock Configuration,Configuration des stocks,0
model,"ir.ui.menu,name",menu_shipment_in_return_form,Supplier Return Shipments,Retour d'expédition fournisseur,0
-model,"ir.ui.menu,name",menu_shipment_in_form,Supplier Shipments,Expéditions fournisseur,0
+model,"ir.ui.menu,name",menu_shipment_in_return_new_form,New Supplier Return Shipment,Nouveau retour d'expédition fournisseur,0
+model,"ir.ui.menu,name",menu_shipment_internal_assigned_form,Assigned Internal Shipments,Expéditions internes assignées,0
+model,"ir.ui.menu,name",menu_shipment_internal_draft_form,Draft Internal Shipments,Expéditions internes brouillons,0
+model,"ir.ui.menu,name",menu_shipment_internal_form,Internal Shipments,Expéditions internes,0
+model,"ir.ui.menu,name",menu_shipment_internal_new_form,New Internal Shipment,Nouvelle expédition Interne,0
+model,"ir.ui.menu,name",menu_shipment_internal_waiting_form,Internal Shipments Waiting Assignation,Expéditions internes en attente d'assignation,0
+model,"ir.ui.menu,name",menu_shipment_out_assigned,Assigned Customer Shipments,Expéditions client assignées,0
+model,"ir.ui.menu,name",menu_shipment_out_form,Customer Shipments,Expéditions client,0
+model,"ir.ui.menu,name",menu_shipment_out_ready,Customer Shipments Ready for Shipping,Expéditions client prêtes pour la livraison,0
+model,"ir.ui.menu,name",menu_shipment_out_return_form,Customer Return Shipments,Retour d'expédition client,0
+model,"ir.ui.menu,name",menu_shipment_out_return_form2,New Customer Return Shipment,Nouveau retour d'expédition client,0
+model,"ir.ui.menu,name",menu_shipment_out_waiting,Customer Shipments Waiting Assignation,Expéditions client en attente d'assignation,0
+model,"ir.ui.menu,name",menu_stock,Inventory Management,Gestion des stocks,0
+model,"ir.ui.menu,name",menu_stock_configuration,Stock Configuration,Configuration des stocks,0
model,"res.group,name",group_stock,Stock,Stock,0
model,"res.group,name",group_stock_admin,Stock Administration,Administration des stocks,0
model,"res.group,name",group_stock_force_assignment,Stock Force Assignment,Stock forcer assignation,0
-model,"stock.configuration,name",0,stock.configuration,,0
-model,"stock.inventory.line,name",0,Stock Inventory Line,Ligne d'inventaire de stock,0
+model,"stock.configuration,name",0,Stock Configuration,Configuration des stocks,0
model,"stock.inventory,name",0,Stock Inventory,Inventaire du stock,0
+model,"stock.inventory.line,name",0,Stock Inventory Line,Ligne d'inventaire de stock,0
+model,"stock.location,name",0,Stock Location,Lieu de Stockage,0
model,"stock.location,name",location_customer,Customer,Client,0
model,"stock.location,name",location_input,Input Zone,Zone d'entrée,0
model,"stock.location,name",location_lost_found,Lost and Found,Pertes et surplus,0
model,"stock.location,name",location_output,Output Zone,Zone de sortie,0
-model,"stock.location,name",0,Stock Location,Lieu de Stockage,0
model,"stock.location,name",location_storage,Storage Zone,Zone rangement,0
model,"stock.location,name",location_supplier,Supplier,Fournisseur,0
model,"stock.location,name",location_warehouse,Warehouse,Entrepôt,0
@@ -252,46 +254,46 @@ model,"stock.location_stock_date.init,name",0,Compute stock quantities,Quantité
model,"stock.move,name",0,Stock Move,Mouvement de stock,0
model,"stock.product_stock_date.init,name",0,Compute stock quantities,Quantités de stock calculées,0
model,"stock.shipment.in,name",0,Supplier Shipment,Expédition fournisseur,0
-model,"stock.shipment.in.return.assign.assign_failed,name",0,Assign Supplier Return Shipment Assign Failed,Assigner le retour d'expédition fournisseur - Demande forcée,0
model,"stock.shipment.in.return,name",0,Supplier Return Shipment,Retour d'expédition fournisseur,0
-model,"stock.shipment.internal.assign.assign_failed,name",0,Assign Shipment Internal Assign Failed,Assigner l'expédition interne - Demande forcée,0
+model,"stock.shipment.in.return.assign.assign_failed,name",0,Assign Supplier Return Shipment Assign Failed,Assigner le retour d'expédition fournisseur - Demande forcée,0
model,"stock.shipment.internal,name",0,Internal Shipment,Expédition interne,0
-model,"stock.shipment.out.assign.assign_failed,name",0,Assign Shipment Out Assign Failed,Assigner l'expédition de sortie - Demande forcée,0
+model,"stock.shipment.internal.assign.assign_failed,name",0,Assign Shipment Internal Assign Failed,Assigner l'expédition interne - Demande forcée,0
model,"stock.shipment.out,name",0,Customer Shipment,Expédition Client,0
+model,"stock.shipment.out.assign.assign_failed,name",0,Assign Shipment Out Assign Failed,Assigner l'expédition de sortie - Demande forcée,0
model,"stock.shipment.out.return,name",0,Customer Return Shipment,Retour d'expédition client,0
-model,"workflow.activity,name",shipmentout_act_assigned,Assigned,Assigné,0
-model,"workflow.activity,name",shipmentinternal_act_assigned,Assigned,Assigné,0
+model,"workflow,name",wkf_inventory,Inventory,Inventaire,0
+model,"workflow,name",wkf_shipment_in_return,Supplier Return Shipment,Retour d'expédition fournisseur,0
+model,"workflow,name",wkf_shipment_out_return,Customer Return Shipment,Retour d'expédition client,0
+model,"workflow,name",wkf_shipmentin,Supplier Shipment,Expédition fournisseur,0
+model,"workflow,name",wkf_shipmentinternal,Internal Shipment,Expédition interne,0
+model,"workflow,name",wkf_shipmentout,Customer Shipment,Expédition client,0
+model,"workflow.activity,name",inventory_act_cancel,Canceled,Annulé,0
+model,"workflow.activity,name",inventory_act_done,Done,Fait,0
+model,"workflow.activity,name",inventory_act_draft,Draft,Brouillon,0
model,"workflow.activity,name",shipment_in_return_act_assigned,Assigned,Assigné,0
-model,"workflow.activity,name",shipmentin_act_cancel,Canceled,Annulé,0
-model,"workflow.activity,name",shipmentout_act_cancel,Canceled,Annulé,0
-model,"workflow.activity,name",shipmentinternal_act_cancel,Canceled,Annulé,0
-model,"workflow.activity,name",shipment_out_return_act_cancel,Canceled,Annuler,0
model,"workflow.activity,name",shipment_in_return_act_cancel,Canceled,Annuler,0
-model,"workflow.activity,name",inventory_act_cancel,Canceled,Annulé,0
-model,"workflow.activity,name",shipmentin_act_done,Done,Fait,0
-model,"workflow.activity,name",shipmentout_act_done,Done,Fait,0
-model,"workflow.activity,name",shipmentinternal_act_done,Done,Fait,0
-model,"workflow.activity,name",shipment_out_return_act_done,Done,Fait,0
model,"workflow.activity,name",shipment_in_return_act_done,Done,Fait,0
-model,"workflow.activity,name",inventory_act_done,Done,Fait,0
+model,"workflow.activity,name",shipment_in_return_act_draft,Draft,Brouillon,0
+model,"workflow.activity,name",shipment_in_return_act_waiting,Waiting,En attente,0
+model,"workflow.activity,name",shipment_out_return_act_cancel,Canceled,Annuler,0
+model,"workflow.activity,name",shipment_out_return_act_done,Done,Fait,0
+model,"workflow.activity,name",shipment_out_return_act_draft,Draft,Brouillon,0
+model,"workflow.activity,name",shipment_out_return_act_received,Received,Reçu,0
+model,"workflow.activity,name",shipmentin_act_cancel,Canceled,Annulé,0
+model,"workflow.activity,name",shipmentin_act_done,Done,Fait,0
model,"workflow.activity,name",shipmentin_act_draft,Draft,Brouillon,0
-model,"workflow.activity,name",shipmentout_act_draft,Draft,Brouillon,0
+model,"workflow.activity,name",shipmentin_act_received,Received,Reçu,0
+model,"workflow.activity,name",shipmentinternal_act_assigned,Assigned,Assigné,0
+model,"workflow.activity,name",shipmentinternal_act_cancel,Canceled,Annulé,0
+model,"workflow.activity,name",shipmentinternal_act_done,Done,Fait,0
model,"workflow.activity,name",shipmentinternal_act_draft,Draft,Brouillon,0
-model,"workflow.activity,name",shipment_out_return_act_draft,Draft,Brouillon,0
-model,"workflow.activity,name",shipment_in_return_act_draft,Draft,Brouillon,0
-model,"workflow.activity,name",inventory_act_draft,Draft,Brouillon,0
+model,"workflow.activity,name",shipmentinternal_act_waiting,Waiting,En attente,0
+model,"workflow.activity,name",shipmentout_act_assigned,Assigned,Assigné,0
+model,"workflow.activity,name",shipmentout_act_cancel,Canceled,Annulé,0
+model,"workflow.activity,name",shipmentout_act_done,Done,Fait,0
+model,"workflow.activity,name",shipmentout_act_draft,Draft,Brouillon,0
model,"workflow.activity,name",shipmentout_act_packed,Packed,Emballé,0
-model,"workflow.activity,name",shipmentin_act_received,Received,Reçu,0
-model,"workflow.activity,name",shipment_out_return_act_received,Received,Reçu,0
model,"workflow.activity,name",shipmentout_act_waiting,Waiting,En attente,0
-model,"workflow.activity,name",shipmentinternal_act_waiting,Waiting,En attente,0
-model,"workflow.activity,name",shipment_in_return_act_waiting,Waiting,En attente,0
-model,"workflow,name",wkf_shipment_out_return,Customer Return Shipment,Retour d'expédition client,0
-model,"workflow,name",wkf_shipmentout,Customer Shipment,Expédition client,0
-model,"workflow,name",wkf_shipmentinternal,Internal Shipment,Expédition interne,0
-model,"workflow,name",wkf_inventory,Inventory,Inventaire,0
-model,"workflow,name",wkf_shipment_in_return,Supplier Return Shipment,Retour d'expédition fournisseur,0
-model,"workflow,name",wkf_shipmentin,Supplier Shipment,Expédition fournisseur,0
odt,stock.shipment.in.restocking_list,0,/,/,0
odt,stock.shipment.in.restocking_list,0,Code:,Code :,0
odt,stock.shipment.in.restocking_list,0,E-Mail:,E-Mail :,0
@@ -304,6 +306,7 @@ odt,stock.shipment.in.restocking_list,0,Reference:,Référence :,0
odt,stock.shipment.in.restocking_list,0,Restocking List,Liste de restockage,0
odt,stock.shipment.in.restocking_list,0,Supplier:,Fournisseur :,0
odt,stock.shipment.in.restocking_list,0,To Location,Emplacement de destination,0
+odt,stock.shipment.in.restocking_list,0,VAT Number:,Numéro TVA :,0
odt,stock.shipment.in.restocking_list,0,Warehouse:,Entrepôt :,0
odt,stock.shipment.internal.report,0,/,/,0
odt,stock.shipment.internal.report,0,Code:,Code :,0
@@ -318,6 +321,7 @@ odt,stock.shipment.internal.report,0,Quantity,Quantité,0
odt,stock.shipment.internal.report,0,Reference:,Référence :,0
odt,stock.shipment.internal.report,0,To Location,Emplacement de destination,0
odt,stock.shipment.internal.report,0,To Location:,Emplacement de destination :,0
+odt,stock.shipment.internal.report,0,VAT Number:,Numéro TVA :,0
odt,stock.shipment.out.delivery_note,0,/,/,0
odt,stock.shipment.out.delivery_note,0,Customer Code:,Code client :,0
odt,stock.shipment.out.delivery_note,0,Date:,Date :,0
@@ -328,6 +332,7 @@ odt,stock.shipment.out.delivery_note,0,Product,Produit,0
odt,stock.shipment.out.delivery_note,0,Quantity,Quantité,0
odt,stock.shipment.out.delivery_note,0,Reference:,Référence :,0
odt,stock.shipment.out.delivery_note,0,Shipment Number:,Numéro d'expédition :,0
+odt,stock.shipment.out.delivery_note,0,VAT Number:,Numéro TVA :,0
odt,stock.shipment.out.picking_list,0,/,/,0
odt,stock.shipment.out.picking_list,0,Code:,Code :,0
odt,stock.shipment.out.picking_list,0,Customer:,Client :,0
@@ -340,6 +345,7 @@ odt,stock.shipment.out.picking_list,0,Product,Produit,0
odt,stock.shipment.out.picking_list,0,Quantity,Quantité,0
odt,stock.shipment.out.picking_list,0,Reference:,Référence :,0
odt,stock.shipment.out.picking_list,0,To Location,Emplacement de destination,0
+odt,stock.shipment.out.picking_list,0,VAT Number:,Numéro TVA :,0
odt,stock.shipment.out.picking_list,0,Warehouse:,Entrepôt :,0
odt,stock.shipment.out.return.restocking_list,0,/,/,0
odt,stock.shipment.out.return.restocking_list,0,Code:,Code :,0
@@ -353,6 +359,7 @@ odt,stock.shipment.out.return.restocking_list,0,Reference:,Référence :,0
odt,stock.shipment.out.return.restocking_list,0,Restocking List,Liste de restockage,0
odt,stock.shipment.out.return.restocking_list,0,Supplier:,Fournisseur :,0
odt,stock.shipment.out.return.restocking_list,0,To Location,Emplacement de destination,0
+odt,stock.shipment.out.return.restocking_list,0,VAT Number:,Numéro TVA :,0
odt,stock.shipment.out.return.restocking_list,0,Warehouse:,Entrepôt :,0
selection,"stock.inventory,state",0,Canceled,Annulé,0
selection,"stock.inventory,state",0,Done,Fait,0
@@ -368,30 +375,30 @@ selection,"stock.move,state",0,Assigned,Assigné,0
selection,"stock.move,state",0,Canceled,Annulé,0
selection,"stock.move,state",0,Done,Fait,0
selection,"stock.move,state",0,Draft,Brouillon,0
+selection,"stock.shipment.in,state",0,Canceled,Annulé,0
+selection,"stock.shipment.in,state",0,Done,Fait,0
+selection,"stock.shipment.in,state",0,Draft,Brouillon,0
+selection,"stock.shipment.in,state",0,Received,Reçu,0
selection,"stock.shipment.in.return,state",0,Assigned,Assigné,0
selection,"stock.shipment.in.return,state",0,Canceled,Annuler,0
selection,"stock.shipment.in.return,state",0,Done,Fait,0
selection,"stock.shipment.in.return,state",0,Draft,Brouillon,0
selection,"stock.shipment.in.return,state",0,Waiting,En attente,0
-selection,"stock.shipment.in,state",0,Canceled,Annulé,0
-selection,"stock.shipment.in,state",0,Done,Fait,0
-selection,"stock.shipment.in,state",0,Draft,Brouillon,0
-selection,"stock.shipment.in,state",0,Received,Reçu,0
selection,"stock.shipment.internal,state",0,Assigned,Assigné,0
selection,"stock.shipment.internal,state",0,Canceled,Annulé,0
selection,"stock.shipment.internal,state",0,Done,Fait,0
selection,"stock.shipment.internal,state",0,Draft,Brouillon,0
selection,"stock.shipment.internal,state",0,Waiting,En attente,0
-selection,"stock.shipment.out.return,state",0,Canceled,Annulé,0
-selection,"stock.shipment.out.return,state",0,Done,Fait,0
-selection,"stock.shipment.out.return,state",0,Draft,Brouillon,0
-selection,"stock.shipment.out.return,state",0,Received,Reçu,0
selection,"stock.shipment.out,state",0,Assigned,Assigné,0
selection,"stock.shipment.out,state",0,Canceled,Annulé,0
selection,"stock.shipment.out,state",0,Done,Fait,0
selection,"stock.shipment.out,state",0,Draft,Brouillon,0
selection,"stock.shipment.out,state",0,Packed,Emballé,0
selection,"stock.shipment.out,state",0,Waiting,En attente,0
+selection,"stock.shipment.out.return,state",0,Canceled,Annulé,0
+selection,"stock.shipment.out.return,state",0,Done,Fait,0
+selection,"stock.shipment.out.return,state",0,Draft,Brouillon,0
+selection,"stock.shipment.out.return,state",0,Received,Reçu,0
view,party.party,0,Stock,Stock,0
view,party.party,0,_Stock,_Stocks,0
view,product.product,0,Products,Produits,0
diff --git a/inventory.py b/inventory.py
index 6331f19..ceeb1df 100644
--- a/inventory.py
+++ b/inventory.py
@@ -1,10 +1,11 @@
#This file is part of Tryton. The COPYRIGHT file at the top level
#of this repository contains the full copyright notices and license terms.
-'Inventory'
+from __future__ import with_statement
from trytond.model import ModelWorkflow, ModelView, ModelSQL, fields
from trytond.wizard import Wizard
from trytond.pyson import Not, Equal, Eval, Or, Bool
from trytond.backend import TableHandler
+from trytond.transaction import Transaction
STATES = {
'readonly': Not(Equal(Eval('state'), 'draft')),
@@ -47,60 +48,56 @@ class Inventory(ModelWorkflow, ModelSQL, ModelView):
super(Inventory, self).__init__()
self._order.insert(0, ('date', 'DESC'))
- def init(self, cursor, module_name):
- super(Inventory, self).init(cursor, module_name)
+ def init(self, module_name):
+ super(Inventory, self).init(module_name)
+ cursor = Transaction().cursor
# Add index on create_date
table = TableHandler(cursor, self, module_name)
table.index_action('create_date', action='add')
- def default_state(self, cursor, user, context=None):
+ def default_state(self):
return 'draft'
- def default_date(self, cursor, user, context=None):
+ def default_date(self):
date_obj = self.pool.get('ir.date')
- return date_obj.today(cursor, user, context=context)
+ return date_obj.today()
- def default_company(self, cursor, user, context=None):
- if context is None:
- context = {}
- if context.get('company'):
- return context['company']
- return False
+ def default_company(self):
+ return Transaction().context.get('company') or False
- def default_lost_found(self, cursor, user, context=None):
+ def default_lost_found(self):
location_obj = self.pool.get('stock.location')
- location_ids = location_obj.search(cursor, user,
- self.lost_found.domain, context=context)
+ location_ids = location_obj.search(self.lost_found.domain)
if len(location_ids) == 1:
return location_ids[0]
return False
- def set_state_draft(self, cursor, user, inventory_id, context=None):
- self.write(cursor, user, inventory_id, {
+ def set_state_draft(self, inventory_id):
+ self.write(inventory_id, {
'state': 'draft',
- }, context=context)
+ })
- def set_state_cancel(self, cursor, user, inventory_id, context=None):
+ def set_state_cancel(self, inventory_id):
line_obj = self.pool.get("stock.inventory.line")
- inventory = self.browse(cursor, user, inventory_id, context=context)
- line_obj.cancel_move(cursor, user, inventory.lines, context=context)
- self.write(cursor, user, inventory_id, {
+ inventory = self.browse(inventory_id)
+ line_obj.cancel_move(inventory.lines)
+ self.write(inventory_id, {
'state': 'cancel',
- }, context=context)
+ })
- def set_state_done(self, cursor, user, inventory_id, context=None):
+ def set_state_done(self, inventory_id):
date_obj = self.pool.get('ir.date')
line_obj = self.pool.get('stock.inventory.line')
- inventory = self.browse(cursor, user, inventory_id, context=context)
+ inventory = self.browse(inventory_id)
for line in inventory.lines:
- line_obj.create_move(cursor, user, line, context=context)
- self.write(cursor, user, inventory_id, {
+ line_obj.create_move(line)
+ self.write(inventory_id, {
'state': 'done',
- }, context=context)
+ })
- def copy(self, cursor, user, ids, default=None, context=None):
+ def copy(self, ids, default=None):
date_obj = self.pool.get('ir.date')
line_obj = self.pool.get('stock.inventory.line')
@@ -112,31 +109,28 @@ class Inventory(ModelWorkflow, ModelSQL, ModelView):
if default is None:
default = {}
default = default.copy()
- default['date'] = date_obj.today(cursor, user, context=context)
+ default['date'] = date_obj.today()
default['lines'] = False
new_ids = []
- for inventory in self.browse(cursor, user, ids, context=context):
- new_id = super(Inventory, self).copy(cursor, user, inventory.id,
- default=default, context=context)
- line_obj.copy(cursor, user, [x.id for x in inventory.lines],
+ for inventory in self.browse(ids):
+ new_id = super(Inventory, self).copy(inventory.id, default=default)
+ line_obj.copy([x.id for x in inventory.lines],
default={
'inventory': new_id,
'move': False,
- }, context=context)
- self.complete_lines(cursor, user, new_id, context=context)
+ })
+ self.complete_lines(new_id)
new_ids.append(new_id)
if int_id:
return new_ids[0]
return new_ids
- def complete_lines(self, cursor, user, ids, context=None):
+ def complete_lines(self, ids):
'''
Complete or update the inventories
- :param cursor: the database cursor
- :param user: the user id
:param ids: the ids of stock.inventory
:param context: the context
'''
@@ -147,22 +141,18 @@ class Inventory(ModelWorkflow, ModelSQL, ModelView):
if isinstance(ids, (int, long)):
ids = [ids]
- inventories = self.browse(cursor, user, ids,
- context=context)
- context = context and context.copy() or {}
+ inventories = self.browse(ids)
for inventory in inventories:
# Compute product quantities
- ctx = context and context.copy() or {}
- ctx['stock_date_end'] = inventory.date
- pbl = product_obj.products_by_location(
- cursor, user, [inventory.location.id], context=ctx)
+ with Transaction().set_context(stock_date_end=inventory.date):
+ pbl = product_obj.products_by_location(
+ [inventory.location.id])
# Index some data
product2uom = {}
product2type = {}
- for product in product_obj.browse(cursor, user,
- [line[1] for line in pbl], context=context):
+ for product in product_obj.browse([line[1] for line in pbl]):
product2uom[product.id] = product.default_uom.id
product2type[product.id] = product.type
@@ -174,7 +164,7 @@ class Inventory(ModelWorkflow, ModelSQL, ModelView):
for line in inventory.lines:
if not (line.product.active and
line.product.type == 'stockable'):
- line_obj.delete(cursor, user, line.id, context=context)
+ line_obj.delete(line.id)
continue
if line.product.id in product_qty:
quantity, uom_id = product_qty.pop(line.product.id)
@@ -182,21 +172,18 @@ class Inventory(ModelWorkflow, ModelSQL, ModelView):
quantity, uom_id = 0.0, product2uom[line.product.id]
else:
quantity, uom_id = 0.0, line.product.default_uom.id
- values = line_obj.update_values4complete(cursor, user,
- line, quantity, uom_id, context=context)
+ values = line_obj.update_values4complete(line, quantity, uom_id)
if values:
- line_obj.write(cursor, user, line.id, values,
- context=context)
+ line_obj.write(line.id, values)
# Create lines if needed
for product_id in product_qty:
if product2type[product_id] != 'stockable':
continue
quantity, uom_id = product_qty[product_id]
- values = line_obj.create_values4complete(cursor, user,
- product_id, inventory, quantity, uom_id,
- context=context)
- line_obj.create(cursor, user, values, context=context)
+ values = line_obj.create_values4complete(product_id, inventory,
+ quantity, uom_id)
+ line_obj.create(values)
Inventory()
@@ -231,53 +218,48 @@ class InventoryLine(ModelSQL, ModelView):
]
self._order.insert(0, ('product', 'ASC'))
- def default_unit_digits(self, cursor, user, context=None):
+ def default_unit_digits(self):
return 2
- def on_change_product(self, cursor, user, vals, context=None):
+ def on_change_product(self, vals):
product_obj = self.pool.get('product.product')
uom_obj = self.pool.get('product.uom')
res = {}
res['unit_digits'] = 2
if vals.get('product'):
- product = product_obj.browse(cursor, user, vals['product'],
- context=context)
+ product = product_obj.browse(vals['product'])
res['uom'] = product.default_uom.id
res['uom.rec_name'] = product.default_uom.rec_name
res['unit_digits'] = product.default_uom.digits
return res
- def get_uom(self, cursor, user, ids, name, context=None):
+ def get_uom(self, ids, name):
res = {}
- for line in self.browse(cursor, user, ids, context=context):
+ for line in self.browse(ids):
res[line.id] = line.product.default_uom.id
return res
- def get_unit_digits(self, cursor, user, ids, name, context=None):
+ def get_unit_digits(self, ids, name):
res = {}
- for line in self.browse(cursor, user, ids, context=context):
+ for line in self.browse(ids):
res[line.id] = line.product.default_uom.digits
return res
- def cancel_move(self, cursor, user, lines, context=None):
+ def cancel_move(self, lines):
move_obj = self.pool.get('stock.move')
- move_obj.write(
- cursor, user, [l.move.id for l in lines if l.move], {'state': 'cancel'},
- context=context)
- move_obj.delete(
- cursor, user, [l.move.id for l in lines if l.move], context=context)
- self.write(
- cursor, user, [l.id for l in lines if l.move], {'move': False},
- context=context)
-
- def create_move(self, cursor, user, line, context=None):
+ move_obj.write( [l.move.id for l in lines if l.move], {
+ 'state': 'cancel',
+ })
+ move_obj.delete([l.move.id for l in lines if l.move])
+ self.write([l.id for l in lines if l.move], {
+ 'move': False,
+ })
+
+ def create_move(self, line):
'''
Create move for an inventory line
- :param cursor: the database cursor
- :param user: the user id
:param line: a BrowseRecord of inventory.line
- :param context: the context
:return: the stock.move id or None
'''
move_obj = self.pool.get('stock.move')
@@ -290,7 +272,7 @@ class InventoryLine(ModelSQL, ModelView):
(from_location, to_location, delta_qty) = \
(to_location, from_location, -delta_qty)
- move_id = move_obj.create(cursor, user, {
+ move_id = move_obj.create({
'from_location': from_location,
'to_location': to_location,
'quantity': delta_qty,
@@ -299,21 +281,19 @@ class InventoryLine(ModelSQL, ModelView):
'company': line.inventory.company.id,
'state': 'done',
'effective_date': line.inventory.date,
- }, context=context)
- self.write(cursor, user, line.id, {'move': move_id}, context=context)
+ })
+ self.write(line.id, {
+ 'move': move_id,
+ })
return move_id
- def update_values4complete(self, cursor, user, line, quantity, uom_id,
- context=None):
+ def update_values4complete(self, line, quantity, uom_id):
'''
Return update values to complete inventory
- :param cursor: the database cursor
- :param user: the user id
:param line: a BrowseRecord of inventory.line
:param quantity: the actual product quantity for the inventory location
:param uom_id: the UoM id of the product line
- :param context: the context
:return: a dictionary
'''
res = {}
@@ -328,18 +308,14 @@ class InventoryLine(ModelSQL, ModelView):
res['quantity'] = max(quantity, 0.0)
return res
- def create_values4complete(self, cursor, user, product_id, inventory,
- quantity, uom_id, context=None):
+ def create_values4complete(self, product_id, inventory, quantity, uom_id):
'''
Return create values to complete inventory
- :param cursor: the database cursor
- :param user: the user id
:param product_id: the product.product id
:param inventory: a BrowseRecord of inventory.inventory
:param quantity: the actual product quantity for the inventory location
:param uom_id: the UoM id of the product_id
- :param context: the context
:return: a dictionary
'''
return {
@@ -366,9 +342,9 @@ class CompleteInventory(Wizard):
},
}
- def _complete(self, cursor, user, data, context=None):
+ def _complete(self, data):
inventory_obj = self.pool.get('stock.inventory')
- inventory_obj.complete_lines(cursor, user, data['ids'], context=context)
+ inventory_obj.complete_lines(data['ids'])
return {}
diff --git a/location.py b/location.py
index fb5f752..2a74b55 100644
--- a/location.py
+++ b/location.py
@@ -1,11 +1,12 @@
#This file is part of Tryton. The COPYRIGHT file at the top level of
#this repository contains the full copyright notices and license terms.
-"Wharehouse"
+from __future__ import with_statement
+import datetime
from trytond.model import ModelView, ModelSQL, fields
from trytond.wizard import Wizard
from trytond.backend import TableHandler
from trytond.pyson import Not, Bool, Eval, Equal, PYSONEncoder, Date
-import datetime
+from trytond.transaction import Transaction
STATES = {
'readonly': Not(Bool(Eval('active'))),
@@ -90,110 +91,103 @@ class Location(ModelSQL, ModelView):
'child_of_warehouse': 'Location "%s" must be a child of warehouse "%s"!',
})
- def init(self, cursor, module_name):
- super(Location, self).init(cursor, module_name)
+ def init(self, module_name):
+ super(Location, self).init(module_name)
+ cursor = Transaction().cursor
table = TableHandler(cursor, self, module_name)
table.index_action(['left', 'right'], 'add')
- def check_type_for_moves(self, cursor, user, ids):
+ def check_type_for_moves(self, ids):
""" Check locations with moves have types compatible with moves. """
invalid_move_types = ['warehouse', 'view']
move_obj = self.pool.get('stock.move')
- for location in self.browse(cursor, user, ids):
+ for location in self.browse(ids):
if location.type in invalid_move_types and \
- move_obj.search(cursor, user, ['OR',
+ move_obj.search(['OR',
('to_location', '=', location.id),
- ('from_location', '=', location.id)]):
+ ('from_location', '=', location.id),
+ ]):
return False
return True
- def default_active(self, cursor, user, context=None):
+ def default_active(self):
return True
- def default_left(self, cursor, user, context=None):
+ def default_left(self):
return 0
- def default_right(self, cursor, user, context=None):
+ def default_right(self):
return 0
- def default_type(self, cursor, user, context=None):
+ def default_type(self):
return 'storage'
- def check_xml_record(self, cursor, user, ids, values, context=None):
+ def check_xml_record(self, ids, values):
return True
- def search_rec_name(self, cursor, user, name, clause, context=None):
- ids = self.search(cursor, user, [('code', '=', clause[2])],
- order=[], context=context)
+ def search_rec_name(self, name, clause):
+ ids = self.search([
+ ('code', '=', clause[2]),
+ ], order=[])
if ids:
return [('id', 'in', ids)]
return [(self._rec_name,) + clause[1:]]
- def get_quantity(self, cursor, user, ids, name, context=None):
+ def get_quantity(self, ids, name):
product_obj = self.pool.get('product.product')
date_obj = self.pool.get('ir.date')
- if not context:
- context = {}
-
- if (not context.get('product')) \
- or not (isinstance(context['product'], (int, long))):
- return dict([(i, 0) for i in ids])
-
- ctx = context.copy()
- ctx['active_test'] = False
- if not product_obj.search(cursor, user, [
- ('id', '=', context['product']),
- ], context=ctx):
+ if (not Transaction().context.get('product')) \
+ or not (isinstance(Transaction().context['product'],
+ (int, long))):
return dict([(i, 0) for i in ids])
- if name == 'quantity' and \
- context.get('stock_date_end') > \
- date_obj.today(cursor, user, context=context):
+ with Transaction().set_context(active_test=False):
+ if not product_obj.search([
+ ('id', '=', Transaction().context['product']),
+ ]):
+ return dict([(i, 0) for i in ids])
- context = context.copy()
- context['stock_date_end'] = date_obj.today(
- cursor, user, context=context)
+ context = {}
+ if (name == 'quantity'
+ and Transaction().context.get('stock_date_end') >
+ date_obj.today()):
+ context['stock_date_end'] = date_obj.today()
if name == 'forecast_quantity':
- context = context.copy()
context['forecast'] = True
- if not context.get('stock_date_end'):
+ if not Transaction().context.get('stock_date_end'):
context['stock_date_end'] = datetime.date.max
- pbl = product_obj.products_by_location(cursor, user, location_ids=ids,
- product_ids=[context['product']], with_childs=True, skip_zero=False,
- context=context).iteritems()
+ with Transaction().set_context(context):
+ pbl = product_obj.products_by_location(location_ids=ids,
+ product_ids=[Transaction().context['product']],
+ with_childs=True, skip_zero=False).iteritems()
return dict([(loc,qty) for (loc,prod), qty in pbl])
- def view_header_get(self, cursor, user, value, view_type='form',
- context=None):
+ def view_header_get(self, value, view_type='form'):
product_obj = self.pool.get('product.product')
- if context is None:
- context = {}
- ctx = context.copy()
- ctx['active_test'] = False
- if context.get('product') \
- and isinstance(context['product'], (int, long)) \
- and product_obj.search(cursor, user, [
- ('id', '=', context['product']),
- ], context=ctx):
- product = product_obj.browse(cursor, user, context['product'],
- context=context)
- return value + ': ' + product.rec_name + \
- ' (' + product.default_uom.rec_name + ')'
+ value = super(Location, self).view_header_get(value,
+ view_type=view_type)
+ if (Transaction().context.get('product')
+ and isinstance(Transaction().context['product'], (int, long))):
+ with Transaction().set_context(active_test=False):
+ product_ids = product_obj.search([
+ ('id', '=', Transaction().context['product']),
+ ], limit=1)
+ if product_ids:
+ product = product_obj.browse(product_ids[0])
+ return value + ': ' + product.rec_name + \
+ ' (' + product.default_uom.rec_name + ')'
return value
- def _set_warehouse_parent(self, cursor, user, locations, context=None):
+ def _set_warehouse_parent(self, locations):
'''
Set the parent of child location of warehouse if not set
- :param cursor: the database cursor
- :param user: the user id
:param locations: a BrowseRecordList of locations
- :param context: the context
:return: a list with updated location ids
'''
location_ids = set()
@@ -207,35 +201,32 @@ class Location(ModelSQL, ModelView):
location_ids.add(location.storage_location.id)
location_ids = list(location_ids)
if location_ids:
- self.write(cursor, user, location_ids, {
+ self.write(location_ids, {
'parent': location.id,
- }, context=context)
+ })
- def create(self, cursor, user, vals, context=None):
- res = super(Location, self).create(cursor, user, vals, context=context)
- locations = self.browse(cursor, user, [res], context=context)
- self._set_warehouse_parent(cursor, user, locations, context=context)
+ def create(self, vals):
+ res = super(Location, self).create(vals)
+ locations = self.browse([res])
+ self._set_warehouse_parent(locations)
return res
- def write(self, cursor, user, ids, vals, context=None):
- res = super(Location, self).write(cursor, user, ids, vals,
- context=context)
+ def write(self, ids, vals):
+ res = super(Location, self).write(ids, vals)
if isinstance(ids, (int, long)):
ids = [ids]
- locations = self.browse(cursor, user, ids, context=context)
- self._set_warehouse_parent(cursor, user, locations, context=context)
-
- check_wh = self.search(
- cursor, user,
- [('type', '=', 'warehouse'),
- ['OR',
- ('storage_location', 'in', ids),
- ('input_location', 'in', ids),
- ('output_location', 'in', ids)
- ]],
- context=context)
-
- warehouses = self.browse(cursor, user, check_wh, context=context)
+ locations = self.browse(ids)
+ self._set_warehouse_parent(locations)
+
+ check_wh = self.search([
+ ('type', '=', 'warehouse'),
+ ['OR',
+ ('storage_location', 'in', ids),
+ ('input_location', 'in', ids),
+ ('output_location', 'in', ids),
+ ]])
+
+ warehouses = self.browse(check_wh)
fields = ('storage_location', 'input_location', 'output_location')
wh2childs = {}
for warehouse in warehouses:
@@ -243,19 +234,16 @@ class Location(ModelSQL, ModelView):
for location in locations:
if location.id not in in_out_sto:
continue
- childs = wh2childs.setdefault(
- warehouse.id,
- self.search(
- cursor, user, [('parent', 'child_of', warehouse.id)],
- context=context))
+ childs = wh2childs.setdefault(warehouse.id, self.search([
+ ('parent', 'child_of', warehouse.id),
+ ]))
if location.id not in childs:
- self.raise_user_error(
- cursor, 'child_of_warehouse',
- (location.name, warehouse.name), context=context)
+ self.raise_user_error('child_of_warehouse',
+ (location.name, warehouse.name))
return res
- def copy(self, cursor, user, ids, default=None, context=None):
+ def copy(self, ids, default=None):
if default is None:
default = {}
int_id = False
@@ -267,7 +255,7 @@ class Location(ModelSQL, ModelView):
default['right'] = 0
res = []
- locations = self.browse(cursor, user, ids, context=context)
+ locations = self.browse(ids)
for location in locations:
if location.type == 'warehouse':
@@ -278,32 +266,31 @@ class Location(ModelSQL, ModelView):
wh_default['storage_location'] = False
wh_default['childs'] = False
- new_id = super(Location, self).copy(
- cursor, user, location.id, default=wh_default,
- context=context)
-
- child_context = context and context.copy() or {}
- child_context['cp_warehouse_locations'] = {
- 'input_location': location.input_location.id,
- 'output_location': location.output_location.id,
- 'storage_location': location.storage_location.id}
- child_context['cp_warehouse_id'] = new_id
-
- self.copy(
- cursor, user, [c.id for c in location.childs],
- default={'parent':new_id}, context=child_context)
- self.write(
- cursor, user, new_id, {'type': 'warehouse'}, context=context)
+ new_id = super(Location, self).copy(location.id,
+ default=wh_default)
+
+ with Transaction().set_context(
+ cp_warehouse_locations={
+ 'input_location': location.input_location.id,
+ 'output_location': location.output_location.id,
+ 'storage_location': location.storage_location.id,
+ },
+ cp_warehouse_id=new_id):
+ self.copy([c.id for c in location.childs],
+ default={'parent': new_id})
+ self.write(new_id, {
+ 'type': 'warehouse',
+ })
else:
- new_id = super(Location, self).copy(
- cursor, user, location.id, default=default, context=context)
- warehouse_locations = context.get('cp_warehouse_locations', {})
+ new_id = super(Location, self).copy(location.id,
+ default=default)
+ warehouse_locations = Transaction().context.get(
+ 'cp_warehouse_locations') or {}
if location.id in warehouse_locations.values():
for field, loc_id in warehouse_locations.iteritems():
if loc_id == location.id:
- self.write(
- cursor, user, context['cp_warehouse_id'],
- {field: new_id}, context=context)
+ self.write(Transaction().context['cp_warehouse_id'],
+ {field: new_id})
res.append(new_id)
@@ -335,9 +322,9 @@ class ChooseStockDateInit(ModelView):
'* An empty value is an infinite date in the future.\n'\
'* A date in the past will provide historical values.')
- def default_forecast_date(self, cursor, user, context=None):
+ def default_forecast_date(self):
date_obj = self.pool.get('ir.date')
- return date_obj.today(cursor, user, context=context)
+ return date_obj.today()
ChooseStockDateInit()
@@ -365,21 +352,21 @@ class OpenProduct(Wizard):
},
}
- def _action_open_product(self, cursor, user, data, context=None):
+ def _action_open_product(self, data):
model_data_obj = self.pool.get('ir.model.data')
act_window_obj = self.pool.get('ir.action.act_window')
- act_window_id = model_data_obj.get_id(cursor, user, 'stock',
- 'act_product_by_location', context=context)
- res = act_window_obj.read(cursor, user, act_window_id, context=context)
+ act_window_id = model_data_obj.get_id('stock',
+ 'act_product_by_location')
+ res = act_window_obj.read(act_window_id)
- ctx = {}
- ctx['locations'] = data['ids']
+ context = {}
+ context['locations'] = data['ids']
if data['form']['forecast_date']:
date = data['form']['forecast_date']
else:
date = datetime.date.max
- ctx['stock_date_end'] = Date(date.year, date.month, date.day)
- res['pyson_context'] = PYSONEncoder().encode(ctx)
+ context['stock_date_end'] = Date(date.year, date.month, date.day)
+ res['pyson_context'] = PYSONEncoder().encode(context)
return res
diff --git a/move.py b/move.py
index 9c19dae..ec5575d 100644
--- a/move.py
+++ b/move.py
@@ -1,10 +1,11 @@
#This file is part of Tryton. The COPYRIGHT file at the top level of
#this repository contains the full copyright notices and license terms.
-"Move"
+from __future__ import with_statement
+from decimal import Decimal
from trytond.model import ModelView, ModelSQL, fields, OPERATORS
from trytond.backend import TableHandler
from trytond.pyson import In, Eval, Not, In, Equal, If, Get, Bool
-from decimal import Decimal
+from trytond.transaction import Transaction
STATES = {
'readonly': In(Eval('state'), ['cancel', 'done']),
@@ -117,7 +118,8 @@ class Move(ModelSQL, ModelView):
'service_product': 'You can not use service products for a move!',
})
- def init(self, cursor, module_name):
+ def init(self, module_name):
+ cursor = Transaction().cursor
# Migration from 1.2: packing renamed into shipment
table = TableHandler(cursor, self, module_name)
table.drop_constraint('check_packing')
@@ -128,7 +130,7 @@ class Move(ModelSQL, ModelView):
table.index_action(old_column, action='remove')
table.drop_fk(old_column)
table.column_rename(old_column, new_column)
- super(Move, self).init(cursor, module_name)
+ super(Move, self).init(module_name)
# Migration from 1.0 check_packing_in_out has been removed
table = TableHandler(cursor, self, module_name)
@@ -137,225 +139,179 @@ class Move(ModelSQL, ModelView):
# Add index on create_date
table.index_action('create_date', action='add')
- def default_planned_date(self, cursor, user, context=None):
- if context and context.get('planned_date'):
- return context.get('planned_date')
+ def default_planned_date(self):
+ return Transaction().context.get('planned_date') or False
- def default_to_location(self, cursor, user, context=None):
+ def default_to_location(self):
location_obj = self.pool.get('stock.location')
party_obj = self.pool.get('party.party')
res = False
- if context is None:
- context = {}
-
warehouse = None
- if context.get('warehouse'):
- warehouse = location_obj.browse(cursor, user, context['warehouse'],
- context=context)
+ if Transaction().context.get('warehouse'):
+ warehouse = location_obj.browse(Transaction().context['warehouse'])
- if context.get('type', '') == 'inventory_in':
+ if Transaction().context.get('type', '') == 'inventory_in':
if warehouse:
res = warehouse.storage_location.id
- elif context.get('type', '') == 'inventory_out':
+ elif Transaction().context.get('type', '') == 'inventory_out':
if warehouse:
res = warehouse.output_location.id
- elif context.get('type', '') == 'incoming':
+ elif Transaction().context.get('type', '') == 'incoming':
if warehouse:
res = warehouse.input_location.id
- elif context.get('type', '') == 'outgoing':
- if context.get('customer'):
- customer = party_obj.browse(cursor, user, context['customer'],
- context=context)
+ elif Transaction().context.get('type', '') == 'outgoing':
+ if Transaction().context.get('customer'):
+ customer = party_obj.browse(Transaction().context['customer'])
res = customer.customer_location.id
- if context.get('to_location'):
- res = context.get('to_location')
+ if Transaction().context.get('to_location'):
+ res = Transaction().context['to_location']
return res
- def default_from_location(self, cursor, user, context=None):
+ def default_from_location(self):
location_obj = self.pool.get('stock.location')
party_obj = self.pool.get('party.party')
res = False
- if context is None:
- context = {}
-
warehouse = None
- if context.get('warehouse'):
- warehouse = location_obj.browse(cursor, user, context['warehouse'],
- context=context)
+ if Transaction().context.get('warehouse'):
+ warehouse = location_obj.browse(Transaction().context['warehouse'])
- if context.get('type', '') == 'inventory_in':
+ if Transaction().context.get('type', '') == 'inventory_in':
if warehouse:
res = warehouse.input_location.id
- elif context.get('type', '') == 'inventory_out':
+ elif Transaction().context.get('type', '') == 'inventory_out':
if warehouse:
res = warehouse.storage_location.id
- elif context.get('type', '') == 'outgoing':
+ elif Transaction().context.get('type', '') == 'outgoing':
if warehouse:
res = warehouse.output_location.id
- elif context.get('type', '') == 'incoming':
- if context.get('supplier'):
- supplier = party_obj.browse(cursor, user, context['supplier'],
- context=context)
+ elif Transaction().context.get('type', '') == 'incoming':
+ if Transaction().context.get('supplier'):
+ supplier = party_obj.browse(Transaction().context['supplier'])
res = supplier.supplier_location.id
- elif context.get('customer'):
- customer = party_obj.browse(cursor, user, context['customer'],
- context=context)
+ elif Transaction().context.get('customer'):
+ customer = party_obj.browse(Transaction().context['customer'])
res = customer.customer_location.id
- if context.get('from_location'):
- res = context.get('from_location')
+ if Transaction().context.get('from_location'):
+ res = Transaction().context['from_location']
return res
- def default_state(self, cursor, user, context=None):
+ def default_state(self):
return 'draft'
- def default_company(self, cursor, user, context=None):
- if context is None:
- context = {}
- if context.get('company'):
- return context['company']
- return False
+ def default_company(self):
+ return Transaction().context.get('company') or False
- def default_currency(self, cursor, user, context=None):
+ def default_currency(self):
company_obj = self.pool.get('company.company')
currency_obj = self.pool.get('currency.currency')
- if context is None:
- context = {}
- company = None
- if context.get('company'):
- company = company_obj.browse(cursor, user, context['company'],
- context=context)
+ company = Transaction().context.get('company')
+ if company:
+ company = company_obj.browse(company)
return company.currency.id
return False
- def on_change_with_unit_digits(self, cursor, user, vals, context=None):
+ def on_change_with_unit_digits(self, vals):
uom_obj = self.pool.get('product.uom')
if vals.get('uom'):
- uom = uom_obj.browse(cursor, user, vals['uom'],
- context=context)
+ uom = uom_obj.browse(vals['uom'])
return uom.digits
return 2
- def get_unit_digits(self, cursor, user, ids, name, context=None):
+ def get_unit_digits(self, ids, name):
res = {}
- for move in self.browse(cursor, user, ids, context=context):
+ for move in self.browse(ids):
res[move.id] = move.uom.digits
return res
- def on_change_product(self, cursor, user, vals, context=None):
+ def on_change_product(self, vals):
product_obj = self.pool.get('product.product')
uom_obj = self.pool.get('product.uom')
currency_obj = self.pool.get('currency.currency')
company_obj = self.pool.get('company.company')
location_obj = self.pool.get('stock.location')
- if context is None:
- context = {}
-
res = {
'unit_price': Decimal('0.0'),
}
if vals.get('product'):
- product = product_obj.browse(cursor, user, vals['product'],
- context=context)
+ product = product_obj.browse(vals['product'])
res['uom'] = product.default_uom.id
res['uom.rec_name'] = product.default_uom.rec_name
res['unit_digits'] = product.default_uom.digits
to_location = None
if vals.get('to_location'):
- to_location = location_obj.browse(cursor, user,
- vals['to_location'], context=context)
+ to_location = location_obj.browse(vals['to_location'])
if to_location and to_location.type == 'storage':
unit_price = product.cost_price
if vals.get('uom') and vals['uom'] != product.default_uom.id:
- uom = uom_obj.browse(cursor, user, vals['uom'],
- context=context)
- unit_price = uom_obj.compute_price(cursor, user,
- product.default_uom, unit_price, uom,
- context=context)
+ uom = uom_obj.browse(vals['uom'])
+ unit_price = uom_obj.compute_price(product.default_uom,
+ unit_price, uom)
if vals.get('currency') and vals.get('company'):
- currency = currency_obj.browse(cursor, user,
- vals['currency'], context=context)
- company = company_obj.browse(cursor, user,
- vals['company'], context=context)
- unit_price = currency_obj.compute(cursor, user,
- company.currency, unit_price, currency,
- round=False, context=context)
+ currency = currency_obj.browse(vals['currency'])
+ company = company_obj.browse(vals['company'])
+ unit_price = currency_obj.compute(company.currency,
+ unit_price, currency, round=False)
res['unit_price'] = unit_price
return res
- def on_change_uom(self, cursor, user, vals, context=None):
+ def on_change_uom(self, vals):
product_obj = self.pool.get('product.product')
uom_obj = self.pool.get('product.uom')
currency_obj = self.pool.get('currency.currency')
company_obj = self.pool.get('company.company')
location_obj = self.pool.get('stock.location')
- if context is None:
- context = {}
-
res = {
'unit_price': Decimal('0.0'),
}
if vals.get('product'):
- product = product_obj.browse(cursor, user, vals['product'],
- context=context)
+ product = product_obj.browse(vals['product'])
to_location = None
if vals.get('to_location'):
- to_location = location_obj.browse(cursor, user,
- vals['to_location'], context=context)
+ to_location = location_obj.browse(vals['to_location'])
if to_location and to_location.type == 'storage':
unit_price = product.cost_price
if vals.get('uom') and vals['uom'] != product.default_uom.id:
- uom = uom_obj.browse(cursor, user, vals['uom'],
- context=context)
- unit_price = uom_obj.compute_price(cursor, user,
- product.default_uom, unit_price, uom,
- context=context)
+ uom = uom_obj.browse(vals['uom'])
+ unit_price = uom_obj.compute_price(product.default_uom,
+ unit_price, uom)
if vals.get('currency') and vals.get('company'):
- currency = currency_obj.browse(cursor, user,
- vals['currency'], context=context)
- company = company_obj.browse(cursor, user,
- vals['company'], context=context)
- unit_price = currency_obj.compute(cursor, user,
- company.currency, unit_price, currency,
- round=False, context=context)
+ currency = currency_obj.browse(vals['currency'])
+ company = company_obj.browse(vals['company'])
+ unit_price = currency_obj.compute(company.currency,
+ unit_price, currency, round=False)
res['unit_price'] = unit_price
return res
- def default_unit_price_required(self, cursor, user, context=None):
- from_location = self.default_from_location(cursor, user,
- context=context)
- to_location = self.default_to_location(cursor,user,
- context=context)
+ def default_unit_price_required(self):
+ from_location = self.default_from_location()
+ to_location = self.default_to_location()
vals = {
'from_location': from_location,
'to_location': to_location,
}
- return self.on_change_with_unit_price_required(cursor, user,
- vals, context=context)
+ return self.on_change_with_unit_price_required(vals)
- def on_change_with_unit_price_required(self, cursor, user, vals,
- context=None):
+ def on_change_with_unit_price_required(self, vals):
location_obj = self.pool.get('stock.location')
if vals.get('from_location'):
- from_location = location_obj.browse(cursor, user,
- vals['from_location'], context=context)
+ from_location = location_obj.browse(vals['from_location'])
if from_location.type == 'supplier':
return True
if vals.get('to_location'):
- to_location = location_obj.browse(cursor, user,
- vals['to_location'], context=context)
+ to_location = location_obj.browse(vals['to_location'])
if to_location.type == 'customer':
return True
return False
- def get_unit_price_required(self, cursor, user, ids, name, context=None):
+ def get_unit_price_required(self, ids, name):
res = {}
- for move in self.browse(cursor, user, ids, context=context):
+ for move in self.browse(ids):
res[move.id] = False
if move.from_location.type == 'supplier':
res[move.id] = True
@@ -363,26 +319,26 @@ class Move(ModelSQL, ModelView):
res[move.id] = True
return res
- def check_product_type(self, cursor, user, ids):
- for move in self.browse(cursor, user, ids):
+ def check_product_type(self, ids):
+ for move in self.browse(ids):
if move.product.type == 'service':
return False
return True
- def get_rec_name(self, cursor, user, ids, name, context=None):
+ def get_rec_name(self, ids, name):
if not ids:
return {}
res = {}
- moves = self.browse(cursor, user, ids, context=context)
+ moves = self.browse(ids)
for m in moves:
res[m.id] = "%s%s %s" % (m.quantity, m.uom.symbol, m.product.rec_name)
return res
- def search_rec_name(self, cursor, user, name, clause, context=None):
+ def search_rec_name(self, name, clause):
return [('product',) + clause[1:]]
- def search(self, cursor, user, args, offset=0, limit=None, order=None,
- context=None, count=False, query_string=False):
+ def search(self, args, offset=0, limit=None, order=None, count=False,
+ query_string=False):
location_obj = self.pool.get('stock.location')
args = args[:]
@@ -396,8 +352,7 @@ class Move(ModelSQL, ModelView):
args[i][0] == 'to_location_warehouse':
location_id = False
if args[i][2]:
- location = location_obj.browse(cursor, user,
- args[i][2], context=context)
+ location = location_obj.browse(args[i][2])
if location.type == 'warehouse':
location_id = location.input_location.id
args[i] = ('to_location', args[i][1], location_id)
@@ -405,17 +360,14 @@ class Move(ModelSQL, ModelView):
process_args(args[i])
i += 1
process_args(args)
- return super(Move, self).search(cursor, user, args, offset=offset,
- limit=limit, order=order, context=context, count=count,
- query_string=query_string)
+ return super(Move, self).search(args, offset=offset, limit=limit,
+ order=order, count=count, query_string=query_string)
- def _update_product_cost_price(self, cursor, user, product_id, quantity, uom,
- unit_price, currency, company, context=None):
+ def _update_product_cost_price(self, product_id, quantity, uom, unit_price,
+ currency, company):
"""
Update the cost price on the given product
- :param cursor: the database cursor
- :param user: the user id
:param product_id: the id of the product
:param quantity: the quantity of the product, positive if incoming and
negative if outgoing
@@ -423,7 +375,6 @@ class Move(ModelSQL, ModelView):
:param unit_price: the unit price of the product
:param currency: the currency of the unit price
:param company: the company id ot a BrowseRecord of the company
- :param context: the context
"""
uom_obj = self.pool.get('product.uom')
product_obj = self.pool.get('product.product')
@@ -433,31 +384,28 @@ class Move(ModelSQL, ModelView):
company_obj = self.pool.get('company.company')
date_obj = self.pool.get('ir.date')
- if context is None:
- context = {}
-
if isinstance(uom, (int, long)):
- uom = uom_obj.browse(cursor, user, uom, context=context)
+ uom = uom_obj.browse(uom)
if isinstance(company, (int, long)):
- company = company_obj.browse(cursor, user, company, context=context)
+ company = company_obj.browse(company)
- ctx = context and context.copy() or {}
- ctx['locations'] = location_obj.search(
- cursor, user, [('type', '=', 'storage')], context=context)
- ctx['stock_date_end'] = date_obj.today(cursor, user, context=context)
- product = product_obj.browse(cursor, user, product_id, context=ctx)
- qty = uom_obj.compute_qty(
- cursor, user, uom, quantity, product.default_uom, context=context)
+ context = {}
+ context['locations'] = location_obj.search([
+ ('type', '=', 'storage'),
+ ])
+ context['stock_date_end'] = date_obj.today()
+ with Transaction().set_context(context):
+ product = product_obj.browse(product_id)
+ qty = uom_obj.compute_qty(uom, quantity, product.default_uom)
qty = Decimal(str(qty))
product_qty = Decimal(str(product.template.quantity))
# convert wrt currency
- unit_price = currency_obj.compute(
- cursor, user, currency, unit_price, company.currency,
- round=False, context=context)
+ unit_price = currency_obj.compute(currency, unit_price,
+ company.currency, round=False)
# convert wrt to the uom
- unit_price = uom_obj.compute_price(
- cursor, user, uom, unit_price, product.default_uom, context=context)
+ unit_price = uom_obj.compute_price(uom, unit_price,
+ product.default_uom)
if product_qty + qty != Decimal('0.0'):
new_cost_price = (
(product.cost_price * product_qty) + (unit_price * qty)
@@ -472,13 +420,12 @@ class Move(ModelSQL, ModelView):
new_cost_price = new_cost_price.quantize(
Decimal(str(10.0**-digits[1])))
- ctx = context.copy()
- ctx['user'] = user
- product_obj.write(
- cursor, 0, product.id, {'cost_price': new_cost_price},
- context=ctx)
+ with Transaction().set_user(0, set_context=True):
+ product_obj.write(product.id, {
+ 'cost_price': new_cost_price,
+ })
- def create(self, cursor, user, vals, context=None):
+ def create(self, vals):
location_obj = self.pool.get('stock.location')
product_obj = self.pool.get('product.product')
date_obj = self.pool.get('ir.date')
@@ -487,125 +434,101 @@ class Move(ModelSQL, ModelView):
if vals.get('state') == 'done':
if not vals.get('effective_date'):
- vals['effective_date'] = date_obj.today(cursor, user,
- context=context)
- from_location = location_obj.browse(cursor, user,
- vals['from_location'], context=context)
- to_location = location_obj.browse(cursor, user,
- vals['to_location'], context=context)
- product = product_obj.browse(cursor, user, vals['product'],
- context=context)
+ vals['effective_date'] = date_obj.today()
+ from_location = location_obj.browse(vals['from_location'])
+ to_location = location_obj.browse(vals['to_location'])
+ product = product_obj.browse(vals['product'])
if from_location.type == 'supplier' \
and product.cost_price_method == 'average':
- self._update_product_cost_price(
- cursor, user, vals['product'], vals['quantity'],
- vals['uom'], vals['unit_price'], vals['currency'],
- vals['company'], context=context)
+ self._update_product_cost_price(vals['product'],
+ vals['quantity'], vals['uom'], vals['unit_price'],
+ vals['currency'], vals['company'])
if to_location.type == 'supplier' \
and product.cost_price_method == 'average':
- self._update_product_cost_price(
- cursor, user, vals['product'], -vals['quantity'],
- vals['uom'], vals['unit_price'], vals['currency'],
- vals['company'], context=context)
+ self._update_product_cost_price(vals['product'],
+ -vals['quantity'], vals['uom'], vals['unit_price'],
+ vals['currency'], vals['company'])
if not vals.get('cost_price'):
# Re-read product to get the updated cost_price
- product = product_obj.browse(cursor, user, vals['product'],
- context=context)
+ product = product_obj.browse(vals['product'])
vals['cost_price'] = product.cost_price
elif vals.get('state') == 'assigned':
if not vals.get('effective_date'):
- vals['effective_date'] = date_obj.today(cursor, user,
- context=context)
- return super(Move, self).create(cursor, user, vals, context=context)
+ vals['effective_date'] = date_obj.today()
+ return super(Move, self).create(vals)
- def write(self, cursor, user, ids, vals, context=None):
+ def write(self, ids, vals):
date_obj = self.pool.get('ir.date')
- if context is None:
- context = {}
-
if isinstance(ids, (int, long)):
ids = [ids]
if 'state' in vals:
- for move in self.browse(cursor, user, ids, context=context):
+ for move in self.browse(ids):
if vals['state'] == 'cancel':
vals['effective_date'] = False
if move.from_location.type == 'supplier' \
and move.state != 'cancel' \
and move.product.cost_price_method == 'average':
- self._update_product_cost_price(
- cursor, user, move.product.id, -move.quantity,
- move.uom, move.unit_price, move.currency,
- move.company, context=context)
+ self._update_product_cost_price(move.product.id,
+ -move.quantity, move.uom, move.unit_price,
+ move.currency, move.company)
if move.to_location.type == 'supplier' \
and move.state != 'cancel' \
and move.product.cost_price_method == 'average':
- self._update_product_cost_price(
- cursor, user, move.product.id, move.quantity,
- move.uom, move.unit_price, move.currency,
- move.company, context=context)
+ self._update_product_cost_price(move.product.id,
+ move.quantity, move.uom, move.unit_price,
+ move.currency, move.company)
elif vals['state'] == 'draft':
if move.state == 'done':
- self.raise_user_error(cursor, 'set_state_draft',
- context=context)
+ self.raise_user_error('set_state_draft')
elif vals['state'] == 'assigned':
if move.state in ('cancel', 'done'):
- self.raise_user_error(cursor, 'set_state_assigned',
- context=context)
- vals['effective_date'] = date_obj.today(cursor, user,
- context=context)
+ self.raise_user_error('set_state_assigned')
+ vals['effective_date'] = date_obj.today()
elif vals['state'] == 'done':
if move.state in ('cancel'):
- self.raise_user_error(cursor, 'set_state_done',
- context=context)
- vals['effective_date'] = date_obj.today(cursor, user,
- context=context)
+ self.raise_user_error('set_state_done')
+ vals['effective_date'] = date_obj.today()
if move.from_location.type == 'supplier' \
and move.state != 'done' \
and move.product.cost_price_method == 'average':
- self._update_product_cost_price(
- cursor, user, move.product.id, move.quantity,
- move.uom, move.unit_price, move.currency,
- move.company, context=context)
+ self._update_product_cost_price(move.product.id,
+ move.quantity, move.uom, move.unit_price,
+ move.currency, move.company)
if move.to_location.type == 'supplier' \
and move.state != 'done' \
and move.product.cost_price_method == 'average':
- self._update_product_cost_price(
- cursor, user, move.product.id, -move.quantity,
- move.uom, move.unit_price, move.currency,
- move.company, context=context)
- res = super(Move, self).write(cursor, user, ids, vals, context=context)
+ self._update_product_cost_price( move.product.id,
+ -move.quantity, move.uom, move.unit_price,
+ move.currency, move.company)
+ res = super(Move, self).write(ids, vals)
if vals.get('state', '') == 'done':
#Re-read the move because cost_price has been updated
- for move in self.browse(cursor, user, ids, context=context):
+ for move in self.browse(ids):
if not move.cost_price:
- self.write(cursor, user, move.id, {
+ self.write(move.id, {
'cost_price': move.product.cost_price,
- }, context=context)
+ })
return res
- def delete(self, cursor, user, ids, context=None):
- for move in self.browse(cursor, user, ids, context=context):
+ def delete(self, ids):
+ for move in self.browse(ids):
if move.state not in ('draft', 'cancel'):
- self.raise_user_error(cursor, 'del_draft_cancel',
- context=context)
- return super(Move, self).delete(cursor, user, ids, context=context)
+ self.raise_user_error('del_draft_cancel')
+ return super(Move, self).delete(ids)
- def pick_product(self, cursor, user, move, location_quantities, context=None):
+ def pick_product(self, move, location_quantities):
"""
Pick the product across the location. Naive (fast) implementation.
- :param cursor: the database cursor
- :param user: the user id
:param move: a BrowseRecord of stock.move
:param location_quantities: a list of tuple (location, available_qty)
where location is a BrowseRecord of stock.location.
- :param context: the context
:return: a list of tuple (location, quantity) for quantities
that can be picked
"""
@@ -627,15 +550,12 @@ class Move(ModelSQL, ModelView):
return to_pick
return to_pick
- def assign_try(self, cursor, user, moves, context=None):
+ def assign_try(self, moves):
'''
Try to assign moves.
It will split the moves to assign as much possible.
- :param cursor: the database cursor
- :param user: the user id
:param moves: a BrowseRecordList of stock.move to assign
- :param context: the context
:return: True if succeed or False if not
'''
product_obj = self.pool.get('product.product')
@@ -643,22 +563,16 @@ class Move(ModelSQL, ModelView):
date_obj = self.pool.get('ir.date')
location_obj = self.pool.get('stock.location')
- if context is None:
- context = {}
-
- cursor.lock(self._table)
+ Transaction().cursor.lock(self._table)
- local_ctx = context and context.copy() or {}
- local_ctx['stock_date_end'] = date_obj.today(cursor, user,
- context=context)
- local_ctx['stock_assign'] = True
- location_ids = location_obj.search(cursor, user, [
+ location_ids = location_obj.search([
('parent', 'child_of', [x.from_location.id for x in moves]),
- ], context=context)
- pbl = product_obj.products_by_location(cursor, user,
- location_ids=location_ids,
- product_ids=[m.product.id for m in moves],
- context=local_ctx)
+ ])
+ with Transaction().set_context(
+ stock_date_end=date_obj.today(),
+ stock_assign=True):
+ pbl = product_obj.products_by_location(location_ids=location_ids,
+ product_ids=[m.product.id for m in moves])
success = True
for move in moves:
@@ -666,19 +580,17 @@ class Move(ModelSQL, ModelView):
continue
to_location = move.to_location
location_qties = {}
- child_ids = location_obj.search(cursor, user, [
+ child_ids = location_obj.search([
('parent', 'child_of', [move.from_location.id]),
- ], context=context)
- for location in location_obj.browse(cursor, user, child_ids,
- context=context):
+ ])
+ for location in location_obj.browse(child_ids):
if (location.id, move.product.id) in pbl:
location_qties[location] = uom_obj.compute_qty(
- cursor, user, move.product.default_uom,
- pbl[(location.id, move.product.id)], move.uom,
- round=False, context=context)
+ move.product.default_uom,
+ pbl[(location.id, move.product.id)], move.uom,
+ round=False)
- to_pick = self.pick_product(
- cursor, user, move, location_qties, context=context)
+ to_pick = self.pick_product(move, location_qties)
picked_qties = 0.0
for _, qty in to_pick:
@@ -687,9 +599,9 @@ class Move(ModelSQL, ModelView):
if picked_qties < move.quantity:
success = False
first = False
- self.write(cursor, user, move.id, {
+ self.write(move.id, {
'quantity': move.quantity - picked_qties,
- }, context=context)
+ })
else:
first = True
for from_location, qty in to_pick:
@@ -699,15 +611,13 @@ class Move(ModelSQL, ModelView):
'state': 'assigned',
}
if first:
- self.write(cursor, user, move.id, values, context=context)
+ self.write(move.id, values)
first = False
else:
- move_id = self.copy(cursor, user, move.id, default=values,
- context=context)
+ move_id = self.copy(move.id, default=values)
- qty_default_uom = uom_obj.compute_qty(
- cursor, user, move.uom, qty, move.product.default_uom,
- round=False, context=context)
+ qty_default_uom = uom_obj.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
diff --git a/product.py b/product.py
index df2aaba..b8688f0 100644
--- a/product.py
+++ b/product.py
@@ -1,9 +1,11 @@
#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 __future__ import with_statement
+import datetime
from trytond.model import ModelView, ModelSQL, fields
from trytond.wizard import Wizard
from trytond.pyson import PYSONEncoder
-import datetime
+from trytond.transaction import Transaction
from trytond.tools import safe_eval
@@ -14,12 +16,12 @@ class Template(ModelSQL, ModelView):
forecast_quantity = fields.Function(fields.Float('Forecast Quantity'),
'get_quantity')
- def get_quantity(self, cursor, user, ids, name, context=None):
+ def get_quantity(self, ids, name):
res = {}
if name not in ('quantity', 'forecast_quantity'):
raise Exception('Bad argument')
- for template in self.browse(cursor, user, ids, context=context):
+ for template in self.browse(ids):
res[template.id] = 0.0
for product in template.products:
res[template.id] += product[name]
@@ -32,29 +34,27 @@ class Template(ModelSQL, ModelView):
'a product which is associated to stock moves.',
})
- def write(self, cursor, user, ids, vals, context=None):
+ def write(self, ids, vals):
move_obj = self.pool.get('stock.move')
+ cursor = Transaction().cursor
if not vals.get("default_uom"):
- return super(Template, self).write(cursor, user, ids, vals,
- context=context)
+ return super(Template, self).write(ids, vals)
for i in range(0, len(ids), cursor.IN_MAX):
sub_ids = ids[i:i + cursor.IN_MAX]
- res = self.search(cursor, user, [
+ res = self.search([
('id', 'in', sub_ids),
('default_uom', '!=', vals['default_uom']),
- ], context=context)
+ ])
if res:
- res = move_obj.search(cursor, user, [
+ res = move_obj.search([
('product.template', 'in', res),
- ], limit=1, context=context)
+ ], limit=1)
if res:
- self.raise_user_error(cursor, 'change_default_uom',
- context=context)
+ self.raise_user_error('change_default_uom')
- return super(Template, self).write(cursor, user, ids, vals,
- context=context)
+ return super(Template, self).write(ids, vals)
Template()
@@ -67,32 +67,30 @@ class Product(ModelSQL, ModelView):
forecast_quantity = fields.Function(fields.Float('Forecast Quantity'),
'get_quantity', searcher='search_quantity')
- def get_quantity(self, cursor, user, ids, name, context=None):
+ def get_quantity(self, ids, name):
date_obj = self.pool.get('ir.date')
- if not (context and context.get('locations')):
- return dict([(id, 0.0) for id in ids])
+ if not Transaction().context.get('locations'):
+ return dict((id, 0.0) for id in ids)
- if name == 'quantity' and \
- context.get('stock_date_end') and \
- context.get('stock_date_end') > \
- date_obj.today(cursor, user, context=context):
-
- context = context.copy()
- context['stock_date_end'] = date_obj.today(
- cursor, user, context=context)
+ context = {}
+ if (name == 'quantity'
+ and Transaction().context.get('stock_date_end')
+ and Transaction().context.get('stock_date_end') >
+ date_obj.today()):
+ context['stock_date_end'] = date_obj.today()
if name == 'forecast_quantity':
- context = context.copy()
context['forecast'] = True
- if not context.get('stock_date_end'):
+ if not Transaction().context.get('stock_date_end'):
context['stock_date_end'] = datetime.date.max
- pbl = self.products_by_location(cursor, user,
- location_ids=context['locations'], product_ids=ids,
- with_childs=True, context=context)
+ with Transaction().set_context(context):
+ pbl = self.products_by_location(
+ location_ids=Transaction().context['locations'],
+ product_ids=ids, with_childs=True)
res = {}.fromkeys(ids, 0.0)
- for location in context['locations']:
+ for location in Transaction().context['locations']:
for product in ids:
res[product] += pbl.get((location, product), 0.0)
return res
@@ -108,30 +106,28 @@ class Product(ModelSQL, ModelView):
operator= "=="
return (safe_eval(str(value) + operator + str(operand)))
- def search_quantity(self, cursor, user, name, domain=None, context=None):
+ def search_quantity(self, name, domain=None):
date_obj = self.pool.get('ir.date')
- if not (context and context.get('locations') and domain):
+ if not (Transaction().context.get('locations') and domain):
return []
- if name == 'quantity' and \
- context.get('stock_date_end') and \
- context.get('stock_date_end') > \
- date_obj.today(cursor, user, context=context):
-
- context = context.copy()
- context['stock_date_end'] = date_obj.today(
- cursor, user, context=context)
+ context = {}
+ if (name == 'quantity'
+ and Transaction().context.get('stock_date_end')
+ and Transaction().context.get('stock_date_end') >
+ date_obj.today()):
+ context['stock_date_end'] = date_obj.today()
if name == 'forecast_quantity':
- context = context.copy()
context['forecast'] = True
- if not context.get('stock_date_end'):
+ if not Transaction().context.get('stock_date_end'):
context['stock_date_end'] = datetime.date.max
- pbl = self.products_by_location(
- cursor, user, location_ids=context['locations'], with_childs=True,
- skip_zero=False, context=context).iteritems()
+ with Transaction().set_context(context):
+ pbl = self.products_by_location(
+ location_ids=Transaction().context['locations'],
+ with_childs=True, skip_zero=False).iteritems()
processed_lines = []
for (location, product), quantity in pbl:
@@ -145,20 +141,13 @@ class Product(ModelSQL, ModelView):
- def products_by_location(self, cursor, user, location_ids,
- product_ids=None, with_childs=False, skip_zero=True, context=None):
+ def products_by_location(self, location_ids, product_ids=None,
+ with_childs=False, skip_zero=True):
"""
Compute for each location and product the stock quantity in the default
uom of the product.
- :param cursor: the database cursor
- :param user: the user id
- :param location_ids: the ids of locations
- :param product_ids: the ids of the products
- if None all products are used
- :param with_childs: a boolean to compute also for child locations
- :param skip_zero: a boolean to list also items with zero quantity
- :param context: the context with keys:
+ The context with keys:
stock_date_end: if set the date of the stock computation.
stock_date_start: if set return the delta of the stock
between the two dates, (ignored if stock_date_end is
@@ -170,6 +159,12 @@ class Product(ModelSQL, ModelView):
stock_skip_warehouse: if set, quantities on a warehouse are no
more quantities of all child locations but quantities of the
storage zone.
+
+ :param location_ids: the ids of locations
+ :param product_ids: the ids of the products
+ if None all products are used
+ :param with_childs: a boolean to compute also for child locations
+ :param skip_zero: a boolean to list also items with zero quantity
:return: a dictionary with (location id, product id) as key
and quantity as value
"""
@@ -179,22 +174,21 @@ class Product(ModelSQL, ModelView):
location_obj = self.pool.get('stock.location')
date_obj = self.pool.get('ir.date')
- today = date_obj.today(cursor, user, context=context)
+ today = date_obj.today()
if not location_ids:
return {}
- if context is None:
- context= {}
+ cursor = Transaction().cursor
+ context = Transaction().context.copy()
# 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.
location_ids = set(location_ids)
storage_to_remove = set()
wh_to_add = {}
- for location in location_obj.browse(
- cursor, user, location_ids, context=context):
- if location.type == 'warehouse' \
- and context.get('stock_skip_warehouse'):
+ for location in location_obj.browse(location_ids):
+ if (location.type == 'warehouse'
+ and Transaction().context.get('stock_skip_warehouse')):
location_ids.remove(location.id)
if location.storage_location.id not in location_ids:
storage_to_remove.add(location.storage_location.id)
@@ -202,17 +196,15 @@ class Product(ModelSQL, ModelView):
wh_to_add[location.id] = location.storage_location.id
location_ids = list(location_ids)
- move_query, move_val = rule_obj.domain_get(cursor, user, 'stock.move',
- context=context)
+ move_query, move_val = rule_obj.domain_get('stock.move')
if not context.get('stock_date_end'):
- context = context.copy()
context['stock_date_end'] = datetime.date.max
# date end in the past or today: filter on state done
- if context['stock_date_end'] < today or \
- (context['stock_date_end'] == today \
- and not context.get('forecast')):
+ if (context['stock_date_end'] < today
+ or (context['stock_date_end'] == today
+ and not context.get('forecast'))):
state_date_clause = \
'('\
'(state in (%s, %s)) '\
@@ -360,9 +352,9 @@ class Product(ModelSQL, ModelView):
])
if with_childs:
- query, args = location_obj.search(cursor, user, [
+ query, args = location_obj.search([
('parent', 'child_of', location_ids),
- ], context=context, query_string=True, order=[])
+ ], query_string=True, order=[])
where_clause = " IN (" + query + ") "
where_vals = args
else:
@@ -443,27 +435,24 @@ class Product(ModelSQL, ModelView):
if line[position] not in id_list:
id_list.append(line[position])
- uom_by_id = dict([(x.id, x) for x in uom_obj.browse(
- cursor, user, uom_ids, context=context)])
+ uom_by_id = dict((x.id, x) for x in uom_obj.browse(uom_ids))
default_uom = dict((x.id, x.default_uom) for x in product_obj.browse(
- cursor, user, product_ids or res_product_ids, context=context))
+ product_ids or res_product_ids))
for line in raw_lines:
location, product, uom, quantity = line
key = (location, product)
res.setdefault(key, 0.0)
- res[key] += uom_obj.compute_qty(cursor, user, uom_by_id[uom],
- quantity, default_uom[product], round=False,
- context=context)
+ res[key] += uom_obj.compute_qty(uom_by_id[uom], quantity,
+ default_uom[product], round=False)
# Propagate quantities on from child locations to their parents
if with_childs:
# Fetch all child locations
- all_location_ids = location_obj.search(
- cursor, user, [('parent', 'child_of', location_ids)],
- context=context)
- locations = location_obj.browse(cursor, user, all_location_ids,
- context=context)
+ all_location_ids = location_obj.search([
+ ('parent', 'child_of', location_ids),
+ ])
+ locations = location_obj.browse(all_location_ids)
# Generate a set of locations without childs and a dict
# giving the parent of each location.
leafs = set(all_location_ids)
@@ -493,9 +482,8 @@ class Product(ModelSQL, ModelView):
# Round quantities
for location, product in res:
key = (location, product)
- res[key] = uom_obj.compute_qty(cursor, user, default_uom[product],
- res[key], default_uom[product], round=True,
- context=context)
+ res[key] = uom_obj.compute_qty(default_uom[product], res[key],
+ default_uom[product], round=True)
# Complete result with missing products if asked
if not skip_zero:
@@ -503,8 +491,7 @@ class Product(ModelSQL, ModelView):
if product_ids:
all_product_ids = product_ids
else:
- all_product_ids = self.pool.get("product.product").search(
- cursor, user, [], context=context)
+ all_product_ids = self.pool.get("product.product").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:
@@ -520,13 +507,13 @@ class Product(ModelSQL, ModelView):
return res
- def view_header_get(self, cursor, user, value, view_type='form',
- context=None):
- if not context.get('locations'):
+ def view_header_get(self, value, view_type='form'):
+ value = super(Product, self).view_header_get(value,
+ view_type=view_type)
+ if not Transaction().context.get('locations'):
return value
location_obj = self.pool.get('stock.location')
- locations = location_obj.browse(cursor, user, context.get('locations'),
- context=context)
+ locations = location_obj.browse(Transaction().context.get('locations'))
return value + " (" + ",".join(l.name for l in locations) + ")"
Product()
@@ -541,9 +528,9 @@ class ChooseStockDateInit(ModelView):
'* An empty value is an infinite date in the future.\n'\
'* A date in the past will provide historical values.')
- def default_forecast_date(self, cursor, user, context=None):
+ def default_forecast_date(self):
date_obj = self.pool.get('ir.date')
- return date_obj.today(cursor, user, context=context)
+ return date_obj.today()
ChooseStockDateInit()
@@ -570,20 +557,20 @@ class OpenLocation(Wizard):
},
}
- def _action_open_location(self, cursor, user, data, context=None):
+ def _action_open_location(self, data):
model_data_obj = self.pool.get('ir.model.data')
act_window_obj = self.pool.get('ir.action.act_window')
- act_window_id = model_data_obj.get_id(cursor, user, 'stock',
- 'act_location_quantity_tree', context=context)
- res = act_window_obj.read(cursor, user, act_window_id, context=context)
+ act_window_id = model_data_obj.get_id('stock',
+ 'act_location_quantity_tree')
+ res = act_window_obj.read(act_window_id)
- ctx = {}
- ctx['product'] = data['id']
+ context = {}
+ context['product'] = data['id']
if data['form']['forecast_date']:
- ctx['stock_date_end'] = data['form']['forecast_date']
+ context['stock_date_end'] = data['form']['forecast_date']
else:
- ctx['stock_date_end'] = datetime.date.max
- res['pyson_context'] = PYSONEncoder().encode(ctx)
+ context['stock_date_end'] = datetime.date.max
+ res['pyson_context'] = PYSONEncoder().encode(context)
return res
diff --git a/shipment.py b/shipment.py
index acb4acf..46e30d1 100644
--- a/shipment.py
+++ b/shipment.py
@@ -1,11 +1,12 @@
#This file is part of Tryton. The COPYRIGHT file at the top level of
#this repository contains the full copyright notices and license terms.
-"Shipment"
+from __future__ import with_statement
from trytond.model import ModelWorkflow, ModelView, ModelSQL, fields
from trytond.modules.company import CompanyReport
from trytond.wizard import Wizard
from trytond.backend import TableHandler
from trytond.pyson import Eval, Not, Equal, If, Or, And, Bool, In
+from trytond.transaction import Transaction
STATES = {
'readonly': "state in ('cancel', 'done')",
@@ -86,7 +87,8 @@ class ShipmentIn(ModelWorkflow, ModelSQL, ModelView):
'have the warehouse input location as source location!',
})
- def init(self, cursor, module_name):
+ def init(self, module_name):
+ cursor = Transaction().cursor
# Migration from 1.2: packing renamed into shipment
cursor.execute("UPDATE ir_model_data "\
"SET fs_id = REPLACE(fs_id, 'packing', 'shipment') "\
@@ -123,47 +125,45 @@ class ShipmentIn(ModelWorkflow, ModelSQL, ModelView):
for field in ('code', 'reference'):
table.index_action(field, action='remove', table=old_table)
- super(ShipmentIn, self).init(cursor, module_name)
+ super(ShipmentIn, self).init(module_name)
# Add index on create_date
table = TableHandler(cursor, self, module_name)
table.index_action('create_date', action='add')
- def default_state(self, cursor, user, context=None):
+ def default_state(self):
return 'draft'
- def default_warehouse(self, cursor, user, context=None):
+ def default_warehouse(self):
location_obj = self.pool.get('stock.location')
- location_ids = location_obj.search(cursor, user,
- self.warehouse.domain, context=context)
+ location_ids = location_obj.search(self.warehouse.domain)
if len(location_ids) == 1:
return location_ids[0]
return False
- def on_change_supplier(self, cursor, user, values, context=None):
+ def on_change_supplier(self, values):
if not values.get('supplier'):
return {'contact_address': False}
party_obj = self.pool.get("party.party")
- address_id = party_obj.address_get(cursor, user, values['supplier'],
- context=context)
+ address_id = party_obj.address_get(values['supplier'])
return {'contact_address': address_id}
- def get_incoming_moves(self, cursor, user, ids, name, context=None):
+ def get_incoming_moves(self, ids, name):
res = {}
- for shipment in self.browse(cursor, user, ids, context=context):
+ for shipment in self.browse(ids):
res[shipment.id] = []
for move in shipment.moves:
if move.to_location.id == shipment.warehouse.input_location.id:
res[shipment.id].append(move.id)
return res
- def set_incoming_moves(self, cursor, user, ids, name, value, context=None):
+ def set_incoming_moves(self, ids, name, value):
move_obj = self.pool.get('stock.move')
if not value:
return
- shipments = self.browse(cursor, user, ids, context=context)
+ shipments = self.browse(ids)
move_ids = []
for act in value:
if act[0] == 'create':
@@ -171,17 +171,13 @@ class ShipmentIn(ModelWorkflow, ModelSQL, ModelView):
for shipment in shipments:
if act[1]['to_location'] != \
shipment.warehouse.input_location.id:
- self.raise_user_error(cursor,
- 'incoming_move_input_dest',
- context=context)
+ self.raise_user_error('incoming_move_input_dest')
elif act[0] == 'write':
if 'to_location' in act[2]:
for shipment in shipments:
if act[2]['to_location'] != \
shipment.warehouse.input_location.id:
- self.raise_user_error(cursor,
- 'incoming_move_input_dest',
- context=context)
+ self.raise_user_error('incoming_move_input_dest')
elif act[0] == 'add':
if isinstance(act[1], (int, long)):
move_ids.append(act[1])
@@ -190,35 +186,33 @@ class ShipmentIn(ModelWorkflow, ModelSQL, ModelView):
elif act[0] == 'set':
move_ids.extend(act[1])
- moves = move_obj.browse(cursor, user, move_ids, context=context)
+ moves = move_obj.browse(move_ids)
for move in moves:
for shipment in shipments:
if move.to_location.id != \
shipment.warehouse.input_location.id:
- self.raise_user_error(cursor, 'incoming_move_input_dest',
- context=context)
+ self.raise_user_error('incoming_move_input_dest')
- self.write(cursor, user, ids, {
+ self.write(ids, {
'moves': value,
- }, context=context)
+ })
- def get_inventory_moves(self, cursor, user, ids, name, context=None):
+ def get_inventory_moves(self, ids, name):
res = {}
- for shipment in self.browse(cursor, user, ids, context=context):
+ for shipment in self.browse(ids):
res[shipment.id] = []
for move in shipment.moves:
if move.from_location.id == shipment.warehouse.input_location.id:
res[shipment.id].append(move.id)
return res
- def set_inventory_moves(self, cursor, user, ids, name, value,
- context=None):
+ def set_inventory_moves(self, ids, name, value):
move_obj = self.pool.get('stock.move')
if not value:
return
- shipments = self.browse(cursor, user, ids, context=context)
+ shipments = self.browse(ids)
move_ids = []
for act in value:
if act[0] == 'create':
@@ -226,17 +220,13 @@ class ShipmentIn(ModelWorkflow, ModelSQL, ModelView):
for shipment in shipments:
if act[1]['from_location'] != \
shipment.warehouse.input_location.id:
- self.raise_user_error(cursor,
- 'inventory_move_input_source',
- context=context)
+ self.raise_user_error('inventory_move_input_source')
elif act[0] == 'write':
if 'from_location' in act[2]:
for shipment in shipments:
if act[2]['from_location'] != \
shipment.warehouse.input_location.id:
- self.raise_user_error(cursor,
- 'inventory_move_input_source',
- context=context)
+ self.raise_user_error('inventory_move_input_source')
elif act[0] == 'add':
if isinstance(act[1], (int, long)):
move_ids.append(act[1])
@@ -245,92 +235,85 @@ class ShipmentIn(ModelWorkflow, ModelSQL, ModelView):
elif act[0] == 'set':
move_ids.extend(act[1])
- moves = move_obj.browse(cursor, user, move_ids, context=context)
+ moves = move_obj.browse(move_ids)
for move in moves:
for shipment in shipments:
if move.from_location.id != \
shipment.warehouse.input_location.id:
- self.raise_user_error(cursor,
- 'inventory_move_input_source', context=context)
+ self.raise_user_error('inventory_move_input_source')
- self.write(cursor, user, ids, {
+ self.write(ids, {
'moves': value,
- }, context=context)
+ })
- def set_state_done(self, cursor, user, shipment_id, context=None):
+ def set_state_done(self, shipment_id):
move_obj = self.pool.get('stock.move')
date_obj = self.pool.get('ir.date')
- shipment = self.browse(cursor, user, shipment_id, context=context)
- move_obj.write(
- cursor, user,
- [m.id for m in shipment.inventory_moves \
- if m.state not in ('done', 'cancel')],
- {'state': 'done'}, context)
- self.write(cursor, user, shipment_id,{
+ shipment = self.browse(shipment_id)
+ move_obj.write([m.id for m in shipment.inventory_moves
+ if m.state not in ('done', 'cancel')], {
+ 'state': 'done',
+ })
+ self.write(shipment_id,{
'state': 'done',
- 'effective_date': date_obj.today(cursor, user, context=context),
- }, context=context)
+ 'effective_date': date_obj.today(),
+ })
- def set_state_cancel(self, cursor, user, shipment_id, context=None):
+ def set_state_cancel(self, shipment_id):
move_obj = self.pool.get('stock.move')
- shipment = self.browse(cursor, user, shipment_id, context=context)
- move_obj.write(
- cursor, user,
- [m.id for m in shipment.incoming_moves \
- if m.state != 'cancel'] +\
- [m.id for m in shipment.inventory_moves \
- if m.state != 'cancel'],
- {'state': 'cancel'}, context)
- self.write(cursor, user, shipment_id, {'state': 'cancel'},
- context=context)
-
- def set_state_received(self, cursor, user, shipment_id, context=None):
+ shipment = self.browse(shipment_id)
+ move_obj.write([m.id for m in shipment.incoming_moves
+ if m.state != 'cancel'] +
+ [m.id for m in shipment.inventory_moves
+ if m.state != 'cancel'], {
+ 'state': 'cancel',
+ })
+ self.write(shipment_id, {
+ 'state': 'cancel',
+ })
+
+ def set_state_received(self, shipment_id):
move_obj = self.pool.get('stock.move')
- shipment = self.browse(cursor, user, shipment_id, context=context)
- move_obj.write(
- cursor, user,
- [m.id for m in shipment.incoming_moves \
- if m.state not in ('done', 'cancel')],
- {'state': 'done'}, context=context)
- self.write(cursor, user, shipment_id, {
+ shipment = self.browse(shipment_id)
+ move_obj.write([m.id for m in shipment.incoming_moves
+ if m.state not in ('done', 'cancel')], {
+ 'state': 'done',
+ })
+ self.write(shipment_id, {
'state': 'received'
- }, context=context)
+ })
- def set_state_draft(self, cursor, user, shipment_id, context=None):
+ def set_state_draft(self, shipment_id):
move_obj = self.pool.get('stock.move')
- shipment = self.browse(cursor, user, shipment_id, context=context)
- move_obj.write(cursor, user, [m.id for m in shipment.incoming_moves
+ shipment = self.browse(shipment_id)
+ move_obj.write([m.id for m in shipment.incoming_moves
if m.state != 'draft'], {
'state': 'draft',
- }, context=context)
- move_obj.delete(cursor, user,
- [m.id for m in shipment.inventory_moves], context=context)
- self.write(cursor, user, shipment_id, {
+ })
+ move_obj.delete([m.id for m in shipment.inventory_moves])
+ self.write(shipment_id, {
'state': 'draft',
- }, context=context)
+ })
- def create(self, cursor, user, values, context=None):
+ def create(self, values):
sequence_obj = self.pool.get('ir.sequence')
config_obj = self.pool.get('stock.configuration')
values = values.copy()
- config = config_obj.browse(cursor, user, 1, context=context)
- values['code'] = sequence_obj.get_id(cursor, user,
- config.shipment_in_sequence.id, context=context)
- return super(ShipmentIn, self).create(
- cursor, user, values, context=context)
+ config = config_obj.browse(1)
+ values['code'] = sequence_obj.get_id(config.shipment_in_sequence.id)
+ return super(ShipmentIn, self).create(values)
- def copy(self, cursor, user, ids, default=None, context=None):
+ def copy(self, ids, default=None):
if default is None:
default = {}
default = default.copy()
default['inventory_moves']= False
default['incoming_moves']= False
- return super(ShipmentIn, self).copy(cursor, user, ids,
- default=default, context=context)
+ return super(ShipmentIn, self).copy(ids, default=default)
- def _get_inventory_moves(self, cursor, user, incoming_move, context=None):
+ def _get_inventory_moves(self, incoming_move):
res = {}
if incoming_move.quantity <= 0.0:
return None
@@ -347,18 +330,17 @@ class ShipmentIn(ModelWorkflow, ModelSQL, ModelView):
res['company'] = incoming_move.company.id
return res
- def create_inventory_moves(self, cursor, user, shipment_id, context=None):
- shipment = self.browse(cursor, user, shipment_id, context=context)
+ def create_inventory_moves(self, shipment_id):
+ shipment = self.browse(shipment_id)
for incoming_move in shipment.incoming_moves:
- vals = self._get_inventory_moves(cursor, user, incoming_move,
- context=context)
+ vals = self._get_inventory_moves(incoming_move)
if vals:
- self.write(cursor, user, shipment.id, {
- 'inventory_moves': [('create', vals)]
- }, context=context)
+ self.write(shipment.id, {
+ 'inventory_moves': [('create', vals)],
+ })
- def button_draft(self, cursor, user, ids, context=None):
- self.workflow_trigger_create(cursor, user, ids, context=context)
+ def button_draft(self, ids):
+ self.workflow_trigger_create(ids)
return True
ShipmentIn()
@@ -409,14 +391,15 @@ class ShipmentInReturn(ModelWorkflow, ModelSQL, ModelView):
('done', 'Done'),
], 'State', readonly=True)
- def default_state(self, cursor, user, context=None):
+ def default_state(self):
return 'draft'
- def button_draft(self, cursor, user, ids, context=None):
- self.workflow_trigger_create(cursor, user, ids, context=context)
+ def button_draft(self, ids):
+ self.workflow_trigger_create(ids)
return True
- def init(self, cursor, module_name):
+ def init(self, module_name):
+ cursor = Transaction().cursor
# Migration from 1.2: packing renamed into shipment
cursor.execute("UPDATE wkf "\
"SET model = 'stock.shipment.in.return' "\
@@ -438,7 +421,7 @@ class ShipmentInReturn(ModelWorkflow, ModelSQL, ModelView):
for field in ('code', 'reference'):
table.index_action(field, action='remove', table=old_table)
- super(ShipmentInReturn, self).init(cursor, module_name)
+ super(ShipmentInReturn, self).init(module_name)
# Add index on create_date
table = TableHandler(cursor, self, module_name)
@@ -451,93 +434,92 @@ class ShipmentInReturn(ModelWorkflow, ModelSQL, ModelView):
})
self._order[0] = ('id', 'DESC')
- def create(self, cursor, user, values, context=None):
+ def create(self, values):
sequence_obj = self.pool.get('ir.sequence')
config_obj = self.pool.get('stock.configuration')
values = values.copy()
- config = config_obj.browse(cursor, user, 1, context=context)
- values['code'] = sequence_obj.get_id(cursor, user,
- config.shipment_in_return_sequence.id, context=context)
- return super(ShipmentInReturn, self).create(
- cursor, user, values, context=context)
+ config = config_obj.browse(1)
+ values['code'] = sequence_obj.get_id(
+ config.shipment_in_return_sequence.id)
+ return super(ShipmentInReturn, self).create(values)
- def set_state_draft(self, cursor, user, shipment_id, context=None):
+ def set_state_draft(self, shipment_id):
move_obj = self.pool.get('stock.move')
- shipment = self.browse(cursor, user, shipment_id, context=context)
- self.write(
- cursor, user, shipment_id, {'state': 'draft'}, context=context)
- move_obj.write(
- cursor, user, [m.id for m in shipment.moves if m.state != 'draft'],
- {'state': 'draft'}, context=context)
-
- def set_state_waiting(self, cursor, user, shipment_id, context=None):
- move_obj = self.pool.get('stock.move')
- shipment = self.browse(cursor, user, shipment_id, context=context)
- move_obj.write(
- cursor, user,
- [m.id for m in shipment.moves if m.state not in ('cancel', 'draft')],
- {'state': 'draft', 'planned_date': shipment.planned_date,},
- context=context)
+ shipment = self.browse(shipment_id)
+ self.write(shipment_id, {
+ 'state': 'draft',
+ })
+ move_obj.write([m.id for m in shipment.moves if m.state != 'draft'], {
+ 'state': 'draft',
+ })
- self.write(
- cursor, user, shipment_id, {'state': 'waiting'}, context=context)
+ def set_state_waiting(self, shipment_id):
+ move_obj = self.pool.get('stock.move')
+ shipment = self.browse(shipment_id)
+ move_obj.write([m.id for m in shipment.moves
+ if m.state not in ('cancel', 'draft')], {
+ 'state': 'draft',
+ 'planned_date': shipment.planned_date,
+ })
+
+ self.write(shipment_id, {
+ 'state': 'waiting',
+ })
- def set_state_assigned(self, cursor, user, shipment_id, context=None):
- self.write(
- cursor, user, shipment_id, {'state': 'assigned'}, context=context)
+ def set_state_assigned(self, shipment_id):
+ self.write(shipment_id, {
+ 'state': 'assigned',
+ })
- def set_state_done(self, cursor, user, shipment_id, context=None):
+ def set_state_done(self, shipment_id):
move_obj = self.pool.get('stock.move')
date_obj = self.pool.get('ir.date')
- shipment = self.browse(cursor, user, shipment_id, context=context)
- move_obj.write(
- cursor, user,
- [m.id for m in shipment.moves if m.state not in ('done', 'cancel')],
- {'state': 'done'}, context=context)
- self.write(cursor, user, shipment_id, {
+ shipment = self.browse(shipment_id)
+ move_obj.write([m.id for m in shipment.moves
+ if m.state not in ('done', 'cancel')], {
+ 'state': 'done',
+ })
+ self.write(shipment_id, {
'state': 'done',
- 'effective_date': date_obj.today(cursor, user, context=context),
- }, context=context)
+ 'effective_date': date_obj.today(),
+ })
- def set_state_cancel(self, cursor, user, shipment_id, context=None):
+ def set_state_cancel(self, shipment_id):
move_obj = self.pool.get('stock.move')
- shipment = self.browse(cursor, user, shipment_id, context=context)
- move_obj.write(
- cursor, user, [m.id for m in shipment.moves if m.state != 'cancel'],
- {'state': 'cancel'}, context=context)
- self.write(
- cursor, user, shipment_id, {'state': 'cancel'}, context=context)
-
- def assign_try(self, cursor, user, shipment_id, context=None):
+ shipment = self.browse(shipment_id)
+ move_obj.write([m.id for m in shipment.moves if m.state != 'cancel'], {
+ 'state': 'cancel',
+ })
+ self.write(shipment_id, {
+ 'state': 'cancel',
+ })
+
+ def assign_try(self, shipment_id):
product_obj = self.pool.get('product.product')
uom_obj = self.pool.get('product.uom')
date_obj = self.pool.get('ir.date')
move_obj = self.pool.get('stock.move')
- shipment = self.browse(cursor, user, shipment_id, context=context)
+ shipment = self.browse(shipment_id)
- cursor.execute('LOCK TABLE stock_move')
+ Transaction().cursor.lock(move_obj._table)
- local_ctx = context and context.copy() or {}
- local_ctx['stock_date_end'] = date_obj.today(cursor, user,
- context=context)
- local_ctx['stock_assign'] = True
location_ids = [m.from_location.id for m in shipment.moves]
- pbl = product_obj.products_by_location(cursor, user,
- location_ids=location_ids,
- product_ids=[m.product.id for m in shipment.moves],
- context=local_ctx)
+ with Transaction().set_context(
+ stock_date_end=date_obj.today(),
+ stock_assign=True):
+ pbl = product_obj.products_by_location(location_ids=location_ids,
+ product_ids=[m.product.id for m in shipment.moves])
for move in shipment.moves:
if move.state != 'draft':
continue
if (move.from_location.id, move.product.id) in pbl:
qty_default_uom = pbl[(move.from_location.id, move.product.id)]
- qty = uom_obj.compute_qty(
- cursor, user, move.product.default_uom, qty_default_uom,
- move.uom, round=False, context=context)
+ qty = uom_obj.compute_qty(move.product.default_uom,
+ qty_default_uom, move.uom, round=False)
if qty < move.quantity:
return False
pbl[(move.from_location.id, move.product.id)] = \
@@ -545,16 +527,17 @@ class ShipmentInReturn(ModelWorkflow, ModelSQL, ModelView):
else:
return False
- move_obj.write(cursor, user, [m.id for m in shipment.moves],
- {'state': 'assigned'}, context=context)
+ move_obj.write([m.id for m in shipment.moves], {
+ 'state': 'assigned',
+ })
return True
- def assign_force(self, cursor, user, shipment_id, context=None):
- shipment = self.browse(cursor, user, shipment_id, context=context)
+ def assign_force(self, shipment_id):
+ shipment = self.browse(shipment_id)
move_obj = self.pool.get('stock.move')
- move_obj.write(cursor, user, [m.id for m in shipment.moves], {
+ move_obj.write([m.id for m in shipment.moves], {
'state': 'assigned',
- }, context=context)
+ })
return True
@@ -632,7 +615,8 @@ class ShipmentOut(ModelWorkflow, ModelSQL, ModelView):
'warehouse output location as destination location!',
})
- def init(self, cursor, module_name):
+ def init(self, module_name):
+ cursor = Transaction().cursor
# Migration from 1.2: packing renamed into shipment
cursor.execute("UPDATE wkf "\
"SET model = 'stock.shipment.out' "\
@@ -655,7 +639,7 @@ class ShipmentOut(ModelWorkflow, ModelSQL, ModelView):
for field in ('code', 'reference'):
table.index_action(field, action='remove', table=old_table)
- super(ShipmentOut, self).init(cursor, module_name)
+ super(ShipmentOut, self).init(module_name)
# Migration from 1.0 customer_location is no more used
table = TableHandler(cursor, self, module_name)
@@ -664,29 +648,26 @@ class ShipmentOut(ModelWorkflow, ModelSQL, ModelView):
# Add index on create_date
table.index_action('create_date', action='add')
- def default_state(self, cursor, user, context=None):
+ def default_state(self):
return 'draft'
- def default_warehouse(self, cursor, user, context=None):
+ def default_warehouse(self):
location_obj = self.pool.get('stock.location')
- location_ids = location_obj.search(cursor, user,
- self.warehouse.domain, context=context)
+ location_ids = location_obj.search(self.warehouse.domain)
if len(location_ids) == 1:
return location_ids[0]
return False
- def on_change_customer(self, cursor, user, values, context=None):
+ def on_change_customer(self, values):
if not values.get('customer'):
return {'delivery_address': False}
party_obj = self.pool.get("party.party")
- address_id = party_obj.address_get(cursor, user, values['customer'],
- type='delivery', context=context)
- return {
- 'delivery_address': address_id}
+ address_id = party_obj.address_get(values['customer'], type='delivery')
+ return {'delivery_address': address_id}
- def get_outgoing_moves(self, cursor, user, ids, name, context=None):
+ def get_outgoing_moves(self, ids, name):
res = {}
- for shipment in self.browse(cursor, user, ids, context=context):
+ for shipment in self.browse(ids):
res[shipment.id] = []
for move in shipment.moves:
if move.from_location.id == \
@@ -694,13 +675,13 @@ class ShipmentOut(ModelWorkflow, ModelSQL, ModelView):
res[shipment.id].append(move.id)
return res
- def set_outgoing_moves(self, cursor, user, ids, name, value, context=None):
+ def set_outgoing_moves(self, ids, name, value):
move_obj = self.pool.get('stock.move')
if not value:
return
- shipments = self.browse(cursor, user, ids, context=context)
+ shipments = self.browse(ids)
move_ids = []
for act in value:
if act[0] == 'create':
@@ -708,17 +689,15 @@ class ShipmentOut(ModelWorkflow, ModelSQL, ModelView):
for shipment in shipments:
if act[1]['from_location'] != \
shipment.warehouse.output_location.id:
- self.raise_user_error(cursor,
- 'outgoing_move_output_source',
- context=context)
+ self.raise_user_error(
+ 'outgoing_move_output_source')
elif act[0] == 'write':
if 'from_location' in act[2]:
for shipment in shipments:
if act[2]['from_location'] != \
shipment.warehouse.output_location.id:
- self.raise_user_error(cursor,
- 'outgoing_move_output_source',
- context=context)
+ self.raise_user_error(
+ 'outgoing_move_output_source')
elif act[0] == 'add':
if isinstance(act[1], (int, long)):
move_ids.append(act[1])
@@ -727,20 +706,19 @@ class ShipmentOut(ModelWorkflow, ModelSQL, ModelView):
elif act[0] == 'set':
move_ids.extend(act[1])
- moves = move_obj.browse(cursor, user, move_ids, context=context)
+ moves = move_obj.browse(move_ids)
for move in moves:
for shipment in shipments:
if move.from_location.id != \
shipment.warehouse.output_location.id:
- self.raise_user_error(cursor,
- 'outgoing_move_output_source', context=context)
- self.write(cursor, user, ids, {
+ self.raise_user_error('outgoing_move_output_source')
+ self.write(ids, {
'moves': value,
- }, context=context)
+ })
- def get_inventory_moves(self, cursor, user, ids, name, context=None):
+ def get_inventory_moves(self, ids, name):
res = {}
- for shipment in self.browse(cursor, user, ids, context=context):
+ for shipment in self.browse(ids):
res[shipment.id] = []
for move in shipment.moves:
if move.to_location.id == \
@@ -748,14 +726,13 @@ class ShipmentOut(ModelWorkflow, ModelSQL, ModelView):
res[shipment.id].append(move.id)
return res
- def set_inventory_moves(self, cursor, user, ids, name, value,
- context=None):
+ def set_inventory_moves(self, ids, name, value):
move_obj = self.pool.get('stock.move')
if not value:
return
- shipments = self.browse(cursor, user, ids, context=context)
+ shipments = self.browse(ids)
move_ids = []
for act in value:
if act[0] == 'create':
@@ -763,17 +740,15 @@ class ShipmentOut(ModelWorkflow, ModelSQL, ModelView):
for shipment in shipments:
if act[1]['to_location'] != \
shipment.warehouse.output_location.id:
- self.raise_user_error(cursor,
- 'inventory_move_output_dest',
- context=context)
+ self.raise_user_error(
+ 'inventory_move_output_dest')
elif act[0] == 'write':
if 'to_location' in act[2]:
for shipment in shipments:
if act[2]['to_location'] != \
shipment.warehouse.output_location.id:
- self.raise_user_error(cursor,
- 'inventory_move_output_dest',
- context=context)
+ self.raise_user_error(
+ 'inventory_move_output_dest')
elif act[0] == 'add':
if isinstance(act[1], (int, long)):
move_ids.append(act[1])
@@ -782,71 +757,71 @@ class ShipmentOut(ModelWorkflow, ModelSQL, ModelView):
elif act[0] == 'set':
move_ids.extend(act[1])
- moves = move_obj.browse(cursor, user, move_ids, context=context)
+ moves = move_obj.browse(move_ids)
for move in moves:
for shipment in shipments:
if move.to_location.id != \
shipment.warehouse.output_location.id:
- self.raise_user_error(cursor, 'inventory_move_output_dest',
- context=context)
- self.write(cursor, user, ids, {
+ self.raise_user_error('inventory_move_output_dest')
+ self.write(ids, {
'moves': value,
- }, context=context)
+ })
- def set_state_assigned(self, cursor, user, shipment_id, context=None):
- self.write(cursor, user, shipment_id, {'state': 'assigned'},
- context=context)
+ def set_state_assigned(self, shipment_id):
+ self.write(shipment_id, {
+ 'state': 'assigned',
+ })
- def set_state_draft(self, cursor, user, shipment_id, context=None):
+ def set_state_draft(self, shipment_id):
move_obj = self.pool.get('stock.move')
- shipment = self.browse(cursor, user, shipment_id, context=context)
- self.write(
- cursor, user, shipment_id, {'state': 'draft'}, context=context)
- move_obj.write(
- cursor, user,
- [m.id for m in shipment.inventory_moves + shipment.outgoing_moves \
- if m.state != 'draft'],
- {'state': 'draft'}, context=context)
-
- def set_state_done(self, cursor, user, shipment_id, context=None):
+ shipment = self.browse(shipment_id)
+ self.write(shipment_id, {
+ 'state': 'draft',
+ })
+ move_obj.write([m.id for m in
+ shipment.inventory_moves + shipment.outgoing_moves
+ if m.state != 'draft'], {
+ 'state': 'draft',
+ })
+
+ def set_state_done(self, shipment_id):
move_obj = self.pool.get('stock.move')
date_obj = self.pool.get('ir.date')
- shipment = self.browse(cursor, user, shipment_id, context=context)
- move_obj.write(
- cursor, user, [m.id for m in shipment.outgoing_moves \
- if m.state not in ('done', 'cancel')],
- {'state': 'done'}, context=context)
- self.write(cursor, user, shipment_id, {
+ shipment = self.browse(shipment_id)
+ move_obj.write([m.id for m in shipment.outgoing_moves
+ if m.state not in ('done', 'cancel')], {
+ 'state': 'done',
+ })
+ self.write(shipment_id, {
'state': 'done',
- 'effective_date': date_obj.today(cursor, user, context=context),
- }, context=context)
+ 'effective_date': date_obj.today(),
+ })
- def set_state_packed(self, cursor, user, shipment_id, context=None):
+ def set_state_packed(self, shipment_id):
move_obj = self.pool.get('stock.move')
uom_obj = self.pool.get('product.uom')
- shipment = self.browse(cursor, user, shipment_id, context=context)
- move_obj.write(
- cursor, user, [m.id for m in shipment.inventory_moves \
- if m.state not in ('done', 'cancel')],
- {'state': 'done'}, context=context)
- self.write(cursor, user, shipment_id, {'state': 'packed'},
- context=context)
+ shipment = self.browse(shipment_id)
+ move_obj.write([m.id for m in shipment.inventory_moves
+ if m.state not in ('done', 'cancel')], {
+ 'state': 'done',
+ })
+ self.write(shipment_id, {
+ 'state': 'packed',
+ })
# Sum all outgoing quantities
outgoing_qty = {}
for move in shipment.outgoing_moves:
if move.state == 'cancel': continue
- quantity = uom_obj.compute_qty(
- cursor, user, move.uom, move.quantity, move.product.default_uom,
- round=False, context=context)
+ quantity = uom_obj.compute_qty(move.uom, move.quantity,
+ move.product.default_uom, round=False)
outgoing_qty.setdefault(move.product.id, 0.0)
outgoing_qty[move.product.id] += quantity
for move in shipment.inventory_moves:
if move.state == 'cancel': continue
- qty_default_uom = uom_obj.compute_qty(
- cursor, user, move.uom, move.quantity, move.product.default_uom,
- round=False, context=context)
+ qty_default_uom = uom_obj.compute_qty(move.uom, move.quantity,
+ move.product.default_uom, round=False)
# Check if the outgoing move doesn't exist already
if outgoing_qty.get(move.product.id):
# If it exist, decrease the sum
@@ -857,16 +832,14 @@ class ShipmentOut(ModelWorkflow, ModelSQL, ModelView):
else:
out_quantity = qty_default_uom - outgoing_qty[move.product.id]
out_quantity = uom_obj.compute_qty(
- cursor, user, move.product.default_uom, out_quantity,
- move.uom, context=context)
+ move.product.default_uom, out_quantity, move.uom)
outgoing_qty[move.product.id] = 0.0
else:
out_quantity = move.quantity
- unit_price = uom_obj.compute_price(
- cursor, user, move.product.default_uom, move.product.list_price,
- move.uom, context=context)
- move_obj.create(cursor, user, {
+ unit_price = uom_obj.compute_price(move.product.default_uom,
+ move.product.list_price, move.uom)
+ move_obj.create({
'from_location': move.to_location.id,
'to_location': shipment.customer.customer_location.id,
'product': move.product.id,
@@ -878,69 +851,67 @@ class ShipmentOut(ModelWorkflow, ModelSQL, ModelView):
'company': move.company.id,
'currency': move.company.currency.id,
'unit_price': unit_price,
- }, context=context)
+ })
#Re-read the shipment and remove exceeding quantities
- shipment = self.browse(cursor, user, shipment_id, context=context)
+ shipment = self.browse(shipment_id)
for move in shipment.outgoing_moves:
if move.state == 'cancel': continue
if outgoing_qty.get(move.product.id, 0.0) > 0.0:
- exc_qty = uom_obj.compute_qty(
- cursor, user, move.product.default_uom,
- outgoing_qty[move.product.id], move.uom, context=context)
- move_obj.write(cursor, user, move.id,{
+ exc_qty = uom_obj.compute_qty(move.product.default_uom,
+ outgoing_qty[move.product.id], move.uom)
+ move_obj.write(move.id,{
'quantity': max(0.0, move.quantity-exc_qty),
- }, context=context)
- removed_qty = uom_obj.compute_qty(
- cursor, user, move.uom, min(exc_qty, move.quantity),
- move.product.default_uom, round=False, context=context)
+ })
+ removed_qty = uom_obj.compute_qty(move.uom,
+ min(exc_qty, move.quantity), move.product.default_uom,
+ round=False)
outgoing_qty[move.product.id] -= removed_qty
- move_obj.write(cursor, user, [x.id for x in shipment.outgoing_moves
+ move_obj.write([x.id for x in shipment.outgoing_moves
if x.state != 'cancel'], {
'state': 'assigned',
- }, context=context)
+ })
- def set_state_cancel(self, cursor, user, shipment_id, context=None):
+ def set_state_cancel(self, shipment_id):
move_obj = self.pool.get('stock.move')
- shipment = self.browse(cursor, user, shipment_id, context=context)
- move_obj.write(
- cursor, user,
- [m.id for m in shipment.outgoing_moves + shipment.inventory_moves \
- if m.state != 'cancel'],
- {'state': 'cancel'}, context=context)
- self.write(cursor, user, shipment_id, {'state': 'cancel'},
- context=context)
-
- def set_state_waiting(self, cursor, user, shipment_id, context=None):
+ shipment = self.browse(shipment_id)
+ move_obj.write([m.id for m in
+ shipment.outgoing_moves + shipment.inventory_moves
+ if m.state != 'cancel'], {
+ 'state': 'cancel',
+ })
+ self.write(shipment_id, {
+ 'state': 'cancel',
+ })
+
+ def set_state_waiting(self, shipment_id):
"""
Complete inventory moves to match the products and quantities
that are in the outgoing moves.
"""
move_obj = self.pool.get('stock.move')
uom_obj = self.pool.get('product.uom')
- shipment = self.browse(cursor, user, shipment_id, context=context)
- self.write(
- cursor, user, shipment_id, {'state': 'waiting'}, context=context)
+ shipment = self.browse(shipment_id)
+ self.write(shipment_id, {
+ 'state': 'waiting',
+ })
if shipment.inventory_moves:
- move_obj.write(cursor, user,
- [x.id for x in shipment.inventory_moves], {
- 'state': 'draft',
- }, context=context)
- move_obj.delete(cursor, user,
- [x.id for x in shipment.inventory_moves], context=context)
+ move_obj.write( [x.id for x in shipment.inventory_moves], {
+ 'state': 'draft',
+ })
+ move_obj.delete([x.id for x in shipment.inventory_moves])
# Re-Browse because moves have been deleted
- shipment = self.browse(cursor, user, shipment_id, context=context)
+ shipment = self.browse(shipment_id)
for move in shipment.outgoing_moves:
if move.state in ('cancel', 'done'):
continue
- qty_default_uom = uom_obj.compute_qty(
- cursor, user, move.uom, move.quantity, move.product.default_uom,
- context=context)
- move_obj.create(cursor, user, {
+ qty_default_uom = uom_obj.compute_qty(move.uom, move.quantity,
+ move.product.default_uom)
+ move_obj.create({
'from_location': move.shipment_out.warehouse.storage_location.id,
'to_location': move.from_location.id,
'product': move.product.id,
@@ -950,31 +921,27 @@ class ShipmentOut(ModelWorkflow, ModelSQL, ModelView):
'planned_date': move.planned_date,
'state': 'draft',
'company': move.company.id,
- }, context=context)
+ })
- def create(self, cursor, user, values, context=None):
+ def create(self, values):
sequence_obj = self.pool.get('ir.sequence')
config_obj = self.pool.get('stock.configuration')
values = values.copy()
- config = config_obj.browse(cursor, user, 1, context=context)
- values['code'] = sequence_obj.get_id(cursor, user,
- config.shipment_out_sequence.id, context=context)
- return super(ShipmentOut, self).create(cursor, user, values,
- context=context)
+ config = config_obj.browse(1)
+ values['code'] = sequence_obj.get_id(config.shipment_out_sequence.id)
+ return super(ShipmentOut, self).create(values)
- def copy(self, cursor, user, ids, default=None, context=None):
+ def copy(self, ids, default=None):
if default is None:
default = {}
default = default.copy()
default['inventory_moves']= False
default['outgoing_moves']= False
- return super(ShipmentOut, self).copy(cursor, user, ids,
- default=default, context=context)
+ return super(ShipmentOut, self).copy(ids, default=default)
- def _location_amount(self, cursor, user, target_uom,
- qty_uom, uom_index, context=None):
+ def _location_amount(self, target_uom, qty_uom, uom_index):
"""
Take a raw list of quantities and uom and convert it to
the target uom.
@@ -982,27 +949,25 @@ class ShipmentOut(ModelWorkflow, ModelSQL, ModelView):
uom_obj = self.pool.get('product.uom')
res = 0
for uom, qty in qty_uom:
- res += uom_obj.compute_qty(
- cursor, user, uom_index[uom], qty, uom_index[target_uom],
- context=context)
+ res += uom_obj.compute_qty(uom_index[uom], qty,
+ uom_index[target_uom])
return res
- def assign_try(self, cursor, user, shipment_id, context=None):
+ def assign_try(self, shipment_id):
move_obj = self.pool.get('stock.move')
- shipment = self.browse(cursor, user, shipment_id, context=context)
- return move_obj.assign_try(
- cursor, user, shipment.inventory_moves, context=context)
+ shipment = self.browse(shipment_id)
+ return move_obj.assign_try(shipment.inventory_moves)
- def assign_force(self, cursor, user, shipment_id, context=None):
- shipment = self.browse(cursor, user, shipment_id, context=context)
+ def assign_force(self, shipment_id):
+ shipment = self.browse(shipment_id)
move_obj = self.pool.get('stock.move')
- move_obj.write(
- cursor, user, [m.id for m in shipment.inventory_moves],
- {'state': 'assigned'})
+ move_obj.write([m.id for m in shipment.inventory_moves], {
+ 'state': 'assigned',
+ })
return True
- def button_draft(self, cursor, user, ids, context=None):
- self.workflow_trigger_create(cursor, user, ids, context=context)
+ def button_draft(self, ids):
+ self.workflow_trigger_create(ids)
ShipmentOut()
@@ -1076,7 +1041,8 @@ class ShipmentOutReturn(ModelWorkflow, ModelSQL, ModelView):
'have the warehouse input location as source location!',
})
- def init(self, cursor, module_name):
+ def init(self, module_name):
+ cursor = Transaction().cursor
# Migration from 1.2: packing renamed into shipment
cursor.execute("UPDATE wkf "\
"SET model = 'stock.shipment.out.return' "\
@@ -1099,37 +1065,35 @@ class ShipmentOutReturn(ModelWorkflow, ModelSQL, ModelView):
for field in ('code', 'reference'):
table.index_action(field, action='remove', table=old_table)
- super(ShipmentOutReturn, self).init(cursor, module_name)
+ super(ShipmentOutReturn, self).init(module_name)
# Add index on create_date
table = TableHandler(cursor, self, module_name)
table.index_action('create_date', action='add')
- def default_state(self, cursor, user, context=None):
+ def default_state(self):
return 'draft'
- def default_warehouse(self, cursor, user, context=None):
+ def default_warehouse(self):
location_obj = self.pool.get('stock.location')
- location_ids = location_obj.search(cursor, user,
- self.warehouse.domain, context=context)
+ location_ids = location_obj.search(self.warehouse.domain)
if len(location_ids) == 1:
return location_ids[0]
return False
- def on_change_customer(self, cursor, user, values, context=None):
+ def on_change_customer(self, values):
if not values.get('customer'):
return {'delivery_address': False}
party_obj = self.pool.get("party.party")
- address_id = party_obj.address_get(cursor, user, values['customer'],
- type='delivery', context=context)
- party = party_obj.browse(cursor, user, values['customer'], context=context)
+ address_id = party_obj.address_get(values['customer'], type='delivery')
+ party = party_obj.browse(values['customer'])
return {
'delivery_address': address_id,
}
- def get_incoming_moves(self, cursor, user, ids, name, context=None):
+ def get_incoming_moves(self, ids, name):
res = {}
- for shipment in self.browse(cursor, user, ids, context=context):
+ for shipment in self.browse(ids):
res[shipment.id] = []
for move in shipment.moves:
if move.to_location.id == \
@@ -1137,13 +1101,13 @@ class ShipmentOutReturn(ModelWorkflow, ModelSQL, ModelView):
res[shipment.id].append(move.id)
return res
- def set_incoming_moves(self, cursor, user, ids, name, value, context=None):
+ def set_incoming_moves(self, ids, name, value):
move_obj = self.pool.get('stock.move')
if not value:
return
- shipments = self.browse(cursor, user, ids, context=context)
+ shipments = self.browse(ids)
move_ids = []
for act in value:
if act[0] == 'create':
@@ -1151,17 +1115,13 @@ class ShipmentOutReturn(ModelWorkflow, ModelSQL, ModelView):
for shipment in shipments:
if act[1]['to_location'] != \
shipment.warehouse.input_location.id:
- self.raise_user_error(cursor,
- 'incoming_move_input_dest',
- context=context)
+ self.raise_user_error('incoming_move_input_dest')
elif act[0] == 'write':
if 'to_location' in act[2]:
for shipment in shipments:
if act[2]['to_location'] != \
shipment.warehouse.input_location.id:
- self.raise_user_error(cursor,
- 'incoming_move_input_dest',
- context=context)
+ self.raise_user_error('incoming_move_input_dest')
elif act[0] == 'add':
if isinstance(act[1], (int, long)):
move_ids.append(act[1])
@@ -1170,21 +1130,20 @@ class ShipmentOutReturn(ModelWorkflow, ModelSQL, ModelView):
elif act[0] == 'set':
move_ids.extend(act[1])
- moves = move_obj.browse(cursor, user, move_ids, context=context)
+ moves = move_obj.browse(move_ids)
for move in moves:
for shipment in shipments:
if move.to_location.id != \
shipment.warehouse.input_location.id:
- self.raise_user_error(cursor, 'incoming_move_input_dest',
- context=context)
+ self.raise_user_error('incoming_move_input_dest')
- self.write(cursor, user, ids, {
+ self.write(ids, {
'moves': value,
- }, context=context)
+ })
- def get_inventory_moves(self, cursor, user, ids, name, context=None):
+ def get_inventory_moves(self, ids, name):
res = {}
- for shipment in self.browse(cursor, user, ids, context=context):
+ for shipment in self.browse(ids):
res[shipment.id] = []
for move in shipment.moves:
if move.from_location.id == \
@@ -1192,14 +1151,13 @@ class ShipmentOutReturn(ModelWorkflow, ModelSQL, ModelView):
res[shipment.id].append(move.id)
return res
- def set_inventory_moves(self, cursor, user, ids, name, value,
- context=None):
+ def set_inventory_moves(self, ids, name, value):
move_obj = self.pool.get('stock.move')
if not value:
return
- shipments = self.browse(cursor, user, ids, context=context)
+ shipments = self.browse(ids)
move_ids = []
for act in value:
if act[0] == 'create':
@@ -1207,17 +1165,15 @@ class ShipmentOutReturn(ModelWorkflow, ModelSQL, ModelView):
for shipment in shipments:
if act[1]['from_location'] != \
shipment.warehouse.input_location.id:
- self.raise_user_error(cursor,
- 'inventory_move_input_source',
- context=context)
+ self.raise_user_error(
+ 'inventory_move_input_source')
elif act[0] == 'write':
if 'from_location' in act[2]:
for shipment in shipments:
if act[2]['from_location'] != \
shipment.warehouse.input_location.id:
- self.raise_user_error(cursor,
- 'inventory_move_input_source',
- context=context)
+ self.raise_user_error(
+ 'inventory_move_input_source')
elif act[0] == 'add':
if isinstance(act[1], (int, long)):
move_ids.append(act[1])
@@ -1226,94 +1182,89 @@ class ShipmentOutReturn(ModelWorkflow, ModelSQL, ModelView):
elif act[0] == 'set':
move_ids.extend(act[1])
- moves = move_obj.browse(cursor, user, move_ids, context=context)
+ moves = move_obj.browse(move_ids)
for move in moves:
for shipment in shipments:
if move.from_location.id != \
shipment.warehouse.input_location.id:
- self.raise_user_error(cursor,
- 'inventory_move_input_source', context=context)
+ self.raise_user_error('inventory_move_input_source')
- self.write(cursor, user, ids, {
+ self.write(ids, {
'moves': value,
- }, context=context)
+ })
- def create(self, cursor, user, values, context=None):
+ def create(self, values):
sequence_obj = self.pool.get('ir.sequence')
config_obj = self.pool.get('stock.configuration')
values = values.copy()
- config = config_obj.browse(cursor, user, 1, context=context)
- values['code'] = sequence_obj.get_id(cursor, user,
- config.shipment_out_return_sequence.id, context=context)
- return super(ShipmentOutReturn, self).create(cursor, user, values,
- context=context)
+ config = config_obj.browse(1)
+ values['code'] = sequence_obj.get_id(
+ config.shipment_out_return_sequence.id)
+ return super(ShipmentOutReturn, self).create(values)
- def copy(self, cursor, user, ids, default=None, context=None):
+ def copy(self, ids, default=None):
if default is None:
default = {}
default = default.copy()
default['inventory_moves']= False
default['incoming_moves']= False
- return super(ShipmentOutReturn, self).copy(cursor, user, ids,
- default=default, context=context)
+ return super(ShipmentOutReturn, self).copy(ids, default=default)
- def button_draft(self, cursor, user, ids, context=None):
- self.workflow_trigger_create(cursor, user, ids, context=context)
+ def button_draft(self, ids):
+ self.workflow_trigger_create(ids)
- def set_state_done(self, cursor, user, shipment_id, context=None):
+ def set_state_done(self, shipment_id):
move_obj = self.pool.get('stock.move')
date_obj = self.pool.get('ir.date')
- shipment = self.browse(cursor, user, shipment_id, context=context)
- move_obj.write(
- cursor, user,
- [m.id for m in shipment.inventory_moves \
- if m.state not in ('done', 'cancel')],
- {'state': 'done'}, context)
- self.write(cursor, user, shipment_id,{
+ shipment = self.browse(shipment_id)
+ move_obj.write([m.id for m in shipment.inventory_moves
+ if m.state not in ('done', 'cancel')], {
+ 'state': 'done',
+ })
+ self.write(shipment_id,{
'state': 'done',
- 'effective_date': date_obj.today(cursor, user, context=context),
- }, context=context)
+ 'effective_date': date_obj.today(),
+ })
- def set_state_cancel(self, cursor, user, shipment_id, context=None):
+ def set_state_cancel(self, shipment_id):
move_obj = self.pool.get('stock.move')
- shipment = self.browse(cursor, user, shipment_id, context=context)
- move_obj.write(
- cursor, user,
- [m.id for m in shipment.incoming_moves + shipment.inventory_moves \
- if m.state != 'cancel'],
- {'state': 'cancel'}, context)
- self.write(cursor, user, shipment_id, {'state': 'cancel'},
- context=context)
-
- def set_state_received(self, cursor, user, shipment_id, context=None):
+ shipment = self.browse(shipment_id)
+ move_obj.write([m.id for m in
+ shipment.incoming_moves + shipment.inventory_moves
+ if m.state != 'cancel'], {
+ 'state': 'cancel',
+ })
+ self.write(shipment_id, {
+ 'state': 'cancel',
+ })
+
+ def set_state_received(self, shipment_id):
move_obj = self.pool.get('stock.move')
- shipment = self.browse(cursor, user, shipment_id, context=context)
- move_obj.write(
- cursor, user,
- [m.id for m in shipment.incoming_moves \
- if m.state not in ('done', 'cancel')],
- {'state': 'done'}, context=context)
- self.write(cursor, user, shipment_id, {
+ shipment = self.browse(shipment_id)
+ move_obj.write([m.id for m in shipment.incoming_moves
+ if m.state not in ('done', 'cancel')], {
+ 'state': 'done',
+ })
+ self.write(shipment_id, {
'state': 'received'
- }, context=context)
+ })
- def set_state_draft(self, cursor, user, shipment_id, context=None):
+ def set_state_draft(self, shipment_id):
move_obj = self.pool.get('stock.move')
- shipment = self.browse(cursor, user, shipment_id, context=context)
- move_obj.write(cursor, user, [m.id for m in shipment.incoming_moves
+ shipment = self.browse(shipment_id)
+ move_obj.write([m.id for m in shipment.incoming_moves
if m.state != 'draft'], {
'state': 'draft',
- }, context=context)
- move_obj.delete(cursor, user,
- [m.id for m in shipment.inventory_moves], context=context)
- self.write(cursor, user, shipment_id, {
+ })
+ move_obj.delete([m.id for m in shipment.inventory_moves])
+ self.write(shipment_id, {
'state': 'draft',
- }, context=context)
+ })
- def _get_inventory_moves(self, cursor, user, incoming_move, context=None):
+ def _get_inventory_moves(self, incoming_move):
res = {}
if incoming_move.quantity <= 0.0:
return None
@@ -1330,15 +1281,14 @@ class ShipmentOutReturn(ModelWorkflow, ModelSQL, ModelView):
res['company'] = incoming_move.company.id
return res
- def create_inventory_moves(self, cursor, user, shipment_id, context=None):
- shipment = self.browse(cursor, user, shipment_id, context=context)
+ def create_inventory_moves(self, shipment_id):
+ shipment = self.browse(shipment_id)
for incoming_move in shipment.incoming_moves:
- vals = self._get_inventory_moves(cursor, user, incoming_move,
- context=context)
+ vals = self._get_inventory_moves(incoming_move)
if vals:
- self.write(cursor, user, shipment.id, {
- 'inventory_moves': [('create', vals)]
- }, context=context)
+ self.write(shipment.id, {
+ 'inventory_moves': [('create', vals)],
+ })
ShipmentOutReturn()
@@ -1394,42 +1344,38 @@ class AssignShipmentOut(Wizard):
},
}
- def _choice(self, cursor, user, data, context=None):
+ def _choice(self, data):
shipment_out_obj = self.pool.get('stock.shipment.out')
user_group_obj = self.pool.get('res.user-res.group')
model_data_obj = self.pool.get('ir.model.data')
transition_obj = self.pool.get('workflow.transition')
- shipment_out_obj.workflow_trigger_validate(cursor, user, data['id'],
- 'assign', context=context)
- shipment = shipment_out_obj.browse(cursor, user, data['id'],
- context=context)
+ shipment_out_obj.workflow_trigger_validate(data['id'], 'assign')
+ shipment = shipment_out_obj.browse(data['id'])
if not [x.id for x in shipment.inventory_moves if x.state == 'draft']:
return 'end'
else:
- trans_id = model_data_obj.get_id(cursor, user, 'stock',
- 'shipmentout_trans_waiting_assigned_force', context=context)
- trans = transition_obj.read(cursor, user, trans_id, context=context)
- user_in_group = user_group_obj.search(cursor, user, [
- ('uid', '=', user),
+ trans_id = model_data_obj.get_id('stock',
+ 'shipmentout_trans_waiting_assigned_force')
+ trans = transition_obj.read(trans_id)
+ user_in_group = user_group_obj.search([
+ ('uid', '=', Transaction().user),
('gid', '=', trans['group']),
- ], limit=1, context=context)
+ ], limit=1)
if user_in_group:
return 'ask_force'
return 'assign_failed'
- def _moves(self, cursor, user, data, context=None):
+ def _moves(self, data):
shipment_out_obj = self.pool.get('stock.shipment.out')
- shipment = shipment_out_obj.browse(cursor, user, data['id'],
- context=context)
+ shipment = shipment_out_obj.browse(data['id'])
return {'inventory_moves': [x.id for x in shipment.inventory_moves
if x.state == 'draft']}
- def _force(self, cursor, user, data, context=None):
+ def _force(self, data):
shipment_out_obj = self.pool.get('stock.shipment.out')
- shipment_out_obj.workflow_trigger_validate(cursor, user, data['id'],
- 'force_assign', context=context)
+ shipment_out_obj.workflow_trigger_validate(data['id'], 'force_assign')
return {}
AssignShipmentOut()
@@ -1487,7 +1433,8 @@ class ShipmentInternal(ModelWorkflow, ModelSQL, ModelView):
('done', 'Done'),
], 'State', readonly=True)
- def init(self, cursor, module_name):
+ def init(self, module_name):
+ cursor = Transaction().cursor
# Migration from 1.2: packing renamed into shipment
cursor.execute("UPDATE wkf "\
"SET model = 'stock.shipment.internal' "\
@@ -1509,17 +1456,17 @@ class ShipmentInternal(ModelWorkflow, ModelSQL, ModelView):
for field in ('code', 'reference'):
table.index_action(field, action='remove', table=old_table)
- super(ShipmentInternal, self).init(cursor, module_name)
+ super(ShipmentInternal, self).init(module_name)
# Add index on create_date
table = TableHandler(cursor, self, module_name)
table.index_action('create_date', action='add')
- def default_state(self, cursor, user, context=None):
+ def default_state(self):
return 'draft'
- def button_draft(self, cursor, user, ids, context=None):
- self.workflow_trigger_create(cursor, user, ids, context=context)
+ def button_draft(self, ids):
+ self.workflow_trigger_create(ids)
return True
def __init__(self):
@@ -1529,76 +1476,78 @@ class ShipmentInternal(ModelWorkflow, ModelSQL, ModelView):
})
self._order[0] = ('id', 'DESC')
- def create(self, cursor, user, values, context=None):
+ def create(self, values):
sequence_obj = self.pool.get('ir.sequence')
config_obj = self.pool.get('stock.configuration')
values = values.copy()
- config = config_obj.browse(cursor, user, 1, context=context)
- values['code'] = sequence_obj.get_id(cursor, user,
- config.shipment_internal_sequence.id, context=context)
- return super(ShipmentInternal, self).create(
- cursor, user, values, context=context)
+ config = config_obj.browse(1)
+ values['code'] = sequence_obj.get_id(
+ config.shipment_internal_sequence.id)
+ return super(ShipmentInternal, self).create(values)
- def set_state_draft(self, cursor, user, shipment_id, context=None):
+ def set_state_draft(self, shipment_id):
move_obj = self.pool.get('stock.move')
- shipment = self.browse(cursor, user, shipment_id, context=context)
- self.write(
- cursor, user, shipment_id, {'state': 'draft'}, context=context)
- move_obj.write(
- cursor, user, [m.id for m in shipment.moves], {'state': 'draft'},
- context=context)
-
- def set_state_waiting(self, cursor, user, shipment_id, context=None):
+ shipment = self.browse(shipment_id)
+ self.write(shipment_id, {
+ 'state': 'draft',
+ })
+ move_obj.write([m.id for m in shipment.moves], {
+ 'state': 'draft',
+ })
+
+ def set_state_waiting(self, shipment_id):
move_obj = self.pool.get('stock.move')
- shipment = self.browse(cursor, user, shipment_id, context=context)
- move_obj.write(cursor, user, [m.id for m in shipment.moves], {
+ shipment = self.browse(shipment_id)
+ move_obj.write([m.id for m in shipment.moves], {
'from_location': shipment.from_location.id,
'to_location': shipment.to_location.id,
'state': 'draft',
'planned_date': shipment.planned_date,
- }, context=context)
- self.write(
- cursor, user, shipment_id, {'state': 'waiting'}, context=context)
+ })
+ self.write(shipment_id, {
+ 'state': 'waiting',
+ })
- def set_state_assigned(self, cursor, user, shipment_id, context=None):
- self.write(
- cursor, user, shipment_id, {'state': 'assigned'}, context=context)
+ def set_state_assigned(self, shipment_id):
+ self.write(shipment_id, {
+ 'state': 'assigned',
+ })
- def set_state_done(self, cursor, user, shipment_id, context=None):
+ def set_state_done(self, shipment_id):
move_obj = self.pool.get('stock.move')
date_obj = self.pool.get('ir.date')
- shipment = self.browse(cursor, user, shipment_id, context=context)
- move_obj.write(
- cursor, user, [m.id for m in shipment.moves], {'state': 'done'},
- context=context)
- self.write(cursor, user, shipment_id, {
+ shipment = self.browse(shipment_id)
+ move_obj.write([m.id for m in shipment.moves], {
'state': 'done',
- 'effective_date': date_obj.today(cursor, user, context=context),
- }, context=context)
+ })
+ self.write(shipment_id, {
+ 'state': 'done',
+ 'effective_date': date_obj.today(),
+ })
- def set_state_cancel(self, cursor, user, shipment_id, context=None):
+ def set_state_cancel(self, shipment_id):
move_obj = self.pool.get('stock.move')
- shipment = self.browse(cursor, user, shipment_id, context=context)
- move_obj.write(
- cursor, user, [m.id for m in shipment.moves], {'state': 'cancel'},
- context=context)
- self.write(
- cursor, user, shipment_id, {'state': 'cancel'}, context=context)
-
- def assign_try(self, cursor, user, shipment_id, context=None):
+ shipment = self.browse(shipment_id)
+ move_obj.write([m.id for m in shipment.moves], {
+ 'state': 'cancel',
+ })
+ self.write(shipment_id, {
+ 'state': 'cancel',
+ })
+
+ def assign_try(self, shipment_id):
move_obj = self.pool.get('stock.move')
- shipment = self.browse(cursor, user, shipment_id, context=context)
- return move_obj.assign_try(
- cursor, user, shipment.moves, context=context)
+ shipment = self.browse(shipment_id)
+ return move_obj.assign_try(shipment.moves)
- def assign_force(self, cursor, user, shipment_id, context=None):
- shipment = self.browse(cursor, user, shipment_id, context=context)
+ def assign_force(self, shipment_id):
+ shipment = self.browse(shipment_id)
move_obj = self.pool.get('stock.move')
- move_obj.write(cursor, user, [m.id for m in shipment.moves], {
+ move_obj.write([m.id for m in shipment.moves], {
'state': 'assigned',
- }, context=context)
+ })
return True
ShipmentInternal()
@@ -1662,43 +1611,38 @@ class AssignShipmentInternal(Wizard):
},
}
- def _choice(self, cursor, user, data, context=None):
+ def _choice(self, data):
shipment_internal_obj = self.pool.get('stock.shipment.internal')
user_group_obj = self.pool.get('res.user-res.group')
model_data_obj = self.pool.get('ir.model.data')
transition_obj = self.pool.get('workflow.transition')
- shipment_internal_obj.workflow_trigger_validate(cursor, user,
- data['id'], 'assign', context=context)
- shipment = shipment_internal_obj.browse(cursor, user, data['id'],
- context=context)
+ shipment_internal_obj.workflow_trigger_validate(data['id'], 'assign')
+ shipment = shipment_internal_obj.browse(data['id'])
if not [x.id for x in shipment.moves if x.state == 'draft']:
return 'end'
else:
- trans_id = model_data_obj.get_id(cursor, user, 'stock',
- 'shipmentinternal_trans_waiting_assigned_force',
- context=context)
- trans = transition_obj.read(cursor, user, trans_id,
- context=context)
- user_in_group = user_group_obj.search(cursor, user, [
- ('uid', '=', user),
+ trans_id = model_data_obj.get_id('stock',
+ 'shipmentinternal_trans_waiting_assigned_force')
+ trans = transition_obj.read(trans_id)
+ user_in_group = user_group_obj.search([
+ ('uid', '=', Transaction().user),
('gid', '=', trans['group']),
- ], limit=1, context=context)
+ ], limit=1)
if user_in_group:
return 'ask_force'
return 'assign_failed'
- def _moves(self, cursor, user, data, context=None):
+ def _moves(self, data):
shipment_internal_obj = self.pool.get('stock.shipment.internal')
- shipment = shipment_internal_obj.browse(cursor, user, data['id'],
- context=context)
+ shipment = shipment_internal_obj.browse(data['id'])
return {'moves': [x.id for x in shipment.moves if x.state == 'draft']}
- def _force(self, cursor, user, data, context=None):
+ def _force(self, data):
shipment_internal_obj = self.pool.get('stock.shipment.internal')
- shipment_internal_obj.workflow_trigger_validate(cursor, user,
- data['id'], 'force_assign', context=context)
+ shipment_internal_obj.workflow_trigger_validate(data['id'],
+ 'force_assign')
return {}
AssignShipmentInternal()
@@ -1755,42 +1699,38 @@ class AssignShipmentInReturn(Wizard):
},
}
- def _choice(self, cursor, user, data, context=None):
+ def _choice(self, data):
shipment_internal_obj = self.pool.get('stock.shipment.in.return')
user_group_obj = self.pool.get('res.user-res.group')
model_data_obj = self.pool.get('ir.model.data')
transition_obj = self.pool.get('workflow.transition')
- shipment_internal_obj.workflow_trigger_validate(cursor, user,
- data['id'], 'assign', context=context)
- shipment = shipment_internal_obj.browse(cursor, user, data['id'],
- context=context)
+ shipment_internal_obj.workflow_trigger_validate(data['id'], 'assign')
+ shipment = shipment_internal_obj.browse(data['id'])
if not [x.id for x in shipment.moves if x.state == 'draft']:
return 'end'
else:
- trans_id = model_data_obj.get_id(cursor, user, 'stock',
- 'shipment_in_return_trans_waiting_assigned_force',
- context=context)
- trans = transition_obj.read(cursor, user, trans_id, context=context)
- user_in_group = user_group_obj.search(cursor, user, [
- ('uid', '=', user),
+ trans_id = model_data_obj.get_id('stock',
+ 'shipment_in_return_trans_waiting_assigned_force')
+ trans = transition_obj.read(trans_id)
+ user_in_group = user_group_obj.search([
+ ('uid', '=', Transaction().user),
('gid', '=', trans['group']),
- ], limit=1, context=context)
+ ], limit=1)
if user_in_group:
return 'ask_force'
return 'assign_failed'
- def _moves(self, cursor, user, data, context=None):
+ def _moves(self, data):
shipment_internal_obj = self.pool.get('stock.shipment.in.return')
- shipment = shipment_internal_obj.browse(cursor, user, data['id'],
- context=context)
+ shipment = shipment_internal_obj.browse(data['id'])
return {'moves': [x.id for x in shipment.moves if x.state == 'draft']}
- def _force(self, cursor, user, data, context=None):
+ def _force(self, data):
shipment_internal_obj = self.pool.get('stock.shipment.in.return')
- shipment_internal_obj.workflow_trigger_validate(cursor, user,
- data['id'], 'force_assign', context=context)
+ shipment_internal_obj.workflow_trigger_validate(data['id'],
+ 'force_assign')
return {}
AssignShipmentInReturn()
@@ -1816,23 +1756,20 @@ class CreateShipmentOutReturn(Wizard):
})
- def _create(self, cursor, user, data, context=None):
+ def _create(self, data):
model_data_obj = self.pool.get('ir.model.data')
act_window_obj = self.pool.get('ir.action.act_window')
shipment_out_obj = self.pool.get('stock.shipment.out')
shipment_out_return_obj = self.pool.get('stock.shipment.out.return')
- shipment_outs = shipment_out_obj.browse(
- cursor, user, data['ids'], context=context)
+ shipment_outs = shipment_out_obj.browse(data['ids'])
shipment_out_return_ids = []
for shipment_out in shipment_outs:
if shipment_out.state != 'done':
- self.raise_user_error(
- cursor, 'shipment_done_title',
- error_description='shipment_done_msg',
- error_description_args=shipment_out.code,
- context=context)
+ self.raise_user_error('shipment_done_title',
+ error_description='shipment_done_msg',
+ error_description_args=shipment_out.code)
incoming_moves = []
for move in shipment_out.outgoing_moves:
@@ -1845,19 +1782,17 @@ class CreateShipmentOutReturn(Wizard):
'company': move.company.id,
}))
shipment_out_return_ids.append(
- shipment_out_return_obj.create(
- cursor, user,
- {'customer': shipment_out.customer.id,
- 'delivery_address': shipment_out.delivery_address.id,
- 'warehouse': shipment_out.warehouse.id,
- 'incoming_moves': incoming_moves,
- },
- context=context)
+ shipment_out_return_obj.create({
+ 'customer': shipment_out.customer.id,
+ 'delivery_address': shipment_out.delivery_address.id,
+ 'warehouse': shipment_out.warehouse.id,
+ 'incoming_moves': incoming_moves,
+ })
)
- act_window_id = model_data_obj.get_id(cursor, user, 'stock',
- 'act_shipment_out_return_form', context=context)
- res = act_window_obj.read(cursor, user, act_window_id, context=context)
+ act_window_id = model_data_obj.get_id('stock',
+ 'act_shipment_out_return_form')
+ res = act_window_obj.read(act_window_id)
res['res_id'] = shipment_out_return_ids
if len(shipment_out_return_ids) == 1:
res['views'].reverse()
@@ -1870,22 +1805,16 @@ CreateShipmentOutReturn()
class DeliveryNote(CompanyReport):
_name = 'stock.shipment.out.delivery_note'
- def parse(self, cursor, user, report, objects, datas, context):
- if context is None:
- context = {}
- context = context.copy()
- context['product_name'] = lambda product_id, language: \
- self.product_name(cursor, user, product_id, language,
- context)
- return super(DeliveryNote, self).parse(cursor, user, report,
- objects, datas, context)
-
- def product_name(self, cursor, user, product_id, language, context):
+ def parse(self, report, objects, datas, localcontext):
+ localcontext['product_name'] = lambda product_id, language: \
+ self.product_name(product_id, language)
+ return super(DeliveryNote, self).parse(report, objects, datas,
+ localcontext)
+
+ def product_name(self, product_id, language):
product_obj = self.pool.get('product.product')
- ctx = context.copy()
- ctx['language'] = language
- return product_obj.browse(cursor, user, product_id,
- context=ctx).rec_name
+ with Transaction().set_context(language=language):
+ return product_obj.browse(product_id).rec_name
DeliveryNote()
@@ -1893,12 +1822,11 @@ DeliveryNote()
class PickingList(CompanyReport):
_name = 'stock.shipment.out.picking_list'
- def parse(self, cursor, user, report, objects, datas, context):
+ def parse(self, report, objects, datas, localcontext):
move_obj = self.pool.get('stock.move')
shipment_out_obj = self.pool.get('stock.shipment.out')
- compare_context = self.get_compare_context(
- cursor, user, report, objects, datas, context)
+ compare_context = self.get_compare_context(report, objects, datas)
sorted_moves = {}
for shipment in objects:
@@ -1908,12 +1836,12 @@ class PickingList(CompanyReport):
self.get_compare_key(y, compare_context))
)
- context['moves'] = sorted_moves
+ localcontext['moves'] = sorted_moves
- return super(PickingList, self).parse(cursor, user, report,
- objects, datas, context)
+ return super(PickingList, self).parse(report, objects, datas,
+ localcontext)
- def get_compare_context(self, cursor, user, report, objects, datas, context):
+ def get_compare_context(self, report, objects, datas):
location_obj = self.pool.get('stock.location')
from_location_ids = set()
to_location_ids = set()
@@ -1922,10 +1850,8 @@ class PickingList(CompanyReport):
from_location_ids.add(move.from_location.id)
to_location_ids.add(move.to_location.id)
- from_location_ids = location_obj.search(
- cursor, user, list(from_location_ids), context=context)
- to_location_ids = location_obj.search(
- cursor, user, list(to_location_ids), context=context)
+ from_location_ids = location_obj.search(list(from_location_ids))
+ to_location_ids = location_obj.search(list(to_location_ids))
return {'from_location_ids' : from_location_ids,
'to_location_ids' : to_location_ids}
@@ -1943,12 +1869,11 @@ PickingList()
class SupplierRestockingList(CompanyReport):
_name = 'stock.shipment.in.restocking_list'
- def parse(self, cursor, user, report, objects, datas, context):
+ def parse(self, report, objects, datas, localcontext):
move_obj = self.pool.get('stock.move')
shipment_in_obj = self.pool.get('stock.shipment.in')
- compare_context = self.get_compare_context(
- cursor, user, report, objects, datas, context)
+ compare_context = self.get_compare_context(report, objects, datas)
sorted_moves = {}
for shipment in objects:
@@ -1958,12 +1883,12 @@ class SupplierRestockingList(CompanyReport):
self.get_compare_key(y, compare_context))
)
- context['moves'] = sorted_moves
+ localcontext['moves'] = sorted_moves
- return super(SupplierRestockingList, self).parse(cursor, user, report,
- objects, datas, context)
+ return super(SupplierRestockingList, self).parse(report, objects,
+ datas, localcontext)
- def get_compare_context(self, cursor, user, report, objects, datas, context):
+ def get_compare_context(self, report, objects, datas):
location_obj = self.pool.get('stock.location')
from_location_ids = set()
to_location_ids = set()
@@ -1972,10 +1897,8 @@ class SupplierRestockingList(CompanyReport):
from_location_ids.add(move.from_location.id)
to_location_ids.add(move.to_location.id)
- from_location_ids = location_obj.search(
- cursor, user, list(from_location_ids), context=context)
- to_location_ids = location_obj.search(
- cursor, user, list(to_location_ids), context=context)
+ from_location_ids = location_obj.search(list(from_location_ids))
+ to_location_ids = location_obj.search(list(to_location_ids))
return {'from_location_ids' : from_location_ids,
'to_location_ids' : to_location_ids}
@@ -1993,12 +1916,11 @@ SupplierRestockingList()
class CustomerReturnRestockingList(CompanyReport):
_name = 'stock.shipment.out.return.restocking_list'
- def parse(self, cursor, user, report, objects, datas, context):
+ def parse(self, report, objects, datas, localcontext):
move_obj = self.pool.get('stock.move')
shipment_in_obj = self.pool.get('stock.shipment.out.return')
- compare_context = self.get_compare_context(
- cursor, user, report, objects, datas, context)
+ compare_context = self.get_compare_context(report, objects, datas)
sorted_moves = {}
for shipment in objects:
@@ -2008,12 +1930,12 @@ class CustomerReturnRestockingList(CompanyReport):
self.get_compare_key(y, compare_context))
)
- context['moves'] = sorted_moves
+ localcontext['moves'] = sorted_moves
- return super(CustomerReturnRestockingList, self).parse(
- cursor, user, report, objects, datas, context)
+ return super(CustomerReturnRestockingList, self).parse(report,
+ objects, datas, localcontext)
- def get_compare_context(self, cursor, user, report, objects, datas, context):
+ def get_compare_context(self, report, objects, datas):
location_obj = self.pool.get('stock.location')
from_location_ids = set()
to_location_ids = set()
@@ -2022,10 +1944,8 @@ class CustomerReturnRestockingList(CompanyReport):
from_location_ids.add(move.from_location.id)
to_location_ids.add(move.to_location.id)
- from_location_ids = location_obj.search(
- cursor, user, list(from_location_ids), context=context)
- to_location_ids = location_obj.search(
- cursor, user, list(to_location_ids), context=context)
+ from_location_ids = location_obj.search(list(from_location_ids))
+ to_location_ids = location_obj.search(list(to_location_ids))
return {'from_location_ids' : from_location_ids,
'to_location_ids' : to_location_ids}
@@ -2043,12 +1963,11 @@ CustomerReturnRestockingList()
class InteralShipmentReport(CompanyReport):
_name = 'stock.shipment.internal.report'
- def parse(self, cursor, user, report, objects, datas, context):
+ def parse(self, report, objects, datas, localcontext=None):
move_obj = self.pool.get('stock.move')
shipment_in_obj = self.pool.get('stock.shipment.internal')
- compare_context = self.get_compare_context(
- cursor, user, report, objects, datas, context)
+ compare_context = self.get_compare_context(report, objects, datas)
sorted_moves = {}
for shipment in objects:
@@ -2058,12 +1977,12 @@ class InteralShipmentReport(CompanyReport):
self.get_compare_key(y, compare_context))
)
- context['moves'] = sorted_moves
+ localcontext['moves'] = sorted_moves
- return super(InteralShipmentReport, self).parse(
- cursor, user, report, objects, datas, context)
+ return super(InteralShipmentReport, self).parse(report, objects,
+ datas, localcontext)
- def get_compare_context(self, cursor, user, report, objects, datas, context):
+ def get_compare_context(self, report, objects, datas):
location_obj = self.pool.get('stock.location')
from_location_ids = set()
to_location_ids = set()
@@ -2072,10 +1991,8 @@ class InteralShipmentReport(CompanyReport):
from_location_ids.add(move.from_location.id)
to_location_ids.add(move.to_location.id)
- from_location_ids = location_obj.search(
- cursor, user, list(from_location_ids), context=context)
- to_location_ids = location_obj.search(
- cursor, user, list(to_location_ids), context=context)
+ from_location_ids = location_obj.search(list(from_location_ids))
+ to_location_ids = location_obj.search(list(to_location_ids))
return {'from_location_ids' : from_location_ids,
'to_location_ids' : to_location_ids}
diff --git a/stock.xml b/stock.xml
index dadfb11..15752b9 100644
--- a/stock.xml
+++ b/stock.xml
@@ -15,6 +15,9 @@ this repository contains the full copyright notices and license terms. -->
<record model="res.user" id="res.user_admin">
<field name="groups" eval="[('add', ref('group_stock_admin')), ('add', ref('group_stock')), ('add', ref('group_stock_force_assignment'))]"/>
</record>
+ <record model="res.user" id="res.user_trigger">
+ <field name="groups" eval="[('add', ref('group_stock_admin')), ('add', ref('group_stock')), ('add', ref('group_stock_force_assignment'))]"/>
+ </record>
<menuitem name="Inventory Management" sequence="3" id="menu_stock"
icon="tryton-package"/>
diff --git a/tests/test_stock.py b/tests/test_stock.py
index 8294670..d5f9b30 100644
--- a/tests/test_stock.py
+++ b/tests/test_stock.py
@@ -24,7 +24,7 @@ class StockTestCase(unittest.TestCase):
'''
Test views.
'''
- self.assertRaises(Exception, test_view('stock'))
+ test_view('stock')
def suite():
suite = trytond.tests.test_tryton.suite()
diff --git a/trytond_stock.egg-info/PKG-INFO b/trytond_stock.egg-info/PKG-INFO
index a89d0c5..f1493d5 100644
--- a/trytond_stock.egg-info/PKG-INFO
+++ b/trytond_stock.egg-info/PKG-INFO
@@ -1,6 +1,6 @@
Metadata-Version: 1.0
Name: trytond-stock
-Version: 1.6.1
+Version: 1.8.0
Summary: Stock Management and Inventory Control with:
- Location definition
- Stock move
@@ -17,7 +17,7 @@ Home-page: http://www.tryton.org/
Author: B2CK
Author-email: info at b2ck.com
License: GPL-3
-Download-URL: http://downloads.tryton.org/1.6/
+Download-URL: http://downloads.tryton.org/1.8/
Description: UNKNOWN
Platform: UNKNOWN
Classifier: Development Status :: 5 - Production/Stable
diff --git a/trytond_stock.egg-info/requires.txt b/trytond_stock.egg-info/requires.txt
index 46a1b84..d599c48 100644
--- a/trytond_stock.egg-info/requires.txt
+++ b/trytond_stock.egg-info/requires.txt
@@ -1,5 +1,5 @@
-trytond_party >= 1.6, < 1.7
-trytond_product >= 1.6, < 1.7
-trytond_company >= 1.6, < 1.7
-trytond_currency >= 1.6, < 1.7
-trytond >= 1.6, < 1.7
\ No newline at end of file
+trytond_party >= 1.8, < 1.9
+trytond_product >= 1.8, < 1.9
+trytond_company >= 1.8, < 1.9
+trytond_currency >= 1.8, < 1.9
+trytond >= 1.8, < 1.9
\ No newline at end of file
commit e1d206fba8b25e3dbcbb71695acceddb4f189fe7
Author: Mathias Behrle <mathiasb at mbsolutions.selfip.biz>
Date: Tue Aug 31 21:41:16 2010 +0200
Adding upstream version 1.6.1.
diff --git a/CHANGELOG b/CHANGELOG
index 2673af6..14170ff 100644
--- a/CHANGELOG
+++ b/CHANGELOG
@@ -1,3 +1,7 @@
+Version 1.6.1 - 2010-08-31
+* Bug fixes (see mercurial logs for details)
+* Security fix to use safe_eval instead of eval
+
Version 1.6.0 - 2010-05-11
* Bug fixes (see mercurial logs for details)
* Use model singleton to define shipment sequences
diff --git a/PKG-INFO b/PKG-INFO
index 73c7496..1e25d37 100644
--- a/PKG-INFO
+++ b/PKG-INFO
@@ -1,6 +1,6 @@
Metadata-Version: 1.0
Name: trytond_stock
-Version: 1.6.0
+Version: 1.6.1
Summary: Stock Management and Inventory Control with:
- Location definition
- Stock move
diff --git a/__tryton__.py b/__tryton__.py
index 8dafe1d..89bbb17 100644
--- a/__tryton__.py
+++ b/__tryton__.py
@@ -6,7 +6,7 @@
'name_es_CO': 'Inventarios',
'name_es_ES': 'Gestión de existencias',
'name_fr_FR': 'Gestion des stocks',
- 'version': '1.6.0',
+ 'version': '1.6.1',
'author': 'B2CK',
'email': 'info at b2ck.com',
'website': 'http://www.tryton.org/',
diff --git a/inventory.py b/inventory.py
index 15259e7..6331f19 100644
--- a/inventory.py
+++ b/inventory.py
@@ -176,9 +176,12 @@ class Inventory(ModelWorkflow, ModelSQL, ModelView):
line.product.type == 'stockable'):
line_obj.delete(cursor, user, line.id, context=context)
continue
- quantity, uom_id = 0.0, product2uom[line.product.id]
if line.product.id in product_qty:
quantity, uom_id = product_qty.pop(line.product.id)
+ elif line.product.id in product2uom:
+ quantity, uom_id = 0.0, product2uom[line.product.id]
+ else:
+ quantity, uom_id = 0.0, line.product.default_uom.id
values = line_obj.update_values4complete(cursor, user,
line, quantity, uom_id, context=context)
if values:
diff --git a/product.py b/product.py
index ad2e6c2..df2aaba 100644
--- a/product.py
+++ b/product.py
@@ -4,6 +4,7 @@ from trytond.model import ModelView, ModelSQL, fields
from trytond.wizard import Wizard
from trytond.pyson import PYSONEncoder
import datetime
+from trytond.tools import safe_eval
class Template(ModelSQL, ModelView):
@@ -105,7 +106,7 @@ class Product(ModelSQL, ModelView):
return False
if operator == "=":
operator= "=="
- return (eval(str(value) + operator + str(operand)))
+ return (safe_eval(str(value) + operator + str(operand)))
def search_quantity(self, cursor, user, name, domain=None, context=None):
date_obj = self.pool.get('ir.date')
diff --git a/trytond_stock.egg-info/PKG-INFO b/trytond_stock.egg-info/PKG-INFO
index 6c15035..a89d0c5 100644
--- a/trytond_stock.egg-info/PKG-INFO
+++ b/trytond_stock.egg-info/PKG-INFO
@@ -1,6 +1,6 @@
Metadata-Version: 1.0
Name: trytond-stock
-Version: 1.6.0
+Version: 1.6.1
Summary: Stock Management and Inventory Control with:
- Location definition
- Stock move
commit e05774d23f88da0090f6140cb2aff6949c2298fe
Author: Mathias Behrle <mathiasb at mbsolutions.selfip.biz>
Date: Wed May 12 12:52:12 2010 +0200
Adding upstream version 1.6.0.
diff --git a/CHANGELOG b/CHANGELOG
index 1f7dc0c..2673af6 100644
--- a/CHANGELOG
+++ b/CHANGELOG
@@ -1,8 +1,7 @@
-Version 1.4.2 - 2010-02-17
-* Some bug fixes (see mercurial logs for details)
-
-Version 1.4.1 - 2009-11-24
-* Some bug fixes (see mercurial logs for details)
+Version 1.6.0 - 2010-05-11
+* Bug fixes (see mercurial logs for details)
+* Use model singleton to define shipment sequences
+* Add default search value on inventory, move and shipments
Version 1.4.0 - 2009-10-19
* Bug fixes (see mercurial logs for details)
diff --git a/MANIFEST.in b/MANIFEST.in
index b2a140e..dcb2afa 100644
--- a/MANIFEST.in
+++ b/MANIFEST.in
@@ -7,5 +7,4 @@ include LICENSE
include *.xml
include *.odt
include *.csv
-include tests/*
include doc/*
diff --git a/PKG-INFO b/PKG-INFO
index c216b04..73c7496 100644
--- a/PKG-INFO
+++ b/PKG-INFO
@@ -1,6 +1,6 @@
Metadata-Version: 1.0
Name: trytond_stock
-Version: 1.4.2
+Version: 1.6.0
Summary: Stock Management and Inventory Control with:
- Location definition
- Stock move
@@ -17,7 +17,7 @@ Home-page: http://www.tryton.org/
Author: B2CK
Author-email: info at b2ck.com
License: GPL-3
-Download-URL: http://downloads.tryton.org/1.4/
+Download-URL: http://downloads.tryton.org/1.6/
Description: UNKNOWN
Platform: UNKNOWN
Classifier: Development Status :: 5 - Production/Stable
diff --git a/__init__.py b/__init__.py
index 4b4a264..e5ca873 100644
--- a/__init__.py
+++ b/__init__.py
@@ -6,3 +6,4 @@ from shipment import *
from move import *
from product import *
from inventory import *
+from configuration import *
diff --git a/__tryton__.py b/__tryton__.py
index 08b8e8b..8dafe1d 100644
--- a/__tryton__.py
+++ b/__tryton__.py
@@ -6,7 +6,7 @@
'name_es_CO': 'Inventarios',
'name_es_ES': 'Gestión de existencias',
'name_fr_FR': 'Gestion des stocks',
- 'version': '1.4.2',
+ 'version': '1.6.0',
'author': 'B2CK',
'email': 'info at b2ck.com',
'website': 'http://www.tryton.org/',
@@ -84,6 +84,7 @@ Et les rapports:
'move.xml',
'inventory.xml',
'party.xml',
+ 'configuration.xml',
],
'translation': [
'de_DE.csv',
diff --git a/configuration.py b/configuration.py
new file mode 100644
index 0000000..e8f4c18
--- /dev/null
+++ b/configuration.py
@@ -0,0 +1,38 @@
+#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 trytond.model import ModelView, ModelSQL, ModelSingleton, fields
+from trytond.pyson import Eval
+
+
+class Configuration(ModelSingleton, ModelSQL, ModelView):
+ 'Stock Configuration'
+ _name = 'stock.configuration'
+ _description = __doc__
+
+ shipment_in_sequence = fields.Property(fields.Many2One('ir.sequence',
+ 'Supplier Shipment Sequence', domain=[
+ ('company', 'in', [Eval('company'), False]),
+ ('code', '=', 'stock.shipment.in'),
+ ], required=True))
+ shipment_in_return_sequence = fields.Property(fields.Many2One(
+ 'ir.sequence', 'Supplier Return Shipment Sequence', domain=[
+ ('company', 'in', [Eval('company'), False]),
+ ('code', '=', 'stock.shipment.in.return'),
+ ], required=True))
+ shipment_out_sequence = fields.Property(fields.Many2One( 'ir.sequence',
+ 'Customer Shipment Sequence', domain=[
+ ('company', 'in', [Eval('company'), False]),
+ ('code', '=', 'stock.shipment.out'),
+ ], required=True))
+ shipment_out_return_sequence = fields.Property(fields.Many2One(
+ 'ir.sequence', 'Customer Return Shipment Sequence', domain=[
+ ('company', 'in', [Eval('company'), False]),
+ ('code', '=', 'stock.shipment.out.return'),
+ ], required=True))
+ shipment_internal_sequence = fields.Property(fields.Many2One(
+ 'ir.sequence', 'Internal Shipment Sequence', domain=[
+ ('company', 'in', [Eval('company'), False]),
+ ('code', '=', 'stock.shipment.internal'),
+ ], required=True))
+
+Configuration()
diff --git a/configuration.xml b/configuration.xml
new file mode 100644
index 0000000..ca1bd70
--- /dev/null
+++ b/configuration.xml
@@ -0,0 +1,77 @@
+<?xml version="1.0"?>
+<!-- This file is part of Tryton. The COPYRIGHT file at the top level of
+this repository contains the full copyright notices and license terms. -->
+<tryton>
+ <data>
+ <record model="ir.ui.view" id="stock_configuration_view_form">
+ <field name="model">stock.configuration</field>
+ <field name="type">form</field>
+ <field name="arch" type="xml">
+ <![CDATA[
+ <form string="Stock Configuration">
+ <label name="shipment_in_sequence"/>
+ <field name="shipment_in_sequence"/>
+ <label name="shipment_in_return_sequence"/>
+ <field name="shipment_in_return_sequence"/>
+ <label name="shipment_out_sequence"/>
+ <field name="shipment_out_sequence"/>
+ <label name="shipment_out_return_sequence"/>
+ <field name="shipment_out_return_sequence"/>
+ <label name="shipment_internal_sequence"/>
+ <field name="shipment_internal_sequence"/>
+ </form>
+ ]]>
+ </field>
+ </record>
+ <record model="ir.action.act_window" id="act_stock_configuration_form">
+ <field name="name">Stock Configuration</field>
+ <field name="res_model">stock.configuration</field>
+ <field name="view_type">form</field>
+ </record>
+ <record model="ir.action.act_window.view"
+ id="act_stock_configuration_view1">
+ <field name="sequence" eval="1"/>
+ <field name="view" ref="stock_configuration_view_form"/>
+ <field name="act_window" ref="act_stock_configuration_form"/>
+ </record>
+ <menuitem parent="menu_configuration"
+ action="act_stock_configuration_form"
+ id="menu_stock_configuration" icon="tryton-list"/>
+
+ <record model="ir.property" id="property_shipment_in_sequence">
+ <field name="name">shipment_in_sequence</field>
+ <field name="field"
+ search="[('model.model', '=', 'stock.configuration'), ('name', '=', 'shipment_in_sequence')]"/>
+ <field name="value" eval="'ir.sequence,' + str(ref('sequence_shipment_in'))"/>
+ </record>
+
+ <record model="ir.property" id="property_shipment_in_return_sequence">
+ <field name="name">shipment_int_return_sequence</field>
+ <field name="field"
+ search="[('model.model', '=', 'stock.configuration'), ('name', '=', 'shipment_in_return_sequence')]"/>
+ <field name="value" eval="'ir.sequence,' + str(ref('sequence_shipment_in_return'))"/>
+ </record>
+
+ <record model="ir.property" id="property_shipment_out_sequence">
+ <field name="name">shipment_out_sequence</field>
+ <field name="field"
+ search="[('model.model', '=', 'stock.configuration'), ('name', '=', 'shipment_out_sequence')]"/>
+ <field name="value" eval="'ir.sequence,' + str(ref('sequence_shipment_out'))"/>
+ </record>
+
+ <record model="ir.property" id="property_shipment_out_return_sequence">
+ <field name="name">shipment_out_return_sequence</field>
+ <field name="field"
+ search="[('model.model', '=', 'stock.configuration'), ('name', '=', 'shipment_out_return_sequence')]"/>
+ <field name="value" eval="'ir.sequence,' + str(ref('sequence_shipment_out_return'))"/>
+ </record>
+
+ <record model="ir.property" id="property_shipment_internal_sequence">
+ <field name="name">shipment_internal_sequence</field>
+ <field name="field"
+ search="[('model.model', '=', 'stock.configuration'), ('name', '=', 'shipment_internal_sequence')]"/>
+ <field name="value" eval="'ir.sequence,' + str(ref('sequence_shipment_internal'))"/>
+ </record>
+
+ </data>
+</tryton>
diff --git a/de_DE.csv b/de_DE.csv
index 85cb042..5e31c75 100644
--- a/de_DE.csv
+++ b/de_DE.csv
@@ -14,9 +14,11 @@ error,stock.move,0,You can not set state to draft!,"Status ""Entwurf"" kann nich
error,stock.move,0,You can not use service products for a move!,Dienstleistungen können nicht in Warenbewegungen verwendet werden!,0
error,stock.move,0,You can only delete draft or cancelled moves!,"Nur Bewegungen mit Status ""Entwurf"" oder ""Abgebrochen"" können gelöscht werden!",0
error,stock.shipment.in,0,Incoming Moves must have the warehouse input location as destination location!,Eingehende Bewegungen müssen den Eingangsbereich des Warenlagers als Zielort haben!,0
-error,stock.shipment.in,0,Inventory Moves must have the warehouse input location as source location!,Eingehende Bewegungen müssen den Eingangsbereich des Warenlagers als Herkunftsort haben!,0
+error,stock.shipment.in,0,Inventory Moves must have the warehouse input location as source location!,Bestandsänderungen müssen den Eingangsbereich des Warenlagers als Herkunftsort haben!,0
+error,stock.shipment.out,0,Inventory Moves must have the warehouse output location as destination location!,Bestandsänderungen müssen den Ausgangsbereich des Warenlagers als Zielort haben!,0
+error,stock.shipment.out,0,Outgoing Moves must have the warehouse output location as source location!,Ausgehende Bewegungen müssen den Ausgangsbereich des Warenlagers als Herkunftsort haben!,0
error,stock.shipment.out.return,0,Incoming Moves must have the warehouse input location as destination location!,Eingehende Bewegungen müssen den Eingangsbereich des Warenlagers als Zielort haben!,0
-error,stock.shipment.out.return,0,Inventory Moves must have the warehouse input location as source location!,Eingehende Bewegungen müssen den Eingangsbereich des Warenlagers als Herkunftsort haben!,0
+error,stock.shipment.out.return,0,Inventory Moves must have the warehouse input location as source location!,Bestandsänderungen müssen den Eingangsbereich des Warenlagers als Herkunftsort haben!,0
error,stock.shipment.out.return.create,0,The shipment with code %s is not yet sent.,Der Lieferposten mit Code %s ist noch nicht erledigt.,0
error,stock.shipment.out.return.create,0,You can not create return shipment,Warenrücknahme nicht möglich!,0
field,"party.address,delivery",0,Delivery,Lieferadresse,0
@@ -26,6 +28,12 @@ field,"product.product,forecast_quantity",0,Forecast Quantity,Voraussichtliche A
field,"product.product,quantity",0,Quantity,Anzahl,0
field,"product.template,forecast_quantity",0,Forecast Quantity,Voraussichtliche Anzahl,0
field,"product.template,quantity",0,Quantity,Anzahl,0
+field,"stock.configuration,rec_name",0,Name,Name,0
+field,"stock.configuration,shipment_in_return_sequence",0,Supplier Return Shipment Sequence,Nummernkreis Warenrückgabe,0
+field,"stock.configuration,shipment_in_sequence",0,Supplier Shipment Sequence,Nummernkreis Lieferposten von Lieferant,0
+field,"stock.configuration,shipment_internal_sequence",0,Internal Shipment Sequence,Nummernkreis Interne Lieferposten,0
+field,"stock.configuration,shipment_out_return_sequence",0,Customer Return Shipment Sequence,Nummernkreis Warenrücknahme,0
+field,"stock.configuration,shipment_out_sequence",0,Customer Shipment Sequence,Nummernkreis Lieferposten an Kunde,0
field,"stock.inventory,company",0,Company,Unternehmen,0
field,"stock.inventory,date",0,Date,Datum,0
field,"stock.inventory.line,expected_quantity",0,Expected Quantity,Erwartete Anzahl,0
@@ -86,31 +94,31 @@ field,"stock.shipment.in,inventory_moves",0,Inventory Moves,Bestandsänderungen,
field,"stock.shipment.in,moves",0,Moves,Bewegungen,0
field,"stock.shipment.in,planned_date",0,Planned Date,Geplantes Datum,0
field,"stock.shipment.in,rec_name",0,Name,Name,0
-field,"stock.shipment.in,reference",0,Reference,Referenz,0
-field,"stock.shipment.in.return.assign.ask_force,moves",0,Moves,Bewegungen,0
+field,"stock.shipment.in,reference",0,Reference,Beleg-Nr.,0
+field,"stock.shipment.in.return.assign.assign_failed,moves",0,Moves,Lagerbewegungen,0
field,"stock.shipment.in.return,code",0,Code,Code,0
field,"stock.shipment.in.return,effective_date",0,Effective Date,Effektives Datum,0
field,"stock.shipment.in.return,from_location",0,From Location,Von Lagerort,0
field,"stock.shipment.in.return,moves",0,Moves,Bewegungen,0
field,"stock.shipment.in.return,planned_date",0,Planned Date,Geplantes Datum,0
field,"stock.shipment.in.return,rec_name",0,Name,Name,0
-field,"stock.shipment.in.return,reference",0,Reference,Referenz,0
+field,"stock.shipment.in.return,reference",0,Reference,Beleg-Nr.,0
field,"stock.shipment.in.return,state",0,State,Status,0
field,"stock.shipment.in.return,to_location",0,To Location,Zu Lagerort,0
field,"stock.shipment.in,state",0,State,Status,0
field,"stock.shipment.in,supplier",0,Supplier,Lieferant,0
-field,"stock.shipment.internal.assign.ask_force,moves",0,Moves,Bewegungen,0
+field,"stock.shipment.internal.assign.assign_failed,moves",0,Moves,Bewegungen,0
field,"stock.shipment.internal,code",0,Code,Code,0
field,"stock.shipment.internal,effective_date",0,Effective Date,Effektives Datum,0
field,"stock.shipment.internal,from_location",0,From Location,Von Lagerort,0
field,"stock.shipment.internal,moves",0,Moves,Bewegungen,0
field,"stock.shipment.internal,planned_date",0,Planned Date,Geplantes Datum,0
field,"stock.shipment.internal,rec_name",0,Name,Name,0
-field,"stock.shipment.internal,reference",0,Reference,Referenz,0
+field,"stock.shipment.internal,reference",0,Reference,Beleg-Nr.,0
field,"stock.shipment.internal,state",0,State,Status,0
field,"stock.shipment.internal,to_location",0,To Location,Zu Lagerort,0
field,"stock.shipment.in,warehouse",0,Warehouse,Warenlager,0
-field,"stock.shipment.out.assign.ask_force,inventory_moves",0,Inventory Moves,Bestandsänderungen,0
+field,"stock.shipment.out.assign.assign_failed,inventory_moves",0,Inventory Moves,Bestandsänderungen,0
field,"stock.shipment.out,code",0,Code,Code,0
field,"stock.shipment.out,customer",0,Customer,Kunde,0
field,"stock.shipment.out,delivery_address",0,Delivery Address,Lieferadresse,0
@@ -120,7 +128,7 @@ field,"stock.shipment.out,moves",0,Moves,Bewegungen,0
field,"stock.shipment.out,outgoing_moves",0,Outgoing Moves,Ausgehende Bewegungen,0
field,"stock.shipment.out,planned_date",0,Planned Date,Geplantes Datum,0
field,"stock.shipment.out,rec_name",0,Name,Name,0
-field,"stock.shipment.out,reference",0,Reference,Referenz,0
+field,"stock.shipment.out,reference",0,Reference,Beleg-Nr.,0
field,"stock.shipment.out.return,code",0,Code,Code,0
field,"stock.shipment.out.return,customer",0,Customer,Kunde,0
field,"stock.shipment.out.return,delivery_address",0,Delivery Address,Lieferadresse,0
@@ -130,7 +138,7 @@ field,"stock.shipment.out.return,inventory_moves",0,Inventory Moves,Bestandsänd
field,"stock.shipment.out.return,moves",0,Moves,Bewegungen,0
field,"stock.shipment.out.return,planned_date",0,Planned Date,Geplantes Datum,0
field,"stock.shipment.out.return,rec_name",0,Name,Name,0
-field,"stock.shipment.out.return,reference",0,Reference,Referenz,0
+field,"stock.shipment.out.return,reference",0,Reference,Beleg-Nr.,0
field,"stock.shipment.out.return,state",0,State,Status,0
field,"stock.shipment.out.return,warehouse",0,Warehouse,Warenlager,0
field,"stock.shipment.out,state",0,State,Status,0
@@ -163,11 +171,13 @@ model,"ir.action,name",act_shipment_out_form_ready,Customer Shipments Ready for
model,"ir.action,name",act_shipment_out_form_waiting,Customer Shipments Waiting Assignation,Zuzuweisende Lieferposten an Kunden,0
model,"ir.action,name",report_shipment_out_delivery_note,Delivery Note,Lieferschein,0
model,"ir.action,name",act_shipment_internal_draft_form,Draft Internal Shipments,Entwürfe (Interne Lieferposten),0
+model,"ir.action,name",act_inventory_form_draft,Draft Inventories,Entwürfe Bestandskorrekturen,0
model,"ir.action,name",act_location_form,Edit Locations,Lagerorte bearbeiten,0
model,"ir.action,name",report_shipment_internal,Internal Shipment,Interner Lieferposten,0
model,"ir.action,name",act_shipment_internal_form,Internal Shipments,Interne Lieferposten,0
model,"ir.action,name",act_shipment_internal_waiting_form,Internal Shipments Waiting Assignation,Zuzuweisende Interne Lieferposten,0
model,"ir.action,name",act_inventory_form,Inventories,Bestandskorrekturen,0
+model,"ir.action,name",act_inventory_form2,Inventories,Bestandskorrekturen,0
model,"ir.action,name",act_location_tree,Locations,Lagerorte,0
model,"ir.action,name",act_move_form,Moves,Lagerbewegungen,0
model,"ir.action,name",act_move_form_supp,Moves from Suppliers,Bewegungen von Lieferanten,0
@@ -185,6 +195,7 @@ model,"ir.action,name",act_location_quantity_tree,Product Stock,Lagerbestand,0
model,"ir.action,name",act_shipment_in_form_received,Received Supplier shipments,Erhaltene Lieferposten von Lieferanten,0
model,"ir.action,name",report_shipment_in_restocking_list,Restocking List,Einlagerungsliste,0
model,"ir.action,name",report_shipment_out_return_restocking_list,Restocking List,Einlagerungsliste,0
+model,"ir.action,name",act_stock_configuration_form,Stock Configuration,Einstellungen Lager,0
model,"ir.action,name",act_shipment_in_return_form,Supplier Return Shipments,Warenrückgaben (an Lieferanten),0
model,"ir.action,name",act_shipment_in_form,Supplier Shipments,Lieferposten von Lieferanten,0
model,"ir.action,name",act_shipment_out_form3,Supplier Shipments,Lieferposten als Lieferant,0
@@ -206,6 +217,7 @@ model,"ir.ui.menu,name",menu_shipment_out_form,Customer Shipments,Lieferposten a
model,"ir.ui.menu,name",menu_shipment_out_ready,Customer Shipments Ready for Shipping,Versandbereite Lieferposten an Kunden,0
model,"ir.ui.menu,name",menu_shipment_out_waiting,Customer Shipments Waiting Assignation,Zuzuweisende Lieferposten an Kunden,0
model,"ir.ui.menu,name",menu_shipment_internal_draft_form,Draft Internal Shipments,Entwürfe (Interne Lieferposten),0
+model,"ir.ui.menu,name",menu_inventory_form_draft,Draft Inventories,Entwürfe Bestandskorrekturen,0
model,"ir.ui.menu,name",menu_location_form,Edit Locations,Lagerorte bearbeiten,0
model,"ir.ui.menu,name",menu_shipment_internal_form,Internal Shipments,Interne Lieferposten,0
model,"ir.ui.menu,name",menu_shipment_internal_waiting_form,Internal Shipments Waiting Assignation,Zuzuweisende Interne Lieferposten,0
@@ -218,15 +230,18 @@ model,"ir.ui.menu,name",menu_move_form_supp_proceed,Moves from Suppliers Waiting
model,"ir.ui.menu,name",menu_move_form_cust,Moves to Customers,Bewegungen zu Kunden,0
model,"ir.ui.menu,name",menu_shipment_out_return_form2,New Customer Return Shipment,Neue Warenrücknahme (von Kunde),0
model,"ir.ui.menu,name",menu_shipment_internal_new_form,New Internal Shipment,Neuer Interner Lieferposten,0
+model,"ir.ui.menu,name",menu_inventory_form_new,New Inventory,Neue Bestandskorrektur,0
model,"ir.ui.menu,name",menu_shipment_in_return_new_form,New Supplier Return Shipment,Neue Warenrückgabe (an Lieferant),0
model,"ir.ui.menu,name",menu_shipment_in_form2,New Supplier Shipment,Neuer Lieferposten von Lieferant,0
model,"ir.ui.menu,name",menu_shipment_in_received,Received Supplier shipments,Erhaltene Lieferposten von Lieferanten,0
model,"ir.ui.menu,name",menu_reporting,Reporting,Berichte,0
+model,"ir.ui.menu,name",menu_stock_configuration,Stock Configuration,Einstellungen Lager,0
model,"ir.ui.menu,name",menu_shipment_in_return_form,Supplier Return Shipments,Warenrückgaben (an Lieferanten),0
model,"ir.ui.menu,name",menu_shipment_in_form,Supplier Shipments,Lieferposten von Lieferanten,0
model,"res.group,name",group_stock,Stock,Lager,0
model,"res.group,name",group_stock_admin,Stock Administration,Lager Administration,0
model,"res.group,name",group_stock_force_assignment,Stock Force Assignment,Lager Zuweisungserzwingung,0
+model,"stock.configuration,name",0,Stock Configuration,Einstellungen Lager,0
model,"stock.inventory.line,name",0,Stock Inventory Line,Lager Lagerbestand Position,0
model,"stock.inventory,name",0,Stock Inventory,Lager Lagerbestand,0
model,"stock.location,name",location_customer,Customer,Kunde,0
@@ -241,11 +256,11 @@ model,"stock.location_stock_date.init,name",0,Compute stock quantities,Berechnun
model,"stock.move,name",0,Stock Move,Lager Bewegung,0
model,"stock.product_stock_date.init,name",0,Compute stock quantities,Berechnung Lagerbestände,0
model,"stock.shipment.in,name",0,Supplier Shipment,Lieferant Lieferposten,0
-model,"stock.shipment.in.return.assign.ask_force,name",0,Assign Supplier Return Shipment Ask Force,Zuweisung Lieferposten Warenrückgabe Erzwungen,0
+model,"stock.shipment.in.return.assign.assign_failed,name",0,Assign Supplier Return Shipment Assign Failed,Zuweisung Lieferposten Warenrückgabe Erzwungen,0
model,"stock.shipment.in.return,name",0,Supplier Return Shipment,Warenrückgabe Lieferant,0
-model,"stock.shipment.internal.assign.ask_force,name",0,Assign Shipment Internal Ask Force,Zuweisung Lieferposten Intern Erzwungen,0
+model,"stock.shipment.internal.assign.assign_failed,name",0,Assign Shipment Internal Assign Failed,Zuweisung Lieferposten Intern Erzwungen,0
model,"stock.shipment.internal,name",0,Internal Shipment,Interner Lieferposten,0
-model,"stock.shipment.out.assign.ask_force,name",0,Assign Shipment Out Ask Force,Zuweisung Lieferposten Ausgehend Erzwungen,0
+model,"stock.shipment.out.assign.assign_failed,name",0,Assign Shipment Out Assign Failed,Zuweisung Lieferposten Ausgehend Erzwungen,0
model,"stock.shipment.out,name",0,Customer Shipment,Lieferposten Kunde,0
model,"stock.shipment.out.return,name",0,Customer Return Shipment,Warenrücknahme Kunde,0
model,"workflow.activity,name",shipmentout_act_assigned,Assigned,Zugewiesen,0
@@ -289,7 +304,7 @@ odt,stock.shipment.in.restocking_list,0,Phone:,Telefon:,0
odt,stock.shipment.in.restocking_list,0,Planned Date:,Geplantes Datum:,0
odt,stock.shipment.in.restocking_list,0,Product,Artikel,0
odt,stock.shipment.in.restocking_list,0,Quantity,Anzahl,0
-odt,stock.shipment.in.restocking_list,0,Reference:,Referenz:,0
+odt,stock.shipment.in.restocking_list,0,Reference:,Beleg-Nr.:,0
odt,stock.shipment.in.restocking_list,0,Restocking List,Einlagerungsliste,0
odt,stock.shipment.in.restocking_list,0,Supplier:,Lieferant:,0
odt,stock.shipment.in.restocking_list,0,To Location,Zu Lagerort,0
@@ -304,7 +319,7 @@ odt,stock.shipment.internal.report,0,Phone:,Telefon:,0
odt,stock.shipment.internal.report,0,Planned Date:,Geplantes Datum:,0
odt,stock.shipment.internal.report,0,Product,Artikel,0
odt,stock.shipment.internal.report,0,Quantity,Anzahl,0
-odt,stock.shipment.internal.report,0,Reference:,Referenz:,0
+odt,stock.shipment.internal.report,0,Reference:,Beleg-Nr.:,0
odt,stock.shipment.internal.report,0,To Location,Zu Lagerort,0
odt,stock.shipment.internal.report,0,To Location:,Zu Lagerort:,0
odt,stock.shipment.out.delivery_note,0,/,/,0
@@ -315,7 +330,7 @@ odt,stock.shipment.out.delivery_note,0,E-Mail:,E-Mail:,0
odt,stock.shipment.out.delivery_note,0,Phone:,Telefon:,0
odt,stock.shipment.out.delivery_note,0,Product,Artikel,0
odt,stock.shipment.out.delivery_note,0,Quantity,Anzahl,0
-odt,stock.shipment.out.delivery_note,0,Reference:,Referenz:,0
+odt,stock.shipment.out.delivery_note,0,Reference:,Beleg-Nr.:,0
odt,stock.shipment.out.delivery_note,0,Shipment Number:,Lieferposten Nr.:,0
odt,stock.shipment.out.picking_list,0,/,/,0
odt,stock.shipment.out.picking_list,0,Code:,Code:,0
@@ -327,7 +342,7 @@ odt,stock.shipment.out.picking_list,0,Picking List,Pick Liste,0
odt,stock.shipment.out.picking_list,0,Planned Date:,Geplantes Datum:,0
odt,stock.shipment.out.picking_list,0,Product,Artikel,0
odt,stock.shipment.out.picking_list,0,Quantity,Anzahl,0
-odt,stock.shipment.out.picking_list,0,Reference:,Referenz:,0
+odt,stock.shipment.out.picking_list,0,Reference:,Beleg-Nr.:,0
odt,stock.shipment.out.picking_list,0,To Location,Zu Lagerort,0
odt,stock.shipment.out.picking_list,0,Warehouse:,Warenlager:,0
odt,stock.shipment.out.return.restocking_list,0,/,/,0
@@ -338,7 +353,7 @@ odt,stock.shipment.out.return.restocking_list,0,Phone:,Telefon:,0
odt,stock.shipment.out.return.restocking_list,0,Planned Date:,Geplantes Datum:,0
odt,stock.shipment.out.return.restocking_list,0,Product,Artikel,0
odt,stock.shipment.out.return.restocking_list,0,Quantity,Anzahl,0
-odt,stock.shipment.out.return.restocking_list,0,Reference:,Referenz:,0
+odt,stock.shipment.out.return.restocking_list,0,Reference:,Beleg-Nr.:,0
odt,stock.shipment.out.return.restocking_list,0,Restocking List,Einlagerungsliste,0
odt,stock.shipment.out.return.restocking_list,0,Supplier:,Lieferant:,0
odt,stock.shipment.out.return.restocking_list,0,To Location,Zu Lagerort,0
@@ -384,6 +399,7 @@ selection,"stock.shipment.out,state",0,Waiting,Wartend,0
view,party.party,0,Stock,Lager,0
view,party.party,0,_Stock,_Lager,0
view,product.product,0,Products,Artikel,0
+view,stock.configuration,0,Stock Configuration,Einstellungen Lager,0
view,stock.inventory,0,Add an inventory line for each missing products,Positionen für Bestandskorrektur um fehlende Artikel ergänzen,0
view,stock.inventory,0,All generated moves will be cancelled!,Sämtliche erzeugten Bewegungen werden rückgängig gemacht!,0
view,stock.inventory,0,Cancel,Annullieren,0
@@ -422,9 +438,9 @@ view,stock.shipment.in.return,0,Reset to Draft,Auf Entwurf zurücksetzen,0
view,stock.shipment.in.return,0,Supplier Return Shipment,Warenrückgabe Lieferant,0
view,stock.shipment.in.return,0,Supplier Return Shipments,Warenrückgaben (an Lieferanten),0
view,stock.shipment.in.return,0,Waiting,Wartend,0
-view,stock.shipment.in.return.assign.ask_force,0,Moves,Bewegungen,0
-view,stock.shipment.in.return.assign.ask_force,0,Unable to Assign,Fehlmenge Zuweisung,0
-view,stock.shipment.in.return.assign.ask_force,0,Unable to assign those products:,Folgende Artikel können nicht zugewiesen werden:,0
+view,stock.shipment.in.return.assign.assign_failed,0,Moves,Bewegungen,0
+view,stock.shipment.in.return.assign.assign_failed,0,Unable to Assign,Fehlmenge Zuweisung,0
+view,stock.shipment.in.return.assign.assign_failed,0,Unable to assign those products:,Folgende Artikel können nicht zugewiesen werden:,0
view,stock.shipment.internal,0,Assign,Zuweisen,0
view,stock.shipment.internal,0,Cancel,Annullieren,0
view,stock.shipment.internal,0,Done,Erledigt,0
@@ -436,9 +452,9 @@ view,stock.shipment.internal,0,Reset to Draft,Auf Entwurf zurücksetzen,0
view,stock.shipment.internal,0,Set Done,Auf Erledigt setzen,0
view,stock.shipment.internal,0,Set Waiting,Auf Wartend setzen,0
view,stock.shipment.internal,0,Waiting,Wartend,0
-view,stock.shipment.internal.assign.ask_force,0,Moves,Bewegungen,0
-view,stock.shipment.internal.assign.ask_force,0,Unable to Assign,Fehlmenge Zuweisung,0
-view,stock.shipment.internal.assign.ask_force,0,Unable to assign those products:,Folgende Artikel können nicht zugewiesen werden:,0
+view,stock.shipment.internal.assign.assign_failed,0,Moves,Bewegungen,0
+view,stock.shipment.internal.assign.assign_failed,0,Unable to Assign,Fehlmenge Zuweisung,0
+view,stock.shipment.internal.assign.assign_failed,0,Unable to assign those products:,Folgende Artikel können nicht zugewiesen werden:,0
view,stock.shipment.out,0,Are you sure to force assignation?,Zuweisung wirklich erzwingen?,0
view,stock.shipment.out,0,Assign,Zuweisen,0
view,stock.shipment.out,0,Cancel,Annullieren,0
@@ -455,9 +471,9 @@ view,stock.shipment.out,0,Set Done,Auf Erledigt setzen,0
view,stock.shipment.out,0,Set Waiting,Auf Wartend setzen,0
view,stock.shipment.out,0,Unpack,Entpackt,0
view,stock.shipment.out,0,Waiting,Wartend,0
-view,stock.shipment.out.assign.ask_force,0,Inventory Moves,Bestandsänderungen,0
-view,stock.shipment.out.assign.ask_force,0,Unable to Assign,Fehlmenge Zuweisung,0
-view,stock.shipment.out.assign.ask_force,0,Unable to assign those products:,Folgende Artikel können nicht zugewiesen werden:,0
+view,stock.shipment.out.assign.assign_failed,0,Inventory Moves,Bestandsänderungen,0
+view,stock.shipment.out.assign.assign_failed,0,Unable to Assign,Fehlmenge Zuweisung,0
+view,stock.shipment.out.assign.assign_failed,0,Unable to assign those products:,Folgende Artikel können nicht zugewiesen werden:,0
view,stock.shipment.out.return,0,Cancel,Annullieren,0
view,stock.shipment.out.return,0,Customer Return Shipment,Warenrücknahme Kunde,0
view,stock.shipment.out.return,0,Customer Return Shipments,Warenrücknahmen (von Kunden),0
@@ -473,7 +489,10 @@ wizard_button,"stock.product.open,init,end",0,Cancel,Abbrechen,0
wizard_button,"stock.product.open,init,open",0,Open,Ãffnen,0
wizard_button,"stock.shipment.in.return.assign,ask_force,end",0,Ok,OK,0
wizard_button,"stock.shipment.in.return.assign,ask_force,force",0,Force Assign,Zuweisung erzwingen,0
+wizard_button,"stock.shipment.in.return.assign,assign_failed,end",0,Ok,OK,0
wizard_button,"stock.shipment.internal.assign,ask_force,end",0,Ok,OK,0
wizard_button,"stock.shipment.internal.assign,ask_force,force",0,Force Assign,Zuweisung erzwingen,0
+wizard_button,"stock.shipment.internal.assign,assign_failed,end",0,Ok,OK,0
wizard_button,"stock.shipment.out.assign,ask_force,end",0,Ok,OK,0
wizard_button,"stock.shipment.out.assign,ask_force,force",0,Force Assign,Zuweisung erzwingen,0
+wizard_button,"stock.shipment.out.assign,assign_failed,end",0,Ok,OK,0
diff --git a/es_CO.csv b/es_CO.csv
index a4366eb..77d22cd 100644
--- a/es_CO.csv
+++ b/es_CO.csv
@@ -26,6 +26,12 @@ field,"product.product,forecast_quantity",0,Forecast Quantity,Cantidad Proyectad
field,"product.product,quantity",0,Quantity,Cantidad,0
field,"product.template,forecast_quantity",0,Forecast Quantity,Cantidad Proyectada,0
field,"product.template,quantity",0,Quantity,Cantidad,0
+field,"stock.configuration,rec_name",0,Name,Nombre de Contacto,1
+field,"stock.configuration,shipment_in_return_sequence",0,Supplier Return Shipment Sequence,Secuencia de retorno de envÃo al proveedor,0
+field,"stock.configuration,shipment_in_sequence",0,Supplier Shipment Sequence,Secuencia de envÃo al proveedor,0
+field,"stock.configuration,shipment_internal_sequence",0,Internal Shipment Sequence,Secuencia de envÃo interno,0
+field,"stock.configuration,shipment_out_return_sequence",0,Customer Return Shipment Sequence,Secuencia de retorno de envÃo al cliente ,0
+field,"stock.configuration,shipment_out_sequence",0,Customer Shipment Sequence,Secuencia de envÃo al cliente,0
field,"stock.inventory,company",0,Company,CompañÃa,0
field,"stock.inventory,date",0,Date,Fecha,0
field,"stock.inventory.line,expected_quantity",0,Expected Quantity,Cantidad Esperada,0
@@ -87,7 +93,7 @@ field,"stock.shipment.in,moves",0,Moves,Movimientos,0
field,"stock.shipment.in,planned_date",0,Planned Date,Fecha Planeada,0
field,"stock.shipment.in,rec_name",0,Name,Nombre,0
field,"stock.shipment.in,reference",0,Reference,Referencia,0
-field,"stock.shipment.in.return.assign.ask_force,moves",0,Moves,Movimientos,0
+field,"stock.shipment.in.return.assign.assign_failed,moves",0,Moves,Movimientos,0
field,"stock.shipment.in.return,code",0,Code,Código,0
field,"stock.shipment.in.return,effective_date",0,Effective Date,Fecha Efectiva,0
field,"stock.shipment.in.return,from_location",0,From Location,Lugar Inicial,0
@@ -99,7 +105,7 @@ field,"stock.shipment.in.return,state",0,State,Estado,0
field,"stock.shipment.in.return,to_location",0,To Location,Al Lugar:,0
field,"stock.shipment.in,state",0,State,Estado,0
field,"stock.shipment.in,supplier",0,Supplier,Proveedor,0
-field,"stock.shipment.internal.assign.ask_force,moves",0,Moves,Movimientos,0
+field,"stock.shipment.internal.assign.assign_failed,moves",0,Moves,Movimientos,0
field,"stock.shipment.internal,code",0,Code,Código,0
field,"stock.shipment.internal,effective_date",0,Effective Date,Fecha Efectiva,0
field,"stock.shipment.internal,from_location",0,From Location,Lugar Inicial,0
@@ -110,7 +116,7 @@ field,"stock.shipment.internal,reference",0,Reference,Referencia,0
field,"stock.shipment.internal,state",0,State,Estado,0
field,"stock.shipment.internal,to_location",0,To Location,Al Lugar:,0
field,"stock.shipment.in,warehouse",0,Warehouse,Depósito,0
-field,"stock.shipment.out.assign.ask_force,inventory_moves",0,Inventory Moves,Movimientos de Inventario,0
+field,"stock.shipment.out.assign.assign_failed,inventory_moves",0,Inventory Moves,Movimientos de Inventario,0
field,"stock.shipment.out,code",0,Code,Código,0
field,"stock.shipment.out,customer",0,Customer,Cliente,0
field,"stock.shipment.out,delivery_address",0,Delivery Address,Dirección de EnvÃo,0
@@ -161,11 +167,13 @@ model,"ir.action,name",act_shipment_out_form_ready,Customer Shipments Ready for
model,"ir.action,name",act_shipment_out_form_waiting,Customer Shipments Waiting Assignation,EnvÃos de Cliente esperando Asignación,0
model,"ir.action,name",report_shipment_out_delivery_note,Delivery Note,Nota de EnvÃo,0
model,"ir.action,name",act_shipment_internal_draft_form,Draft Internal Shipments,EnvÃos Internos en Borrador,0
+model,"ir.action,name",act_inventory_form_draft,Draft Inventories,Inventarios de Prueba,0
model,"ir.action,name",act_location_form,Edit Locations,Editar Lugares,0
model,"ir.action,name",report_shipment_internal,Internal Shipment,EnvÃo Interno,0
model,"ir.action,name",act_shipment_internal_form,Internal Shipments,EnvÃos Internos,0
model,"ir.action,name",act_shipment_internal_waiting_form,Internal Shipments Waiting Assignation,EnvÃos Internos esperando Asignación,0
model,"ir.action,name",act_inventory_form,Inventories,Inventarios,0
+model,"ir.action,name",act_inventory_form2,Inventories,Inventarios,1
model,"ir.action,name",act_location_tree,Locations,Lugares,0
model,"ir.action,name",act_move_form,Moves,Movimientos,0
model,"ir.action,name",act_move_form_supp,Moves from Suppliers,Movimientos de Proveedores,0
@@ -183,6 +191,7 @@ model,"ir.action,name",act_location_quantity_tree,Product Stock,Inventario de Pr
model,"ir.action,name",act_shipment_in_form_received,Received Supplier shipments,Empaques de Proveedores recibidos,0
model,"ir.action,name",report_shipment_in_restocking_list,Restocking List,Lista de Renovación de Inventario,0
model,"ir.action,name",report_shipment_out_return_restocking_list,Restocking List,Lista de Renovación de Inventario,0
+model,"ir.action,name",act_stock_configuration_form,Stock Configuration,Configuración del inventario,0
model,"ir.action,name",act_shipment_in_return_form,Supplier Return Shipments,Devolución al Proveedor,0
model,"ir.action,name",act_shipment_in_form,Supplier Shipments,EnvÃos del Proveedor,0
model,"ir.action,name",act_shipment_out_form3,Supplier Shipments,EnvÃos del Proveedor,0
@@ -204,6 +213,7 @@ model,"ir.ui.menu,name",menu_shipment_out_form,Customer Shipments,EnvÃos al Cli
model,"ir.ui.menu,name",menu_shipment_out_ready,Customer Shipments Ready for Shipping,EnvÃos de Cliente listos para EnvÃo,0
model,"ir.ui.menu,name",menu_shipment_out_waiting,Customer Shipments Waiting Assignation,EnvÃos de Cliente listos esperando Asignación,0
model,"ir.ui.menu,name",menu_shipment_internal_draft_form,Draft Internal Shipments,EnvÃos Internos en Borrador,0
+model,"ir.ui.menu,name",menu_inventory_form_draft,Draft Inventories,Inventarios de prueba,0
model,"ir.ui.menu,name",menu_location_form,Edit Locations,Editar Lugares,0
model,"ir.ui.menu,name",menu_shipment_internal_form,Internal Shipments,EnvÃo Internos,0
model,"ir.ui.menu,name",menu_shipment_internal_waiting_form,Internal Shipments Waiting Assignation,EnvÃo Internos esperando Asignación,0
@@ -216,15 +226,18 @@ model,"ir.ui.menu,name",menu_move_form_supp_proceed,Moves from Suppliers Waiting
model,"ir.ui.menu,name",menu_move_form_cust,Moves to Customers,Movimientos hacia Clientes,0
model,"ir.ui.menu,name",menu_shipment_out_return_form2,New Customer Return Shipment,Nueva Devolución al Cliente,0
model,"ir.ui.menu,name",menu_shipment_internal_new_form,New Internal Shipment,Nuevo EnvÃo Interno,0
+model,"ir.ui.menu,name",menu_inventory_form_new,New Inventory,Nuevo Inventario,0
model,"ir.ui.menu,name",menu_shipment_in_return_new_form,New Supplier Return Shipment,Nueva Devolución al Proveedor,0
model,"ir.ui.menu,name",menu_shipment_in_form2,New Supplier Shipment,Nuevo EnvÃo de Proveedor,0
model,"ir.ui.menu,name",menu_shipment_in_received,Received Supplier shipments,Empaques de Proveedores recibidos,0
model,"ir.ui.menu,name",menu_reporting,Reporting,Reportes,0
+model,"ir.ui.menu,name",menu_stock_configuration,Stock Configuration,Configuración de Inventario,0
model,"ir.ui.menu,name",menu_shipment_in_return_form,Supplier Return Shipments,Devolución al Proveedor,0
model,"ir.ui.menu,name",menu_shipment_in_form,Supplier Shipments,EnvÃo del Proveedor,0
model,"res.group,name",group_stock,Stock,Stock,0
model,"res.group,name",group_stock_admin,Stock Administration,Administración de existencia,0
model,"res.group,name",group_stock_force_assignment,Stock Force Assignment,,0
+model,"stock.configuration,name",0,stock.configuration,,0
model,"stock.inventory.line,name",0,Stock Inventory Line,LÃnea de existencia en Inventario ,0
model,"stock.inventory,name",0,Stock Inventory,Inventario de Existencia,0
model,"stock.location,name",location_customer,Customer,Cliente,0
@@ -239,11 +252,11 @@ model,"stock.location_stock_date.init,name",0,Compute stock quantities,Calcule c
model,"stock.move,name",0,Stock Move,Movimiento de Existencias,0
model,"stock.product_stock_date.init,name",0,Compute stock quantities,Calcule cantidad de existencia,0
model,"stock.shipment.in,name",0,Supplier Shipment,EnvÃo del Proveedor,0
-model,"stock.shipment.in.return.assign.ask_force,name",0,Assign Supplier Return Shipment Ask Force,Fuerce Pregunta de Asigne Devolución a Proveedor,0
+model,"stock.shipment.in.return.assign.assign_failed,name",0,Assign Supplier Return Shipment Assign Failed,Fuerce Pregunta de Asigne Devolución a Proveedor,1
model,"stock.shipment.in.return,name",0,Supplier Return Shipment,Devolución a Proveedor,0
-model,"stock.shipment.internal.assign.ask_force,name",0,Assign Shipment Internal Ask Force,Fuerce Pregunta de Asigne EnvÃo Interno,0
+model,"stock.shipment.internal.assign.assign_failed,name",0,Assign Shipment Internal Assign Failed,Fuerce Pregunta de Asigne EnvÃo Interno,1
model,"stock.shipment.internal,name",0,Internal Shipment,EnvÃo Interno,0
-model,"stock.shipment.out.assign.ask_force,name",0,Assign Shipment Out Ask Force,Fuerce Pregunta de Asigne EnvÃo,0
+model,"stock.shipment.out.assign.assign_failed,name",0,Assign Shipment Out Assign Failed,Fuerce Pregunta de Asigne EnvÃo,1
model,"stock.shipment.out,name",0,Customer Shipment,EnvÃo de Cliente,0
model,"stock.shipment.out.return,name",0,Customer Return Shipment,Devolución a Cliente,0
model,"workflow.activity,name",shipmentout_act_assigned,Assigned,Asignado,0
@@ -382,6 +395,7 @@ selection,"stock.shipment.out,state",0,Waiting,En Espera,0
view,party.party,0,Stock,Stock,0
view,party.party,0,_Stock,_Existencias,0
view,product.product,0,Products,Productos,0
+view,stock.configuration,0,Stock Configuration,Configuración del Inventario,0
view,stock.inventory,0,Add an inventory line for each missing products,Adicione una lÃnea de inventario para cada producto faltante,0
view,stock.inventory,0,All generated moves will be cancelled!,Se cancelarán todos los movimientos generados!,0
view,stock.inventory,0,Cancel,Cancelar,0
@@ -420,9 +434,9 @@ view,stock.shipment.in.return,0,Reset to Draft,Revertir a Borrador,0
view,stock.shipment.in.return,0,Supplier Return Shipment,Devolución de Proveedor,0
view,stock.shipment.in.return,0,Supplier Return Shipments,Devoluciones de Proveedor,0
view,stock.shipment.in.return,0,Waiting,En Espera,0
-view,stock.shipment.in.return.assign.ask_force,0,Moves,Movimientos,0
-view,stock.shipment.in.return.assign.ask_force,0,Unable to Assign,No es posible asignar,0
-view,stock.shipment.in.return.assign.ask_force,0,Unable to assign those products:,No es posible asignar esos productos:,0
+view,stock.shipment.in.return.assign.assign_failed,0,Moves,Movimientos,0
+view,stock.shipment.in.return.assign.assign_failed,0,Unable to Assign,No es posible asignar,0
+view,stock.shipment.in.return.assign.assign_failed,0,Unable to assign those products:,No es posible asignar esos productos:,0
view,stock.shipment.internal,0,Assign,Asignar,0
view,stock.shipment.internal,0,Cancel,Cancelar,0
view,stock.shipment.internal,0,Done,Hecho,0
@@ -434,9 +448,9 @@ view,stock.shipment.internal,0,Reset to Draft,Revertir a Borrador,0
view,stock.shipment.internal,0,Set Done,Marcar como Hecho,0
view,stock.shipment.internal,0,Set Waiting,Colocar en Espera,0
view,stock.shipment.internal,0,Waiting,En espera,0
-view,stock.shipment.internal.assign.ask_force,0,Moves,Movimientos,0
-view,stock.shipment.internal.assign.ask_force,0,Unable to Assign,No es posible asignar,0
-view,stock.shipment.internal.assign.ask_force,0,Unable to assign those products:,No es posible asignar esos productos:,0
+view,stock.shipment.internal.assign.assign_failed,0,Moves,Movimientos,0
+view,stock.shipment.internal.assign.assign_failed,0,Unable to Assign,No es posible asignar,0
+view,stock.shipment.internal.assign.assign_failed,0,Unable to assign those products:,No es posible asignar esos productos:,0
view,stock.shipment.out,0,Assign,Asignar,0
view,stock.shipment.out,0,Cancel,Cancelar,0
view,stock.shipment.out,0,Customer Shipment,EnvÃo de Cliente,0
@@ -452,9 +466,9 @@ view,stock.shipment.out,0,Set Done,Marcar como Hecho,0
view,stock.shipment.out,0,Set Waiting,Colocar en Espera,0
view,stock.shipment.out,0,Unpack,Sin empaque,0
view,stock.shipment.out,0,Waiting,En espera,0
-view,stock.shipment.out.assign.ask_force,0,Inventory Moves,Movimientos de Inventario,0
-view,stock.shipment.out.assign.ask_force,0,Unable to Assign,No es posible asignar,0
-view,stock.shipment.out.assign.ask_force,0,Unable to assign those products:,No es posible asignar esos productos:,0
+view,stock.shipment.out.assign.assign_failed,0,Inventory Moves,Movimientos de Inventario,0
+view,stock.shipment.out.assign.assign_failed,0,Unable to Assign,No es posible asignar,0
+view,stock.shipment.out.assign.assign_failed,0,Unable to assign those products:,No es posible asignar esos productos:,0
view,stock.shipment.out.return,0,Cancel,Cancelar,0
view,stock.shipment.out.return,0,Customer Return Shipment,Devolución a Cliente,0
view,stock.shipment.out.return,0,Customer Return Shipments,Devolución a Cliente,0
@@ -470,7 +484,10 @@ wizard_button,"stock.product.open,init,end",0,Cancel,Cancelar,0
wizard_button,"stock.product.open,init,open",0,Open,Abrir,0
wizard_button,"stock.shipment.in.return.assign,ask_force,end",0,Ok,Aceptar,0
wizard_button,"stock.shipment.in.return.assign,ask_force,force",0,Force Assign,Forzar Asignación,0
+wizard_button,"stock.shipment.in.return.assign,assign_failed,end",0,Ok,Aceptar,0
wizard_button,"stock.shipment.internal.assign,ask_force,end",0,Ok,Aceptar,0
wizard_button,"stock.shipment.internal.assign,ask_force,force",0,Force Assign,Forzar Asignación,0
+wizard_button,"stock.shipment.internal.assign,assign_failed,end",0,Ok,Aceptar,0
wizard_button,"stock.shipment.out.assign,ask_force,end",0,Ok,Aceptar,0
wizard_button,"stock.shipment.out.assign,ask_force,force",0,Force Assign,Forzar Asignación,0
+wizard_button,"stock.shipment.out.assign,assign_failed,end",0,Ok,Aceptar,0
diff --git a/es_ES.csv b/es_ES.csv
index 69ff3d5..2e9ce14 100644
--- a/es_ES.csv
+++ b/es_ES.csv
@@ -87,7 +87,7 @@ field,"stock.shipment.in,moves",0,Moves,Movimientos,0
field,"stock.shipment.in,planned_date",0,Planned Date,Fecha estimada,0
field,"stock.shipment.in,rec_name",0,Name,Nombre,0
field,"stock.shipment.in,reference",0,Reference,Referencia,0
-field,"stock.shipment.in.return.assign.ask_force,moves",0,Moves,Movimientos,0
+field,"stock.shipment.in.return.assign.assign_failed,moves",0,Moves,Movimientos,0
field,"stock.shipment.in.return,code",0,Code,Código,0
field,"stock.shipment.in.return,effective_date",0,Effective Date,Fecha efectiva,0
field,"stock.shipment.in.return,from_location",0,From Location,Desde ubicación,0
@@ -99,7 +99,7 @@ field,"stock.shipment.in.return,state",0,State,Estado,0
field,"stock.shipment.in.return,to_location",0,To Location,A ubicación,0
field,"stock.shipment.in,state",0,State,Estado,0
field,"stock.shipment.in,supplier",0,Supplier,Proveedor,0
-field,"stock.shipment.internal.assign.ask_force,moves",0,Moves,Movimientos,0
+field,"stock.shipment.internal.assign.assign_failed,moves",0,Moves,Movimientos,0
field,"stock.shipment.internal,code",0,Code,Código,0
field,"stock.shipment.internal,effective_date",0,Effective Date,Fecha efectiva,0
field,"stock.shipment.internal,from_location",0,From Location,Desde ubicación,0
@@ -110,7 +110,7 @@ field,"stock.shipment.internal,reference",0,Reference,Referencia,0
field,"stock.shipment.internal,state",0,State,Estado,0
field,"stock.shipment.internal,to_location",0,To Location,A ubicación,0
field,"stock.shipment.in,warehouse",0,Warehouse,Almacén,0
-field,"stock.shipment.out.assign.ask_force,inventory_moves",0,Inventory Moves,Movimientos de inventario,0
+field,"stock.shipment.out.assign.assign_failed,inventory_moves",0,Inventory Moves,Movimientos de inventario,0
field,"stock.shipment.out,code",0,Code,Código,0
field,"stock.shipment.out,customer",0,Customer,Cliente,0
field,"stock.shipment.out,delivery_address",0,Delivery Address,Dirección de envÃo,0
@@ -239,11 +239,11 @@ model,"stock.location_stock_date.init,name",0,Compute stock quantities,Calcular
model,"stock.move,name",0,Stock Move,Movimiento de existencias,0
model,"stock.product_stock_date.init,name",0,Compute stock quantities,Calcular cantidades de existencias,0
model,"stock.shipment.in,name",0,Supplier Shipment,EnvÃo de proveedor,0
-model,"stock.shipment.in.return.assign.ask_force,name",0,Assign Supplier Return Shipment Ask Force,Asignar envio interno de proveedor - Solicitud forzosa,0
+model,"stock.shipment.in.return.assign.assign_failed,name",0,Assign Supplier Return Shipment Ask Force,Asignar envio interno de proveedor - Solicitud forzosa,0
model,"stock.shipment.in.return,name",0,Supplier Return Shipment,Envio de devolución a proveedor,0
-model,"stock.shipment.internal.assign.ask_force,name",0,Assign Shipment Internal Ask Force,Asignar envio interno - Solicitud forzosa,0
+model,"stock.shipment.internal.assign.assign_failed,name",0,Assign Shipment Internal Ask Force,Asignar envio interno - Solicitud forzosa,0
model,"stock.shipment.internal,name",0,Internal Shipment,EnvÃo interno,0
-model,"stock.shipment.out.assign.ask_force,name",0,Assign Shipment Out Ask Force,Asignar envio de salida - Solicitud forzosa,0
+model,"stock.shipment.out.assign.assign_failed,name",0,Assign Shipment Out Ask Force,Asignar envio de salida - Solicitud forzosa,0
model,"stock.shipment.out,name",0,Customer Shipment,EnvÃo a cliente,0
model,"stock.shipment.out.return,name",0,Customer Return Shipment,Envio de devolución de cliente,0
model,"workflow.activity,name",shipmentout_act_assigned,Assigned,Asignado,0
@@ -420,9 +420,9 @@ view,stock.shipment.in.return,0,Reset to Draft,Restablecer a borrador,0
view,stock.shipment.in.return,0,Supplier Return Shipment,Envio de devolución a proveedor,0
view,stock.shipment.in.return,0,Supplier Return Shipments,Envios de devolución a proveedor,0
view,stock.shipment.in.return,0,Waiting,En espera,0
-view,stock.shipment.in.return.assign.ask_force,0,Moves,Movimientos,0
-view,stock.shipment.in.return.assign.ask_force,0,Unable to Assign,No es posible asignar,0
-view,stock.shipment.in.return.assign.ask_force,0,Unable to assign those products:,No es posible asignar esos productos:,0
+view,stock.shipment.in.return.assign.assign_failed,0,Moves,Movimientos,0
+view,stock.shipment.in.return.assign.assign_failed,0,Unable to Assign,No es posible asignar,0
+view,stock.shipment.in.return.assign.assign_failed,0,Unable to assign those products:,No es posible asignar esos productos:,0
view,stock.shipment.internal,0,Assign,Asignar,0
view,stock.shipment.internal,0,Cancel,Cancelar,0
view,stock.shipment.internal,0,Done,Terminado,0
@@ -434,9 +434,9 @@ view,stock.shipment.internal,0,Reset to Draft,Restablecer a borrador,0
view,stock.shipment.internal,0,Set Done,Marcar como terminado,0
view,stock.shipment.internal,0,Set Waiting,Colocar en espera,0
view,stock.shipment.internal,0,Waiting,En espera,0
-view,stock.shipment.internal.assign.ask_force,0,Moves,Movimientos,0
-view,stock.shipment.internal.assign.ask_force,0,Unable to Assign,No es posible asignar,0
-view,stock.shipment.internal.assign.ask_force,0,Unable to assign those products:,No es posible asignar esos productos:,0
+view,stock.shipment.internal.assign.assign_failed,0,Moves,Movimientos,0
+view,stock.shipment.internal.assign.assign_failed,0,Unable to Assign,No es posible asignar,0
+view,stock.shipment.internal.assign.assign_failed,0,Unable to assign those products:,No es posible asignar esos productos:,0
view,stock.shipment.out,0,Assign,Asignar,0
view,stock.shipment.out,0,Cancel,Cancelar,0
view,stock.shipment.out,0,Customer Shipment,EnvÃo a cliente,0
@@ -452,9 +452,9 @@ view,stock.shipment.out,0,Set Done,Marcar como terminado,0
view,stock.shipment.out,0,Set Waiting,Colocar en espera,0
view,stock.shipment.out,0,Unpack,Desempaquetar,0
view,stock.shipment.out,0,Waiting,En espera,0
-view,stock.shipment.out.assign.ask_force,0,Inventory Moves,Movimientos de inventario,0
-view,stock.shipment.out.assign.ask_force,0,Unable to Assign,No es posible asignar,0
-view,stock.shipment.out.assign.ask_force,0,Unable to assign those products:,No es posible asignar esos productos:,0
+view,stock.shipment.out.assign.assign_failed,0,Inventory Moves,Movimientos de inventario,0
+view,stock.shipment.out.assign.assign_failed,0,Unable to Assign,No es posible asignar,0
+view,stock.shipment.out.assign.assign_failed,0,Unable to assign those products:,No es posible asignar esos productos:,0
view,stock.shipment.out.return,0,Cancel,Cancelar,0
view,stock.shipment.out.return,0,Customer Return Shipment,Envio de devolución de cliente,0
view,stock.shipment.out.return,0,Customer Return Shipments,Envios de devolución de cliente,0
@@ -470,7 +470,10 @@ wizard_button,"stock.product.open,init,end",0,Cancel,Cancelar,0
wizard_button,"stock.product.open,init,open",0,Open,Abrir,0
wizard_button,"stock.shipment.in.return.assign,ask_force,end",0,Ok,Aceptar,0
wizard_button,"stock.shipment.in.return.assign,ask_force,force",0,Force Assign,Forzar asignación,0
+wizard_button,"stock.shipment.in.return.assign,assign_failed,end",0,Ok,Aceptar,0
wizard_button,"stock.shipment.internal.assign,ask_force,end",0,Ok,Aceptar,0
wizard_button,"stock.shipment.internal.assign,ask_force,force",0,Force Assign,Forzar asignación,0
+wizard_button,"stock.shipment.internal.assign,assign_failed,end",0,Ok,Aceptar,0
wizard_button,"stock.shipment.out.assign,ask_force,end",0,Ok,Aceptar,0
wizard_button,"stock.shipment.out.assign,ask_force,force",0,Force Assign,Forzar asignación,0
+wizard_button,"stock.shipment.out.assign,assign_failed,end",0,Ok,Aceptar,0
\ No newline at end of file
diff --git a/fr_FR.csv b/fr_FR.csv
index 89c2c9c..7cf6795 100644
--- a/fr_FR.csv
+++ b/fr_FR.csv
@@ -16,7 +16,7 @@ error,stock.move,0,You can only delete draft or cancelled moves!,Vous pouvez su
error,stock.shipment.in,0,Incoming Moves must have the warehouse input location as destination location!,Les mouvements d'entrée doivent avoir l'emplacement d'entrée de l'entrepôt comme destination !,0
error,stock.shipment.in,0,Inventory Moves must have the warehouse input location as source location!,Les mouvements d'inventaire doivent avoir l'emplacement d'entrée de l'entrepôt comme source !,0
error,stock.shipment.out.return,0,Incoming Moves must have the warehouse input location as destination location!,Les mouvements d'entrée doivent avoir l'emplacement d'entrée de l'entrepôt comme destination !,0
-error,stock.shipment.out.return,0,Inventory Moves must have the warehouse input location as source location!,Les mouvements d'inventaire doivent avoir l'emplacement d'entrée de l'entrepôt comme source!,0
+error,stock.shipment.out.return,0,Inventory Moves must have the warehouse input location as source location!,Les mouvements d'inventaire doivent avoir l'emplacement d'entrée de l'entrepôt comme source !,0
error,stock.shipment.out.return.create,0,The shipment with code %s is not yet sent.,L'emballage avec le code %s n'est pas encore envoyé.,0
error,stock.shipment.out.return.create,0,You can not create return shipment,Vous ne pouvez pas créer d'expédition retour,0
field,"party.address,delivery",0,Delivery,Livraison,0
@@ -26,6 +26,12 @@ field,"product.product,forecast_quantity",0,Forecast Quantity,Quantités prévis
field,"product.product,quantity",0,Quantity,Quantité,0
field,"product.template,forecast_quantity",0,Forecast Quantity,Quantité prévue,0
field,"product.template,quantity",0,Quantity,Quantité,0
+field,"stock.configuration,rec_name",0,Name,Nom,0
+field,"stock.configuration,shipment_in_return_sequence",0,Supplier Return Shipment Sequence,Séquence des retours expédition fournisseur,0
+field,"stock.configuration,shipment_in_sequence",0,Supplier Shipment Sequence,Séquence des expédition fournisseur,0
+field,"stock.configuration,shipment_internal_sequence",0,Internal Shipment Sequence,Séquence des expédition interne,0
+field,"stock.configuration,shipment_out_return_sequence",0,Customer Return Shipment Sequence,Séquence des retours d'expédition client,0
+field,"stock.configuration,shipment_out_sequence",0,Customer Shipment Sequence,Séquence des expéditions client,0
field,"stock.inventory,company",0,Company,Société,0
field,"stock.inventory,date",0,Date,Date,0
field,"stock.inventory.line,expected_quantity",0,Expected Quantity,Quantité attendue,0
@@ -67,7 +73,7 @@ field,"stock.move,product",0,Product,Produit,0
field,"stock.move,quantity",0,Quantity,Quantité,0
field,"stock.move,rec_name",0,Name,Nom,0
field,"stock.move,shipment_in",0,Supplier Shipment,Expédition fournisseur,0
-field,"stock.move,shipment_in_return",0,Supplier Return Shipment,Expédition de retour fournisseur,0
+field,"stock.move,shipment_in_return",0,Supplier Return Shipment,Retour expédition fournisseur,0
field,"stock.move,shipment_internal",0,Internal Shipment,Expédition interne,0
field,"stock.move,shipment_out",0,Customer Shipment,Expédition client,0
field,"stock.move,shipment_out_return",0,Customer Return Shipment,Retour d'expédition client,0
@@ -87,7 +93,7 @@ field,"stock.shipment.in,moves",0,Moves,Mouvements,0
field,"stock.shipment.in,planned_date",0,Planned Date,Date planifiée,0
field,"stock.shipment.in,rec_name",0,Name,Nom,0
field,"stock.shipment.in,reference",0,Reference,Référence,0
-field,"stock.shipment.in.return.assign.ask_force,moves",0,Moves,Mouvements,0
+field,"stock.shipment.in.return.assign.assign_failed,moves",0,Moves,Mouvements,0
field,"stock.shipment.in.return,code",0,Code,Code,0
field,"stock.shipment.in.return,effective_date",0,Effective Date,Date effective,0
field,"stock.shipment.in.return,from_location",0,From Location,Emplacement d'origine,0
@@ -99,7 +105,7 @@ field,"stock.shipment.in.return,state",0,State,Ãtat,0
field,"stock.shipment.in.return,to_location",0,To Location,Emplacement de destination,0
field,"stock.shipment.in,state",0,State,Ãtat,0
field,"stock.shipment.in,supplier",0,Supplier,Fournisseur,0
-field,"stock.shipment.internal.assign.ask_force,moves",0,Moves,Mouvements,0
+field,"stock.shipment.internal.assign.assign_failed,moves",0,Moves,Mouvements,0
field,"stock.shipment.internal,code",0,Code,Code,0
field,"stock.shipment.internal,effective_date",0,Effective Date,Date effective,0
field,"stock.shipment.internal,from_location",0,From Location,Emplacement d'origine,0
@@ -110,7 +116,7 @@ field,"stock.shipment.internal,reference",0,Reference,Référence,0
field,"stock.shipment.internal,state",0,State,Ãtat,0
field,"stock.shipment.internal,to_location",0,To Location,Emplacement de destination,0
field,"stock.shipment.in,warehouse",0,Warehouse,Entrepôt,0
-field,"stock.shipment.out.assign.ask_force,inventory_moves",0,Inventory Moves,Mouvements internes,0
+field,"stock.shipment.out.assign.assign_failed,inventory_moves",0,Inventory Moves,Mouvements internes,0
field,"stock.shipment.out,code",0,Code,Code,0
field,"stock.shipment.out,customer",0,Customer,Client,0
field,"stock.shipment.out,delivery_address",0,Delivery Address,Adresse de livraison,0
@@ -161,11 +167,13 @@ model,"ir.action,name",act_shipment_out_form_ready,Customer Shipments Ready for
model,"ir.action,name",act_shipment_out_form_waiting,Customer Shipments Waiting Assignation,Expéditions client en attente d'assignation,0
model,"ir.action,name",report_shipment_out_delivery_note,Delivery Note,Bon de livraison,0
model,"ir.action,name",act_shipment_internal_draft_form,Draft Internal Shipments,Expéditions internes brouillon,0
+model,"ir.action,name",act_inventory_form_draft,Draft Inventories,Inventaires brouillons,0
model,"ir.action,name",act_location_form,Edit Locations,Ãditer les emplacements,0
model,"ir.action,name",report_shipment_internal,Internal Shipment,Expédition interne,0
model,"ir.action,name",act_shipment_internal_form,Internal Shipments,Expédition interne,0
model,"ir.action,name",act_shipment_internal_waiting_form,Internal Shipments Waiting Assignation,Expéditions internes en attente d'assignation,0
model,"ir.action,name",act_inventory_form,Inventories,Inventaires,0
+model,"ir.action,name",act_inventory_form2,Inventories,Inventaires,0
model,"ir.action,name",act_location_tree,Locations,Emplacements,0
model,"ir.action,name",act_move_form,Moves,Mouvements,0
model,"ir.action,name",act_move_form_supp,Moves from Suppliers,Mouvements fournisseurs,0
@@ -183,6 +191,7 @@ model,"ir.action,name",act_location_quantity_tree,Product Stock,Quantités en st
model,"ir.action,name",act_shipment_in_form_received,Received Supplier shipments,Expéditions fournisseur reçues,0
model,"ir.action,name",report_shipment_in_restocking_list,Restocking List,Liste de restockage,0
model,"ir.action,name",report_shipment_out_return_restocking_list,Restocking List,Liste de restockage,0
+model,"ir.action,name",act_stock_configuration_form,Stock Configuration,Configuration des stocks,0
model,"ir.action,name",act_shipment_in_return_form,Supplier Return Shipments,Retour d'expéditions fournisseur,0
model,"ir.action,name",act_shipment_in_form,Supplier Shipments,Expéditions fournisseur,0
model,"ir.action,name",act_shipment_out_form3,Supplier Shipments,Expéditions fournisseur,0
@@ -204,6 +213,7 @@ model,"ir.ui.menu,name",menu_shipment_out_form,Customer Shipments,Expéditions c
model,"ir.ui.menu,name",menu_shipment_out_ready,Customer Shipments Ready for Shipping,Expéditions client prêtes pour la livraison,0
model,"ir.ui.menu,name",menu_shipment_out_waiting,Customer Shipments Waiting Assignation,Expéditions client en attente d'assignation,0
model,"ir.ui.menu,name",menu_shipment_internal_draft_form,Draft Internal Shipments,Expéditions internes brouillons,0
+model,"ir.ui.menu,name",menu_inventory_form_draft,Draft Inventories,Inventaires brouillons,0
model,"ir.ui.menu,name",menu_location_form,Edit Locations,Ãditer les emplacements,0
model,"ir.ui.menu,name",menu_shipment_internal_form,Internal Shipments,Expéditions internes,0
model,"ir.ui.menu,name",menu_shipment_internal_waiting_form,Internal Shipments Waiting Assignation,Expéditions internes en attente d'assignation,0
@@ -216,15 +226,18 @@ model,"ir.ui.menu,name",menu_move_form_supp_proceed,Moves from Suppliers Waiting
model,"ir.ui.menu,name",menu_move_form_cust,Moves to Customers,Mouvements clients,0
model,"ir.ui.menu,name",menu_shipment_out_return_form2,New Customer Return Shipment,Nouveau retour d'expédition client,0
model,"ir.ui.menu,name",menu_shipment_internal_new_form,New Internal Shipment,Nouvelle expédition Interne,0
+model,"ir.ui.menu,name",menu_inventory_form_new,New Inventory,Nouvel inventaire,0
model,"ir.ui.menu,name",menu_shipment_in_return_new_form,New Supplier Return Shipment,Nouveau retour d'expédition fournisseur,0
model,"ir.ui.menu,name",menu_shipment_in_form2,New Supplier Shipment,Nouvelle expédition fournisseur,0
model,"ir.ui.menu,name",menu_shipment_in_received,Received Supplier shipments,Expéditions fournisseur reçues,0
model,"ir.ui.menu,name",menu_reporting,Reporting,Rapports,0
+model,"ir.ui.menu,name",menu_stock_configuration,Stock Configuration,Configuration des stocks,0
model,"ir.ui.menu,name",menu_shipment_in_return_form,Supplier Return Shipments,Retour d'expédition fournisseur,0
model,"ir.ui.menu,name",menu_shipment_in_form,Supplier Shipments,Expéditions fournisseur,0
model,"res.group,name",group_stock,Stock,Stock,0
model,"res.group,name",group_stock_admin,Stock Administration,Administration des stocks,0
model,"res.group,name",group_stock_force_assignment,Stock Force Assignment,Stock forcer assignation,0
+model,"stock.configuration,name",0,stock.configuration,,0
model,"stock.inventory.line,name",0,Stock Inventory Line,Ligne d'inventaire de stock,0
model,"stock.inventory,name",0,Stock Inventory,Inventaire du stock,0
model,"stock.location,name",location_customer,Customer,Client,0
@@ -239,11 +252,11 @@ model,"stock.location_stock_date.init,name",0,Compute stock quantities,Quantité
model,"stock.move,name",0,Stock Move,Mouvement de stock,0
model,"stock.product_stock_date.init,name",0,Compute stock quantities,Quantités de stock calculées,0
model,"stock.shipment.in,name",0,Supplier Shipment,Expédition fournisseur,0
-model,"stock.shipment.in.return.assign.ask_force,name",0,Assign Supplier Return Shipment Ask Force,Assigner le retour d'expédition fournisseur - Demande forcée,0
+model,"stock.shipment.in.return.assign.assign_failed,name",0,Assign Supplier Return Shipment Assign Failed,Assigner le retour d'expédition fournisseur - Demande forcée,0
model,"stock.shipment.in.return,name",0,Supplier Return Shipment,Retour d'expédition fournisseur,0
-model,"stock.shipment.internal.assign.ask_force,name",0,Assign Shipment Internal Ask Force,Assigner l'expédition interne - Demande forcée,0
+model,"stock.shipment.internal.assign.assign_failed,name",0,Assign Shipment Internal Assign Failed,Assigner l'expédition interne - Demande forcée,0
model,"stock.shipment.internal,name",0,Internal Shipment,Expédition interne,0
-model,"stock.shipment.out.assign.ask_force,name",0,Assign Shipment Out Ask Force,Assigner l'expédition de sortie - Demande forcée,0
+model,"stock.shipment.out.assign.assign_failed,name",0,Assign Shipment Out Assign Failed,Assigner l'expédition de sortie - Demande forcée,0
model,"stock.shipment.out,name",0,Customer Shipment,Expédition Client,0
model,"stock.shipment.out.return,name",0,Customer Return Shipment,Retour d'expédition client,0
model,"workflow.activity,name",shipmentout_act_assigned,Assigned,Assigné,0
@@ -382,6 +395,7 @@ selection,"stock.shipment.out,state",0,Waiting,En attente,0
view,party.party,0,Stock,Stock,0
view,party.party,0,_Stock,_Stocks,0
view,product.product,0,Products,Produits,0
+view,stock.configuration,0,Stock Configuration,Configuration des stocks,0
view,stock.inventory,0,Add an inventory line for each missing products,Ajouter une ligne d'inventaire pour chaque produit manquant,0
view,stock.inventory,0,All generated moves will be cancelled!,Tous les mouvements générés vont être annulés,0
view,stock.inventory,0,Cancel,Annuler,0
@@ -417,9 +431,9 @@ view,stock.shipment.in.return,0,Reset to Draft,Remettre en brouillon,0
view,stock.shipment.in.return,0,Supplier Return Shipment,Retour d'expédition fournisseur,0
view,stock.shipment.in.return,0,Supplier Return Shipments,Retours d'expédition fournisseur,0
view,stock.shipment.in.return,0,Waiting,En attente,0
-view,stock.shipment.in.return.assign.ask_force,0,Moves,Mouvements,0
-view,stock.shipment.in.return.assign.ask_force,0,Unable to Assign,Impossible d'assigner,0
-view,stock.shipment.in.return.assign.ask_force,0,Unable to assign those products:,Impossible d'assigner ces produits :,0
+view,stock.shipment.in.return.assign.assign_failed,0,Moves,Mouvements,0
+view,stock.shipment.in.return.assign.assign_failed,0,Unable to Assign,Impossible d'assigner,0
+view,stock.shipment.in.return.assign.assign_failed,0,Unable to assign those products:,Impossible d'assigner ces produits :,0
view,stock.shipment.internal,0,Assign,Assigner,0
view,stock.shipment.internal,0,Cancel,Annuler,0
view,stock.shipment.internal,0,Done,Fait,0
@@ -429,9 +443,9 @@ view,stock.shipment.internal,0,Internal Shipment,Expédition interne,0
view,stock.shipment.internal,0,Internal Shipments,Expéditions internes,0
view,stock.shipment.internal,0,Reset to Draft,Remettre en brouillon,0
view,stock.shipment.internal,0,Waiting,En attente,0
-view,stock.shipment.internal.assign.ask_force,0,Moves,Mouvements,0
-view,stock.shipment.internal.assign.ask_force,0,Unable to Assign,Impossible d'assigner,0
-view,stock.shipment.internal.assign.ask_force,0,Unable to assign those products:,Impossible d'assigner ces produits :,0
+view,stock.shipment.internal.assign.assign_failed,0,Moves,Mouvements,0
+view,stock.shipment.internal.assign.assign_failed,0,Unable to Assign,Impossible d'assigner,0
+view,stock.shipment.internal.assign.assign_failed,0,Unable to assign those products:,Impossible d'assigner ces produits :,0
view,stock.shipment.out,0,Are you sure to force assignation?,Ãtes-vous sûr de forcer l'assignation ?,0
view,stock.shipment.out,0,Assign,Assigner,0
view,stock.shipment.out,0,Cancel,Annuler,0
@@ -446,9 +460,9 @@ view,stock.shipment.out,0,Outgoing Moves,Mouvements en sortie,0
view,stock.shipment.out,0,Reset to Draft,Remettre en brouillon,0
view,stock.shipment.out,0,Unpack,Déballer,0
view,stock.shipment.out,0,Waiting,En attente,0
-view,stock.shipment.out.assign.ask_force,0,Inventory Moves,Mouvements internes,0
-view,stock.shipment.out.assign.ask_force,0,Unable to Assign,Impossible d'assigner,0
-view,stock.shipment.out.assign.ask_force,0,Unable to assign those products:,Impossible d'assigner ces produits :,0
+view,stock.shipment.out.assign.assign_failed,0,Inventory Moves,Mouvements internes,0
+view,stock.shipment.out.assign.assign_failed,0,Unable to Assign,Impossible d'assigner,0
+view,stock.shipment.out.assign.assign_failed,0,Unable to assign those products:,Impossible d'assigner ces produits :,0
view,stock.shipment.out.return,0,Cancel,Annuler,0
view,stock.shipment.out.return,0,Customer Return Shipment,Retour d'expédition client,0
view,stock.shipment.out.return,0,Customer Return Shipments,Retours d'expédition client,0
@@ -464,7 +478,10 @@ wizard_button,"stock.product.open,init,end",0,Cancel,Annuler,0
wizard_button,"stock.product.open,init,open",0,Open,Ouvrir,0
wizard_button,"stock.shipment.in.return.assign,ask_force,end",0,Ok,Ok,0
wizard_button,"stock.shipment.in.return.assign,ask_force,force",0,Force Assign,Forcer l'assignation,0
+wizard_button,"stock.shipment.in.return.assign,assign_failed,end",0,Ok,Ok,0
wizard_button,"stock.shipment.internal.assign,ask_force,end",0,Ok,Ok,0
wizard_button,"stock.shipment.internal.assign,ask_force,force",0,Force Assign,Forcer l'assignation,0
+wizard_button,"stock.shipment.internal.assign,assign_failed,end",0,Ok,Ok,0
wizard_button,"stock.shipment.out.assign,ask_force,end",0,Ok,Ok,0
wizard_button,"stock.shipment.out.assign,ask_force,force",0,Force Assign,Forcer l'assignation,0
+wizard_button,"stock.shipment.out.assign,assign_failed,end",0,Ok,Ok,0
diff --git a/inventory.py b/inventory.py
index f37bcf4..15259e7 100644
--- a/inventory.py
+++ b/inventory.py
@@ -3,9 +3,11 @@
'Inventory'
from trytond.model import ModelWorkflow, ModelView, ModelSQL, fields
from trytond.wizard import Wizard
+from trytond.pyson import Not, Equal, Eval, Or, Bool
+from trytond.backend import TableHandler
STATES = {
- 'readonly': "state != 'draft'",
+ 'readonly': Not(Equal(Eval('state'), 'draft')),
}
@@ -18,19 +20,22 @@ class Inventory(ModelWorkflow, ModelSQL, ModelView):
location = fields.Many2One(
'stock.location', 'Location', required=True,
domain=[('type', '=', 'storage')], states={
- 'readonly': "state != 'draft' or bool(lines)",
+ 'readonly': Or(Not(Equal(Eval('state'), 'draft')),
+ Bool(Eval('lines'))),
})
date = fields.Date('Date', required=True, states={
- 'readonly': "state != 'draft' or bool(lines)",
+ 'readonly': Or(Not(Equal(Eval('state'), 'draft')),
+ Bool(Eval('lines'))),
})
lost_found = fields.Many2One(
'stock.location', 'Lost and Found', required=True,
domain=[('type', '=', 'lost_found')], states=STATES)
lines = fields.One2Many(
'stock.inventory.line', 'inventory', 'Lines', states=STATES)
- company = fields.Many2One(
- 'company.company', 'Company', required=True, states={
- 'readonly': "state != 'draft' or bool(lines)",
+ company = fields.Many2One('company.company', 'Company', required=True,
+ states={
+ 'readonly': Or(Not(Equal(Eval('state'), 'draft')),
+ Bool(Eval('lines'))),
})
state = fields.Selection([
('draft', 'Draft'),
@@ -42,6 +47,13 @@ class Inventory(ModelWorkflow, ModelSQL, ModelView):
super(Inventory, self).__init__()
self._order.insert(0, ('date', 'DESC'))
+ def init(self, cursor, module_name):
+ super(Inventory, self).init(cursor, module_name)
+
+ # Add index on create_date
+ table = TableHandler(cursor, self, module_name)
+ table.index_action('create_date', action='add')
+
def default_state(self, cursor, user, context=None):
return 'draft'
@@ -50,7 +62,6 @@ class Inventory(ModelWorkflow, ModelSQL, ModelView):
return date_obj.today(cursor, user, context=context)
def default_company(self, cursor, user, context=None):
- company_obj = self.pool.get('company.company')
if context is None:
context = {}
if context.get('company'):
@@ -195,13 +206,14 @@ class InventoryLine(ModelSQL, ModelView):
product = fields.Many2One('product.product', 'Product', required=True,
domain=[('type', '=', 'stockable')], on_change=['product'])
- uom = fields.Function('get_uom', type='many2one', relation='product.uom',
- string='UOM')
- unit_digits = fields.Function('get_unit_digits', type='integer',
- string='Unit Digits')
+ uom = fields.Function(fields.Many2One('product.uom', 'UOM'), 'get_uom')
+ unit_digits = fields.Function(fields.Integer('Unit Digits'),
+ 'get_unit_digits')
expected_quantity = fields.Float('Expected Quantity',
- digits="(16, unit_digits)", readonly=True)
- quantity = fields.Float('Quantity', digits="(16, unit_digits)")
+ digits=(16, Eval('unit_digits', 2)), readonly=True,
+ depends=['unit_digits'])
+ quantity = fields.Float('Quantity', digits=(16, Eval('unit_digits', 2)),
+ depends=['unit_digits'])
move = fields.Many2One('stock.move', 'Move', readonly=True)
inventory = fields.Many2One('stock.inventory', 'Inventory', required=True,
ondelete='CASCADE')
@@ -219,7 +231,7 @@ class InventoryLine(ModelSQL, ModelView):
def default_unit_digits(self, cursor, user, context=None):
return 2
- def on_change_product(self, cursor, user, ids, vals, context=None):
+ def on_change_product(self, cursor, user, vals, context=None):
product_obj = self.pool.get('product.product')
uom_obj = self.pool.get('product.uom')
res = {}
@@ -232,13 +244,13 @@ class InventoryLine(ModelSQL, ModelView):
res['unit_digits'] = product.default_uom.digits
return res
- def get_uom(self, cursor, user, ids, name, arg, context=None):
+ def get_uom(self, cursor, user, ids, name, context=None):
res = {}
for line in self.browse(cursor, user, ids, context=context):
res[line.id] = line.product.default_uom.id
return res
- def get_unit_digits(self, cursor, user, ids, name, arg, context=None):
+ def get_unit_digits(self, cursor, user, ids, name, context=None):
res = {}
for line in self.browse(cursor, user, ids, context=context):
res[line.id] = line.product.default_uom.digits
diff --git a/inventory.xml b/inventory.xml
index 6a41b56..04a0743 100644
--- a/inventory.xml
+++ b/inventory.xml
@@ -27,7 +27,7 @@ this repository contains the full copyright notices and license terms. -->
<label colspan="2" id="empty"/>
<button string="Complete Inventory" type="action"
name="%(wizard_complete_inventory)d"
- states="{'readonly': '''state != 'draft' '''}"
+ states="{'readonly': Not(Equal(Eval('state'), 'draft'))}"
colspan="2"
help="Add an inventory line for each missing products"/>
<field name="lines" colspan="4"/>
@@ -37,12 +37,12 @@ this repository contains the full copyright notices and license terms. -->
<group colspan="2" col="3" id="buttons">
<button string="Cancel"
name="cancel"
- states="{'invisible': '''state in ('cancel', 'done') ''', 'readonly': '''%(group_stock)d not in groups'''}"
- icon="tryton-cancel" />
+ states="{'invisible': In(Eval('state'), ['cancel', 'done']), 'readonly': Not(In(%(group_stock)d, Eval('groups', [])))}"
+ icon="'tryton-cancel'" />
<button string="Confirm"
name="done"
- states="{'invisible': '''state in ('done','cancel') ''', 'readonly': '''%(group_stock)d not in groups'''}"
- icon="tryton-ok"/>
+ states="{'invisible': In(Eval('state'), ['done','cancel']), 'readonly': Not(In(%(group_stock)d, Eval('groups', [])))}"
+ icon="'tryton-ok'"/>
</group>
</group>
</form>
@@ -59,6 +59,7 @@ this repository contains the full copyright notices and license terms. -->
<field name="date" select="1"/>
<field name="state" select="1"/>
<field name="company" select="2"/>
+ <field name="create_date" tree_invisible="1" select="2"/>
</tree>
]]>
</field>
@@ -67,6 +68,7 @@ this repository contains the full copyright notices and license terms. -->
<field name="name">Inventories</field>
<field name="res_model">stock.inventory</field>
<field name="view_type">form</field>
+ <field name="search_value">{'create_date': ['between', Date(delta_years=-1)]}</field>
</record>
<record model="ir.action.act_window.view"
id="act_inventory_form_view1">
@@ -83,6 +85,49 @@ this repository contains the full copyright notices and license terms. -->
<menuitem parent="menu_stock" sequence="50"
action="act_inventory_form" id="menu_inventory_form"/>
+ <record model="ir.action.act_window" id="act_inventory_form2">
+ <field name="name">Inventories</field>
+ <field name="res_model">stock.inventory</field>
+ <field name="view_type">form</field>
+ </record>
+ <record model="ir.action.act_window.view"
+ id="act_inventory_form2_view1">
+ <field name="sequence" eval="10"/>
+ <field name="view" ref="inventory_view_form"/>
+ <field name="act_window" ref="act_inventory_form2"/>
+ </record>
+ <record model="ir.action.act_window.view"
+ id="act_inventory_form2_view2">
+ <field name="sequence" eval="20"/>
+ <field name="view" ref="inventory_view_tree"/>
+ <field name="act_window" ref="act_inventory_form2"/>
+ </record>
+ <menuitem name="New Inventory" parent="menu_inventory_form"
+ action="act_inventory_form2" id="menu_inventory_form_new"
+ sequence="10"/>
+
+ <record model="ir.action.act_window" id="act_inventory_form_draft">
+ <field name="name">Draft Inventories</field>
+ <field name="res_model">stock.inventory</field>
+ <field name="view_type">form</field>
+ <field name="domain">[('state', '=', 'draft')]</field>
+ </record>
+ <record model="ir.action.act_window.view"
+ id="act_inventory_form_draft_view1">
+ <field name="sequence" eval="10"/>
+ <field name="view" ref="inventory_view_tree"/>
+ <field name="act_window" ref="act_inventory_form_draft"/>
+ </record>
+ <record model="ir.action.act_window.view"
+ id="act_inventory_form_draft_view2">
+ <field name="sequence" eval="20"/>
+ <field name="view" ref="inventory_view_form"/>
+ <field name="act_window" ref="act_inventory_form_draft"/>
+ </record>
+ <menuitem parent="menu_inventory_form"
+ action="act_inventory_form_draft" id="menu_inventory_form_draft"
+ sequence="20"/>
+
<record model="ir.ui.view" id="inventory_line_view_form">
<field name="model">stock.inventory.line</field>
<field name="type">form</field>
diff --git a/location.py b/location.py
index 95b3efa..fb5f752 100644
--- a/location.py
+++ b/location.py
@@ -1,13 +1,14 @@
-#This file is part of Tryton. The COPYRIGHT file at the top level
-#of this repository contains the full copyright notices and license terms.
+#This file is part of Tryton. The COPYRIGHT file at the top level of
+#this repository contains the full copyright notices and license terms.
"Wharehouse"
from trytond.model import ModelView, ModelSQL, fields
from trytond.wizard import Wizard
from trytond.backend import TableHandler
+from trytond.pyson import Not, Bool, Eval, Equal, PYSONEncoder, Date
import datetime
STATES = {
- 'readonly': "not active",
+ 'readonly': Not(Bool(Eval('active'))),
}
@@ -21,8 +22,8 @@ class Location(ModelSQL, ModelView):
active = fields.Boolean('Active', select=1)
address = fields.Many2One("party.address", "Address",
states={
- 'invisible': "type != 'warehouse'",
- 'readonly': "not active",
+ 'invisible': Not(Equal(Eval('type'), 'warehouse')),
+ 'readonly': Not(Bool(Eval('active'))),
})
type = fields.Selection([
('supplier', 'Supplier'),
@@ -40,37 +41,40 @@ class Location(ModelSQL, ModelView):
childs = fields.One2Many("stock.location", "parent", "Children")
input_location = fields.Many2One(
"stock.location", "Input", states={
- 'invisible': "type != 'warehouse'",
- 'readonly': "not active",
- 'required': "type == 'warehouse'",
+ 'invisible': Not(Equal(Eval('type'), 'warehouse')),
+ 'readonly': Not(Bool(Eval('active'))),
+ 'required': Equal(Eval('type'), 'warehouse'),
},
- domain=["('type','=','storage')",
+ domain=[
+ ('type','=','storage'),
['OR',
- "('parent', 'child_of', [active_id])",
- "('parent', '=', False)"]])
+ ('parent', 'child_of', [Eval('active_id')]),
+ ('parent', '=', False),
+ ],
+ ])
output_location = fields.Many2One(
"stock.location", "Output", states={
- 'invisible': "type != 'warehouse'",
- 'readonly': "not active",
- 'required': "type == 'warehouse'",
+ 'invisible': Not(Equal(Eval('type'), 'warehouse')),
+ 'readonly': Not(Bool(Eval('active'))),
+ 'required': Equal(Eval('type'), 'warehouse'),
},
- domain=["('type','=','storage')",
+ domain=[('type','=','storage'),
['OR',
- "('parent', 'child_of', [active_id])",
- "('parent', '=', False)"]])
+ ('parent', 'child_of', [Eval('active_id')]),
+ ('parent', '=', False)]])
storage_location = fields.Many2One(
"stock.location", "Storage", states={
- 'invisible': "type != 'warehouse'",
- 'readonly': "not active",
- 'required': "type == 'warehouse'",
+ 'invisible': Not(Equal(Eval('type'), 'warehouse')),
+ 'readonly': Not(Bool(Eval('active'))),
+ 'required': Equal(Eval('type'), 'warehouse'),
},
- domain=["('type','=','storage')",
+ domain=[('type','=','storage'),
['OR',
- "('parent', 'child_of', [active_id])",
- "('parent', '=', False)"]])
- quantity = fields.Function('get_quantity', type='float', string='Quantity')
- forecast_quantity = fields.Function('get_quantity', type='float',
- string='Forecast Quantity')
+ ('parent', 'child_of', [Eval('active_id')]),
+ ('parent', '=', False)]])
+ quantity = fields.Function(fields.Float('Quantity'), 'get_quantity')
+ forecast_quantity = fields.Function(fields.Float('Forecast Quantity'),
+ 'get_quantity')
def __init__(self):
super(Location, self).__init__()
@@ -119,20 +123,14 @@ class Location(ModelSQL, ModelView):
def check_xml_record(self, cursor, user, ids, values, context=None):
return True
- def search_rec_name(self, cursor, user, name, args, context=None):
- args2 = []
- i = 0
- while i < len(args):
- ids = self.search(cursor, user, [('code', '=', args[i][2])],
- context=context)
- if ids:
- args2.append(('id', 'in', ids))
- else:
- args2.append((self._rec_name, args[i][1], args[i][2]))
- i += 1
- return args2
+ def search_rec_name(self, cursor, user, name, clause, context=None):
+ ids = self.search(cursor, user, [('code', '=', clause[2])],
+ order=[], context=context)
+ if ids:
+ return [('id', 'in', ids)]
+ return [(self._rec_name,) + clause[1:]]
- def get_quantity(self, cursor, user, ids, name, arg, context=None):
+ def get_quantity(self, cursor, user, ids, name, context=None):
product_obj = self.pool.get('product.product')
date_obj = self.pool.get('ir.date')
@@ -316,16 +314,14 @@ Location()
class Party(ModelSQL, ModelView):
_name = 'party.party'
- supplier_location = fields.Property(type='many2one',
- relation='stock.location', string='Supplier Location',
- domain=[('type', '=', 'supplier')],
- help='The default source location ' \
- 'when receiving products from the party.')
- customer_location = fields.Property(type='many2one',
- relation='stock.location', string='Customer Location',
- domain=[('type', '=', 'customer')],
- help='The default destination location ' \
- 'when sending products to the party.')
+ supplier_location = fields.Property(fields.Many2One('stock.location',
+ 'Supplier Location', domain=[('type', '=', 'supplier')],
+ help='The default source location when receiving products from the '
+ 'party.'))
+ customer_location = fields.Property(fields.Many2One('stock.location',
+ 'Customer Location', domain=[('type', '=', 'customer')],
+ help='The default destination location when sending products to the '
+ 'party.'))
Party()
@@ -372,23 +368,18 @@ class OpenProduct(Wizard):
def _action_open_product(self, cursor, user, data, context=None):
model_data_obj = self.pool.get('ir.model.data')
act_window_obj = self.pool.get('ir.action.act_window')
-
- model_data_ids = model_data_obj.search(cursor, user, [
- ('fs_id', '=', 'act_product_by_location'),
- ('module', '=', 'stock'),
- ('inherit', '=', False),
- ], limit=1, context=context)
- model_data = model_data_obj.browse(cursor, user, model_data_ids[0],
- context=context)
- res = act_window_obj.read(cursor, user, model_data.db_id, context=context)
+ act_window_id = model_data_obj.get_id(cursor, user, 'stock',
+ 'act_product_by_location', context=context)
+ res = act_window_obj.read(cursor, user, act_window_id, context=context)
ctx = {}
ctx['locations'] = data['ids']
if data['form']['forecast_date']:
- ctx['stock_date_end'] = data['form']['forecast_date']
+ date = data['form']['forecast_date']
else:
- ctx['stock_date_end'] = datetime.date.max
- res['context'] = str(ctx)
+ date = datetime.date.max
+ ctx['stock_date_end'] = Date(date.year, date.month, date.day)
+ res['pyson_context'] = PYSONEncoder().encode(ctx)
return res
diff --git a/location.xml b/location.xml
index f150d3c..5264578 100644
--- a/location.xml
+++ b/location.xml
@@ -80,7 +80,7 @@ this repository contains the full copyright notices and license terms. -->
<field name="view" ref="location_view_form"/>
<field name="act_window" ref="act_location_form"/>
</record>
- <menuitem parent="menu_configuration" sequence="1"
+ <menuitem parent="menu_configuration" sequence="10"
action="act_location_form" id="menu_location_form"/>
<record model="ir.action.act_window" id="act_product_by_location">
@@ -88,7 +88,7 @@ this repository contains the full copyright notices and license terms. -->
<field name="res_model">product.product</field>
<field name="view_type">form</field>
<field name="window_name" eval="False"/>
- <field name="domain">[('quantity', '!=', 0.0)]</field>
+ <field name="domain">['OR', ('quantity', '!=', 0.0), ('forecast_quantity', '!=', 0.0)]</field>
</record>
<record model="ir.action.wizard" id="wizard_product_open">
<field name="name">Product Quantities</field>
diff --git a/move.py b/move.py
index 0a0ed4f..9c19dae 100644
--- a/move.py
+++ b/move.py
@@ -3,10 +3,11 @@
"Move"
from trytond.model import ModelView, ModelSQL, fields, OPERATORS
from trytond.backend import TableHandler
+from trytond.pyson import In, Eval, Not, In, Equal, If, Get, Bool
from decimal import Decimal
STATES = {
- 'readonly': "(state in ('cancel', 'done'))",
+ 'readonly': In(Eval('state'), ['cancel', 'done']),
}
@@ -20,23 +21,25 @@ class Move(ModelSQL, ModelView):
'from_location', 'to_location'],
domain=[('type', '!=', 'service')])
uom = fields.Many2One("product.uom", "Uom", required=True, states=STATES,
- domain=["('category', '=', " \
- "(product, 'product.default_uom.category'))"],
- context="{'category': (product, 'product.default_uom.category')}",
+ domain=[
+ ('category', '=',
+ (Eval('product'), 'product.default_uom.category')),
+ ],
+ context={
+ 'category': (Eval('product'), 'product.default_uom.category'),
+ },
on_change=['product', 'currency', 'uom', 'company',
'from_location', 'to_location'])
- unit_digits = fields.Function('get_unit_digits', type='integer',
- string='Unit Digits', on_change_with=['uom'])
+ unit_digits = fields.Function(fields.Integer('Unit Digits',
+ on_change_with=['uom']), 'get_unit_digits')
quantity = fields.Float("Quantity", required=True,
- digits="(16, unit_digits)", states=STATES)
+ digits=(16, Eval('unit_digits', 2)), states=STATES)
from_location = fields.Many2One("stock.location", "From Location", select=1,
required=True, states=STATES,
- domain=["('type', 'not in', " \
- "('warehouse', 'view'))"])
+ domain=[('type', 'not in', ('warehouse', 'view'))])
to_location = fields.Many2One("stock.location", "To Location", select=1,
required=True, states=STATES,
- domain=["('type', 'not in', " \
- "('warehouse', 'view'))"])
+ domain=[('type', 'not in', ('warehouse', 'view'))])
shipment_in = fields.Many2One('stock.shipment.in', 'Supplier Shipment',
readonly=True, select=1, ondelete='CASCADE')
shipment_out = fields.Many2One('stock.shipment.out', 'Customer Shipment',
@@ -59,25 +62,27 @@ class Move(ModelSQL, ModelView):
], 'State', select=1, readonly=True)
company = fields.Many2One('company.company', 'Company', required=True,
states={
- 'readonly': "state != 'draft'",
- }, domain=["('id', 'company' in context and '=' or '!=', " \
- "context.get('company', 0))"])
+ 'readonly': Not(Equal(Eval('state'), 'draft')),
+ }, domain=[
+ ('id', If(In('company', Eval('context', {})), '=', '!='),
+ Get(Eval('context', {}), 'company', 0)),
+ ])
unit_price = fields.Numeric('Unit Price', digits=(16, 4),
states={
- 'invisible': "not unit_price_required",
- 'required': "unit_price_required",
- 'readonly': "state != 'draft'",
+ 'invisible': Not(Bool(Eval('unit_price_required'))),
+ 'required': Bool(Eval('unit_price_required')),
+ 'readonly': Not(Equal(Eval('state'), 'draft')),
})
cost_price = fields.Numeric('Cost Price', digits=(16, 4), readonly=True)
currency = fields.Many2One('currency.currency', 'Currency',
states={
- 'invisible': "not unit_price_required",
- 'required': "unit_price_required",
- 'readonly': "state != 'draft'",
+ 'invisible': Not(Bool(Eval('unit_price_required'))),
+ 'required': Not(Bool(Eval('unit_price_required'))),
+ 'readonly': Not(Equal(Eval('state'), 'draft')),
})
- unit_price_required = fields.Function('get_unit_price_required',
- type='boolean', string='Unit Price Required',
- on_change_with=['from_location', 'to_location'])
+ unit_price_required = fields.Function(fields.Boolean('Unit Price Required',
+ on_change_with=['from_location', 'to_location']),
+ 'get_unit_price_required')
def __init__(self):
super(Move, self).__init__()
@@ -129,6 +134,9 @@ class Move(ModelSQL, ModelView):
table = TableHandler(cursor, self, module_name)
table.drop_constraint('check_packing_in_out')
+ # Add index on create_date
+ table.index_action('create_date', action='add')
+
def default_planned_date(self, cursor, user, context=None):
if context and context.get('planned_date'):
return context.get('planned_date')
@@ -205,7 +213,6 @@ class Move(ModelSQL, ModelView):
return 'draft'
def default_company(self, cursor, user, context=None):
- company_obj = self.pool.get('company.company')
if context is None:
context = {}
if context.get('company'):
@@ -224,8 +231,7 @@ class Move(ModelSQL, ModelView):
return company.currency.id
return False
- def on_change_with_unit_digits(self, cursor, user, ids, vals,
- context=None):
+ def on_change_with_unit_digits(self, cursor, user, vals, context=None):
uom_obj = self.pool.get('product.uom')
if vals.get('uom'):
uom = uom_obj.browse(cursor, user, vals['uom'],
@@ -233,13 +239,13 @@ class Move(ModelSQL, ModelView):
return uom.digits
return 2
- def get_unit_digits(self, cursor, user, ids, name, arg, context=None):
+ def get_unit_digits(self, cursor, user, ids, name, context=None):
res = {}
for move in self.browse(cursor, user, ids, context=context):
res[move.id] = move.uom.digits
return res
- def on_change_product(self, cursor, user, ids, vals, context=None):
+ def on_change_product(self, cursor, user, vals, context=None):
product_obj = self.pool.get('product.product')
uom_obj = self.pool.get('product.uom')
currency_obj = self.pool.get('currency.currency')
@@ -281,7 +287,7 @@ class Move(ModelSQL, ModelView):
res['unit_price'] = unit_price
return res
- def on_change_uom(self, cursor, user, ids, vals, context=None):
+ def on_change_uom(self, cursor, user, vals, context=None):
product_obj = self.pool.get('product.product')
uom_obj = self.pool.get('product.uom')
currency_obj = self.pool.get('currency.currency')
@@ -329,10 +335,10 @@ class Move(ModelSQL, ModelView):
'from_location': from_location,
'to_location': to_location,
}
- return self.on_change_with_unit_price_required(cursor, user, [],
+ return self.on_change_with_unit_price_required(cursor, user,
vals, context=context)
- def on_change_with_unit_price_required(self, cursor, user, ids, vals,
+ def on_change_with_unit_price_required(self, cursor, user, vals,
context=None):
location_obj = self.pool.get('stock.location')
if vals.get('from_location'):
@@ -347,8 +353,7 @@ class Move(ModelSQL, ModelView):
return True
return False
- def get_unit_price_required(self, cursor, user, ids, name, arg,
- context=None):
+ def get_unit_price_required(self, cursor, user, ids, name, context=None):
res = {}
for move in self.browse(cursor, user, ids, context=context):
res[move.id] = False
@@ -364,7 +369,7 @@ class Move(ModelSQL, ModelView):
return False
return True
- def get_rec_name(self, cursor, user, ids, name, arg, context=None):
+ def get_rec_name(self, cursor, user, ids, name, context=None):
if not ids:
return {}
res = {}
@@ -373,13 +378,8 @@ class Move(ModelSQL, ModelView):
res[m.id] = "%s%s %s" % (m.quantity, m.uom.symbol, m.product.rec_name)
return res
- def search_rec_name(self, cursor, user, name, args, context=None):
- args2 = []
- i = 0
- while i < len(args):
- args2.append(('product', args[i][1], args[i][2]))
- i += 1
- return args2
+ def search_rec_name(self, cursor, user, name, clause, context=None):
+ return [('product',) + clause[1:]]
def search(self, cursor, user, args, offset=0, limit=None, order=None,
context=None, count=False, query_string=False):
@@ -427,6 +427,7 @@ class Move(ModelSQL, ModelView):
"""
uom_obj = self.pool.get('product.uom')
product_obj = self.pool.get('product.product')
+ product_template_obj = self.pool.get('product.template')
location_obj = self.pool.get('stock.location')
currency_obj = self.pool.get('currency.currency')
company_obj = self.pool.get('company.company')
@@ -464,6 +465,13 @@ class Move(ModelSQL, ModelView):
else:
new_cost_price = product.cost_price
+ if hasattr(product_obj, 'cost_price'):
+ digits = product_obj.cost_price.digits
+ else:
+ digits = product_template_obj.cost_price.digits
+ new_cost_price = new_cost_price.quantize(
+ Decimal(str(10.0**-digits[1])))
+
ctx = context.copy()
ctx['user'] = user
product_obj.write(
@@ -638,8 +646,7 @@ class Move(ModelSQL, ModelView):
if context is None:
context = {}
- if cursor.has_lock():
- cursor.execute('LOCK TABLE stock_move')
+ cursor.lock(self._table)
local_ctx = context and context.copy() or {}
local_ctx['stock_date_end'] = date_obj.today(cursor, user,
diff --git a/move.xml b/move.xml
index 62eb441..e9bca10 100644
--- a/move.xml
+++ b/move.xml
@@ -51,6 +51,7 @@ this repository contains the full copyright notices and license terms. -->
<field name="uom" select="2"/>
<field name="state" select="2"/>
<field name="unit_digits" tree_invisible="1"/>
+ <field name="create_date" tree_invisible="1" select="2"/>
</tree>
]]>
</field>
@@ -59,6 +60,7 @@ this repository contains the full copyright notices and license terms. -->
<field name="name">Moves</field>
<field name="res_model">stock.move</field>
<field name="view_type">form</field>
+ <field name="search_value">{'create_date': ['between', Date(delta_years=-1)]}</field>
</record>
<record model="ir.action.act_window.view" id="act_move_form_view1">
<field name="sequence" eval="1"/>
@@ -79,6 +81,7 @@ this repository contains the full copyright notices and license terms. -->
<field name="res_model">stock.move</field>
<field name="view_type">form</field>
<field name="domain">[('from_location.type', '=', 'supplier')]</field>
+ <field name="search_value">{'create_date': ['between', Date(delta_years=-1)]}</field>
</record>
<record model="ir.action.act_window.view" id="act_move_form_supp_view1">
<field name="sequence" eval="1"/>
@@ -121,6 +124,7 @@ this repository contains the full copyright notices and license terms. -->
<field name="res_model">stock.move</field>
<field name="view_type">form</field>
<field name="domain">[('to_location.type', '=', 'customer')]</field>
+ <field name="search_value">{'create_date': ['between', Date(delta_years=-1)]}</field>
</record>
<record model="ir.action.act_window.view"
id="act_move_form_cust_view1">
diff --git a/party.xml b/party.xml
index 3759c97..88bfad2 100644
--- a/party.xml
+++ b/party.xml
@@ -7,7 +7,7 @@ this repository contains the full copyright notices and license terms. -->
<field name="name">Customer Shipments</field>
<field name="res_model">stock.shipment.out</field>
<field name="view_type">form</field>
- <field name="domain">[("customer", "=", active_id)]</field>
+ <field name="domain">[("customer", "=", Eval('active_id'))]</field>
</record>
<record model="ir.action.keyword"
id="act_open_purchase_keyword1">
@@ -20,7 +20,7 @@ this repository contains the full copyright notices and license terms. -->
<field name="name">Supplier Shipments</field>
<field name="res_model">stock.shipment.in</field>
<field name="view_type">form</field>
- <field name="domain">[("supplier", "=", active_id)]</field>
+ <field name="domain">[("supplier", "=", Eval('active_id'))]</field>
</record>
<record model="ir.action.keyword"
id="act_open_purchase_keyword2">
diff --git a/product.py b/product.py
index f9188cd..ad2e6c2 100644
--- a/product.py
+++ b/product.py
@@ -2,17 +2,18 @@
#this repository contains the full copyright notices and license terms.
from trytond.model import ModelView, ModelSQL, fields
from trytond.wizard import Wizard
+from trytond.pyson import PYSONEncoder
import datetime
class Template(ModelSQL, ModelView):
_name = "product.template"
- quantity = fields.Function('get_quantity', type='float', string='Quantity')
- forecast_quantity = fields.Function('get_quantity', type='float',
- string='Forecast Quantity')
+ quantity = fields.Function(fields.Float('Quantity'), 'get_quantity')
+ forecast_quantity = fields.Function(fields.Float('Forecast Quantity'),
+ 'get_quantity')
- def get_quantity(self, cursor, user, ids, name, args, context=None):
+ def get_quantity(self, cursor, user, ids, name, context=None):
res = {}
if name not in ('quantity', 'forecast_quantity'):
raise Exception('Bad argument')
@@ -60,12 +61,12 @@ Template()
class Product(ModelSQL, ModelView):
_name = "product.product"
- quantity = fields.Function('get_quantity', type='float', string='Quantity',
- fnct_search='search_quantity')
- forecast_quantity = fields.Function('get_quantity', type='float',
- string='Forecast Quantity', fnct_search='search_quantity')
+ quantity = fields.Function(fields.Float('Quantity'), 'get_quantity',
+ searcher='search_quantity')
+ forecast_quantity = fields.Function(fields.Float('Forecast Quantity'),
+ 'get_quantity', searcher='search_quantity')
- def get_quantity(self, cursor, user, ids, name, args, context=None):
+ def get_quantity(self, cursor, user, ids, name, context=None):
date_obj = self.pool.get('ir.date')
if not (context and context.get('locations')):
@@ -96,17 +97,15 @@ class Product(ModelSQL, ModelView):
return res
def _search_quantity_eval_domain(self, line, domain):
- res = True
- for field, operator, operand in domain:
- value = line.get(field)
- if value == None:
- return False
- if operator not in ("=", ">=", "<=", ">", "<", "!="):
- return False
- if operator == "=":
- operator= "=="
- res = res and (eval(str(value) + operator + str(operand)))
- return res
+ field, operator, operand = domain
+ value = line.get(field)
+ if value == None:
+ return False
+ if operator not in ("=", ">=", "<=", ">", "<", "!="):
+ return False
+ if operator == "=":
+ operator= "=="
+ return (eval(str(value) + operator + str(operand)))
def search_quantity(self, cursor, user, name, domain=None, context=None):
date_obj = self.pool.get('ir.date')
@@ -362,7 +361,7 @@ class Product(ModelSQL, ModelView):
if with_childs:
query, args = location_obj.search(cursor, user, [
('parent', 'child_of', location_ids),
- ], context=context, query_string=True)
+ ], context=context, query_string=True, order=[])
where_clause = " IN (" + query + ") "
where_vals = args
else:
@@ -404,6 +403,10 @@ class Product(ModelSQL, ModelView):
dest_clause_from = dest_clause_to =""
dest_vals = []
+ # The main select clause is a union between two similar
+ # subqueries. One that sums incoming moves towards locations
+ # and on that sums outgoing moves. UNION ALL is used because
+ # we already know that there will be no duplicates.
select_clause = \
"SELECT location, product, uom, sum(quantity) AS quantity "\
"FROM ( "\
@@ -413,7 +416,7 @@ class Product(ModelSQL, ModelView):
"WHERE (%s) " \
"AND to_location %s "\
"GROUP BY to_location, product ,uom "\
- "UNION "\
+ "UNION ALL "\
"SELECT from_location AS location, product, uom, "\
"-sum(quantity) AS quantity "\
"FROM stock_move " + product_template_join + \
@@ -569,15 +572,9 @@ class OpenLocation(Wizard):
def _action_open_location(self, cursor, user, data, context=None):
model_data_obj = self.pool.get('ir.model.data')
act_window_obj = self.pool.get('ir.action.act_window')
-
- model_data_ids = model_data_obj.search(cursor, user, [
- ('fs_id', '=', 'act_location_quantity_tree'),
- ('module', '=', 'stock'),
- ('inherit', '=', False),
- ], limit=1, context=context)
- model_data = model_data_obj.browse(cursor, user, model_data_ids[0],
- context=context)
- res = act_window_obj.read(cursor, user, model_data.db_id, context=context)
+ act_window_id = model_data_obj.get_id(cursor, user, 'stock',
+ 'act_location_quantity_tree', context=context)
+ res = act_window_obj.read(cursor, user, act_window_id, context=context)
ctx = {}
ctx['product'] = data['id']
@@ -585,7 +582,7 @@ class OpenLocation(Wizard):
ctx['stock_date_end'] = data['form']['forecast_date']
else:
ctx['stock_date_end'] = datetime.date.max
- res['context'] = str(ctx)
+ res['pyson_context'] = PYSONEncoder().encode(ctx)
return res
diff --git a/setup.py b/setup.py
index 37b26e1..fe50a16 100644
--- a/setup.py
+++ b/setup.py
@@ -2,19 +2,22 @@
#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 setuptools import setup, find_packages
+from setuptools import setup
import re
-info = eval(file('__tryton__.py').read())
+info = eval(open('__tryton__.py').read())
+major_version, minor_version, _ = info.get('version', '0.0.1').split('.', 2)
+major_version = int(major_version)
+minor_version = int(minor_version)
requires = []
for dep in info.get('depends', []):
if not re.match(r'(ir|res|workflow|webdav)(\W|$)', dep):
- requires.append('trytond_' + dep)
-
-major_version, minor_version, _ = info.get('version', '0.0.1').split('.', 2)
-requires.append('trytond >= %s.%s' % (major_version, minor_version))
-requires.append('trytond < %s.%s' % (major_version, int(minor_version) + 1))
+ requires.append('trytond_%s >= %s.%s, < %s.%s' %
+ (dep, major_version, minor_version, major_version,
+ minor_version + 1))
+requires.append('trytond >= %s.%s, < %s.%s' %
+ (major_version, minor_version, major_version, minor_version + 1))
setup(name='trytond_stock',
version=info.get('version', '0.0.1'),
@@ -27,6 +30,7 @@ setup(name='trytond_stock',
package_dir={'trytond.modules.stock': '.'},
packages=[
'trytond.modules.stock',
+ 'trytond.modules.stock.tests',
],
package_data={
'trytond.modules.stock': info.get('xml', []) \
@@ -60,4 +64,6 @@ setup(name='trytond_stock',
[trytond.modules]
stock = trytond.modules.stock
""",
+ test_suite='tests',
+ test_loader='trytond.test_loader:Loader',
)
diff --git a/shipment.py b/shipment.py
index aa13cae..acb4acf 100644
--- a/shipment.py
+++ b/shipment.py
@@ -5,6 +5,7 @@ from trytond.model import ModelWorkflow, ModelView, ModelSQL, fields
from trytond.modules.company import CompanyReport
from trytond.wizard import Wizard
from trytond.backend import TableHandler
+from trytond.pyson import Eval, Not, Equal, If, Or, And, Bool, In
STATES = {
'readonly': "state in ('cancel', 'done')",
@@ -18,45 +19,50 @@ class ShipmentIn(ModelWorkflow, ModelSQL, ModelView):
_rec_name = 'code'
effective_date = fields.Date('Effective Date', readonly=True)
- planned_date = fields.Date(
- 'Planned Date', states={'readonly': "state != 'draft'",})
- reference = fields.Char(
- "Reference", size=None, select=1,
- states={'readonly': "state != 'draft'",})
+ planned_date = fields.Date('Planned Date', states={
+ 'readonly': Not(Equal(Eval('state'), 'draft')),
+ })
+ reference = fields.Char("Reference", size=None, select=1,
+ states={
+ 'readonly': Not(Equal(Eval('state'), 'draft')),
+ })
supplier = fields.Many2One('party.party', 'Supplier',
states={
- 'readonly': "(state != 'draft' or bool(incoming_moves)) " \
- "and bool(supplier)",
+ 'readonly': And(Or(Not(Equal(Eval('state'), 'draft')),
+ Bool(Eval('incoming_moves'))), Bool(Eval('supplier'))),
}, on_change=['supplier'], required=True)
contact_address = fields.Many2One('party.address', 'Contact Address',
states={
- 'readonly': "state != 'draft'",
- }, domain=["('party', '=', supplier)"])
+ 'readonly': Not(Equal(Eval('state'), 'draft')),
+ }, domain=[('party', '=', Eval('supplier'))])
warehouse = fields.Many2One('stock.location', "Warehouse",
required=True, domain=[('type', '=', 'warehouse')],
states={
- 'readonly': "state in ('cancel', 'done') or " \
- "bool(incoming_moves)",
+ 'readonly': Or(In(Eval('state'), ['cancel', 'done']),
+ Bool(Eval('incoming_moves'))),
})
- incoming_moves = fields.Function('get_incoming_moves', type='one2many',
- relation='stock.move', string='Incoming Moves',
- fnct_inv='set_incoming_moves', add_remove="[" \
- "('shipment_in', '=', False),"\
- "('from_location.type', '=', 'supplier'),"\
- "('state', '=', 'draft'),"\
- "('to_location_warehouse', '=', warehouse),"\
- "]",
- states={
- 'readonly': "state in ('received', 'done', 'cancel') "\
- "or not bool(warehouse)",
- }, context="{'warehouse': warehouse, 'type': 'incoming'," \
- "'supplier': supplier}")
- inventory_moves = fields.Function('get_inventory_moves', type='one2many',
- relation='stock.move', string='Inventory Moves',
- fnct_inv='set_inventory_moves',
- states={
- 'readonly': "state in ('draft', 'done', 'cancel')",
- }, context="{'warehouse': warehouse, 'type': 'inventory_in'}")
+ incoming_moves = fields.Function(fields.One2Many('stock.move', None,
+ 'Incoming Moves', add_remove=[
+ ('shipment_in', '=', False),
+ ('from_location.type', '=', 'supplier'),
+ ('state', '=', 'draft'),
+ ('to_location_warehouse', '=', Eval('warehouse')),
+ ],
+ states={
+ 'readonly': Or(In(Eval('state'), ['received', 'done', 'cancel']),
+ Not(Bool(Eval('warehouse')))),
+ }, context={
+ 'warehouse': Eval('warehouse'),
+ 'type': 'incoming',
+ 'supplier': Eval('supplier'),
+ }), 'get_incoming_moves', setter='set_incoming_moves')
+ inventory_moves = fields.Function(fields.One2Many('stock.move', None,
+ 'Inventory Moves', states={
+ 'readonly': In(Eval('state'), ['draft', 'done', 'cancel']),
+ }, context={
+ 'warehouse': Eval('warehouse'),
+ 'type': 'inventory_in',
+ }), 'get_inventory_moves', setter='set_inventory_moves')
moves = fields.One2Many('stock.move', 'shipment_in', 'Moves',
readonly=True)
code = fields.Char("Code", size=None, select=1, readonly=True)
@@ -119,6 +125,10 @@ class ShipmentIn(ModelWorkflow, ModelSQL, ModelView):
super(ShipmentIn, self).init(cursor, module_name)
+ # Add index on create_date
+ table = TableHandler(cursor, self, module_name)
+ table.index_action('create_date', action='add')
+
def default_state(self, cursor, user, context=None):
return 'draft'
@@ -130,7 +140,7 @@ class ShipmentIn(ModelWorkflow, ModelSQL, ModelView):
return location_ids[0]
return False
- def on_change_supplier(self, cursor, user, ids, values, context=None):
+ def on_change_supplier(self, cursor, user, values, context=None):
if not values.get('supplier'):
return {'contact_address': False}
party_obj = self.pool.get("party.party")
@@ -138,7 +148,7 @@ class ShipmentIn(ModelWorkflow, ModelSQL, ModelView):
context=context)
return {'contact_address': address_id}
- def get_incoming_moves(self, cursor, user, ids, name, arg, context=None):
+ def get_incoming_moves(self, cursor, user, ids, name, context=None):
res = {}
for shipment in self.browse(cursor, user, ids, context=context):
res[shipment.id] = []
@@ -147,28 +157,31 @@ class ShipmentIn(ModelWorkflow, ModelSQL, ModelView):
res[shipment.id].append(move.id)
return res
- def set_incoming_moves(self, cursor, user, shipment_id, name, value, arg,
- context=None):
+ def set_incoming_moves(self, cursor, user, ids, name, value, context=None):
move_obj = self.pool.get('stock.move')
if not value:
return
- shipment = self.browse(cursor, user, shipment_id, context=context)
+ shipments = self.browse(cursor, user, ids, context=context)
move_ids = []
for act in value:
if act[0] == 'create':
if 'to_location' in act[1]:
- if act[1]['to_location'] != \
- shipment.warehouse.input_location.id:
- self.raise_user_error(cursor,
- 'incoming_move_input_dest', context=context)
+ for shipment in shipments:
+ if act[1]['to_location'] != \
+ shipment.warehouse.input_location.id:
+ self.raise_user_error(cursor,
+ 'incoming_move_input_dest',
+ context=context)
elif act[0] == 'write':
if 'to_location' in act[2]:
- if act[2]['to_location'] != \
- shipment.warehouse.input_location.id:
- self.raise_user_error(cursor,
- 'incoming_move_input_dest', context=context)
+ for shipment in shipments:
+ if act[2]['to_location'] != \
+ shipment.warehouse.input_location.id:
+ self.raise_user_error(cursor,
+ 'incoming_move_input_dest',
+ context=context)
elif act[0] == 'add':
if isinstance(act[1], (int, long)):
move_ids.append(act[1])
@@ -179,16 +192,17 @@ class ShipmentIn(ModelWorkflow, ModelSQL, ModelView):
moves = move_obj.browse(cursor, user, move_ids, context=context)
for move in moves:
- if move.to_location.id != \
- shipment.warehouse.input_location.id:
- self.raise_user_error(cursor,
- 'incoming_move_input_dest', context=context)
+ for shipment in shipments:
+ if move.to_location.id != \
+ shipment.warehouse.input_location.id:
+ self.raise_user_error(cursor, 'incoming_move_input_dest',
+ context=context)
- self.write(cursor, user, shipment_id, {
+ self.write(cursor, user, ids, {
'moves': value,
}, context=context)
- def get_inventory_moves(self, cursor, user, ids, name, arg, context=None):
+ def get_inventory_moves(self, cursor, user, ids, name, context=None):
res = {}
for shipment in self.browse(cursor, user, ids, context=context):
res[shipment.id] = []
@@ -197,28 +211,32 @@ class ShipmentIn(ModelWorkflow, ModelSQL, ModelView):
res[shipment.id].append(move.id)
return res
- def set_inventory_moves(self, cursor, user, shipment_id, name, value, arg,
+ def set_inventory_moves(self, cursor, user, ids, name, value,
context=None):
move_obj = self.pool.get('stock.move')
if not value:
return
- shipment = self.browse(cursor, user, shipment_id, context=context)
+ shipments = self.browse(cursor, user, ids, context=context)
move_ids = []
for act in value:
if act[0] == 'create':
if 'from_location' in act[1]:
- if act[1]['from_location'] != \
- shipment.warehouse.input_location.id:
- self.raise_user_error(cursor,
- 'inventory_move_input_source', context=context)
+ for shipment in shipments:
+ if act[1]['from_location'] != \
+ shipment.warehouse.input_location.id:
+ self.raise_user_error(cursor,
+ 'inventory_move_input_source',
+ context=context)
elif act[0] == 'write':
if 'from_location' in act[2]:
- if act[2]['from_location'] != \
- shipment.warehouse.input_location.id:
- self.raise_user_error(cursor,
- 'inventory_move_input_source', context=context)
+ for shipment in shipments:
+ if act[2]['from_location'] != \
+ shipment.warehouse.input_location.id:
+ self.raise_user_error(cursor,
+ 'inventory_move_input_source',
+ context=context)
elif act[0] == 'add':
if isinstance(act[1], (int, long)):
move_ids.append(act[1])
@@ -229,12 +247,13 @@ class ShipmentIn(ModelWorkflow, ModelSQL, ModelView):
moves = move_obj.browse(cursor, user, move_ids, context=context)
for move in moves:
- if move.from_location.id != \
- shipment.warehouse.input_location.id:
- self.raise_user_error(cursor,
- 'inventory_move_input_source', context=context)
+ for shipment in shipments:
+ if move.from_location.id != \
+ shipment.warehouse.input_location.id:
+ self.raise_user_error(cursor,
+ 'inventory_move_input_source', context=context)
- self.write(cursor, user, shipment_id, {
+ self.write(cursor, user, ids, {
'moves': value,
}, context=context)
@@ -292,9 +311,13 @@ class ShipmentIn(ModelWorkflow, ModelSQL, ModelView):
}, context=context)
def create(self, cursor, user, values, context=None):
+ sequence_obj = self.pool.get('ir.sequence')
+ config_obj = self.pool.get('stock.configuration')
+
values = values.copy()
- values['code'] = self.pool.get('ir.sequence').get(
- cursor, user, 'stock.shipment.in', context=context)
+ config = config_obj.browse(cursor, user, 1, context=context)
+ values['code'] = sequence_obj.get_id(cursor, user,
+ config.shipment_in_sequence.id, context=context)
return super(ShipmentIn, self).create(
cursor, user, values, context=context)
@@ -348,28 +371,36 @@ class ShipmentInReturn(ModelWorkflow, ModelSQL, ModelView):
_rec_name = 'code'
effective_date =fields.Date('Effective Date', readonly=True)
- planned_date = fields.Date(
- 'Planned Date', states={'readonly': "state != 'draft'",})
+ planned_date = fields.Date('Planned Date',
+ states={
+ 'readonly': Not(Equal(Eval('state'), 'draft')),
+ })
code = fields.Char("Code", size=None, select=1, readonly=True)
- reference = fields.Char(
- "Reference", size=None, select=1,
- states={'readonly': "state != 'draft'",})
- from_location = fields.Many2One(
- 'stock.location', "From Location", required=True,
- states={ 'readonly': "state != 'draft' or bool(moves)", },
- domain=[('type', '=', 'storage')])
+ reference = fields.Char("Reference", size=None, select=1,
+ states={
+ 'readonly': Not(Equal(Eval('state'), 'draft')),
+ })
+ from_location = fields.Many2One('stock.location', "From Location",
+ required=True, states={
+ 'readonly': Or(Not(Equal(Eval('state'), 'draft')),
+ Bool(Eval('moves'))),
+ }, domain=[('type', '=', 'storage')])
to_location = fields.Many2One('stock.location', "To Location",
required=True, states={
- 'readonly': "state != 'draft' or bool(moves)",
+ 'readonly': Or(Not(Equal(Eval('state'), 'draft')),
+ Bool(Eval('moves'))),
}, domain=[('type', '=', 'supplier')])
- moves = fields.One2Many(
- 'stock.move', 'shipment_in_return', 'Moves',
- states={'readonly': "state != 'draft' or "\
- "not(bool(from_location) and bool (to_location))"},
- context="{'from_location': from_location,"
- "'to_location': to_location,"
- "'planned_date': planned_date}",
- )
+ moves = fields.One2Many('stock.move', 'shipment_in_return', 'Moves',
+ states={
+ 'readonly': And(Or(Not(Equal(Eval('state'), 'draft')),
+ Not(Bool(Eval('from_location')))),
+ Bool(Eval('to_location'))),
+ },
+ context={
+ 'from_location': Eval('from_location'),
+ 'to_location': Eval('to_location'),
+ 'planned_date': Eval('planned_date'),
+ })
state = fields.Selection([
('draft', 'Draft'),
('cancel', 'Canceled'),
@@ -409,6 +440,10 @@ class ShipmentInReturn(ModelWorkflow, ModelSQL, ModelView):
super(ShipmentInReturn, self).init(cursor, module_name)
+ # Add index on create_date
+ table = TableHandler(cursor, self, module_name)
+ table.index_action('create_date', action='add')
+
def __init__(self):
super(ShipmentInReturn, self).__init__()
self._rpc.update({
@@ -417,9 +452,13 @@ class ShipmentInReturn(ModelWorkflow, ModelSQL, ModelView):
self._order[0] = ('id', 'DESC')
def create(self, cursor, user, values, context=None):
+ sequence_obj = self.pool.get('ir.sequence')
+ config_obj = self.pool.get('stock.configuration')
+
values = values.copy()
- values['code'] = self.pool.get('ir.sequence').get(
- cursor, user, 'stock.shipment.in.return', context=context)
+ config = config_obj.browse(cursor, user, 1, context=context)
+ values['code'] = sequence_obj.get_id(cursor, user,
+ config.shipment_in_return_sequence.id, context=context)
return super(ShipmentInReturn, self).create(
cursor, user, values, context=context)
@@ -531,38 +570,43 @@ class ShipmentOut(ModelWorkflow, ModelSQL, ModelView):
effective_date = fields.Date('Effective Date', readonly=True)
planned_date = fields.Date('Planned Date',
states={
- 'readonly': "state != 'draft'",
+ 'readonly': Not(Equal(Eval('state'), 'draft')),
})
customer = fields.Many2One('party.party', 'Customer', required=True,
states={
- 'readonly': "state != 'draft' or bool(outgoing_moves)",
+ 'readonly': Or(Not(Equal(Eval('state'), 'draft')),
+ Bool(Eval('outgoing_moves'))),
}, on_change=['customer'])
delivery_address = fields.Many2One('party.address',
'Delivery Address', required=True,
states={
- 'readonly': "state != 'draft'",
- }, domain=["('party', '=', customer)"])
+ 'readonly': Not(Equal(Eval('state'), 'draft')),
+ }, domain=[('party', '=', Eval('customer'))])
reference = fields.Char("Reference", size=None, select=1,
states={
- 'readonly': "state != 'draft'",
+ 'readonly': Not(Equal(Eval('state'), 'draft')),
})
warehouse = fields.Many2One('stock.location', "Warehouse", required=True,
states={
- 'readonly': "state != 'draft' or bool(outgoing_moves)",
+ 'readonly': Or(Not(Equal(Eval('state'), 'draft')),
+ Bool(Eval('outgoing_moves'))),
}, domain=[('type', '=', 'warehouse')])
- outgoing_moves = fields.Function('get_outgoing_moves', type='one2many',
- relation='stock.move', string='Outgoing Moves',
- fnct_inv='set_outgoing_moves',
- states={
- 'readonly':"state != 'draft' or not bool(warehouse)",
- }, context="{'warehouse': warehouse, 'type': 'outgoing'," \
- "'customer': customer}")
- inventory_moves = fields.Function('get_inventory_moves', type='one2many',
- relation='stock.move', string='Inventory Moves',
- fnct_inv='set_inventory_moves',
- states={
- 'readonly':"state in ('draft', 'packed', 'done')",
- }, context="{'warehouse': warehouse, 'type': 'inventory_out',}")
+ outgoing_moves = fields.Function(fields.One2Many('stock.move', None,
+ 'Outgoing Moves', states={
+ 'readonly': Or(Not(Equal(Eval('state'), 'draft')),
+ Not(Bool(Eval('warehouse')))),
+ }, context={
+ 'warehouse': Eval('warehouse'),
+ 'type': 'outgoing',
+ 'customer': Eval('customer'),
+ }), 'get_outgoing_moves', setter='set_outgoing_moves')
+ inventory_moves = fields.Function(fields.One2Many('stock.move', None,
+ 'Inventory Moves', states={
+ 'readonly': In(Eval('state'), ['draft', 'packed', 'done']),
+ }, context={
+ 'warehouse': Eval('warehouse'),
+ 'type': 'inventory_out',
+ }), 'get_inventory_moves', setter='set_inventory_moves')
moves = fields.One2Many('stock.move', 'shipment_out', 'Moves',
readonly=True)
code = fields.Char("Code", size=None, select=1, readonly=True)
@@ -581,6 +625,12 @@ class ShipmentOut(ModelWorkflow, ModelSQL, ModelView):
'button_draft': True,
})
self._order[0] = ('id', 'DESC')
+ self._error_messages.update({
+ 'outgoing_move_output_source': 'Outgoing Moves must ' \
+ 'have the warehouse output location as source location!',
+ 'inventory_move_output_dest': 'Inventory Moves must have the ' \
+ 'warehouse output location as destination location!',
+ })
def init(self, cursor, module_name):
# Migration from 1.2: packing renamed into shipment
@@ -611,6 +661,9 @@ class ShipmentOut(ModelWorkflow, ModelSQL, ModelView):
table = TableHandler(cursor, self, module_name)
table.drop_column('customer_location', exception=True)
+ # Add index on create_date
+ table.index_action('create_date', action='add')
+
def default_state(self, cursor, user, context=None):
return 'draft'
@@ -622,7 +675,7 @@ class ShipmentOut(ModelWorkflow, ModelSQL, ModelView):
return location_ids[0]
return False
- def on_change_customer(self, cursor, user, ids, values, context=None):
+ def on_change_customer(self, cursor, user, values, context=None):
if not values.get('customer'):
return {'delivery_address': False}
party_obj = self.pool.get("party.party")
@@ -631,7 +684,7 @@ class ShipmentOut(ModelWorkflow, ModelSQL, ModelView):
return {
'delivery_address': address_id}
- def get_outgoing_moves(self, cursor, user, ids, name, arg, context=None):
+ def get_outgoing_moves(self, cursor, user, ids, name, context=None):
res = {}
for shipment in self.browse(cursor, user, ids, context=context):
res[shipment.id] = []
@@ -641,28 +694,31 @@ class ShipmentOut(ModelWorkflow, ModelSQL, ModelView):
res[shipment.id].append(move.id)
return res
- def set_outgoing_moves(self, cursor, user, shipment_id, name, value, arg,
- context=None):
+ def set_outgoing_moves(self, cursor, user, ids, name, value, context=None):
move_obj = self.pool.get('stock.move')
if not value:
return
- shipment = self.browse(cursor, user, shipment_id, context=context)
+ shipments = self.browse(cursor, user, ids, context=context)
move_ids = []
for act in value:
if act[0] == 'create':
if 'from_location' in act[1]:
- if act[1]['from_location'] != \
- shipment.warehouse.output_location.id:
- self.raise_user_error(cursor,
- 'outgoing_move_output_source', context=context)
+ for shipment in shipments:
+ if act[1]['from_location'] != \
+ shipment.warehouse.output_location.id:
+ self.raise_user_error(cursor,
+ 'outgoing_move_output_source',
+ context=context)
elif act[0] == 'write':
if 'from_location' in act[2]:
- if act[2]['from_location'] != \
- shipment.warehouse.output_location.id:
- self.raise_user_error(cursor,
- 'outgoing_move_output_source', context=context)
+ for shipment in shipments:
+ if act[2]['from_location'] != \
+ shipment.warehouse.output_location.id:
+ self.raise_user_error(cursor,
+ 'outgoing_move_output_source',
+ context=context)
elif act[0] == 'add':
if isinstance(act[1], (int, long)):
move_ids.append(act[1])
@@ -673,15 +729,16 @@ class ShipmentOut(ModelWorkflow, ModelSQL, ModelView):
moves = move_obj.browse(cursor, user, move_ids, context=context)
for move in moves:
- if move.from_location.id != \
- shipment.warehouse.output_location.id:
- self.raise_user_error(cursor,
- 'outgoing_move_output_source', context=context)
- self.write(cursor, user, shipment_id, {
+ for shipment in shipments:
+ if move.from_location.id != \
+ shipment.warehouse.output_location.id:
+ self.raise_user_error(cursor,
+ 'outgoing_move_output_source', context=context)
+ self.write(cursor, user, ids, {
'moves': value,
}, context=context)
- def get_inventory_moves(self, cursor, user, ids, name, arg, context=None):
+ def get_inventory_moves(self, cursor, user, ids, name, context=None):
res = {}
for shipment in self.browse(cursor, user, ids, context=context):
res[shipment.id] = []
@@ -691,28 +748,32 @@ class ShipmentOut(ModelWorkflow, ModelSQL, ModelView):
res[shipment.id].append(move.id)
return res
- def set_inventory_moves(self, cursor, user, shipment_id, name, value, arg,
+ def set_inventory_moves(self, cursor, user, ids, name, value,
context=None):
move_obj = self.pool.get('stock.move')
if not value:
return
- shipment = self.browse(cursor, user, shipment_id, context=context)
+ shipments = self.browse(cursor, user, ids, context=context)
move_ids = []
for act in value:
if act[0] == 'create':
if 'to_location' in act[1]:
- if act[1]['to_location'] != \
- shipment.warehouse.output_location.id:
- self.raise_user_error(cursor,
- 'inventory_move_output_dest', context=context)
+ for shipment in shipments:
+ if act[1]['to_location'] != \
+ shipment.warehouse.output_location.id:
+ self.raise_user_error(cursor,
+ 'inventory_move_output_dest',
+ context=context)
elif act[0] == 'write':
if 'to_location' in act[2]:
- if act[2]['to_location'] != \
- shipment.warehouse.output_location.id:
- self.raise_user_error(cursor,
- 'inventory_move_output_dest', context=context)
+ for shipment in shipments:
+ if act[2]['to_location'] != \
+ shipment.warehouse.output_location.id:
+ self.raise_user_error(cursor,
+ 'inventory_move_output_dest',
+ context=context)
elif act[0] == 'add':
if isinstance(act[1], (int, long)):
move_ids.append(act[1])
@@ -723,11 +784,12 @@ class ShipmentOut(ModelWorkflow, ModelSQL, ModelView):
moves = move_obj.browse(cursor, user, move_ids, context=context)
for move in moves:
- if move.to_location.id != \
- shipment.warehouse.output_location.id:
- self.raise_user_error(cursor,
- 'inventory_move_output_dest', context=context)
- self.write(cursor, user, shipment_id, {
+ for shipment in shipments:
+ if move.to_location.id != \
+ shipment.warehouse.output_location.id:
+ self.raise_user_error(cursor, 'inventory_move_output_dest',
+ context=context)
+ self.write(cursor, user, ids, {
'moves': value,
}, context=context)
@@ -891,9 +953,13 @@ class ShipmentOut(ModelWorkflow, ModelSQL, ModelView):
}, context=context)
def create(self, cursor, user, values, context=None):
+ sequence_obj = self.pool.get('ir.sequence')
+ config_obj = self.pool.get('stock.configuration')
+
values = values.copy()
- values['code'] = self.pool.get('ir.sequence').get(
- cursor, user, 'stock.shipment.out', context=context)
+ config = config_obj.browse(cursor, user, 1, context=context)
+ values['code'] = sequence_obj.get_id(cursor, user,
+ config.shipment_out_sequence.id, context=context)
return super(ShipmentOut, self).create(cursor, user, values,
context=context)
@@ -951,38 +1017,42 @@ class ShipmentOutReturn(ModelWorkflow, ModelSQL, ModelView):
effective_date = fields.Date('Effective Date', readonly=True)
planned_date = fields.Date('Planned Date',
states={
- 'readonly': "state != 'draft'",
+ 'readonly': Not(Equal(Eval('state'), 'draft')),
})
customer = fields.Many2One('party.party', 'Customer', required=True,
states={
- 'readonly': "state != 'draft' or bool(incoming_moves)",
+ 'readonly': Or(Not(Equal(Eval('state'), 'draft')),
+ Bool(Eval('incoming_moves'))),
}, on_change=['customer'])
delivery_address = fields.Many2One('party.address',
'Delivery Address', required=True,
states={
- 'readonly': "state != 'draft'",
- }, domain=["('party', '=', customer)"])
+ 'readonly': Not(Equal(Eval('state'), 'draft')),
+ }, domain=[('party', '=', Eval('customer'))])
reference = fields.Char("Reference", size=None, select=1,
states={
- 'readonly': "state != 'draft'",
+ 'readonly': Not(Equal(Eval('state'), 'draft')),
})
warehouse = fields.Many2One('stock.location', "Warehouse", required=True,
states={
- 'readonly': "state != 'draft' or bool(incoming_moves)",
+ 'readonly': Or(Not(Equal(Eval('state'), 'draft')),
+ Bool(Eval('incoming_moves'))),
}, domain=[('type', '=', 'warehouse')])
- incoming_moves = fields.Function('get_incoming_moves', type='one2many',
- relation='stock.move', string='Incoming Moves',
- fnct_inv='set_incoming_moves',
- states={
- 'readonly':"state != 'draft'",
- }, context="{'warehouse': warehouse, 'type': 'incoming'," \
- "'customer': customer}")
- inventory_moves = fields.Function('get_inventory_moves', type='one2many',
- relation='stock.move', string='Inventory Moves',
- fnct_inv='set_inventory_moves',
- states={
- 'readonly':"state in ('draft', 'cancel', 'done')",
- }, context="{'warehouse': warehouse, 'type': 'inventory_out',}")
+ incoming_moves = fields.Function(fields.One2Many('stock.move', None,
+ 'Incoming Moves', states={
+ 'readonly': Not(Equal(Eval('state'), 'draft')),
+ }, context={
+ 'warehouse': Eval('warehouse'),
+ 'type': 'incoming',
+ 'customer': Eval('customer'),
+ }), 'get_incoming_moves', setter='set_incoming_moves')
+ inventory_moves = fields.Function(fields.One2Many('stock.move', None,
+ 'Inventory Moves', states={
+ 'readonly': In(Eval('state'), ['draft', 'cancel', 'done']),
+ }, context={
+ 'warehouse': Eval('warehouse'),
+ 'type': 'inventory_out',
+ }), 'get_inventory_moves', setter='set_inventory_moves')
moves = fields.One2Many('stock.move', 'shipment_out_return', 'Moves',
readonly=True)
code = fields.Char("Code", size=None, select=1, readonly=True)
@@ -1031,6 +1101,10 @@ class ShipmentOutReturn(ModelWorkflow, ModelSQL, ModelView):
super(ShipmentOutReturn, self).init(cursor, module_name)
+ # Add index on create_date
+ table = TableHandler(cursor, self, module_name)
+ table.index_action('create_date', action='add')
+
def default_state(self, cursor, user, context=None):
return 'draft'
@@ -1042,7 +1116,7 @@ class ShipmentOutReturn(ModelWorkflow, ModelSQL, ModelView):
return location_ids[0]
return False
- def on_change_customer(self, cursor, user, ids, values, context=None):
+ def on_change_customer(self, cursor, user, values, context=None):
if not values.get('customer'):
return {'delivery_address': False}
party_obj = self.pool.get("party.party")
@@ -1053,7 +1127,7 @@ class ShipmentOutReturn(ModelWorkflow, ModelSQL, ModelView):
'delivery_address': address_id,
}
- def get_incoming_moves(self, cursor, user, ids, name, arg, context=None):
+ def get_incoming_moves(self, cursor, user, ids, name, context=None):
res = {}
for shipment in self.browse(cursor, user, ids, context=context):
res[shipment.id] = []
@@ -1063,28 +1137,31 @@ class ShipmentOutReturn(ModelWorkflow, ModelSQL, ModelView):
res[shipment.id].append(move.id)
return res
- def set_incoming_moves(self, cursor, user, shipment_id, name, value, arg,
- context=None):
+ def set_incoming_moves(self, cursor, user, ids, name, value, context=None):
move_obj = self.pool.get('stock.move')
if not value:
return
- shipment = self.browse(cursor, user, shipment_id, context=context)
+ shipments = self.browse(cursor, user, ids, context=context)
move_ids = []
for act in value:
if act[0] == 'create':
if 'to_location' in act[1]:
- if act[1]['to_location'] != \
- shipment.warehouse.input_location.id:
- self.raise_user_error(cursor,
- 'incoming_move_input_dest', context=context)
+ for shipment in shipments:
+ if act[1]['to_location'] != \
+ shipment.warehouse.input_location.id:
+ self.raise_user_error(cursor,
+ 'incoming_move_input_dest',
+ context=context)
elif act[0] == 'write':
if 'to_location' in act[2]:
- if act[2]['to_location'] != \
- shipment.warehouse.input_location.id:
- self.raise_user_error(cursor,
- 'incoming_move_input_dest', context=context)
+ for shipment in shipments:
+ if act[2]['to_location'] != \
+ shipment.warehouse.input_location.id:
+ self.raise_user_error(cursor,
+ 'incoming_move_input_dest',
+ context=context)
elif act[0] == 'add':
if isinstance(act[1], (int, long)):
move_ids.append(act[1])
@@ -1095,15 +1172,17 @@ class ShipmentOutReturn(ModelWorkflow, ModelSQL, ModelView):
moves = move_obj.browse(cursor, user, move_ids, context=context)
for move in moves:
- if move.to_location.id != \
- shipment.warehouse.input_location.id:
- self.raise_user_error(cursor,
- 'incoming_move_input_dest', context=context)
- self.write(cursor, user, shipment_id, {
+ for shipment in shipments:
+ if move.to_location.id != \
+ shipment.warehouse.input_location.id:
+ self.raise_user_error(cursor, 'incoming_move_input_dest',
+ context=context)
+
+ self.write(cursor, user, ids, {
'moves': value,
}, context=context)
- def get_inventory_moves(self, cursor, user, ids, name, arg, context=None):
+ def get_inventory_moves(self, cursor, user, ids, name, context=None):
res = {}
for shipment in self.browse(cursor, user, ids, context=context):
res[shipment.id] = []
@@ -1113,28 +1192,32 @@ class ShipmentOutReturn(ModelWorkflow, ModelSQL, ModelView):
res[shipment.id].append(move.id)
return res
- def set_inventory_moves(self, cursor, user, shipment_id, name, value, arg,
+ def set_inventory_moves(self, cursor, user, ids, name, value,
context=None):
move_obj = self.pool.get('stock.move')
if not value:
return
- shipment = self.browse(cursor, user, shipment_id, context=context)
+ shipments = self.browse(cursor, user, ids, context=context)
move_ids = []
for act in value:
if act[0] == 'create':
if 'from_location' in act[1]:
- if act[1]['from_location'] != \
- shipment.warehouse.input_location.id:
- self.raise_user_error(cursor,
- 'inventory_move_input_source', context=context)
+ for shipment in shipments:
+ if act[1]['from_location'] != \
+ shipment.warehouse.input_location.id:
+ self.raise_user_error(cursor,
+ 'inventory_move_input_source',
+ context=context)
elif act[0] == 'write':
if 'from_location' in act[2]:
- if act[2]['from_location'] != \
- shipment.warehouse.input_location.id:
- self.raise_user_error(cursor,
- 'inventory_move_input_source', context=context)
+ for shipment in shipments:
+ if act[2]['from_location'] != \
+ shipment.warehouse.input_location.id:
+ self.raise_user_error(cursor,
+ 'inventory_move_input_source',
+ context=context)
elif act[0] == 'add':
if isinstance(act[1], (int, long)):
move_ids.append(act[1])
@@ -1145,18 +1228,24 @@ class ShipmentOutReturn(ModelWorkflow, ModelSQL, ModelView):
moves = move_obj.browse(cursor, user, move_ids, context=context)
for move in moves:
- if move.from_location.id != \
- shipment.warehouse.input_location.id:
- self.raise_user_error(cursor,
- 'inventory_move_input_source', context=context)
- self.write(cursor, user, shipment_id, {
+ for shipment in shipments:
+ if move.from_location.id != \
+ shipment.warehouse.input_location.id:
+ self.raise_user_error(cursor,
+ 'inventory_move_input_source', context=context)
+
+ self.write(cursor, user, ids, {
'moves': value,
}, context=context)
def create(self, cursor, user, values, context=None):
+ sequence_obj = self.pool.get('ir.sequence')
+ config_obj = self.pool.get('stock.configuration')
+
values = values.copy()
- values['code'] = self.pool.get('ir.sequence').get(
- cursor, user, 'stock.shipment.out.return', context=context)
+ config = config_obj.browse(cursor, user, 1, context=context)
+ values['code'] = sequence_obj.get_id(cursor, user,
+ config.shipment_out_return_sequence.id, context=context)
return super(ShipmentOutReturn, self).create(cursor, user, values,
context=context)
@@ -1254,15 +1343,15 @@ class ShipmentOutReturn(ModelWorkflow, ModelSQL, ModelView):
ShipmentOutReturn()
-class AssignShipmentOutAskForce(ModelView):
- 'Assign Shipment Out Ask Force'
- _name = 'stock.shipment.out.assign.ask_force'
+class AssignShipmentOutAssignFailed(ModelView):
+ 'Assign Shipment Out Assign Failed'
+ _name = 'stock.shipment.out.assign.assign_failed'
_description = __doc__
inventory_moves = fields.Many2Many('stock.move', None, None,
'Inventory Moves', readonly=True)
-AssignShipmentOutAskForce()
+AssignShipmentOutAssignFailed()
class AssignShipmentOut(Wizard):
@@ -1275,11 +1364,21 @@ class AssignShipmentOut(Wizard):
'next_state': '_choice',
},
},
+ 'assign_failed': {
+ 'actions': ['_moves'],
+ 'result': {
+ 'type': 'form',
+ 'object': 'stock.shipment.out.assign.assign_failed',
+ 'state': [
+ ('end', 'Ok', 'tryton-ok', True),
+ ],
+ },
+ },
'ask_force': {
'actions': ['_moves'],
'result': {
'type': 'form',
- 'object': 'stock.shipment.out.assign.ask_force',
+ 'object': 'stock.shipment.out.assign.assign_failed',
'state': [
('force', 'Force Assign', 'tryton-go-next'),
('end', 'Ok', 'tryton-ok', True),
@@ -1297,6 +1396,9 @@ class AssignShipmentOut(Wizard):
def _choice(self, cursor, user, data, context=None):
shipment_out_obj = self.pool.get('stock.shipment.out')
+ user_group_obj = self.pool.get('res.user-res.group')
+ model_data_obj = self.pool.get('ir.model.data')
+ transition_obj = self.pool.get('workflow.transition')
shipment_out_obj.workflow_trigger_validate(cursor, user, data['id'],
'assign', context=context)
@@ -1305,7 +1407,16 @@ class AssignShipmentOut(Wizard):
if not [x.id for x in shipment.inventory_moves if x.state == 'draft']:
return 'end'
else:
- return 'ask_force'
+ trans_id = model_data_obj.get_id(cursor, user, 'stock',
+ 'shipmentout_trans_waiting_assigned_force', context=context)
+ trans = transition_obj.read(cursor, user, trans_id, context=context)
+ user_in_group = user_group_obj.search(cursor, user, [
+ ('uid', '=', user),
+ ('gid', '=', trans['group']),
+ ], limit=1, context=context)
+ if user_in_group:
+ return 'ask_force'
+ return 'assign_failed'
def _moves(self, cursor, user, data, context=None):
shipment_out_obj = self.pool.get('stock.shipment.out')
@@ -1331,30 +1442,43 @@ class ShipmentInternal(ModelWorkflow, ModelSQL, ModelView):
_rec_name = 'code'
effective_date =fields.Date('Effective Date', readonly=True)
- planned_date = fields.Date(
- 'Planned Date', states={'readonly': "state != 'draft'",})
+ planned_date = fields.Date('Planned Date',
+ states={
+ 'readonly': Not(Equal(Eval('state'), 'draft')),
+ })
code = fields.Char("Code", size=None, select=1, readonly=True)
- reference = fields.Char(
- "Reference", size=None, select=1,
- states={'readonly': "state != 'draft'",})
- from_location = fields.Many2One(
- 'stock.location', "From Location", required=True,
- states={ 'readonly': "state != 'draft' or bool(moves)", },
- domain=["('type', 'not in', " \
- "('supplier', 'customer', 'warehouse', 'view'))"])
+ reference = fields.Char("Reference", size=None, select=1,
+ states={
+ 'readonly': Not(Equal(Eval('state'), 'draft')),
+ })
+ from_location = fields.Many2One('stock.location', "From Location",
+ required=True, states={
+ 'readonly': Or(Not(Equal(Eval('state'), 'draft')),
+ Bool(Eval('moves'))),
+ },
+ domain=[
+ ('type', 'not in',
+ ['supplier', 'customer', 'warehouse', 'view']),
+ ])
to_location = fields.Many2One('stock.location', "To Location",
required=True, states={
- 'readonly': "state != 'draft' or bool(moves)",
- }, domain=["('type', 'not in', " \
- "('supplier', 'customer', 'warehouse', 'view'))"])
- moves = fields.One2Many(
- 'stock.move', 'shipment_internal', 'Moves',
- states={'readonly': "state != 'draft' or "\
- "not(bool(from_location) and bool (to_location))"},
- context="{'from_location': from_location,"
- "'to_location': to_location,"
- "'planned_date': planned_date}",
- )
+ 'readonly': Or(Not(Equal(Eval('state'), 'draft')),
+ Bool(Eval('moves'))),
+ }, domain=[
+ ('type', 'not in',
+ ['supplier', 'customer', 'warehouse', 'view']),
+ ])
+ moves = fields.One2Many('stock.move', 'shipment_internal', 'Moves',
+ states={
+ 'readonly': And(Or(Not(Equal(Eval('state'), 'draft')),
+ Not(Bool(Eval('from_location')))),
+ Bool(Eval('to_location'))),
+ },
+ context={
+ 'from_location': Eval('from_location'),
+ 'to_location': Eval('to_location'),
+ 'planned_date': Eval('planned_date'),
+ })
state = fields.Selection([
('draft', 'Draft'),
('cancel', 'Canceled'),
@@ -1387,6 +1511,10 @@ class ShipmentInternal(ModelWorkflow, ModelSQL, ModelView):
super(ShipmentInternal, self).init(cursor, module_name)
+ # Add index on create_date
+ table = TableHandler(cursor, self, module_name)
+ table.index_action('create_date', action='add')
+
def default_state(self, cursor, user, context=None):
return 'draft'
@@ -1402,9 +1530,13 @@ class ShipmentInternal(ModelWorkflow, ModelSQL, ModelView):
self._order[0] = ('id', 'DESC')
def create(self, cursor, user, values, context=None):
+ sequence_obj = self.pool.get('ir.sequence')
+ config_obj = self.pool.get('stock.configuration')
+
values = values.copy()
- values['code'] = self.pool.get('ir.sequence').get(
- cursor, user, 'stock.shipment.internal', context=context)
+ config = config_obj.browse(cursor, user, 1, context=context)
+ values['code'] = sequence_obj.get_id(cursor, user,
+ config.shipment_internal_sequence.id, context=context)
return super(ShipmentInternal, self).create(
cursor, user, values, context=context)
@@ -1479,15 +1611,15 @@ class Address(ModelSQL, ModelView):
Address()
-class AssignShipmentInternalAskForce(ModelView):
- 'Assign Shipment Internal Ask Force'
- _name = 'stock.shipment.internal.assign.ask_force'
+class AssignShipmentInternalAssignFailed(ModelView):
+ 'Assign Shipment Internal Assign Failed'
+ _name = 'stock.shipment.internal.assign.assign_failed'
_description = __doc__
moves = fields.Many2Many('stock.move', None, None, 'Moves',
readonly=True)
-AssignShipmentInternalAskForce()
+AssignShipmentInternalAssignFailed()
class AssignShipmentInternal(Wizard):
@@ -1500,11 +1632,21 @@ class AssignShipmentInternal(Wizard):
'next_state': '_choice',
},
},
+ 'assign_failed': {
+ 'actions': ['_moves'],
+ 'result': {
+ 'type': 'form',
+ 'object': 'stock.shipment.internal.assign.assign_failed',
+ 'state': [
+ ('end', 'Ok', 'tryton-ok', True),
+ ],
+ },
+ },
'ask_force': {
'actions': ['_moves'],
'result': {
'type': 'form',
- 'object': 'stock.shipment.internal.assign.ask_force',
+ 'object': 'stock.shipment.internal.assign.assign_failed',
'state': [
('force', 'Force Assign', 'tryton-go-next'),
('end', 'Ok', 'tryton-ok', True),
@@ -1522,6 +1664,9 @@ class AssignShipmentInternal(Wizard):
def _choice(self, cursor, user, data, context=None):
shipment_internal_obj = self.pool.get('stock.shipment.internal')
+ user_group_obj = self.pool.get('res.user-res.group')
+ model_data_obj = self.pool.get('ir.model.data')
+ transition_obj = self.pool.get('workflow.transition')
shipment_internal_obj.workflow_trigger_validate(cursor, user,
data['id'], 'assign', context=context)
@@ -1530,7 +1675,18 @@ class AssignShipmentInternal(Wizard):
if not [x.id for x in shipment.moves if x.state == 'draft']:
return 'end'
else:
- return 'ask_force'
+ trans_id = model_data_obj.get_id(cursor, user, 'stock',
+ 'shipmentinternal_trans_waiting_assigned_force',
+ context=context)
+ trans = transition_obj.read(cursor, user, trans_id,
+ context=context)
+ user_in_group = user_group_obj.search(cursor, user, [
+ ('uid', '=', user),
+ ('gid', '=', trans['group']),
+ ], limit=1, context=context)
+ if user_in_group:
+ return 'ask_force'
+ return 'assign_failed'
def _moves(self, cursor, user, data, context=None):
shipment_internal_obj = self.pool.get('stock.shipment.internal')
@@ -1548,15 +1704,15 @@ class AssignShipmentInternal(Wizard):
AssignShipmentInternal()
-class AssignShipmentInReturnAskForce(ModelView):
- 'Assign Supplier Return Shipment Ask Force'
- _name = 'stock.shipment.in.return.assign.ask_force'
+class AssignShipmentInReturnAssignFailed(ModelView):
+ 'Assign Supplier Return Shipment Assign Failed'
+ _name = 'stock.shipment.in.return.assign.assign_failed'
_description = __doc__
moves = fields.Many2Many('stock.move', None, None, 'Moves',
readonly=True)
-AssignShipmentInReturnAskForce()
+AssignShipmentInReturnAssignFailed()
class AssignShipmentInReturn(Wizard):
@@ -1569,11 +1725,21 @@ class AssignShipmentInReturn(Wizard):
'next_state': '_choice',
},
},
+ 'assign_failed': {
+ 'actions': ['_moves'],
+ 'result': {
+ 'type': 'form',
+ 'object': 'stock.shipment.in.return.assign.assign_failed',
+ 'state': [
+ ('end', 'Ok', 'tryton-ok', True),
+ ],
+ },
+ },
'ask_force': {
'actions': ['_moves'],
'result': {
'type': 'form',
- 'object': 'stock.shipment.in.return.assign.ask_force',
+ 'object': 'stock.shipment.in.return.assign.assign_failed',
'state': [
('force', 'Force Assign', 'tryton-go-next'),
('end', 'Ok', 'tryton-ok', True),
@@ -1591,6 +1757,9 @@ class AssignShipmentInReturn(Wizard):
def _choice(self, cursor, user, data, context=None):
shipment_internal_obj = self.pool.get('stock.shipment.in.return')
+ user_group_obj = self.pool.get('res.user-res.group')
+ model_data_obj = self.pool.get('ir.model.data')
+ transition_obj = self.pool.get('workflow.transition')
shipment_internal_obj.workflow_trigger_validate(cursor, user,
data['id'], 'assign', context=context)
@@ -1599,7 +1768,17 @@ class AssignShipmentInReturn(Wizard):
if not [x.id for x in shipment.moves if x.state == 'draft']:
return 'end'
else:
- return 'ask_force'
+ trans_id = model_data_obj.get_id(cursor, user, 'stock',
+ 'shipment_in_return_trans_waiting_assigned_force',
+ context=context)
+ trans = transition_obj.read(cursor, user, trans_id, context=context)
+ user_in_group = user_group_obj.search(cursor, user, [
+ ('uid', '=', user),
+ ('gid', '=', trans['group']),
+ ], limit=1, context=context)
+ if user_in_group:
+ return 'ask_force'
+ return 'assign_failed'
def _moves(self, cursor, user, data, context=None):
shipment_internal_obj = self.pool.get('stock.shipment.in.return')
@@ -1676,14 +1855,9 @@ class CreateShipmentOutReturn(Wizard):
context=context)
)
- model_data_ids = model_data_obj.search(cursor, user, [
- ('fs_id', '=', 'act_shipment_out_return_form'),
- ('module', '=', 'stock'),
- ('inherit', '=', False),
- ], limit=1, context=context)
- model_data = model_data_obj.browse(cursor, user, model_data_ids[0],
- context=context)
- res = act_window_obj.read(cursor, user, model_data.db_id, context=context)
+ act_window_id = model_data_obj.get_id(cursor, user, 'stock',
+ 'act_shipment_out_return_form', context=context)
+ res = act_window_obj.read(cursor, user, act_window_id, context=context)
res['res_id'] = shipment_out_return_ids
if len(shipment_out_return_ids) == 1:
res['views'].reverse()
diff --git a/shipment.xml b/shipment.xml
index 1e3d35c..7f380d1 100644
--- a/shipment.xml
+++ b/shipment.xml
@@ -49,17 +49,17 @@ this repository contains the full copyright notices and license terms. -->
<field name="state"/>
<group col="5" colspan="2" id="buttons">
<button string="Cancel" name="cancel"
- states="{'invisible': '''state in ('cancel', 'done') ''', 'readonly': '''%(group_stock)d not in groups'''}"
+ states="{'invisible': In(Eval('state'), ['cancel', 'done']), 'readonly': Not(In(%(group_stock)d, Eval('groups', [])))}"
icon="tryton-cancel"/>
<button string="Received" name="received"
- states="{'invisible': '''state != 'draft' ''', 'readonly': '''%(group_stock)d not in groups'''}"
+ states="{'invisible': Not(Equal(Eval('state'), 'draft')), 'readonly': Not(In(%(group_stock)d, Eval('groups', [])))}"
icon="tryton-go-next"/>
<button string="Done" name="done"
- states="{'invisible': '''state != 'received' ''', 'readonly': '''%(group_stock)d not in groups'''}"
+ states="{'invisible': Not(Equal(Eval('state'), 'received')), 'readonly': Not(In(%(group_stock)d, Eval('groups', [])))}"
icon="tryton-ok"/>
<button string="Reset to Draft" name="button_draft"
type="object"
- states="{'invisible': '''state != 'cancel' ''', 'readonly': '''%(group_stock)d not in groups'''}"
+ states="{'invisible': Not(Equal(Eval('state'), 'cancel')), 'readonly': Not(In(%(group_stock)d, Eval('groups', [])))}"
icon="tryton-clear"/>
</group>
</group>
@@ -80,6 +80,7 @@ this repository contains the full copyright notices and license terms. -->
<field name="supplier" select="2"/>
<field name="contact_address" select="2"/>
<field name="state" select="1"/>
+ <field name="create_date" tree_invisible="1" select="2"/>
</tree>
]]>
</field>
@@ -88,6 +89,7 @@ this repository contains the full copyright notices and license terms. -->
<field name="name">Supplier Shipments</field>
<field name="res_model">stock.shipment.in</field>
<field name="view_type">form</field>
+ <field name="search_value">{'create_date': ['between', Date(delta_years=-1)]}</field>
</record>
<record model="ir.action.act_window.view"
id="act_shipment_in_form_view1">
@@ -177,22 +179,23 @@ this repository contains the full copyright notices and license terms. -->
<field name="state"/>
<group col="6" colspan="2" id="buttons">
<button string="Cancel" name="cancel"
- states="{'invisible': '''state in ('cancel', 'done') ''', 'readonly': '''%(group_stock)d not in groups'''}"
+ states="{'invisible': In(Eval('state'), ['cancel', 'done']), 'readonly': Not(In(%(group_stock)d, Eval('groups', [])))}"
icon="tryton-cancel"/>
<button string="Draft" name="draft"
- states="{'invisible': '''state != 'waiting' ''', 'readonly': '''%(group_stock)d not in groups'''}"
+ states="{'invisible': Not(Equal(Eval('state'), 'waiting')), 'readonly': Not(In(%(group_stock)d, Eval('groups', [])))}"
icon="tryton-go-previous"/>
<button string="Waiting" name="waiting"
- states="{'invisible': '''state not in ('assigned', 'draft')''', 'readonly': '''%(group_stock)d not in groups''', 'icon': '''state == 'assigned' and 'tryton-go-previous' or state == 'draft' and 'tryton-go-next' or False'''}"/>
+ states="{'invisible': Not(In(Eval('state'), ['assigned', 'draft'])), 'readonly': Not(In(%(group_stock)d, Eval('groups', []))), 'icon': If(Equal(Eval('state'), 'assigned'), 'tryton-go-previous', If(Equal(Eval('state'), 'draft'), 'tryton-go-next', ''))}"/>
<button string="Assign" name="%(wizard_shipment_in_return_assign)d"
type="action"
- states="{'invisible': '''state != 'waiting' ''', 'readonly': '''%(group_stock)d not in groups'''}"
+ states="{'invisible': Not(Equal(Eval('state'), 'waiting')), 'readonly': Not(In(%(group_stock)d, Eval('groups', [])))}"
icon="tryton-go-next"/>
<button string="Reset to Draft" name="button_draft"
- type="object" states="{'invisible': '''state != 'cancel' ''', 'readonly': '''%(group_stock)d not in groups'''}"
+ type="object"
+ states="{'invisible': Not(Equal(Eval('state'), 'cancel')), 'readonly': Not(In(%(group_stock)d, Eval('groups', [])))}"
icon="tryton-clear"/>
<button string="Done" name="done"
- states="{'invisible': '''state != 'assigned' ''', 'readonly': '''%(group_stock)d not in groups'''}"
+ states="{'invisible': Not(Equal(Eval('state'), 'assigned')), 'readonly': Not(In(%(group_stock)d, Eval('groups', [])))}"
icon="tryton-ok"/>
</group>
</form>
@@ -212,6 +215,7 @@ this repository contains the full copyright notices and license terms. -->
<field name="from_location" select="2"/>
<field name="to_location" select="2"/>
<field name="state" select="1"/>
+ <field name="create_date" tree_invisible="1" select="2"/>
</tree>
]]>
</field>
@@ -220,6 +224,7 @@ this repository contains the full copyright notices and license terms. -->
<field name="name">Supplier Return Shipments</field>
<field name="res_model">stock.shipment.in.return</field>
<field name="view_type">form</field>
+ <field name="search_value">{'create_date': ['between', Date(delta_years=-1)]}</field>
</record>
<record model="ir.action.act_window.view"
id="act_shipment_in_return_form_view1">
@@ -258,8 +263,8 @@ this repository contains the full copyright notices and license terms. -->
action="act_shipment_in_return_new_form"
id="menu_shipment_in_return_new_form"/>
- <record model="ir.ui.view" id="shipment_in_return_assign_ask_force_view_form">
- <field name="model">stock.shipment.in.return.assign.ask_force</field>
+ <record model="ir.ui.view" id="shipment_in_return_assign_assign_failed_view_form">
+ <field name="model">stock.shipment.in.return.assign.assign_failed</field>
<field name="type">form</field>
<field name="arch" type="xml">
<![CDATA[
@@ -322,26 +327,26 @@ this repository contains the full copyright notices and license terms. -->
<field name="state"/>
<group col="7" colspan="2" id="buttons">
<button string="Cancel" name="cancel"
- states="{'invisible': '''state in ('cancel', 'done') ''', 'readonly': '''%(group_stock)d not in groups'''}"
+ states="{'invisible': In(Eval('state'), ['cancel', 'done']), 'readonly': Not(In(%(group_stock)d, Eval('groups', [])))}"
icon="tryton-cancel"/>
<button string="Draft" name="draft"
- states="{'invisible': '''state != 'waiting' ''', 'readonly': '''%(group_stock)d not in groups'''}"
+ states="{'invisible': Not(Equal(Eval('state'), 'waiting')), 'readonly': Not(In(%(group_stock)d, Eval('groups', [])))}"
icon="tryton-go-previous"/>
<button string="Waiting" name="waiting"
- states="{'invisible': '''state not in ('assigned', 'waiting', 'draft')''', 'readonly': '''%(group_stock)d not in groups''', 'icon': '''state == 'assigned' and 'tryton-go-previous' or state == 'waiting' and 'tryton-clear' or state == 'draft' and 'tryton-go-next' or False'''}"/>
+ states="{'invisible': Not(In(Eval('state'), ['assigned', 'waiting', 'draft'])), 'readonly': Not(In(%(group_stock)d, Eval('groups', []))), 'icon': If(Equal(Eval('state'), 'assigned'), 'tryton-go-previous', If(Equal(Eval('state'), 'waiting'), 'tryton-clear', If(Equal(Eval('state'), 'draft'), 'tryton-go-next', '')))}"/>
<button string="Assign" name="%(wizard_shipment_out_assign)d"
type="action"
- states="{'invisible': '''state != 'waiting' ''', 'readonly': '''%(group_stock)d not in groups'''}"
+ states="{'invisible': Not(Equal(Eval('state'), 'waiting')), 'readonly': Not(In(%(group_stock)d, Eval('groups', [])))}"
icon="tryton-go-next"/>
<button string="Make shipment" name="packed"
- states="{'invisible': '''state != 'assigned' ''', 'readonly': '''%(group_stock)d not in groups'''}"
+ states="{'invisible': Not(Equal(Eval('state'), 'assigned')), 'readonly': Not(In(%(group_stock)d, Eval('groups', [])))}"
icon="tryton-go-next"/>
<button string="Done" name="done"
- states="{'invisible': '''state != 'packed' ''', 'readonly': '''%(group_stock)d not in groups'''}"
+ states="{'invisible': Not(Equal(Eval('state'), 'packed')), 'readonly': Not(In(%(group_stock)d , Eval('groups', [])))}"
icon="tryton-ok"/>
<button string="Reset to Draft" name="button_draft"
type="object"
- states="{'invisible': '''state != 'cancel' ''', 'readonly': '''%(group_stock)d not in groups'''}"
+ states="{'invisible': Not(Equal(Eval('state'), 'cancel')), 'readonly': Not(In(%(group_stock)d, Eval('groups', [])))}"
icon="tryton-clear"/>
</group>
</group>
@@ -362,6 +367,7 @@ this repository contains the full copyright notices and license terms. -->
<field name="customer"/>
<field name="delivery_address"/>
<field name="state" select="1"/>
+ <field name="create_date" tree_invisible="1" select="2"/>
</tree>
]]>
</field>
@@ -382,6 +388,7 @@ this repository contains the full copyright notices and license terms. -->
<field name="name">Customer Shipments</field>
<field name="res_model">stock.shipment.out</field>
<field name="view_type">form</field>
+ <field name="search_value">{'create_date': ['between', Date(delta_years=-1)]}</field>
</record>
<record model="ir.action.act_window.view"
id="act_shipment_out_form_view1">
@@ -464,8 +471,8 @@ this repository contains the full copyright notices and license terms. -->
<menuitem parent="menu_shipment_out_form" sequence="30"
action="act_shipment_out_form_ready" id="menu_shipment_out_ready"/>
- <record model="ir.ui.view" id="shipment_out_assign_ask_force_view_form">
- <field name="model">stock.shipment.out.assign.ask_force</field>
+ <record model="ir.ui.view" id="shipment_out_assign_assign_failed_view_form">
+ <field name="model">stock.shipment.out.assign.assign_failed</field>
<field name="type">form</field>
<field name="arch" type="xml">
<![CDATA[
@@ -519,22 +526,23 @@ this repository contains the full copyright notices and license terms. -->
<field name="state"/>
<group col="6" colspan="2" id="buttons">
<button string="Cancel" name="cancel"
- states="{'invisible': '''state in ('cancel', 'done') ''', 'readonly': '''%(group_stock)d not in groups'''}"
+ states="{'invisible': In(Eval('state'), ['cancel', 'done']), 'readonly': Not(In(%(group_stock)d, Eval('groups', [])))}"
icon="tryton-cancel"/>
<button string="Draft" name="draft"
- states="{'invisible': '''state != 'waiting' ''', 'readonly': '''%(group_stock)d not in groups'''}"
+ states="{'invisible': Not(Equal(Eval('state'), 'waiting')), 'readonly': Not(In(%(group_stock)d, Eval('groups', [])))}"
icon="tryton-go-previous"/>
<button string="Waiting" name="waiting"
- states="{'invisible': '''state not in ('assigned', 'waiting', 'draft')''', 'readonly': '''%(group_stock)d not in groups''', 'icon': '''state == 'assigned' and 'tryton-go-previous' or state == 'waiting' and 'tryton-clear' or state == 'draft' and 'tryton-go-next' or False'''}"/>
+ states="{'invisible': Not(In(Eval('state'), ['assigned', 'waiting', 'draft'])), 'readonly': Not(In(%(group_stock)d, Eval('groups', []))), 'icon': If(Equal(Eval('state'), 'assigned'), 'tryton-go-previous', If(Equal(Eval('state'), 'waiting'), 'tryton-clear', If(Equal(Eval('state'), 'draft'), 'tryton-go-next', '')))}"/>
<button string="Assign" name="%(wizard_shipment_internal_assign)d"
type="action"
- states="{'invisible': '''state != 'waiting' ''', 'readonly': '''%(group_stock)d not in groups'''}"
+ states="{'invisible': Not(Equal(Eval('state'), 'waiting')), 'readonly': Not(In(%(group_stock)d, Eval('groups', [])))}"
icon="tryton-go-next"/>
<button string="Reset to Draft" name="button_draft"
- type="object" states="{'invisible': '''state != 'cancel' ''', 'readonly': '''%(group_stock)d not in groups'''}"
+ type="object"
+ states="{'invisible': Not(Equal(Eval('state'), 'cancel')), 'readonly': Not(In(%(group_stock)d, Eval('groups', [])))}"
icon="tryton-clear"/>
<button string="Done" name="done"
- states="{'invisible': '''state != 'assigned' ''', 'readonly': '''%(group_stock)d not in groups'''}"
+ states="{'invisible': Not(Equal(Eval('state'), 'assigned')), 'readonly': Not(In(%(group_stock)d , Eval('groups', [])))}"
icon="tryton-ok"/>
</group>
</form>
@@ -554,6 +562,7 @@ this repository contains the full copyright notices and license terms. -->
<field name="from_location" select="2"/>
<field name="to_location" select="2"/>
<field name="state" select="1"/>
+ <field name="create_date" tree_invisible="1" select="2"/>
</tree>
]]>
</field>
@@ -562,6 +571,7 @@ this repository contains the full copyright notices and license terms. -->
<field name="name">Internal Shipments</field>
<field name="res_model">stock.shipment.internal</field>
<field name="view_type">form</field>
+ <field name="search_value">{'create_date': ['between', Date(delta_years=-1)]}</field>
</record>
<record model="ir.action.act_window.view"
id="act_shipment_internal_form_view1">
@@ -666,8 +676,8 @@ this repository contains the full copyright notices and license terms. -->
action="act_shipment_internal_assigned_form"
id="menu_shipment_internal_assigned_form"/>
- <record model="ir.ui.view" id="shipment_internal_assign_ask_force_view_form">
- <field name="model">stock.shipment.internal.assign.ask_force</field>
+ <record model="ir.ui.view" id="shipment_internal_assign_assign_failed_view_form">
+ <field name="model">stock.shipment.internal.assign.assign_failed</field>
<field name="type">form</field>
<field name="arch" type="xml">
<![CDATA[
@@ -735,17 +745,17 @@ this repository contains the full copyright notices and license terms. -->
<field name="state"/>
<group col="5" colspan="2" id="buttons">
<button string="Cancel" name="cancel"
- states="{'invisible': '''state in ('cancel', 'done') ''', 'readonly': '''%(group_stock)d not in groups'''}"
+ states="{'invisible': In(Eval('state'), ['cancel', 'done']), 'readonly': Not(In(%(group_stock)d, Eval('groups', [])))}"
icon="tryton-cancel"/>
<button string="Received" name="received"
- states="{'invisible': '''state != 'draft' ''', 'readonly': '''%(group_stock)d not in groups'''}"
+ states="{'invisible': Not(Equal(Eval('state'), 'draft')), 'readonly': Not(In(%(group_stock)d, Eval('groups', [])))}"
icon="tryton-go-next"/>
<button string="Done" name="done"
- states="{'invisible': '''state != 'received' ''', 'readonly': '''%(group_stock)d not in groups'''}"
+ states="{'invisible': Not(Equal(Eval('state'), 'received')), 'readonly': Not(In(%(group_stock)d, Eval('groups', [])))}"
icon="tryton-ok"/>
<button string="Reset to Draft" name="button_draft"
type="object"
- states="{'invisible': '''state != 'cancel' ''', 'readonly': '''%(group_stock)d not in groups'''}"
+ states="{'invisible': Not(Equal(Eval('state'), 'cancel')), 'readonly': Not(In(%(group_stock)d, Eval('groups', [])))}"
icon="tryton-clear"/>
</group>
</group>
@@ -766,6 +776,7 @@ this repository contains the full copyright notices and license terms. -->
<field name="effective_date" select="2"/>
<field name="customer" select="2"/>
<field name="delivery_address" select="2"/>
+ <field name="create_date" tree_invisible="1" select="2"/>
</tree>
]]>
</field>
@@ -775,6 +786,7 @@ this repository contains the full copyright notices and license terms. -->
<field name="name">Customer Return Shipments</field>
<field name="res_model">stock.shipment.out.return</field>
<field name="view_type">form</field>
+ <field name="search_value">{'create_date': ['between', Date(delta_years=-1)]}</field>
</record>
<record model="ir.action.act_window.view"
id="act_shipment_out_return_form_view1">
@@ -1370,8 +1382,10 @@ this repository contains the full copyright notices and license terms. -->
<!-- Sequence shipment out -->
<record model="ir.sequence.type" id="sequence_type_shipment_out">
- <field name="name">Customer Shipment</field>
- <field name="code">stock.shipment.out</field>
+ <field name="name">Customer Shipment</field>
+ <field name="code">stock.shipment.out</field>
+ <field name="groups"
+ eval="[('add', ref('res.group_admin')), ('add', ref('group_stock_admin'))]"/>
</record>
<record model="ir.sequence" id="sequence_shipment_out">
<field name="name">Customer Shipment</field>
@@ -1380,8 +1394,10 @@ this repository contains the full copyright notices and license terms. -->
<!-- Sequence shipment in -->
<record model="ir.sequence.type" id="sequence_type_shipment_in">
- <field name="name">Supplier Shipment</field>
- <field name="code">stock.shipment.in</field>
+ <field name="name">Supplier Shipment</field>
+ <field name="code">stock.shipment.in</field>
+ <field name="groups"
+ eval="[('add', ref('res.group_admin')), ('add', ref('group_stock_admin'))]"/>
</record>
<record model="ir.sequence" id="sequence_shipment_in">
<field name="name">Supplier Shipment</field>
@@ -1390,8 +1406,10 @@ this repository contains the full copyright notices and license terms. -->
<!-- Sequence shipment internal -->
<record model="ir.sequence.type" id="sequence_type_shipment_internal">
- <field name="name">Internal Shipment</field>
- <field name="code">stock.shipment.internal</field>
+ <field name="name">Internal Shipment</field>
+ <field name="code">stock.shipment.internal</field>
+ <field name="groups"
+ eval="[('add', ref('res.group_admin')), ('add', ref('group_stock_admin'))]"/>
</record>
<record model="ir.sequence" id="sequence_shipment_internal">
<field name="name">Internal Shipment</field>
@@ -1400,8 +1418,10 @@ this repository contains the full copyright notices and license terms. -->
<!-- Sequence shipment out return-->
<record model="ir.sequence.type" id="sequence_type_shipment_out_return">
- <field name="name">Customer Return Shipment</field>
- <field name="code">stock.shipment.out.return</field>
+ <field name="name">Customer Return Shipment</field>
+ <field name="code">stock.shipment.out.return</field>
+ <field name="groups"
+ eval="[('add', ref('res.group_admin')), ('add', ref('group_stock_admin'))]"/>
</record>
<record model="ir.sequence" id="sequence_shipment_out_return">
<field name="name">Customer Return Shipment</field>
@@ -1412,6 +1432,8 @@ this repository contains the full copyright notices and license terms. -->
<record model="ir.sequence.type" id="sequence_type_shipment_in_return">
<field name="name">Supplier Return Shipment</field>
<field name="code">stock.shipment.in.return</field>
+ <field name="groups"
+ eval="[('add', ref('res.group_admin')), ('add', ref('group_stock_admin'))]"/>
</record>
<record model="ir.sequence" id="sequence_shipment_in_return">
<field name="name">Supplier Return Shipment</field>
diff --git a/tests/__init__.py b/tests/__init__.py
index 6ad77e7..25607ae 100644
--- a/tests/__init__.py
+++ b/tests/__init__.py
@@ -1,4 +1,4 @@
#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 test_stock import *
+from test_stock import suite
diff --git a/tests/test_stock.py b/tests/test_stock.py
index 25166ae..8294670 100644
--- a/tests/test_stock.py
+++ b/tests/test_stock.py
@@ -10,7 +10,7 @@ if os.path.isdir(DIR):
import unittest
import trytond.tests.test_tryton
-from trytond.tests.test_tryton import RPCProxy, CONTEXT, SOCK, test_view
+from trytond.tests.test_tryton import test_view
class StockTestCase(unittest.TestCase):
'''
@@ -19,7 +19,6 @@ class StockTestCase(unittest.TestCase):
def setUp(self):
trytond.tests.test_tryton.install_module('stock')
- self.location = RPCProxy('stock.location')
def test0005views(self):
'''
@@ -28,11 +27,9 @@ class StockTestCase(unittest.TestCase):
self.assertRaises(Exception, test_view('stock'))
def suite():
- return unittest.TestLoader().loadTestsFromTestCase(StockTestCase)
+ suite = trytond.tests.test_tryton.suite()
+ suite.addTests(unittest.TestLoader().loadTestsFromTestCase(StockTestCase))
+ return suite
if __name__ == '__main__':
- suiteTrytond = trytond.tests.test_tryton.suite()
- suiteStock = suite()
- alltests = unittest.TestSuite([suiteTrytond, suiteStock])
- unittest.TextTestRunner(verbosity=2).run(alltests)
- SOCK.disconnect()
+ unittest.TextTestRunner(verbosity=2).run(suite())
diff --git a/trytond_stock.egg-info/PKG-INFO b/trytond_stock.egg-info/PKG-INFO
index b2abf65..6c15035 100644
--- a/trytond_stock.egg-info/PKG-INFO
+++ b/trytond_stock.egg-info/PKG-INFO
@@ -1,6 +1,6 @@
Metadata-Version: 1.0
Name: trytond-stock
-Version: 1.4.2
+Version: 1.6.0
Summary: Stock Management and Inventory Control with:
- Location definition
- Stock move
@@ -17,7 +17,7 @@ Home-page: http://www.tryton.org/
Author: B2CK
Author-email: info at b2ck.com
License: GPL-3
-Download-URL: http://downloads.tryton.org/1.4/
+Download-URL: http://downloads.tryton.org/1.6/
Description: UNKNOWN
Platform: UNKNOWN
Classifier: Development Status :: 5 - Production/Stable
diff --git a/trytond_stock.egg-info/SOURCES.txt b/trytond_stock.egg-info/SOURCES.txt
index 1ed9b10..47215bf 100644
--- a/trytond_stock.egg-info/SOURCES.txt
+++ b/trytond_stock.egg-info/SOURCES.txt
@@ -5,6 +5,7 @@ LICENSE
MANIFEST.in
README
TODO
+configuration.xml
customer_return_restocking_list.odt
de_DE.csv
delivery_note.odt
@@ -24,14 +25,15 @@ stock.xml
supplier_restocking_list.odt
./__init__.py
./__tryton__.py
+./configuration.py
./inventory.py
./location.py
./move.py
./product.py
./shipment.py
+./tests/__init__.py
+./tests/test_stock.py
doc/index.rst
-tests/__init__.py
-tests/test_stock.py
trytond_stock.egg-info/PKG-INFO
trytond_stock.egg-info/SOURCES.txt
trytond_stock.egg-info/dependency_links.txt
diff --git a/trytond_stock.egg-info/requires.txt b/trytond_stock.egg-info/requires.txt
index 466d703..46a1b84 100644
--- a/trytond_stock.egg-info/requires.txt
+++ b/trytond_stock.egg-info/requires.txt
@@ -1,6 +1,5 @@
-trytond_party
-trytond_product
-trytond_company
-trytond_currency
-trytond >= 1.4
-trytond < 1.5
\ No newline at end of file
+trytond_party >= 1.6, < 1.7
+trytond_product >= 1.6, < 1.7
+trytond_company >= 1.6, < 1.7
+trytond_currency >= 1.6, < 1.7
+trytond >= 1.6, < 1.7
\ No newline at end of file
commit 0eee65b5fd12be3c98ca9226ba1d806778f85a13
Author: Daniel Baumann <daniel at debian.org>
Date: Sat Feb 20 10:54:33 2010 +0100
Adding upstream version 1.4.2.
diff --git a/CHANGELOG b/CHANGELOG
index 8507174..1f7dc0c 100644
--- a/CHANGELOG
+++ b/CHANGELOG
@@ -1,3 +1,6 @@
+Version 1.4.2 - 2010-02-17
+* Some bug fixes (see mercurial logs for details)
+
Version 1.4.1 - 2009-11-24
* Some bug fixes (see mercurial logs for details)
diff --git a/COPYRIGHT b/COPYRIGHT
index da277a9..94a43fb 100644
--- a/COPYRIGHT
+++ b/COPYRIGHT
@@ -1,7 +1,7 @@
Copyright (C) 2004-2008 Tiny SPRL.
-Copyright (C) 2008-2009 Cédric Krier.
-Copyright (C) 2008-2009 Bertrand Chenal.
-Copyright (C) 2008-2009 B2CK SPRL.
+Copyright (C) 2008-2010 Cédric Krier.
+Copyright (C) 2008-2010 Bertrand Chenal.
+Copyright (C) 2008-2010 B2CK SPRL.
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
diff --git a/PKG-INFO b/PKG-INFO
index ad8dec1..c216b04 100644
--- a/PKG-INFO
+++ b/PKG-INFO
@@ -1,6 +1,6 @@
Metadata-Version: 1.0
Name: trytond_stock
-Version: 1.4.1
+Version: 1.4.2
Summary: Stock Management and Inventory Control with:
- Location definition
- Stock move
diff --git a/__tryton__.py b/__tryton__.py
index 2418990..08b8e8b 100644
--- a/__tryton__.py
+++ b/__tryton__.py
@@ -6,7 +6,7 @@
'name_es_CO': 'Inventarios',
'name_es_ES': 'Gestión de existencias',
'name_fr_FR': 'Gestion des stocks',
- 'version': '1.4.1',
+ 'version': '1.4.2',
'author': 'B2CK',
'email': 'info at b2ck.com',
'website': 'http://www.tryton.org/',
diff --git a/inventory.py b/inventory.py
index 171306e..f37bcf4 100644
--- a/inventory.py
+++ b/inventory.py
@@ -65,11 +65,6 @@ class Inventory(ModelWorkflow, ModelSQL, ModelView):
return location_ids[0]
return False
- def set_state_cancel(self, cursor, user, ids, context=None):
- self.write(cursor, user, ids, {
- 'state': 'cancel',
- }, context=context)
-
def set_state_draft(self, cursor, user, inventory_id, context=None):
self.write(cursor, user, inventory_id, {
'state': 'draft',
diff --git a/move.py b/move.py
index 987032a..0a0ed4f 100644
--- a/move.py
+++ b/move.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.
"Move"
-from trytond.model import ModelView, ModelSQL, fields
+from trytond.model import ModelView, ModelSQL, fields, OPERATORS
from trytond.backend import TableHandler
from decimal import Decimal
@@ -389,10 +389,11 @@ class Move(ModelSQL, ModelView):
def process_args(args):
i = 0
while i < len(args):
- if isinstance(args[i], list):
- process_args(args[i])
- if isinstance(args[i], tuple) \
- and args[i][0] == 'to_location_warehouse':
+ #add test for xmlrpc that doesn't handle tuple
+ if (isinstance(args[i], tuple) or \
+ (isinstance(args[i], list) and len(args[i]) > 2 and \
+ args[i][1] in OPERATORS)) and \
+ args[i][0] == 'to_location_warehouse':
location_id = False
if args[i][2]:
location = location_obj.browse(cursor, user,
@@ -400,6 +401,8 @@ class Move(ModelSQL, ModelView):
if location.type == 'warehouse':
location_id = location.input_location.id
args[i] = ('to_location', args[i][1], location_id)
+ elif isinstance(args[i], list):
+ process_args(args[i])
i += 1
process_args(args)
return super(Move, self).search(cursor, user, args, offset=offset,
diff --git a/shipment.py b/shipment.py
index 62ded35..aa13cae 100644
--- a/shipment.py
+++ b/shipment.py
@@ -170,7 +170,10 @@ class ShipmentIn(ModelWorkflow, ModelSQL, ModelView):
self.raise_user_error(cursor,
'incoming_move_input_dest', context=context)
elif act[0] == 'add':
- move_ids.append(act[1])
+ if isinstance(act[1], (int, long)):
+ move_ids.append(act[1])
+ else:
+ move_ids.extend(act[1])
elif act[0] == 'set':
move_ids.extend(act[1])
@@ -217,7 +220,10 @@ class ShipmentIn(ModelWorkflow, ModelSQL, ModelView):
self.raise_user_error(cursor,
'inventory_move_input_source', context=context)
elif act[0] == 'add':
- move_ids.append(act[1])
+ if isinstance(act[1], (int, long)):
+ move_ids.append(act[1])
+ else:
+ move_ids.extend(act[1])
elif act[0] == 'set':
move_ids.extend(act[1])
@@ -658,7 +664,10 @@ class ShipmentOut(ModelWorkflow, ModelSQL, ModelView):
self.raise_user_error(cursor,
'outgoing_move_output_source', context=context)
elif act[0] == 'add':
- move_ids.append(act[1])
+ if isinstance(act[1], (int, long)):
+ move_ids.append(act[1])
+ else:
+ move_ids.extend(act[1])
elif act[0] == 'set':
move_ids.extend(act[1])
@@ -705,7 +714,10 @@ class ShipmentOut(ModelWorkflow, ModelSQL, ModelView):
self.raise_user_error(cursor,
'inventory_move_output_dest', context=context)
elif act[0] == 'add':
- move_ids.append(act[1])
+ if isinstance(act[1], (int, long)):
+ move_ids.append(act[1])
+ else:
+ move_ids.extend(act[1])
elif act[0] == 'set':
move_ids.extend(act[1])
@@ -1074,7 +1086,10 @@ class ShipmentOutReturn(ModelWorkflow, ModelSQL, ModelView):
self.raise_user_error(cursor,
'incoming_move_input_dest', context=context)
elif act[0] == 'add':
- move_ids.append(act[1])
+ if isinstance(act[1], (int, long)):
+ move_ids.append(act[1])
+ else:
+ move_ids.extend(act[1])
elif act[0] == 'set':
move_ids.extend(act[1])
@@ -1121,7 +1136,10 @@ class ShipmentOutReturn(ModelWorkflow, ModelSQL, ModelView):
self.raise_user_error(cursor,
'inventory_move_input_source', context=context)
elif act[0] == 'add':
- move_ids.append(act[1])
+ if isinstance(act[1], (int, long)):
+ move_ids.append(act[1])
+ else:
+ move_ids.extend(act[1])
elif act[0] == 'set':
move_ids.extend(act[1])
diff --git a/trytond_stock.egg-info/PKG-INFO b/trytond_stock.egg-info/PKG-INFO
index 45932e5..b2abf65 100644
--- a/trytond_stock.egg-info/PKG-INFO
+++ b/trytond_stock.egg-info/PKG-INFO
@@ -1,6 +1,6 @@
Metadata-Version: 1.0
Name: trytond-stock
-Version: 1.4.1
+Version: 1.4.2
Summary: Stock Management and Inventory Control with:
- Location definition
- Stock move
commit 0a87c51bda5bbfd46a60e316bfa3b5e6cc0cee7d
Author: Daniel Baumann <daniel at debian.org>
Date: Wed Nov 25 13:22:45 2009 +0100
Adding upstream version 1.4.1.
diff --git a/CHANGELOG b/CHANGELOG
index 2382afc..8507174 100644
--- a/CHANGELOG
+++ b/CHANGELOG
@@ -1,3 +1,6 @@
+Version 1.4.1 - 2009-11-24
+* Some bug fixes (see mercurial logs for details)
+
Version 1.4.0 - 2009-10-19
* Bug fixes (see mercurial logs for details)
* Add new group "Stock Force Assignment"
diff --git a/PKG-INFO b/PKG-INFO
index d2eba6a..ad8dec1 100644
--- a/PKG-INFO
+++ b/PKG-INFO
@@ -1,6 +1,6 @@
Metadata-Version: 1.0
Name: trytond_stock
-Version: 1.4.0
+Version: 1.4.1
Summary: Stock Management and Inventory Control with:
- Location definition
- Stock move
diff --git a/__tryton__.py b/__tryton__.py
index 294f6e2..2418990 100644
--- a/__tryton__.py
+++ b/__tryton__.py
@@ -6,7 +6,7 @@
'name_es_CO': 'Inventarios',
'name_es_ES': 'Gestión de existencias',
'name_fr_FR': 'Gestion des stocks',
- 'version': '1.4.0',
+ 'version': '1.4.1',
'author': 'B2CK',
'email': 'info at b2ck.com',
'website': 'http://www.tryton.org/',
diff --git a/move.py b/move.py
index 6796b86..987032a 100644
--- a/move.py
+++ b/move.py
@@ -60,7 +60,8 @@ class Move(ModelSQL, ModelView):
company = fields.Many2One('company.company', 'Company', required=True,
states={
'readonly': "state != 'draft'",
- }, domain=["('id', '=', context.get('company', 0))"])
+ }, domain=["('id', 'company' in context and '=' or '!=', " \
+ "context.get('company', 0))"])
unit_price = fields.Numeric('Unit Price', digits=(16, 4),
states={
'invisible': "not unit_price_required",
diff --git a/product.py b/product.py
index 02f375b..f9188cd 100644
--- a/product.py
+++ b/product.py
@@ -72,6 +72,7 @@ class Product(ModelSQL, ModelView):
return dict([(id, 0.0) for id in ids])
if name == 'quantity' and \
+ context.get('stock_date_end') and \
context.get('stock_date_end') > \
date_obj.today(cursor, user, context=context):
@@ -112,15 +113,21 @@ class Product(ModelSQL, ModelView):
if not (context and context.get('locations') and domain):
return []
- if (name != 'forecast_quantity') and context.get('stock_date_end'):
- if context['stock_date_end'] != date_obj.today(cursor, user,
- context=context):
- context = context.copy()
- del context['stock_date_end']
- if name == 'forecast_quantity' and not context.get('stock_date_end'):
+ if name == 'quantity' and \
+ context.get('stock_date_end') and \
+ context.get('stock_date_end') > \
+ date_obj.today(cursor, user, context=context):
+
context = context.copy()
- context['stock_date_end'] = datetime.date.max
+ context['stock_date_end'] = date_obj.today(
+ cursor, user, context=context)
+
+ if name == 'forecast_quantity':
+ context = context.copy()
+ context['forecast'] = True
+ if not context.get('stock_date_end'):
+ context['stock_date_end'] = datetime.date.max
pbl = self.products_by_location(
cursor, user, location_ids=context['locations'], with_childs=True,
@@ -225,10 +232,6 @@ class Product(ModelSQL, ModelView):
context['stock_date_end'],
context['stock_date_end'],
]
- # infinite date end: take all states for the moves
- elif context['stock_date_end'] == datetime.date.max:
- state_date_clause = 'state in (%s, %s, %s)'
- state_date_vals = ['done', 'assigned', 'draft']
# future date end: filter move on state done and date
# before today, or on all state and date between today and
# date_end.
@@ -271,7 +274,8 @@ class Product(ModelSQL, ModelView):
')'
state_date_vals = [
- 'done', 'assigned', today, today,
+ 'done', context.get('stock_assign') and 'assigned' or 'done',
+ today, today,
'done', 'assigned', 'draft',
context['stock_date_end'], today,
context['stock_date_end'], today,
diff --git a/shipment.py b/shipment.py
index 813b25b..62ded35 100644
--- a/shipment.py
+++ b/shipment.py
@@ -312,6 +312,9 @@ class ShipmentIn(ModelWorkflow, ModelSQL, ModelView):
res['to_location'] = incoming_move.shipment_in.warehouse.\
storage_location.id
res['state'] = 'draft'
+ # Product will be considered in stock only when the inventory
+ # move will be made:
+ res['planned_date'] = False
res['company'] = incoming_move.company.id
return res
@@ -797,6 +800,7 @@ class ShipmentOut(ModelWorkflow, ModelSQL, ModelView):
'quantity': out_quantity,
'shipment_out': shipment.id,
'state': 'draft',
+ 'planned_date': shipment.planned_date,
'company': move.company.id,
'currency': move.company.currency.id,
'unit_price': unit_price,
@@ -869,6 +873,7 @@ class ShipmentOut(ModelWorkflow, ModelSQL, ModelView):
'uom': move.uom.id,
'quantity': move.quantity,
'shipment_out': shipment.id,
+ 'planned_date': move.planned_date,
'state': 'draft',
'company': move.company.id,
}, context=context)
@@ -1212,6 +1217,9 @@ class ShipmentOutReturn(ModelWorkflow, ModelSQL, ModelView):
res['to_location'] = incoming_move.shipment_out_return.warehouse.\
storage_location.id
res['state'] = 'draft'
+ # Product will be considered in stock only when the inventory
+ # move will be made:
+ res['planned_date'] = False
res['company'] = incoming_move.company.id
return res
diff --git a/trytond_stock.egg-info/PKG-INFO b/trytond_stock.egg-info/PKG-INFO
index 578bad3..45932e5 100644
--- a/trytond_stock.egg-info/PKG-INFO
+++ b/trytond_stock.egg-info/PKG-INFO
@@ -1,6 +1,6 @@
Metadata-Version: 1.0
Name: trytond-stock
-Version: 1.4.0
+Version: 1.4.1
Summary: Stock Management and Inventory Control with:
- Location definition
- Stock move
commit 01d9bee7a5103ef08c55cfab1b670a880acac550
Author: Daniel Baumann <daniel at debian.org>
Date: Mon Oct 19 22:36:08 2009 +0200
Adding upstream version 1.4.0.
diff --git a/CHANGELOG b/CHANGELOG
index 46986a8..2382afc 100644
--- a/CHANGELOG
+++ b/CHANGELOG
@@ -1,5 +1,8 @@
-Version 1.2.1 - 2009-07-07
-* Some bug fixes (see mercurial logs for details)
+Version 1.4.0 - 2009-10-19
+* Bug fixes (see mercurial logs for details)
+* Add new group "Stock Force Assignment"
+* Migrate packing* objects and tables to shipment*
+* Return move id in create_move of inventory line
Version 1.2.0 - 2009-04-20
* Bug fixes (see mercurial logs for details)
diff --git a/INSTALL b/INSTALL
index 92c33f6..0c3a654 100644
--- a/INSTALL
+++ b/INSTALL
@@ -5,7 +5,7 @@ Prerequisites
-------------
* Python 2.4 or later (http://www.python.org/)
- * trytond 0.0.x (http://www.tryton.org/)
+ * trytond (http://www.tryton.org/)
* 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 fcdac49..d2eba6a 100644
--- a/PKG-INFO
+++ b/PKG-INFO
@@ -1,21 +1,23 @@
Metadata-Version: 1.0
Name: trytond_stock
-Version: 1.2.1
+Version: 1.4.0
Summary: Stock Management and Inventory Control with:
- Location definition
- Stock move
- - Shipment: Supplier, Customer or Internal
+ - Supplier, Customer and Internal Shipments. Customer and Supplier Return Shipments.
- Stock Inventory
And with reports:
- - Customer Shipment
+ - Delivery Note
+ - Picking List
+ - Restocking List (on Supplier Shipment and Customer Return Shipment)
- Products by Locations
Home-page: http://www.tryton.org/
Author: B2CK
Author-email: info at b2ck.com
License: GPL-3
-Download-URL: http://downloads.tryton.org/1.2/
+Download-URL: http://downloads.tryton.org/1.4/
Description: UNKNOWN
Platform: UNKNOWN
Classifier: Development Status :: 5 - Production/Stable
diff --git a/TODO b/TODO
index 50de29d..617e1d9 100644
--- a/TODO
+++ b/TODO
@@ -1,4 +1,3 @@
- Add an indexed period on move with automatic creation and default duration
defined on company
-- Add check on product when changing UOM and there is stock move
-- Migrate packing* objects and tables to shipment*
+
diff --git a/__init__.py b/__init__.py
index af1492a..4b4a264 100644
--- a/__init__.py
+++ b/__init__.py
@@ -2,7 +2,7 @@
#repository contains the full copyright notices and license terms.
from location import *
-from packing import *
+from shipment import *
from move import *
from product import *
from inventory import *
diff --git a/__tryton__.py b/__tryton__.py
index a9b8823..294f6e2 100644
--- a/__tryton__.py
+++ b/__tryton__.py
@@ -4,30 +4,34 @@
'name': 'Stock Management',
'name_de_DE': 'Lagerverwaltung',
'name_es_CO': 'Inventarios',
- 'name_es_ES': 'Inventarios',
+ 'name_es_ES': 'Gestión de existencias',
'name_fr_FR': 'Gestion des stocks',
- 'version': '1.2.1',
+ 'version': '1.4.0',
'author': 'B2CK',
'email': 'info at b2ck.com',
'website': 'http://www.tryton.org/',
'description': '''Stock Management and Inventory Control with:
- Location definition
- Stock move
- - Shipment: Supplier, Customer or Internal
+ - Supplier, Customer and Internal Shipments. Customer and Supplier Return Shipments.
- Stock Inventory
And with reports:
- - Customer Shipment
+ - Delivery Note
+ - Picking List
+ - Restocking List (on Supplier Shipment and Customer Return Shipment)
- Products by Locations
''',
'description_de_DE': '''Lagerverwaltung und Bestandskontrolle mit:
- Definition von Lagerorten
- Lagerbewegungen
- - Packlisten/Lieferscheine Lieferant / Kunde / Intern
- - Lagerbestand
+ - Lieferposten Lieferant/Kunde/Intern, Warenrückgaben und Warenrücknahmen
+ - Lagerbestandsaktualisierung
-Zugehörige Berichte:
- - Lieferschein für Kunden
+Mit den Berichten:
+ - Lieferschein
+ - Pick Liste
+ - Einlagerungsliste (für Lieferposten von Lieferanten und Warenrücknahmen)
- Artikel nach Lagerorten
''',
'description_es_CO': '''Administración de Inventarios y bodegas:
@@ -40,24 +44,28 @@ Y con los reportes:
- Empaques de Clientes
- Productos por Lugar
''',
- 'description_es_ES': '''Administración de Inventarios y bodegas:
- - Definición de sitios
- - Movimiento de Bodega
- - Empaque de Proveedor / Cliente / Interno
- - Inventario en Bodega
+ 'description_es_ES': '''Gestión de Existencias y control de inventarios con:
+ - Definición de ubicaciones
+ - Movimiento de existencias
+ - Envios de proveedores, clientes e internos. Envio de devoluciones de clientes y proveedores.
+ - Inventario de existencias
-Y con los reportes:
- - Empaques de Clientes
- - Productos por Lugar
+Y con los informes:
+ - Notas de envio
+ - Lista de selección
+ - Lista de recálculo de existencias (con envios de proveedores y envios de devoluciones de clientes)
+ - Productos por ubicación
''',
'description_fr_FR':'''Gestion des stocks et contrôle de l'inventaire avec:
- Emplacement
- Mouvement de stock
- - Colisages client / fournisseur / interne
+ - Expédition client, fournisseur et interne. Retour d'expédition client et founisseur.
- Inventaire
Et les rapports:
- - Colisage client
+ - Bon de livraison client
+ - Liste de prélèvement
+ - Liste de restockage (sur l'expédition fournisseur et le retour d'expédition client)
- Quantités de produit par location
''',
'depends': [
@@ -72,7 +80,7 @@ Et les rapports:
'stock.xml',
'product.xml',
'location.xml',
- 'packing.xml',
+ 'shipment.xml',
'move.xml',
'inventory.xml',
'party.xml',
diff --git a/de_DE.csv b/de_DE.csv
index 5b9bd9b..85cb042 100644
--- a/de_DE.csv
+++ b/de_DE.csv
@@ -1,7 +1,9 @@
type,name,res_id,src,value,fuzzy
+error,product.template,0,You cannot change the default uom for a product which is associated to stock moves.,"Die StandardmaÃeinheit kann nicht für einen Artikel geändert werden, der Lagerbewegungen zugeordnet ist.",0
error,stock.inventory.line,0,Line quantity must be positive!,Anzahl der Position muss positiv sein!,0
error,stock.inventory.line,0,Product must be unique by inventory!,Ein Artikel kann in einem Lagerbestand nicht mehrfach vergeben werden!,0
error,stock.location,0,A location with existing moves cannot be changed to a type that does not support moves.,"Ein Lagerort mit zugordneten Bewegungen kann nicht zu einem Typ geändert werden, der keine Bewegungen unterstützt.",0
+error,stock.location,0,"Location ""%s"" must be a child of warehouse ""%s""!","Lagerort ""%s"" muss untergeordnet zu Warenlager ""%s"" sein!",0
error,stock.location,0,You can not create recursive locations!,Lagerorte können nicht rekursiv angelegt werden!,0
error,stock.move,0,Move can be on only one Shipment,Eine Bewegung kann nur auf einem Lieferposten erfolgen!,0
error,stock.move,0,Move quantity must be positive,Zu bewegende Anzahl muss positiv sein,0
@@ -11,12 +13,12 @@ error,stock.move,0,You can not set state to done!,Status kann nicht auf Erledigt
error,stock.move,0,You can not set state to draft!,"Status ""Entwurf"" kann nicht gesetzt werden!",0
error,stock.move,0,You can not use service products for a move!,Dienstleistungen können nicht in Warenbewegungen verwendet werden!,0
error,stock.move,0,You can only delete draft or cancelled moves!,"Nur Bewegungen mit Status ""Entwurf"" oder ""Abgebrochen"" können gelöscht werden!",0
-error,stock.packing.in,0,Incoming Moves must have the warehouse input location as destination location!,Eingehende Bewegungen müssen den Eingangsbereich des Warenlagers als Zielort haben!,0
-error,stock.packing.in,0,Inventory Moves must have the warehouse input location as source location!,Eingehende Bewegungen müssen den Eingangsbereich des Warenlagers als Herkunftsort haben!,0
-error,stock.packing.out.return,0,Incoming Moves must have the warehouse input location as destination location!,Eingehende Bewegungen müssen den Eingangsbereich des Warenlagers als Zielort haben!,0
-error,stock.packing.out.return,0,Inventory Moves must have the warehouse input location as source location!,Eingehende Bewegungen müssen den Eingangsbereich des Warenlagers als Herkunftsort haben!,0
-error,stock.packing.out.return.create,0,The packing with code %s is not yet sent.,Der Lieferposten mit Code %s ist noch nicht erledigt.,0
-error,stock.packing.out.return.create,0,You can not create return packing,Warenrücknahme nicht möglich!,0
+error,stock.shipment.in,0,Incoming Moves must have the warehouse input location as destination location!,Eingehende Bewegungen müssen den Eingangsbereich des Warenlagers als Zielort haben!,0
+error,stock.shipment.in,0,Inventory Moves must have the warehouse input location as source location!,Eingehende Bewegungen müssen den Eingangsbereich des Warenlagers als Herkunftsort haben!,0
+error,stock.shipment.out.return,0,Incoming Moves must have the warehouse input location as destination location!,Eingehende Bewegungen müssen den Eingangsbereich des Warenlagers als Zielort haben!,0
+error,stock.shipment.out.return,0,Inventory Moves must have the warehouse input location as source location!,Eingehende Bewegungen müssen den Eingangsbereich des Warenlagers als Herkunftsort haben!,0
+error,stock.shipment.out.return.create,0,The shipment with code %s is not yet sent.,Der Lieferposten mit Code %s ist noch nicht erledigt.,0
+error,stock.shipment.out.return.create,0,You can not create return shipment,Warenrücknahme nicht möglich!,0
field,"party.address,delivery",0,Delivery,Lieferadresse,0
field,"party.party,customer_location",0,Customer Location,Lagerort Kunde,0
field,"party.party,supplier_location",0,Supplier Location,Lagerort Lieferant,0
@@ -25,8 +27,6 @@ field,"product.product,quantity",0,Quantity,Anzahl,0
field,"product.template,forecast_quantity",0,Forecast Quantity,Voraussichtliche Anzahl,0
field,"product.template,quantity",0,Quantity,Anzahl,0
field,"stock.inventory,company",0,Company,Unternehmen,0
-field,"stock.inventory.complete.init,categories",0,Categories,Kategorien,0
-field,"stock.inventory.complete.init,products",0,Products,Artikel,0
field,"stock.inventory,date",0,Date,Datum,0
field,"stock.inventory.line,expected_quantity",0,Expected Quantity,Erwartete Anzahl,0
field,"stock.inventory.line,inventory",0,Inventory,Lagerbestand,0
@@ -62,79 +62,79 @@ field,"stock.move,cost_price",0,Cost Price,Einkaufspreis,0
field,"stock.move,currency",0,Currency,Währung,0
field,"stock.move,effective_date",0,Effective Date,Effektives Datum,0
field,"stock.move,from_location",0,From Location,Von Lagerort,0
-field,"stock.move,packing_in",0,Supplier Shipment,Lieferposten von Lieferant,0
-field,"stock.move,packing_in_return",0,Supplier Return Shipment,Warenrückgabe,0
-field,"stock.move,packing_internal",0,Internal Shipment,Interner Lieferposten,0
-field,"stock.move,packing_out",0,Customer Shipment,Lieferposten an Kunde,0
-field,"stock.move,packing_out_return",0,Customer Return Shipment,Warenrücknahme,0
field,"stock.move,planned_date",0,Planned Date,Geplantes Datum,0
field,"stock.move,product",0,Product,Artikel,0
field,"stock.move,quantity",0,Quantity,Anzahl,0
field,"stock.move,rec_name",0,Name,Name,0
+field,"stock.move,shipment_in",0,Supplier Shipment,Lieferposten von Lieferant,0
+field,"stock.move,shipment_in_return",0,Supplier Return Shipment,Warenrückgabe,0
+field,"stock.move,shipment_internal",0,Internal Shipment,Interner Lieferposten,0
+field,"stock.move,shipment_out",0,Customer Shipment,Lieferposten an Kunde,0
+field,"stock.move,shipment_out_return",0,Customer Return Shipment,Warenrücknahme,0
field,"stock.move,state",0,State,Status,0
field,"stock.move,to_location",0,To Location,Zu Lagerort,0
field,"stock.move,unit_digits",0,Unit Digits,Anzahl Stellen,0
field,"stock.move,unit_price",0,Unit Price,Einzelpreis,0
field,"stock.move,unit_price_required",0,Unit Price Required,Einzelpreis erforderlich,0
field,"stock.move,uom",0,Uom,Einheit,0
-field,"stock.packing.in,code",0,Code,Code,0
-field,"stock.packing.in,contact_address",0,Contact Address,Kontaktadresse,0
-field,"stock.packing.in,effective_date",0,Effective Date,Effektives Datum,0
-field,"stock.packing.in,incoming_moves",0,Incoming Moves,Eingehende Bewegungen,0
-field,"stock.packing.in,inventory_moves",0,Inventory Moves,Bestandsänderungen,0
-field,"stock.packing.in,moves",0,Moves,Bewegungen,0
-field,"stock.packing.in,planned_date",0,Planned Date,Geplantes Datum,0
-field,"stock.packing.in,rec_name",0,Name,Name,0
-field,"stock.packing.in,reference",0,Reference,Referenz,0
-field,"stock.packing.in.return.assign.ask_force,moves",0,Moves,Bewegungen,0
-field,"stock.packing.in.return,code",0,Code,Code,0
-field,"stock.packing.in.return,effective_date",0,Effective Date,Effektives Datum,0
-field,"stock.packing.in.return,from_location",0,From Location,Von Lagerort,0
-field,"stock.packing.in.return,moves",0,Moves,Bewegungen,0
-field,"stock.packing.in.return,planned_date",0,Planned Date,Geplantes Datum,0
-field,"stock.packing.in.return,rec_name",0,Name,Name,0
-field,"stock.packing.in.return,reference",0,Reference,Referenz,0
-field,"stock.packing.in.return,state",0,State,Status,0
-field,"stock.packing.in.return,to_location",0,To Location,Zu Lagerort,0
-field,"stock.packing.in,state",0,State,Status,0
-field,"stock.packing.in,supplier",0,Supplier,Lieferant,0
-field,"stock.packing.internal.assign.ask_force,moves",0,Moves,Bewegungen,0
-field,"stock.packing.internal,code",0,Code,Code,0
-field,"stock.packing.internal,effective_date",0,Effective Date,Effektives Datum,0
-field,"stock.packing.internal,from_location",0,From Location,Von Lagerort,0
-field,"stock.packing.internal,moves",0,Moves,Bewegungen,0
-field,"stock.packing.internal,planned_date",0,Planned Date,Geplantes Datum,0
-field,"stock.packing.internal,rec_name",0,Name,Name,0
-field,"stock.packing.internal,reference",0,Reference,Referenz,0
-field,"stock.packing.internal,state",0,State,Status,0
-field,"stock.packing.internal,to_location",0,To Location,Zu Lagerort,0
-field,"stock.packing.in,warehouse",0,Warehouse,Warenlager,0
-field,"stock.packing.out.assign.ask_force,inventory_moves",0,Inventory Moves,Bestandsänderungen,0
-field,"stock.packing.out,code",0,Code,Code,0
-field,"stock.packing.out,customer",0,Customer,Kunde,0
-field,"stock.packing.out,delivery_address",0,Delivery Address,Lieferadresse,0
-field,"stock.packing.out,effective_date",0,Effective Date,Effektives Datum,0
-field,"stock.packing.out,inventory_moves",0,Inventory Moves,Bestandsänderungen,0
-field,"stock.packing.out,moves",0,Moves,Bewegungen,0
-field,"stock.packing.out,outgoing_moves",0,Outgoing Moves,Ausgehende Bewegungen,0
-field,"stock.packing.out,planned_date",0,Planned Date,Geplantes Datum,0
-field,"stock.packing.out,rec_name",0,Name,Name,0
-field,"stock.packing.out,reference",0,Reference,Referenz,0
-field,"stock.packing.out.return,code",0,Code,Code,0
-field,"stock.packing.out.return,customer",0,Customer,Kunde,0
-field,"stock.packing.out.return,delivery_address",0,Delivery Address,Lieferadresse,0
-field,"stock.packing.out.return,effective_date",0,Effective Date,Effektives Datum,0
-field,"stock.packing.out.return,incoming_moves",0,Incoming Moves,Eingehende Bewegungen,0
-field,"stock.packing.out.return,inventory_moves",0,Inventory Moves,Bestandsänderungen,0
-field,"stock.packing.out.return,moves",0,Moves,Bewegungen,0
-field,"stock.packing.out.return,planned_date",0,Planned Date,Geplantes Datum,0
-field,"stock.packing.out.return,rec_name",0,Name,Name,0
-field,"stock.packing.out.return,reference",0,Reference,Referenz,0
-field,"stock.packing.out.return,state",0,State,Status,0
-field,"stock.packing.out.return,warehouse",0,Warehouse,Warenlager,0
-field,"stock.packing.out,state",0,State,Status,0
-field,"stock.packing.out,warehouse",0,Warehouse,Warenlager,0
field,"stock.product_stock_date.init,forecast_date",0,At Date,Zum,0
+field,"stock.shipment.in,code",0,Code,Code,0
+field,"stock.shipment.in,contact_address",0,Contact Address,Kontaktadresse,0
+field,"stock.shipment.in,effective_date",0,Effective Date,Effektives Datum,0
+field,"stock.shipment.in,incoming_moves",0,Incoming Moves,Eingehende Bewegungen,0
+field,"stock.shipment.in,inventory_moves",0,Inventory Moves,Bestandsänderungen,0
+field,"stock.shipment.in,moves",0,Moves,Bewegungen,0
+field,"stock.shipment.in,planned_date",0,Planned Date,Geplantes Datum,0
+field,"stock.shipment.in,rec_name",0,Name,Name,0
+field,"stock.shipment.in,reference",0,Reference,Referenz,0
+field,"stock.shipment.in.return.assign.ask_force,moves",0,Moves,Bewegungen,0
+field,"stock.shipment.in.return,code",0,Code,Code,0
+field,"stock.shipment.in.return,effective_date",0,Effective Date,Effektives Datum,0
+field,"stock.shipment.in.return,from_location",0,From Location,Von Lagerort,0
+field,"stock.shipment.in.return,moves",0,Moves,Bewegungen,0
+field,"stock.shipment.in.return,planned_date",0,Planned Date,Geplantes Datum,0
+field,"stock.shipment.in.return,rec_name",0,Name,Name,0
+field,"stock.shipment.in.return,reference",0,Reference,Referenz,0
+field,"stock.shipment.in.return,state",0,State,Status,0
+field,"stock.shipment.in.return,to_location",0,To Location,Zu Lagerort,0
+field,"stock.shipment.in,state",0,State,Status,0
+field,"stock.shipment.in,supplier",0,Supplier,Lieferant,0
+field,"stock.shipment.internal.assign.ask_force,moves",0,Moves,Bewegungen,0
+field,"stock.shipment.internal,code",0,Code,Code,0
+field,"stock.shipment.internal,effective_date",0,Effective Date,Effektives Datum,0
+field,"stock.shipment.internal,from_location",0,From Location,Von Lagerort,0
+field,"stock.shipment.internal,moves",0,Moves,Bewegungen,0
+field,"stock.shipment.internal,planned_date",0,Planned Date,Geplantes Datum,0
+field,"stock.shipment.internal,rec_name",0,Name,Name,0
+field,"stock.shipment.internal,reference",0,Reference,Referenz,0
+field,"stock.shipment.internal,state",0,State,Status,0
+field,"stock.shipment.internal,to_location",0,To Location,Zu Lagerort,0
+field,"stock.shipment.in,warehouse",0,Warehouse,Warenlager,0
+field,"stock.shipment.out.assign.ask_force,inventory_moves",0,Inventory Moves,Bestandsänderungen,0
+field,"stock.shipment.out,code",0,Code,Code,0
+field,"stock.shipment.out,customer",0,Customer,Kunde,0
+field,"stock.shipment.out,delivery_address",0,Delivery Address,Lieferadresse,0
+field,"stock.shipment.out,effective_date",0,Effective Date,Effektives Datum,0
+field,"stock.shipment.out,inventory_moves",0,Inventory Moves,Bestandsänderungen,0
+field,"stock.shipment.out,moves",0,Moves,Bewegungen,0
+field,"stock.shipment.out,outgoing_moves",0,Outgoing Moves,Ausgehende Bewegungen,0
+field,"stock.shipment.out,planned_date",0,Planned Date,Geplantes Datum,0
+field,"stock.shipment.out,rec_name",0,Name,Name,0
+field,"stock.shipment.out,reference",0,Reference,Referenz,0
+field,"stock.shipment.out.return,code",0,Code,Code,0
+field,"stock.shipment.out.return,customer",0,Customer,Kunde,0
+field,"stock.shipment.out.return,delivery_address",0,Delivery Address,Lieferadresse,0
+field,"stock.shipment.out.return,effective_date",0,Effective Date,Effektives Datum,0
+field,"stock.shipment.out.return,incoming_moves",0,Incoming Moves,Eingehende Bewegungen,0
+field,"stock.shipment.out.return,inventory_moves",0,Inventory Moves,Bestandsänderungen,0
+field,"stock.shipment.out.return,moves",0,Moves,Bewegungen,0
+field,"stock.shipment.out.return,planned_date",0,Planned Date,Geplantes Datum,0
+field,"stock.shipment.out.return,rec_name",0,Name,Name,0
+field,"stock.shipment.out.return,reference",0,Reference,Referenz,0
+field,"stock.shipment.out.return,state",0,State,Status,0
+field,"stock.shipment.out.return,warehouse",0,Warehouse,Warenlager,0
+field,"stock.shipment.out,state",0,State,Status,0
+field,"stock.shipment.out,warehouse",0,Warehouse,Warenlager,0
help,"party.party,customer_location",0,The default destination location when sending products to the party.,Standardbestimmungsort für Sendungen zum Geschäftspartner,0
help,"party.party,supplier_location",0,The default source location when receiving products from the party.,Standardbestimmungsort für Sendungen vom Geschäftspartner,0
help,"stock.location_stock_date.init,forecast_date",0,"Allow to compute expected stock quantities for this date.
@@ -149,66 +149,66 @@ help,"stock.product_stock_date.init,forecast_date",0,"Allow to compute expected
* ein leerer Wert ist ein unbegrenztes Datum in der Zukunft
* ein Datum in der Vergangenheit berechnet historische Werte
",0
-model,"ir.action,name",act_packing_out_form_assigned,Assigned Customer Shipments,Zugewiesene Lieferposten an Kunden,0
-model,"ir.action,name",act_packing_internal_assigned_form,Assigned Internal Shipments,Zugewiesene Interne Lieferposten,0
-model,"ir.action,name",wizard_packing_in_return_assign,Assign Purchase Return Shipment,Zuweisung Lieferposten Warenrückgabe,0
-model,"ir.action,name",wizard_packing_internal_assign,Assign Shipment Internal,Zuweisung Lieferposten Intern,0
-model,"ir.action,name",wizard_packing_out_assign,Assign Shipment Out,Zuweisung Lieferposten Ausgehend,0
+model,"ir.action,name",act_shipment_out_form_assigned,Assigned Customer Shipments,Zugewiesene Lieferposten an Kunden,0
+model,"ir.action,name",act_shipment_internal_assigned_form,Assigned Internal Shipments,Zugewiesene Interne Lieferposten,0
+model,"ir.action,name",wizard_shipment_in_return_assign,Assign Purchase Return Shipment,Zuweisung Lieferposten Warenrückgabe,0
+model,"ir.action,name",wizard_shipment_internal_assign,Assign Shipment Internal,Zuweisung Lieferposten Intern,0
+model,"ir.action,name",wizard_shipment_out_assign,Assign Shipment Out,Zuweisung Lieferposten Ausgehend,0
model,"ir.action,name",wizard_complete_inventory,Complete Inventory,Lagerbestandspositionen komplettieren,0
-model,"ir.action,name",create_packing_out_return,Create Return Shipment,Warenrücknahme erstellen,0
-model,"ir.action,name",act_packing_out_return_form,Customer Return Shipments,Warenrücknahmen (von Kunden),0
-model,"ir.action,name",act_packing_out_form,Customer Shipments,Lieferposten an Kunden,0
-model,"ir.action,name",act_packing_out_form2,Customer Shipments,Lieferposten als Kunde,0
-model,"ir.action,name",act_packing_out_form_ready,Customer Shipments Ready for Shipping,Versandbereite Lieferposten an Kunden,0
-model,"ir.action,name",act_packing_out_form_waiting,Customer Shipments Waiting Assignation,Zuzuweisende Lieferposten an Kunden,0
-model,"ir.action,name",report_packing_out_delivery_note,Delivery Note,Lieferschein,0
-model,"ir.action,name",act_packing_internal_draft_form,Draft Internal Shipments,Entwürfe (Interne Lieferposten),0
+model,"ir.action,name",create_shipment_out_return,Create Return Shipment,Warenrücknahme erstellen,0
+model,"ir.action,name",act_shipment_out_return_form,Customer Return Shipments,Warenrücknahmen (von Kunden),0
+model,"ir.action,name",act_shipment_out_form,Customer Shipments,Lieferposten an Kunden,0
+model,"ir.action,name",act_shipment_out_form2,Customer Shipments,Lieferposten als Kunde,0
+model,"ir.action,name",act_shipment_out_form_ready,Customer Shipments Ready for Shipping,Versandbereite Lieferposten an Kunden,0
+model,"ir.action,name",act_shipment_out_form_waiting,Customer Shipments Waiting Assignation,Zuzuweisende Lieferposten an Kunden,0
+model,"ir.action,name",report_shipment_out_delivery_note,Delivery Note,Lieferschein,0
+model,"ir.action,name",act_shipment_internal_draft_form,Draft Internal Shipments,Entwürfe (Interne Lieferposten),0
model,"ir.action,name",act_location_form,Edit Locations,Lagerorte bearbeiten,0
-model,"ir.action,name",report_packing_internal,Internal Shipment,Interner Lieferposten,0
-model,"ir.action,name",act_packing_internal_form,Internal Shipments,Interne Lieferposten,0
-model,"ir.action,name",act_packing_internal_waiting_form,Internal Shipments Waiting Assignation,Zuzuweisende Interne Lieferposten,0
+model,"ir.action,name",report_shipment_internal,Internal Shipment,Interner Lieferposten,0
+model,"ir.action,name",act_shipment_internal_form,Internal Shipments,Interne Lieferposten,0
+model,"ir.action,name",act_shipment_internal_waiting_form,Internal Shipments Waiting Assignation,Zuzuweisende Interne Lieferposten,0
model,"ir.action,name",act_inventory_form,Inventories,Bestandskorrekturen,0
model,"ir.action,name",act_location_tree,Locations,Lagerorte,0
model,"ir.action,name",act_move_form,Moves,Lagerbewegungen,0
model,"ir.action,name",act_move_form_supp,Moves from Suppliers,Bewegungen von Lieferanten,0
model,"ir.action,name",act_move_form_supp_proceed,Moves from Suppliers Waiting Arrival,Erwartete Bewegungen von Lieferanten,0
model,"ir.action,name",act_move_form_cust,Moves to Customers,Bewegungen zu Kunden,0
-model,"ir.action,name",act_packing_out_return_form2,New Customer Return Shipment,Neue Warenrücknahme (von Kunde),0
-model,"ir.action,name",act_packing_internal_new_form,New Internal Shipment,Neuer Interner Lieferposten,0
-model,"ir.action,name",act_packing_in_return_new_form,New Supplier Return Shipment,Neue Warenrückgabe (an Lieferant),0
-model,"ir.action,name",act_packing_in_form2,New Supplier Shipment,Neuer Lieferposten von Lieferant,0
-model,"ir.action,name",report_packing_out_picking_list,Picking List,Pick Liste,0
+model,"ir.action,name",act_shipment_out_return_form2,New Customer Return Shipment,Neue Warenrücknahme (von Kunde),0
+model,"ir.action,name",act_shipment_internal_new_form,New Internal Shipment,Neuer Interner Lieferposten,0
+model,"ir.action,name",act_shipment_in_return_new_form,New Supplier Return Shipment,Neue Warenrückgabe (an Lieferant),0
+model,"ir.action,name",act_shipment_in_form2,New Supplier Shipment,Neuer Lieferposten von Lieferant,0
+model,"ir.action,name",report_shipment_out_picking_list,Picking List,Pick Liste,0
model,"ir.action,name",wizard_location_open,Product by Location,Artikel nach Lagerort,0
model,"ir.action,name",wizard_product_open,Product Quantities,Artikelbestand,0
model,"ir.action,name",act_product_by_location,Products by Locations,Artikel nach Lagerort,0
model,"ir.action,name",act_location_quantity_tree,Product Stock,Lagerbestand,0
-model,"ir.action,name",act_packing_in_form_received,Received Supplier packings,Erhaltene Lieferposten von Lieferanten,0
-model,"ir.action,name",report_packing_in_restocking_list,Restocking List,Einlagerungsliste,0
-model,"ir.action,name",report_packing_out_return_restocking_list,Restocking List,Einlagerungsliste,0
-model,"ir.action,name",act_packing_in_return_form,Supplier Return Shipments,Warenrückgaben (an Lieferanten),0
-model,"ir.action,name",act_packing_in_form,Supplier Shipments,Lieferposten von Lieferanten,0
-model,"ir.action,name",act_packing_out_form3,Supplier Shipments,Lieferposten als Lieferant,0
-model,"ir.sequence,name",sequence_packing_out_return,Customer Return Shipment,Warenrücknahme Kunde,0
-model,"ir.sequence,name",sequence_packing_out,Customer Shipment,Lieferposten Kunde,0
-model,"ir.sequence,name",sequence_packing_internal,Internal Shipment,Interner Lieferposten,0
-model,"ir.sequence,name",sequence_packing_in_return,Supplier Return Shipment,Warenrückgabe Lieferant,0
-model,"ir.sequence,name",sequence_packing_in,Supplier Shipment,Lieferposten Lieferant,0
-model,"ir.sequence.type,name",sequence_type_packing_out_return,Customer Return Shipment,Warenrücknahme Kunde,0
-model,"ir.sequence.type,name",sequence_type_packing_out,Customer Shipment,Lieferposten Kunde,0
-model,"ir.sequence.type,name",sequence_type_packing_internal,Internal Shipment,Interner Lieferposten,0
-model,"ir.sequence.type,name",sequence_type_packing_in_return,Supplier Return Shipment,Warenrückgabe Lieferant,0
-model,"ir.sequence.type,name",sequence_type_packing_in,Supplier Shipment,Lieferposten Lieferant,0
-model,"ir.ui.menu,name",menu_packing_out_assigned,Assigned Customer Shipments,Zugewiesene Lieferposten an Kunden,0
-model,"ir.ui.menu,name",menu_packing_internal_assigned_form,Assigned Internal Shipments,Zugewiesene Interne Lieferposten,0
+model,"ir.action,name",act_shipment_in_form_received,Received Supplier shipments,Erhaltene Lieferposten von Lieferanten,0
+model,"ir.action,name",report_shipment_in_restocking_list,Restocking List,Einlagerungsliste,0
+model,"ir.action,name",report_shipment_out_return_restocking_list,Restocking List,Einlagerungsliste,0
+model,"ir.action,name",act_shipment_in_return_form,Supplier Return Shipments,Warenrückgaben (an Lieferanten),0
+model,"ir.action,name",act_shipment_in_form,Supplier Shipments,Lieferposten von Lieferanten,0
+model,"ir.action,name",act_shipment_out_form3,Supplier Shipments,Lieferposten als Lieferant,0
+model,"ir.sequence,name",sequence_shipment_out_return,Customer Return Shipment,Warenrücknahme Kunde,0
+model,"ir.sequence,name",sequence_shipment_out,Customer Shipment,Lieferposten Kunde,0
+model,"ir.sequence,name",sequence_shipment_internal,Internal Shipment,Interner Lieferposten,0
+model,"ir.sequence,name",sequence_shipment_in_return,Supplier Return Shipment,Warenrückgabe Lieferant,0
+model,"ir.sequence,name",sequence_shipment_in,Supplier Shipment,Lieferposten Lieferant,0
+model,"ir.sequence.type,name",sequence_type_shipment_out_return,Customer Return Shipment,Warenrücknahme Kunde,0
+model,"ir.sequence.type,name",sequence_type_shipment_out,Customer Shipment,Lieferposten Kunde,0
+model,"ir.sequence.type,name",sequence_type_shipment_internal,Internal Shipment,Interner Lieferposten,0
+model,"ir.sequence.type,name",sequence_type_shipment_in_return,Supplier Return Shipment,Warenrückgabe Lieferant,0
+model,"ir.sequence.type,name",sequence_type_shipment_in,Supplier Shipment,Lieferposten Lieferant,0
+model,"ir.ui.menu,name",menu_shipment_out_assigned,Assigned Customer Shipments,Zugewiesene Lieferposten an Kunden,0
+model,"ir.ui.menu,name",menu_shipment_internal_assigned_form,Assigned Internal Shipments,Zugewiesene Interne Lieferposten,0
model,"ir.ui.menu,name",menu_configuration,Configuration,Einstellungen,0
-model,"ir.ui.menu,name",menu_packing_out_return_form,Customer Return Shipments,Warenrücknahmen (von Kunden),0
-model,"ir.ui.menu,name",menu_packing_out_form,Customer Shipments,Lieferposten an Kunden,0
-model,"ir.ui.menu,name",menu_packing_out_ready,Customer Shipments Ready for Shipping,Versandbereite Lieferposten an Kunden,0
-model,"ir.ui.menu,name",menu_packing_out_waiting,Customer Shipments Waiting Assignation,Zuzuweisende Lieferposten an Kunden,0
-model,"ir.ui.menu,name",menu_packing_internal_draft_form,Draft Internal Shipments,Entwürfe (Interne Lieferposten),0
+model,"ir.ui.menu,name",menu_shipment_out_return_form,Customer Return Shipments,Warenrücknahmen (von Kunden),0
+model,"ir.ui.menu,name",menu_shipment_out_form,Customer Shipments,Lieferposten an Kunden,0
+model,"ir.ui.menu,name",menu_shipment_out_ready,Customer Shipments Ready for Shipping,Versandbereite Lieferposten an Kunden,0
+model,"ir.ui.menu,name",menu_shipment_out_waiting,Customer Shipments Waiting Assignation,Zuzuweisende Lieferposten an Kunden,0
+model,"ir.ui.menu,name",menu_shipment_internal_draft_form,Draft Internal Shipments,Entwürfe (Interne Lieferposten),0
model,"ir.ui.menu,name",menu_location_form,Edit Locations,Lagerorte bearbeiten,0
-model,"ir.ui.menu,name",menu_packing_internal_form,Internal Shipments,Interne Lieferposten,0
-model,"ir.ui.menu,name",menu_packing_internal_waiting_form,Internal Shipments Waiting Assignation,Zuzuweisende Interne Lieferposten,0
+model,"ir.ui.menu,name",menu_shipment_internal_form,Internal Shipments,Interne Lieferposten,0
+model,"ir.ui.menu,name",menu_shipment_internal_waiting_form,Internal Shipments Waiting Assignation,Zuzuweisende Interne Lieferposten,0
model,"ir.ui.menu,name",menu_inventory_form,Inventories,Bestandskorrektur,0
model,"ir.ui.menu,name",menu_stock,Inventory Management,Lager,0
model,"ir.ui.menu,name",menu_location_tree,Locations,Lagerorte,0
@@ -216,17 +216,17 @@ model,"ir.ui.menu,name",menu_move_form,Moves,Bewegungen,0
model,"ir.ui.menu,name",menu_move_form_supp,Moves from Suppliers,Bewegungen von Lieferanten,0
model,"ir.ui.menu,name",menu_move_form_supp_proceed,Moves from Suppliers Waiting Arrival,Erwartete Bewegungen von Lieferanten,0
model,"ir.ui.menu,name",menu_move_form_cust,Moves to Customers,Bewegungen zu Kunden,0
-model,"ir.ui.menu,name",menu_packing_out_return_form2,New Customer Return Shipment,Neue Warenrücknahme (von Kunde),0
-model,"ir.ui.menu,name",menu_packing_internal_new_form,New Internal Shipment,Neuer Interner Lieferposten,0
-model,"ir.ui.menu,name",menu_packing_in_return_new_form,New Supplier Return Shipment,Neue Warenrückgabe (an Lieferant),0
-model,"ir.ui.menu,name",menu_packing_in_form2,New Supplier Shipment,Neuer Lieferposten von Lieferant,0
-model,"ir.ui.menu,name",menu_packing_in_received,Received Supplier packings,Erhaltene Lieferposten von Lieferanten,0
+model,"ir.ui.menu,name",menu_shipment_out_return_form2,New Customer Return Shipment,Neue Warenrücknahme (von Kunde),0
+model,"ir.ui.menu,name",menu_shipment_internal_new_form,New Internal Shipment,Neuer Interner Lieferposten,0
+model,"ir.ui.menu,name",menu_shipment_in_return_new_form,New Supplier Return Shipment,Neue Warenrückgabe (an Lieferant),0
+model,"ir.ui.menu,name",menu_shipment_in_form2,New Supplier Shipment,Neuer Lieferposten von Lieferant,0
+model,"ir.ui.menu,name",menu_shipment_in_received,Received Supplier shipments,Erhaltene Lieferposten von Lieferanten,0
model,"ir.ui.menu,name",menu_reporting,Reporting,Berichte,0
-model,"ir.ui.menu,name",menu_packing_in_return_form,Supplier Return Shipments,Warenrückgaben (an Lieferanten),0
-model,"ir.ui.menu,name",menu_packing_in_form,Supplier Shipments,Lieferposten von Lieferanten,0
+model,"ir.ui.menu,name",menu_shipment_in_return_form,Supplier Return Shipments,Warenrückgaben (an Lieferanten),0
+model,"ir.ui.menu,name",menu_shipment_in_form,Supplier Shipments,Lieferposten von Lieferanten,0
model,"res.group,name",group_stock,Stock,Lager,0
-model,"res.group,name",group_stock_admin,Stock Administration,Administration Lagerverwaltung,0
-model,"stock.inventory.complete.init,name",0,Complete Inventory Init,Lagerbestand Komplettieren Init,0
+model,"res.group,name",group_stock_admin,Stock Administration,Lager Administration,0
+model,"res.group,name",group_stock_force_assignment,Stock Force Assignment,Lager Zuweisungserzwingung,0
model,"stock.inventory.line,name",0,Stock Inventory Line,Lager Lagerbestand Position,0
model,"stock.inventory,name",0,Stock Inventory,Lager Lagerbestand,0
model,"stock.location,name",location_customer,Customer,Kunde,0
@@ -239,116 +239,110 @@ model,"stock.location,name",location_supplier,Supplier,Lieferant,0
model,"stock.location,name",location_warehouse,Warehouse,Warenlager,0
model,"stock.location_stock_date.init,name",0,Compute stock quantities,Berechnung Lagerbestände,0
model,"stock.move,name",0,Stock Move,Lager Bewegung,0
-model,"stock.packing.in,name",0,Supplier Shipment,Lieferant Lieferposten,0
-model,"stock.packing.in.return.assign.ask_force,name",0,Assign Supplier Return Shipment Ask Force,Zuweisung Lieferpsoten Warenrückgabe Erzwungen,0
-model,"stock.packing.in.return,name",0,Supplier Return Shipment,Warenrückgabe Lieferant,0
-model,"stock.packing.internal.assign.ask_force,name",0,Assign Shipment Internal Ask Force,Zuweisung Lieferposten Intern Erzwungen,0
-model,"stock.packing.internal,name",0,Internal Shipment,Interner Lieferposten,0
-model,"stock.packing.out.assign.ask_force,name",0,Assign Shipment Out Ask Force,Zuweisung Lieferposten Ausgehend Erzwungen,0
-model,"stock.packing.out,name",0,Customer Shipment,Lieferposten Kunde,0
-model,"stock.packing.out.return,name",0,Customer Return Shipment,Warenrücknahme Kunde,0
model,"stock.product_stock_date.init,name",0,Compute stock quantities,Berechnung Lagerbestände,0
-model,"workflow.activity,name",packingout_act_assigned,Assigned,Zugewiesen,0
-model,"workflow.activity,name",packinginternal_act_assigned,Assigned,Zugewiesen,0
-model,"workflow.activity,name",packing_in_return_act_assigned,Assigned,Zugewiesen,0
-model,"workflow.activity,name",packingin_act_cancel,Canceled,Annulliert,0
-model,"workflow.activity,name",packingout_act_cancel,Canceled,Annulliert,0
-model,"workflow.activity,name",packinginternal_act_cancel,Canceled,Annulliert,0
-model,"workflow.activity,name",packing_out_return_act_cancel,Canceled,Annulliert,0
-model,"workflow.activity,name",packing_in_return_act_cancel,Canceled,Annulliert,0
+model,"stock.shipment.in,name",0,Supplier Shipment,Lieferant Lieferposten,0
+model,"stock.shipment.in.return.assign.ask_force,name",0,Assign Supplier Return Shipment Ask Force,Zuweisung Lieferposten Warenrückgabe Erzwungen,0
+model,"stock.shipment.in.return,name",0,Supplier Return Shipment,Warenrückgabe Lieferant,0
+model,"stock.shipment.internal.assign.ask_force,name",0,Assign Shipment Internal Ask Force,Zuweisung Lieferposten Intern Erzwungen,0
+model,"stock.shipment.internal,name",0,Internal Shipment,Interner Lieferposten,0
+model,"stock.shipment.out.assign.ask_force,name",0,Assign Shipment Out Ask Force,Zuweisung Lieferposten Ausgehend Erzwungen,0
+model,"stock.shipment.out,name",0,Customer Shipment,Lieferposten Kunde,0
+model,"stock.shipment.out.return,name",0,Customer Return Shipment,Warenrücknahme Kunde,0
+model,"workflow.activity,name",shipmentout_act_assigned,Assigned,Zugewiesen,0
+model,"workflow.activity,name",shipmentinternal_act_assigned,Assigned,Zugewiesen,0
+model,"workflow.activity,name",shipment_in_return_act_assigned,Assigned,Zugewiesen,0
+model,"workflow.activity,name",shipmentin_act_cancel,Canceled,Annulliert,0
+model,"workflow.activity,name",shipmentout_act_cancel,Canceled,Annulliert,0
+model,"workflow.activity,name",shipmentinternal_act_cancel,Canceled,Annulliert,0
+model,"workflow.activity,name",shipment_out_return_act_cancel,Canceled,Annulliert,0
+model,"workflow.activity,name",shipment_in_return_act_cancel,Canceled,Annulliert,0
model,"workflow.activity,name",inventory_act_cancel,Canceled,Annulliert,0
-model,"workflow.activity,name",packingin_act_done,Done,Erledigt,0
-model,"workflow.activity,name",packingout_act_done,Done,Erledigt,0
-model,"workflow.activity,name",packinginternal_act_done,Done,Erledigt,0
-model,"workflow.activity,name",packing_out_return_act_done,Done,Erledigt,0
-model,"workflow.activity,name",packing_in_return_act_done,Done,Erledigt,0
+model,"workflow.activity,name",shipmentin_act_done,Done,Erledigt,0
+model,"workflow.activity,name",shipmentout_act_done,Done,Erledigt,0
+model,"workflow.activity,name",shipmentinternal_act_done,Done,Erledigt,0
+model,"workflow.activity,name",shipment_out_return_act_done,Done,Erledigt,0
+model,"workflow.activity,name",shipment_in_return_act_done,Done,Erledigt,0
model,"workflow.activity,name",inventory_act_done,Done,Erledigt,0
-model,"workflow.activity,name",packingin_act_draft,Draft,Entwurf,0
-model,"workflow.activity,name",packingout_act_draft,Draft,Entwurf,0
-model,"workflow.activity,name",packinginternal_act_draft,Draft,Entwurf,0
-model,"workflow.activity,name",packing_out_return_act_draft,Draft,Entwurf,0
-model,"workflow.activity,name",packing_in_return_act_draft,Draft,Entwurf,0
+model,"workflow.activity,name",shipmentin_act_draft,Draft,Entwurf,0
+model,"workflow.activity,name",shipmentout_act_draft,Draft,Entwurf,0
+model,"workflow.activity,name",shipmentinternal_act_draft,Draft,Entwurf,0
+model,"workflow.activity,name",shipment_out_return_act_draft,Draft,Entwurf,0
+model,"workflow.activity,name",shipment_in_return_act_draft,Draft,Entwurf,0
model,"workflow.activity,name",inventory_act_draft,Draft,Entwurf,0
-model,"workflow.activity,name",packingout_act_packed,Packed,Gepackt,0
-model,"workflow.activity,name",packingin_act_received,Received,Erhalten,0
-model,"workflow.activity,name",packing_out_return_act_received,Received,Erhalten,0
-model,"workflow.activity,name",packingout_act_waiting,Waiting,Wartend,0
-model,"workflow.activity,name",packinginternal_act_waiting,Waiting,Wartend,0
-model,"workflow.activity,name",packing_in_return_act_waiting,Waiting,Wartend,0
-model,"workflow,name",wkf_packing_out_return,Customer Return Shipment,Warenrücknahme Kunde,0
-model,"workflow,name",wkf_packingout,Customer Shipment,Lieferposten Kunde,0
-model,"workflow,name",wkf_packinginternal,Internal Shipment,Interner Lieferposten,0
+model,"workflow.activity,name",shipmentout_act_packed,Packed,Gepackt,0
+model,"workflow.activity,name",shipmentin_act_received,Received,Erhalten,0
+model,"workflow.activity,name",shipment_out_return_act_received,Received,Erhalten,0
+model,"workflow.activity,name",shipmentout_act_waiting,Waiting,Wartend,0
+model,"workflow.activity,name",shipmentinternal_act_waiting,Waiting,Wartend,0
+model,"workflow.activity,name",shipment_in_return_act_waiting,Waiting,Wartend,0
+model,"workflow,name",wkf_shipment_out_return,Customer Return Shipment,Warenrücknahme Kunde,0
+model,"workflow,name",wkf_shipmentout,Customer Shipment,Lieferposten Kunde,0
+model,"workflow,name",wkf_shipmentinternal,Internal Shipment,Interner Lieferposten,0
model,"workflow,name",wkf_inventory,Inventory,Lagerbestand,0
-model,"workflow,name",wkf_packing_in_return,Supplier Return Shipment,Warenrückgabe Lieferant,0
-model,"workflow,name",wkf_packingin,Supplier Shipment,Lieferposten Lieferant,0
-odt,stock.packing.in.restocking_list,0,/,/,0
-odt,stock.packing.in.restocking_list,0,2,2,0
-odt,stock.packing.in.restocking_list,0,Code:,Code:,0
-odt,stock.packing.in.restocking_list,0,E-Mail:,E-Mail:,0
-odt,stock.packing.in.restocking_list,0,From Location,Von Lagerort,0
-odt,stock.packing.in.restocking_list,0,Phone:,Telefon:,0
-odt,stock.packing.in.restocking_list,0,Planned Date:,Geplantes Datum:,0
-odt,stock.packing.in.restocking_list,0,Product,Artikel,0
-odt,stock.packing.in.restocking_list,0,Quantity,Anzahl,0
-odt,stock.packing.in.restocking_list,0,Reference:,Referenz:,0
-odt,stock.packing.in.restocking_list,0,Restocking List,Einlagerungsliste,0
-odt,stock.packing.in.restocking_list,0,Supplier:,Lieferant:,0
-odt,stock.packing.in.restocking_list,0,To Location,Zu Lagerort,0
-odt,stock.packing.in.restocking_list,0,Warehouse:,Warenlager:,0
-odt,stock.packing.internal.report,0,/,/,0
-odt,stock.packing.internal.report,0,2,2,0
-odt,stock.packing.internal.report,0,Code:,Code:,0
-odt,stock.packing.internal.report,0,E-Mail:,E-Mail:,0
-odt,stock.packing.internal.report,0,From Location,Von Lagerort,0
-odt,stock.packing.internal.report,0,From Location:,Von Lagerort:,0
-odt,stock.packing.internal.report,0,Internal Shipment,Interner Lieferposten,0
-odt,stock.packing.internal.report,0,Phone:,Telefon:,0
-odt,stock.packing.internal.report,0,Planned Date:,Geplantes Datum:,0
-odt,stock.packing.internal.report,0,Product,Artikel,0
-odt,stock.packing.internal.report,0,Quantity,Anzahl,0
-odt,stock.packing.internal.report,0,Reference:,Referenz:,0
-odt,stock.packing.internal.report,0,To Location,Zu Lagerort,0
-odt,stock.packing.internal.report,0,To Location:,Zu Lagerort:,0
-odt,stock.packing.out.delivery_note,0,/,/,0
-odt,stock.packing.out.delivery_note,0,1,1,0
-odt,stock.packing.out.delivery_note,0,2,2,0
-odt,stock.packing.out.delivery_note,0,Customer Code:,Kundennr:,0
-odt,stock.packing.out.delivery_note,0,Date:,Datum:,0
-odt,stock.packing.out.delivery_note,0,Delivery Note,Lieferschein,0
-odt,stock.packing.out.delivery_note,0,E-Mail:,E-Mail:,0
-odt,stock.packing.out.delivery_note,0,Phone:,Telefon:,0
-odt,stock.packing.out.delivery_note,0,Product,Artikel,0
-odt,stock.packing.out.delivery_note,0,Quantity,Anzahl,0
-odt,stock.packing.out.delivery_note,0,Reference:,Referenz:,0
-odt,stock.packing.out.delivery_note,0,Shipment Number:,Lieferposten Nr.:,0
-odt,stock.packing.out.picking_list,0,/,/,0
-odt,stock.packing.out.picking_list,0,2,2,0
-odt,stock.packing.out.picking_list,0,Code:,Code:,0
-odt,stock.packing.out.picking_list,0,Customer:,Kunde:,0
-odt,stock.packing.out.picking_list,0,E-Mail:,E-Mail:,0
-odt,stock.packing.out.picking_list,0,From Location,Von Lagerort,0
-odt,stock.packing.out.picking_list,0,Phone:,Telefon:,0
-odt,stock.packing.out.picking_list,0,Picking List,Pick Liste,0
-odt,stock.packing.out.picking_list,0,Planned Date:,Geplantes Datum:,0
-odt,stock.packing.out.picking_list,0,Product,Artikel,0
-odt,stock.packing.out.picking_list,0,Quantity,Anzahl,0
-odt,stock.packing.out.picking_list,0,Reference:,Referenz:,0
-odt,stock.packing.out.picking_list,0,To Location,Zu Lagerort,0
-odt,stock.packing.out.picking_list,0,Warehouse:,Warenlager:,0
-odt,stock.packing.out.return.restocking_list,0,/,/,0
-odt,stock.packing.out.return.restocking_list,0,2,2,0
-odt,stock.packing.out.return.restocking_list,0,Code:,Code:,0
-odt,stock.packing.out.return.restocking_list,0,E-Mail:,E-Mail:,0
-odt,stock.packing.out.return.restocking_list,0,From Location,Von Lagerort,0
-odt,stock.packing.out.return.restocking_list,0,Phone:,Telefon:,0
-odt,stock.packing.out.return.restocking_list,0,Planned Date:,Geplantes Datum:,0
-odt,stock.packing.out.return.restocking_list,0,Product,Artikel,0
-odt,stock.packing.out.return.restocking_list,0,Quantity,Anzahl,0
-odt,stock.packing.out.return.restocking_list,0,Reference:,Referenz:,0
-odt,stock.packing.out.return.restocking_list,0,Restocking List,Einlagerungsliste,0
-odt,stock.packing.out.return.restocking_list,0,Supplier:,Lieferant:,0
-odt,stock.packing.out.return.restocking_list,0,To Location,Zu Lagerort,0
-odt,stock.packing.out.return.restocking_list,0,Warehouse:,Warenlager:,0
+model,"workflow,name",wkf_shipment_in_return,Supplier Return Shipment,Warenrückgabe Lieferant,0
+model,"workflow,name",wkf_shipmentin,Supplier Shipment,Lieferposten Lieferant,0
+odt,stock.shipment.in.restocking_list,0,/,/,0
+odt,stock.shipment.in.restocking_list,0,Code:,Code:,0
+odt,stock.shipment.in.restocking_list,0,E-Mail:,E-Mail:,0
+odt,stock.shipment.in.restocking_list,0,From Location,Von Lagerort,0
+odt,stock.shipment.in.restocking_list,0,Phone:,Telefon:,0
+odt,stock.shipment.in.restocking_list,0,Planned Date:,Geplantes Datum:,0
+odt,stock.shipment.in.restocking_list,0,Product,Artikel,0
+odt,stock.shipment.in.restocking_list,0,Quantity,Anzahl,0
+odt,stock.shipment.in.restocking_list,0,Reference:,Referenz:,0
+odt,stock.shipment.in.restocking_list,0,Restocking List,Einlagerungsliste,0
+odt,stock.shipment.in.restocking_list,0,Supplier:,Lieferant:,0
+odt,stock.shipment.in.restocking_list,0,To Location,Zu Lagerort,0
+odt,stock.shipment.in.restocking_list,0,Warehouse:,Warenlager:,0
+odt,stock.shipment.internal.report,0,/,/,0
+odt,stock.shipment.internal.report,0,Code:,Code:,0
+odt,stock.shipment.internal.report,0,E-Mail:,E-Mail:,0
+odt,stock.shipment.internal.report,0,From Location,Von Lagerort,0
+odt,stock.shipment.internal.report,0,From Location:,Von Lagerort:,0
+odt,stock.shipment.internal.report,0,Internal Shipment,Interner Lieferposten,0
+odt,stock.shipment.internal.report,0,Phone:,Telefon:,0
+odt,stock.shipment.internal.report,0,Planned Date:,Geplantes Datum:,0
+odt,stock.shipment.internal.report,0,Product,Artikel,0
+odt,stock.shipment.internal.report,0,Quantity,Anzahl,0
+odt,stock.shipment.internal.report,0,Reference:,Referenz:,0
+odt,stock.shipment.internal.report,0,To Location,Zu Lagerort,0
+odt,stock.shipment.internal.report,0,To Location:,Zu Lagerort:,0
+odt,stock.shipment.out.delivery_note,0,/,/,0
+odt,stock.shipment.out.delivery_note,0,Customer Code:,Kundennr:,0
+odt,stock.shipment.out.delivery_note,0,Date:,Datum:,0
+odt,stock.shipment.out.delivery_note,0,Delivery Note,Lieferschein,0
+odt,stock.shipment.out.delivery_note,0,E-Mail:,E-Mail:,0
+odt,stock.shipment.out.delivery_note,0,Phone:,Telefon:,0
+odt,stock.shipment.out.delivery_note,0,Product,Artikel,0
+odt,stock.shipment.out.delivery_note,0,Quantity,Anzahl,0
+odt,stock.shipment.out.delivery_note,0,Reference:,Referenz:,0
+odt,stock.shipment.out.delivery_note,0,Shipment Number:,Lieferposten Nr.:,0
+odt,stock.shipment.out.picking_list,0,/,/,0
+odt,stock.shipment.out.picking_list,0,Code:,Code:,0
+odt,stock.shipment.out.picking_list,0,Customer:,Kunde:,0
+odt,stock.shipment.out.picking_list,0,E-Mail:,E-Mail:,0
+odt,stock.shipment.out.picking_list,0,From Location,Von Lagerort,0
+odt,stock.shipment.out.picking_list,0,Phone:,Telefon:,0
+odt,stock.shipment.out.picking_list,0,Picking List,Pick Liste,0
+odt,stock.shipment.out.picking_list,0,Planned Date:,Geplantes Datum:,0
+odt,stock.shipment.out.picking_list,0,Product,Artikel,0
+odt,stock.shipment.out.picking_list,0,Quantity,Anzahl,0
+odt,stock.shipment.out.picking_list,0,Reference:,Referenz:,0
+odt,stock.shipment.out.picking_list,0,To Location,Zu Lagerort,0
+odt,stock.shipment.out.picking_list,0,Warehouse:,Warenlager:,0
+odt,stock.shipment.out.return.restocking_list,0,/,/,0
+odt,stock.shipment.out.return.restocking_list,0,Code:,Code:,0
+odt,stock.shipment.out.return.restocking_list,0,E-Mail:,E-Mail:,0
+odt,stock.shipment.out.return.restocking_list,0,From Location,Von Lagerort,0
+odt,stock.shipment.out.return.restocking_list,0,Phone:,Telefon:,0
+odt,stock.shipment.out.return.restocking_list,0,Planned Date:,Geplantes Datum:,0
+odt,stock.shipment.out.return.restocking_list,0,Product,Artikel,0
+odt,stock.shipment.out.return.restocking_list,0,Quantity,Anzahl,0
+odt,stock.shipment.out.return.restocking_list,0,Reference:,Referenz:,0
+odt,stock.shipment.out.return.restocking_list,0,Restocking List,Einlagerungsliste,0
+odt,stock.shipment.out.return.restocking_list,0,Supplier:,Lieferant:,0
+odt,stock.shipment.out.return.restocking_list,0,To Location,Zu Lagerort,0
+odt,stock.shipment.out.return.restocking_list,0,Warehouse:,Warenlager:,0
selection,"stock.inventory,state",0,Canceled,Annulliert,0
selection,"stock.inventory,state",0,Done,Erledigt,0
selection,"stock.inventory,state",0,Draft,Entwurf,0
@@ -363,30 +357,30 @@ selection,"stock.move,state",0,Assigned,Zugewiesen,0
selection,"stock.move,state",0,Canceled,Annulliert,0
selection,"stock.move,state",0,Done,Erledigt,0
selection,"stock.move,state",0,Draft,Entwurf,0
-selection,"stock.packing.in.return,state",0,Assigned,Zugewiesen,0
-selection,"stock.packing.in.return,state",0,Canceled,Annulliert,0
-selection,"stock.packing.in.return,state",0,Done,Erledigt,0
-selection,"stock.packing.in.return,state",0,Draft,Entwurf,0
-selection,"stock.packing.in.return,state",0,Waiting,Wartend,0
-selection,"stock.packing.in,state",0,Canceled,Annulliert,0
-selection,"stock.packing.in,state",0,Done,Erledigt,0
-selection,"stock.packing.in,state",0,Draft,Entwurf,0
-selection,"stock.packing.in,state",0,Received,Erhalten,0
-selection,"stock.packing.internal,state",0,Assigned,Zugewiesen,0
-selection,"stock.packing.internal,state",0,Canceled,Annulliert,0
-selection,"stock.packing.internal,state",0,Done,Erledigt,0
-selection,"stock.packing.internal,state",0,Draft,Entwurf,0
-selection,"stock.packing.internal,state",0,Waiting,Wartend,0
-selection,"stock.packing.out.return,state",0,Canceled,Annulliert,0
-selection,"stock.packing.out.return,state",0,Done,Erledigt,0
-selection,"stock.packing.out.return,state",0,Draft,Entwurf,0
-selection,"stock.packing.out.return,state",0,Received,Erhalten,0
-selection,"stock.packing.out,state",0,Assigned,Zugewiesen,0
-selection,"stock.packing.out,state",0,Canceled,Annulliert,0
-selection,"stock.packing.out,state",0,Done,Erledigt,0
-selection,"stock.packing.out,state",0,Draft,Entwurf,0
-selection,"stock.packing.out,state",0,Packed,Gepackt,0
-selection,"stock.packing.out,state",0,Waiting,Wartend,0
+selection,"stock.shipment.in.return,state",0,Assigned,Zugewiesen,0
+selection,"stock.shipment.in.return,state",0,Canceled,Annulliert,0
+selection,"stock.shipment.in.return,state",0,Done,Erledigt,0
+selection,"stock.shipment.in.return,state",0,Draft,Entwurf,0
+selection,"stock.shipment.in.return,state",0,Waiting,Wartend,0
+selection,"stock.shipment.in,state",0,Canceled,Annulliert,0
+selection,"stock.shipment.in,state",0,Done,Erledigt,0
+selection,"stock.shipment.in,state",0,Draft,Entwurf,0
+selection,"stock.shipment.in,state",0,Received,Erhalten,0
+selection,"stock.shipment.internal,state",0,Assigned,Zugewiesen,0
+selection,"stock.shipment.internal,state",0,Canceled,Annulliert,0
+selection,"stock.shipment.internal,state",0,Done,Erledigt,0
+selection,"stock.shipment.internal,state",0,Draft,Entwurf,0
+selection,"stock.shipment.internal,state",0,Waiting,Wartend,0
+selection,"stock.shipment.out.return,state",0,Canceled,Annulliert,0
+selection,"stock.shipment.out.return,state",0,Done,Erledigt,0
+selection,"stock.shipment.out.return,state",0,Draft,Entwurf,0
+selection,"stock.shipment.out.return,state",0,Received,Erhalten,0
+selection,"stock.shipment.out,state",0,Assigned,Zugewiesen,0
+selection,"stock.shipment.out,state",0,Canceled,Annulliert,0
+selection,"stock.shipment.out,state",0,Done,Erledigt,0
+selection,"stock.shipment.out,state",0,Draft,Entwurf,0
+selection,"stock.shipment.out,state",0,Packed,Gepackt,0
+selection,"stock.shipment.out,state",0,Waiting,Wartend,0
view,party.party,0,Stock,Lager,0
view,party.party,0,_Stock,_Lager,0
view,product.product,0,Products,Artikel,0
@@ -398,9 +392,6 @@ view,stock.inventory,0,Confirm,Bestätigen,0
view,stock.inventory,0,Inventories,Bestandskorrekturen,0
view,stock.inventory,0,Inventory,Lagerbestand,0
view,stock.inventory,0,Re-Open,Wiedereröffnen,0
-view,stock.inventory.complete.init,0,Categories,Kategorien,0
-view,stock.inventory.complete.init,0,Complete Inventory,Lagerbestandspositionen komplettieren,0
-view,stock.inventory.complete.init,0,Products,Artikel,0
view,stock.inventory.line,0,Inventory Line,Position Bestand,0
view,stock.inventory.line,0,Inventory Lines,Positionen Bestand,0
view,stock.location,0,Location,Lagerort,0
@@ -412,89 +403,77 @@ view,stock.move,0,Move,Bewegung,0
view,stock.move,0,Moves,Bewegungen,0
view,stock.move,0,Set Done,Auf Erledigt setzen,0
view,stock.move,0,Set Draft,Auf Entwurf setzen,0
-view,stock.packing.in,0,Cancel,Annullieren,0
-view,stock.packing.in,0,Done,Erledigt,0
-view,stock.packing.in,0,Draft,Entwurf,0
-view,stock.packing.in,0,Incoming Moves,Eingehende Bewegungen,0
-view,stock.packing.in,0,Inventory Moves,Bestandsänderungen,0
-view,stock.packing.in,0,Moves,Bewegungen,0
-view,stock.packing.in,0,Received,Erhalten,0
-view,stock.packing.in,0,Reset to Draft,Auf Entwurf zurücksetzen,0
-view,stock.packing.in,0,Supplier Packing,Lieferposten von Lieferant,0
-view,stock.packing.in,0,Supplier Packings,Lieferposten von Lieferanten,0
-view,stock.packing.in,0,Supplier Shipment,Lieferposten von Lieferant,0
-view,stock.packing.in,0,Supplier Shipments,Lieferposten von Lieferanten,0
-view,stock.packing.in.return,0,Assign,Zuweisen,0
-view,stock.packing.in.return,0,Cancel,Annullieren,0
-view,stock.packing.in.return,0,Done,Erledigt,0
-view,stock.packing.in.return,0,Draft,Entwurf,0
-view,stock.packing.in.return,0,Reset to Draft,Auf Entwurf zurücksetzen,0
-view,stock.packing.in.return,0,Supplier Return Packing,Warenrückgabe,0
-view,stock.packing.in.return,0,Supplier Return Packings,Warenrückgaben,0
-view,stock.packing.in.return,0,Supplier Return Shipment,Warenrückgabe Lieferant,0
-view,stock.packing.in.return,0,Supplier Return Shipments,Warenrückgaben (an Lieferanten),0
-view,stock.packing.in.return,0,Waiting,Wartend,0
-view,stock.packing.in.return.assign.ask_force,0,Moves,Bewegungen,0
-view,stock.packing.in.return.assign.ask_force,0,Unable to Assign,Fehlmenge Zuweisung,0
-view,stock.packing.in.return.assign.ask_force,0,Unable to assign those products:,Folgende Artikel können nicht zugewiesen werden:,0
-view,stock.packing.internal,0,Assign,Zuweisen,0
-view,stock.packing.internal,0,Cancel,Annullieren,0
-view,stock.packing.internal,0,Done,Erledigt,0
-view,stock.packing.internal,0,Draft,Entwurf,0
-view,stock.packing.internal,0,Force Assign,Zuweisung erzwingen,0
-view,stock.packing.internal,0,Internal Packing,Interner Lieferposten,0
-view,stock.packing.internal,0,Internal Packings,Interne Lieferposten,0
-view,stock.packing.internal,0,Internal Shipment,Interner Lieferposten,0
-view,stock.packing.internal,0,Internal Shipments,Interne Lieferposten,0
-view,stock.packing.internal,0,Reset to Draft,Auf Entwurf zurücksetzen,0
-view,stock.packing.internal,0,Set Done,Auf Erledigt setzen,0
-view,stock.packing.internal,0,Set Waiting,Auf Wartend setzen,0
-view,stock.packing.internal,0,Waiting,Wartend,0
-view,stock.packing.internal.assign.ask_force,0,Moves,Bewegungen,0
-view,stock.packing.internal.assign.ask_force,0,Unable to Assign,Fehlmenge Zuweisung,0
-view,stock.packing.internal.assign.ask_force,0,Unable to assign those products:,Folgende Artikel können nicht zugewiesen werden:,0
-view,stock.packing.out,0,Are you sure to force assignation?,Zuweisung wirklich erzwingen?,0
-view,stock.packing.out,0,Assign,Zuweisen,0
-view,stock.packing.out,0,Cancel,Annullieren,0
-view,stock.packing.out,0,Customer Packing,Lieferposten an Kunde,0
-view,stock.packing.out,0,Customer Packings,Lieferposten an Kunden,0
-view,stock.packing.out,0,Customer Shipment,Lieferposten Kunde,0
-view,stock.packing.out,0,Customer Shipments,Lieferposten an Kunden,0
-view,stock.packing.out,0,Done,Erledigt,0
-view,stock.packing.out,0,Draft,Entwurf,0
-view,stock.packing.out,0,Force Assign,Zuweisung erzwingen,0
-view,stock.packing.out,0,Inventory Moves,Bestandsänderungen,0
-view,stock.packing.out,0,Make packing,Packen,0
-view,stock.packing.out,0,Outgoing Moves,Ausgehende Bewegungen,0
-view,stock.packing.out,0,Reset to Draft,Auf Entwurf zurücksetzen,0
-view,stock.packing.out,0,Set Done,Auf Erledigt setzen,0
-view,stock.packing.out,0,Set Waiting,Auf Wartend setzen,0
-view,stock.packing.out,0,Unpack,Entpackt,0
-view,stock.packing.out,0,Waiting,Wartend,0
-view,stock.packing.out.assign.ask_force,0,Inventory Moves,Bestandsänderungen,0
-view,stock.packing.out.assign.ask_force,0,Unable to Assign,Fehlmenge Zuweisung,0
-view,stock.packing.out.assign.ask_force,0,Unable to assign those products:,Folgende Artikel können nicht zugewiesen werden:,0
-view,stock.packing.out.return,0,Cancel,Annullieren,0
-view,stock.packing.out.return,0,Customer Return Packing,Warenrücknahme,0
-view,stock.packing.out.return,0,Customer Return Packings,Warenrücknahmen,0
-view,stock.packing.out.return,0,Customer Return Shipment,Warenrücknahme Kunde,0
-view,stock.packing.out.return,0,Customer Return Shipments,Warenrücknahmen (von Kunden),0
-view,stock.packing.out.return,0,Done,Erledigt,0
-view,stock.packing.out.return,0,Incoming Moves,Eingehende Bewegungen,0
-view,stock.packing.out.return,0,Inventory Moves,Bestandsänderungen,0
-view,stock.packing.out.return,0,Moves,Bewegungen,0
-view,stock.packing.out.return,0,Received,Erhalten,0
-view,stock.packing.out.return,0,Reset to Draft,Auf Entwurf zurücksetzen,0
view,stock.product_stock_date.init,0,Product Quantity.,Artikel Mengen,0
-wizard_button,"stock.inventory.complete,init,complete",0,Complete,Komplettieren,0
-wizard_button,"stock.inventory.complete,init,end",0,Cancel,Abbrechen,0
+view,stock.shipment.in,0,Cancel,Annullieren,0
+view,stock.shipment.in,0,Done,Erledigt,0
+view,stock.shipment.in,0,Draft,Entwurf,0
+view,stock.shipment.in,0,Incoming Moves,Eingehende Bewegungen,0
+view,stock.shipment.in,0,Inventory Moves,Bestandsänderungen,0
+view,stock.shipment.in,0,Moves,Bewegungen,0
+view,stock.shipment.in,0,Received,Erhalten,0
+view,stock.shipment.in,0,Reset to Draft,Auf Entwurf zurücksetzen,0
+view,stock.shipment.in,0,Supplier Shipment,Lieferposten von Lieferant,0
+view,stock.shipment.in,0,Supplier Shipments,Lieferposten von Lieferanten,0
+view,stock.shipment.in.return,0,Assign,Zuweisen,0
+view,stock.shipment.in.return,0,Cancel,Annullieren,0
+view,stock.shipment.in.return,0,Done,Erledigt,0
+view,stock.shipment.in.return,0,Draft,Entwurf,0
+view,stock.shipment.in.return,0,Reset to Draft,Auf Entwurf zurücksetzen,0
+view,stock.shipment.in.return,0,Supplier Return Shipment,Warenrückgabe Lieferant,0
+view,stock.shipment.in.return,0,Supplier Return Shipments,Warenrückgaben (an Lieferanten),0
+view,stock.shipment.in.return,0,Waiting,Wartend,0
+view,stock.shipment.in.return.assign.ask_force,0,Moves,Bewegungen,0
+view,stock.shipment.in.return.assign.ask_force,0,Unable to Assign,Fehlmenge Zuweisung,0
+view,stock.shipment.in.return.assign.ask_force,0,Unable to assign those products:,Folgende Artikel können nicht zugewiesen werden:,0
+view,stock.shipment.internal,0,Assign,Zuweisen,0
+view,stock.shipment.internal,0,Cancel,Annullieren,0
+view,stock.shipment.internal,0,Done,Erledigt,0
+view,stock.shipment.internal,0,Draft,Entwurf,0
+view,stock.shipment.internal,0,Force Assign,Zuweisung erzwingen,0
+view,stock.shipment.internal,0,Internal Shipment,Interner Lieferposten,0
+view,stock.shipment.internal,0,Internal Shipments,Interne Lieferposten,0
+view,stock.shipment.internal,0,Reset to Draft,Auf Entwurf zurücksetzen,0
+view,stock.shipment.internal,0,Set Done,Auf Erledigt setzen,0
+view,stock.shipment.internal,0,Set Waiting,Auf Wartend setzen,0
+view,stock.shipment.internal,0,Waiting,Wartend,0
+view,stock.shipment.internal.assign.ask_force,0,Moves,Bewegungen,0
+view,stock.shipment.internal.assign.ask_force,0,Unable to Assign,Fehlmenge Zuweisung,0
+view,stock.shipment.internal.assign.ask_force,0,Unable to assign those products:,Folgende Artikel können nicht zugewiesen werden:,0
+view,stock.shipment.out,0,Are you sure to force assignation?,Zuweisung wirklich erzwingen?,0
+view,stock.shipment.out,0,Assign,Zuweisen,0
+view,stock.shipment.out,0,Cancel,Annullieren,0
+view,stock.shipment.out,0,Customer Shipment,Lieferposten Kunde,0
+view,stock.shipment.out,0,Customer Shipments,Lieferposten an Kunden,0
+view,stock.shipment.out,0,Done,Erledigt,0
+view,stock.shipment.out,0,Draft,Entwurf,0
+view,stock.shipment.out,0,Force Assign,Zuweisung erzwingen,0
+view,stock.shipment.out,0,Inventory Moves,Bestandsänderungen,0
+view,stock.shipment.out,0,Make shipment,Packen,0
+view,stock.shipment.out,0,Outgoing Moves,Ausgehende Bewegungen,0
+view,stock.shipment.out,0,Reset to Draft,Auf Entwurf zurücksetzen,0
+view,stock.shipment.out,0,Set Done,Auf Erledigt setzen,0
+view,stock.shipment.out,0,Set Waiting,Auf Wartend setzen,0
+view,stock.shipment.out,0,Unpack,Entpackt,0
+view,stock.shipment.out,0,Waiting,Wartend,0
+view,stock.shipment.out.assign.ask_force,0,Inventory Moves,Bestandsänderungen,0
+view,stock.shipment.out.assign.ask_force,0,Unable to Assign,Fehlmenge Zuweisung,0
+view,stock.shipment.out.assign.ask_force,0,Unable to assign those products:,Folgende Artikel können nicht zugewiesen werden:,0
+view,stock.shipment.out.return,0,Cancel,Annullieren,0
+view,stock.shipment.out.return,0,Customer Return Shipment,Warenrücknahme Kunde,0
+view,stock.shipment.out.return,0,Customer Return Shipments,Warenrücknahmen (von Kunden),0
+view,stock.shipment.out.return,0,Done,Erledigt,0
+view,stock.shipment.out.return,0,Incoming Moves,Eingehende Bewegungen,0
+view,stock.shipment.out.return,0,Inventory Moves,Bestandsänderungen,0
+view,stock.shipment.out.return,0,Moves,Bewegungen,0
+view,stock.shipment.out.return,0,Received,Erhalten,0
+view,stock.shipment.out.return,0,Reset to Draft,Auf Entwurf zurücksetzen,0
wizard_button,"stock.location.open,init,end",0,Cancel,Abbrechen,0
wizard_button,"stock.location.open,init,open",0,Open,Ãffnen,0
-wizard_button,"stock.packing.in.return.assign,ask_force,end",0,Ok,OK,0
-wizard_button,"stock.packing.in.return.assign,ask_force,force",0,Force Assign,Zuweisung erzwingen,0
-wizard_button,"stock.packing.internal.assign,ask_force,end",0,Ok,OK,0
-wizard_button,"stock.packing.internal.assign,ask_force,force",0,Force Assign,Zuweisung erzwingen,0
-wizard_button,"stock.packing.out.assign,ask_force,end",0,Ok,OK,0
-wizard_button,"stock.packing.out.assign,ask_force,force",0,Force Assign,Zuweisung erzwingen,0
wizard_button,"stock.product.open,init,end",0,Cancel,Abbrechen,0
wizard_button,"stock.product.open,init,open",0,Open,Ãffnen,0
+wizard_button,"stock.shipment.in.return.assign,ask_force,end",0,Ok,OK,0
+wizard_button,"stock.shipment.in.return.assign,ask_force,force",0,Force Assign,Zuweisung erzwingen,0
+wizard_button,"stock.shipment.internal.assign,ask_force,end",0,Ok,OK,0
+wizard_button,"stock.shipment.internal.assign,ask_force,force",0,Force Assign,Zuweisung erzwingen,0
+wizard_button,"stock.shipment.out.assign,ask_force,end",0,Ok,OK,0
+wizard_button,"stock.shipment.out.assign,ask_force,force",0,Force Assign,Zuweisung erzwingen,0
diff --git a/doc/index.rst b/doc/index.rst
index 5932beb..f014a5a 100644
--- a/doc/index.rst
+++ b/doc/index.rst
@@ -1,7 +1,7 @@
Stock Module
############
-The stock module define fundamentals for all stock management
+The stock module defines fundamentals for all stock management
situations: Locations where product are stored, moves between these
locations, shipments for product arrivals and departures and inventory
to control and update stock levels.
@@ -9,8 +9,8 @@ to control and update stock levels.
Location
********
-Location are generic places where products are physically or virtually
-stored. There are six types of locations:
+Locations are generic places where products are physically or
+virtually stored. There are six types of locations:
* Storage
@@ -49,11 +49,15 @@ Move
****
A move is a movement of a product in a given quantity between two
-locations. It may eventually define a unit price and a currency for
+locations. It may eventually defines a unit price and a currency for
the products that are moved from or to another company, allowing to
-compute stock value at any time. A move also define a planned date
-(when one plan to do the move) and an effective date (when the move is
-actually made).
+compute stock value at any time (and to update the cost prices if the
+choosen cost price method is *Average*). A move also defines a planned
+date (when one plan to do the move) and an effective date (when the
+move is actually made). Products that are used in stock move must of
+of type *Stockable* or *Consumable*. Stock levels are ignored for
+consumable, this means that they can be always assigned. *Service*
+products are ignored by the stock module.
A move can be in one of this states:
diff --git a/es_CO.csv b/es_CO.csv
index 6cf7d85..a4366eb 100644
--- a/es_CO.csv
+++ b/es_CO.csv
@@ -1,7 +1,9 @@
type,name,res_id,src,value,fuzzy
+error,product.template,0,You cannot change the default uom for a product which is associated to stock moves.,No puede cambiar la UdM predeterminada para un producto asociado a movimientos de inventario.,0
error,stock.inventory.line,0,Line quantity must be positive!,La lÃnea de cantidad debe ser positiva!,0
error,stock.inventory.line,0,Product must be unique by inventory!,El producto debe ser único por inventario!,0
error,stock.location,0,A location with existing moves cannot be changed to a type that does not support moves.,Un lugar con movimientos existentes no puede ser cambiado a un tipo que no soporte movimientos.,0
+error,stock.location,0,"Location ""%s"" must be a child of warehouse ""%s""!","¡Localización de ""%s"" debe ser un hijo de la bodega ""%s""!",0
error,stock.location,0,You can not create recursive locations!,No puede crear lugares recursivamente!,0
error,stock.move,0,Move can be on only one Shipment,Solamente se puede hacer movimiento sobre un EnvÃo.,0
error,stock.move,0,Move quantity must be positive,El valor del movimiento debe ser positivo,0
@@ -11,12 +13,12 @@ error,stock.move,0,You can not set state to done!,No puede establecer el estado
error,stock.move,0,You can not set state to draft!,No puede establecer el estado como borrador!,0
error,stock.move,0,You can not use service products for a move!,No puede usar productos de servicio para un movimiento!,0
error,stock.move,0,You can only delete draft or cancelled moves!,Solamente puede eliminar movimientos en borrador o cancelados!,0
-error,stock.packing.in,0,Incoming Moves must have the warehouse input location as destination location!,Movimientos de ingreso debe tener un lugar de entrada de bodega como lugar destino!,0
-error,stock.packing.in,0,Inventory Moves must have the warehouse input location as source location!,Movimientos de inventario deben tener lugar de entrada a bodega como lugar fuente!,0
-error,stock.packing.out.return,0,Incoming Moves must have the warehouse input location as destination location!,Ingreso deben tener lugar de entrada en bodega como lugar destino!,0
-error,stock.packing.out.return,0,Inventory Moves must have the warehouse input location as source location!,Movimientos de inventario deben tener lugar de entrada en bodega como lugar fuente!,0
-error,stock.packing.out.return.create,0,The packing with code %s is not yet sent.,El empaque con código %s no ha sido enviado aún.,0
-error,stock.packing.out.return.create,0,You can not create return packing,No puede crear empaques de retorno,0
+error,stock.shipment.in,0,Incoming Moves must have the warehouse input location as destination location!,Movimientos de ingreso debe tener un lugar de entrada de bodega como lugar destino!,0
+error,stock.shipment.in,0,Inventory Moves must have the warehouse input location as source location!,Movimientos de inventario deben tener lugar de entrada a bodega como lugar fuente!,0
+error,stock.shipment.out.return,0,Incoming Moves must have the warehouse input location as destination location!,Ingreso deben tener lugar de entrada en bodega como lugar destino!,0
+error,stock.shipment.out.return,0,Inventory Moves must have the warehouse input location as source location!,Movimientos de inventario deben tener lugar de entrada en bodega como lugar fuente!,0
+error,stock.shipment.out.return.create,0,The shipment with code %s is not yet sent.,El empaque con código %s no ha sido enviado aún.,0
+error,stock.shipment.out.return.create,0,You can not create return shipment,No puede crear empaques de retorno,0
field,"party.address,delivery",0,Delivery,EnvÃo,0
field,"party.party,customer_location",0,Customer Location,Lugar del Cliente,0
field,"party.party,supplier_location",0,Supplier Location,Lugar del Proveedor,0
@@ -25,8 +27,6 @@ field,"product.product,quantity",0,Quantity,Cantidad,0
field,"product.template,forecast_quantity",0,Forecast Quantity,Cantidad Proyectada,0
field,"product.template,quantity",0,Quantity,Cantidad,0
field,"stock.inventory,company",0,Company,CompañÃa,0
-field,"stock.inventory.complete.init,categories",0,Categories,CategorÃas,0
-field,"stock.inventory.complete.init,products",0,Products,Productos,0
field,"stock.inventory,date",0,Date,Fecha,0
field,"stock.inventory.line,expected_quantity",0,Expected Quantity,Cantidad Esperada,0
field,"stock.inventory.line,inventory",0,Inventory,Inventario,0
@@ -62,79 +62,79 @@ field,"stock.move,cost_price",0,Cost Price,Método de Precio,0
field,"stock.move,currency",0,Currency,Moneda,0
field,"stock.move,effective_date",0,Effective Date,Fecha Efectiva,0
field,"stock.move,from_location",0,From Location,Lugar Inicial,0
-field,"stock.move,packing_in",0,Supplier Shipment,EnvÃo del Proveedor,0
-field,"stock.move,packing_in_return",0,Supplier Return Shipment,Devolución de Proveedor,0
-field,"stock.move,packing_internal",0,Internal Shipment,EnvÃo Interno,0
-field,"stock.move,packing_out",0,Customer Shipment,EnvÃo de Cliente,0
-field,"stock.move,packing_out_return",0,Customer Return Shipment,Devolución a Cliente,0
field,"stock.move,planned_date",0,Planned Date,Fecha Planeada,0
field,"stock.move,product",0,Product,Producto,0
field,"stock.move,quantity",0,Quantity,Cantidad,0
field,"stock.move,rec_name",0,Name,Nombre,0
+field,"stock.move,shipment_in",0,Supplier Shipment,EnvÃo del Proveedor,0
+field,"stock.move,shipment_in_return",0,Supplier Return Shipment,Devolución de Proveedor,0
+field,"stock.move,shipment_internal",0,Internal Shipment,EnvÃo Interno,0
+field,"stock.move,shipment_out",0,Customer Shipment,EnvÃo de Cliente,0
+field,"stock.move,shipment_out_return",0,Customer Return Shipment,Devolución a Cliente,0
field,"stock.move,state",0,State,Estado,0
field,"stock.move,to_location",0,To Location,Al Lugar:,0
field,"stock.move,unit_digits",0,Unit Digits,DÃgitos de Unidad,0
field,"stock.move,unit_price",0,Unit Price,Precio Unitario,0
field,"stock.move,unit_price_required",0,Unit Price Required,Requiere Precio Unitario,0
field,"stock.move,uom",0,Uom,Udm,0
-field,"stock.packing.in,code",0,Code,Código,0
-field,"stock.packing.in,contact_address",0,Contact Address,Dirección de Contacto,0
-field,"stock.packing.in,effective_date",0,Effective Date,Fecha Efectiva,0
-field,"stock.packing.in,incoming_moves",0,Incoming Moves,Movimientos de Entrada,0
-field,"stock.packing.in,inventory_moves",0,Inventory Moves,Movimientos de Inventario,0
-field,"stock.packing.in,moves",0,Moves,Movimientos,0
-field,"stock.packing.in,planned_date",0,Planned Date,Fecha Planeada,0
-field,"stock.packing.in,rec_name",0,Name,Nombre,0
-field,"stock.packing.in,reference",0,Reference,Referencia,0
-field,"stock.packing.in.return.assign.ask_force,moves",0,Moves,Movimientos,0
-field,"stock.packing.in.return,code",0,Code,Código,0
-field,"stock.packing.in.return,effective_date",0,Effective Date,Fecha Efectiva,0
-field,"stock.packing.in.return,from_location",0,From Location,Lugar Inicial,0
-field,"stock.packing.in.return,moves",0,Moves,Movimientos,0
-field,"stock.packing.in.return,planned_date",0,Planned Date,Fecha Planeada,0
-field,"stock.packing.in.return,rec_name",0,Name,Nombre,0
-field,"stock.packing.in.return,reference",0,Reference,Referencia,0
-field,"stock.packing.in.return,state",0,State,Estado,0
-field,"stock.packing.in.return,to_location",0,To Location,Al Lugar:,0
-field,"stock.packing.in,state",0,State,Estado,0
-field,"stock.packing.in,supplier",0,Supplier,Proveedor,0
-field,"stock.packing.internal.assign.ask_force,moves",0,Moves,Movimientos,0
-field,"stock.packing.internal,code",0,Code,Código,0
-field,"stock.packing.internal,effective_date",0,Effective Date,Fecha Efectiva,0
-field,"stock.packing.internal,from_location",0,From Location,Lugar Inicial,0
-field,"stock.packing.internal,moves",0,Moves,Movimientos,0
-field,"stock.packing.internal,planned_date",0,Planned Date,Fecha Planeada,0
-field,"stock.packing.internal,rec_name",0,Name,Nombre,0
-field,"stock.packing.internal,reference",0,Reference,Referencia,0
-field,"stock.packing.internal,state",0,State,Estado,0
-field,"stock.packing.internal,to_location",0,To Location,Al Lugar:,0
-field,"stock.packing.in,warehouse",0,Warehouse,Depósito,0
-field,"stock.packing.out.assign.ask_force,inventory_moves",0,Inventory Moves,Movimientos de Inventario,0
-field,"stock.packing.out,code",0,Code,Código,0
-field,"stock.packing.out,customer",0,Customer,Cliente,0
-field,"stock.packing.out,delivery_address",0,Delivery Address,Dirección de EnvÃo,0
-field,"stock.packing.out,effective_date",0,Effective Date,Fecha Efectiva,0
-field,"stock.packing.out,inventory_moves",0,Inventory Moves,Movimientos de Inventario,0
-field,"stock.packing.out,moves",0,Moves,Movimientos,0
-field,"stock.packing.out,outgoing_moves",0,Outgoing Moves,Movimientos de Salida,0
-field,"stock.packing.out,planned_date",0,Planned Date,Fecha Planeada,0
-field,"stock.packing.out,rec_name",0,Name,Nombre,0
-field,"stock.packing.out,reference",0,Reference,Referencia,0
-field,"stock.packing.out.return,code",0,Code,Código,0
-field,"stock.packing.out.return,customer",0,Customer,Cliente,0
-field,"stock.packing.out.return,delivery_address",0,Delivery Address,Dirección de EnvÃo,0
-field,"stock.packing.out.return,effective_date",0,Effective Date,Fecha Efectiva,0
-field,"stock.packing.out.return,incoming_moves",0,Incoming Moves,Movimientos de Entrada,0
-field,"stock.packing.out.return,inventory_moves",0,Inventory Moves,Movimientos de Inventario,0
-field,"stock.packing.out.return,moves",0,Moves,Movimientos,0
-field,"stock.packing.out.return,planned_date",0,Planned Date,Fecha Planeada,0
-field,"stock.packing.out.return,rec_name",0,Name,Nombre,0
-field,"stock.packing.out.return,reference",0,Reference,Referencia,0
-field,"stock.packing.out.return,state",0,State,Estado,0
-field,"stock.packing.out.return,warehouse",0,Warehouse,Depósito,0
-field,"stock.packing.out,state",0,State,Estado,0
-field,"stock.packing.out,warehouse",0,Warehouse,Depósito,0
field,"stock.product_stock_date.init,forecast_date",0,At Date,En la fecha,0
+field,"stock.shipment.in,code",0,Code,Código,0
+field,"stock.shipment.in,contact_address",0,Contact Address,Dirección de Contacto,0
+field,"stock.shipment.in,effective_date",0,Effective Date,Fecha Efectiva,0
+field,"stock.shipment.in,incoming_moves",0,Incoming Moves,Movimientos de Entrada,0
+field,"stock.shipment.in,inventory_moves",0,Inventory Moves,Movimientos de Inventario,0
+field,"stock.shipment.in,moves",0,Moves,Movimientos,0
+field,"stock.shipment.in,planned_date",0,Planned Date,Fecha Planeada,0
+field,"stock.shipment.in,rec_name",0,Name,Nombre,0
+field,"stock.shipment.in,reference",0,Reference,Referencia,0
+field,"stock.shipment.in.return.assign.ask_force,moves",0,Moves,Movimientos,0
+field,"stock.shipment.in.return,code",0,Code,Código,0
+field,"stock.shipment.in.return,effective_date",0,Effective Date,Fecha Efectiva,0
+field,"stock.shipment.in.return,from_location",0,From Location,Lugar Inicial,0
+field,"stock.shipment.in.return,moves",0,Moves,Movimientos,0
+field,"stock.shipment.in.return,planned_date",0,Planned Date,Fecha Planeada,0
+field,"stock.shipment.in.return,rec_name",0,Name,Nombre,0
+field,"stock.shipment.in.return,reference",0,Reference,Referencia,0
+field,"stock.shipment.in.return,state",0,State,Estado,0
+field,"stock.shipment.in.return,to_location",0,To Location,Al Lugar:,0
+field,"stock.shipment.in,state",0,State,Estado,0
+field,"stock.shipment.in,supplier",0,Supplier,Proveedor,0
+field,"stock.shipment.internal.assign.ask_force,moves",0,Moves,Movimientos,0
+field,"stock.shipment.internal,code",0,Code,Código,0
+field,"stock.shipment.internal,effective_date",0,Effective Date,Fecha Efectiva,0
+field,"stock.shipment.internal,from_location",0,From Location,Lugar Inicial,0
+field,"stock.shipment.internal,moves",0,Moves,Movimientos,0
+field,"stock.shipment.internal,planned_date",0,Planned Date,Fecha Planeada,0
+field,"stock.shipment.internal,rec_name",0,Name,Nombre,0
+field,"stock.shipment.internal,reference",0,Reference,Referencia,0
+field,"stock.shipment.internal,state",0,State,Estado,0
+field,"stock.shipment.internal,to_location",0,To Location,Al Lugar:,0
+field,"stock.shipment.in,warehouse",0,Warehouse,Depósito,0
+field,"stock.shipment.out.assign.ask_force,inventory_moves",0,Inventory Moves,Movimientos de Inventario,0
+field,"stock.shipment.out,code",0,Code,Código,0
+field,"stock.shipment.out,customer",0,Customer,Cliente,0
+field,"stock.shipment.out,delivery_address",0,Delivery Address,Dirección de EnvÃo,0
+field,"stock.shipment.out,effective_date",0,Effective Date,Fecha Efectiva,0
+field,"stock.shipment.out,inventory_moves",0,Inventory Moves,Movimientos de Inventario,0
+field,"stock.shipment.out,moves",0,Moves,Movimientos,0
+field,"stock.shipment.out,outgoing_moves",0,Outgoing Moves,Movimientos de Salida,0
+field,"stock.shipment.out,planned_date",0,Planned Date,Fecha Planeada,0
+field,"stock.shipment.out,rec_name",0,Name,Nombre,0
+field,"stock.shipment.out,reference",0,Reference,Referencia,0
+field,"stock.shipment.out.return,code",0,Code,Código,0
+field,"stock.shipment.out.return,customer",0,Customer,Cliente,0
+field,"stock.shipment.out.return,delivery_address",0,Delivery Address,Dirección de EnvÃo,0
+field,"stock.shipment.out.return,effective_date",0,Effective Date,Fecha Efectiva,0
+field,"stock.shipment.out.return,incoming_moves",0,Incoming Moves,Movimientos de Entrada,0
+field,"stock.shipment.out.return,inventory_moves",0,Inventory Moves,Movimientos de Inventario,0
+field,"stock.shipment.out.return,moves",0,Moves,Movimientos,0
+field,"stock.shipment.out.return,planned_date",0,Planned Date,Fecha Planeada,0
+field,"stock.shipment.out.return,rec_name",0,Name,Nombre,0
+field,"stock.shipment.out.return,reference",0,Reference,Referencia,0
+field,"stock.shipment.out.return,state",0,State,Estado,0
+field,"stock.shipment.out.return,warehouse",0,Warehouse,Depósito,0
+field,"stock.shipment.out,state",0,State,Estado,0
+field,"stock.shipment.out,warehouse",0,Warehouse,Depósito,0
help,"party.party,customer_location",0,The default destination location when sending products to the party.,El lugar predeterminado destino cuando se envian productos al tercero.,0
help,"party.party,supplier_location",0,The default source location when receiving products from the party.,El lugar origen predeterminado cuando se reciben productos del tercero.,0
help,"stock.location_stock_date.init,forecast_date",0,"Allow to compute expected stock quantities for this date.
@@ -147,84 +147,84 @@ help,"stock.product_stock_date.init,forecast_date",0,"Allow to compute expected
* A date in the past will provide historical values.","Permitir calcular el inventario esperado para esta fecha.
* Un valor vacÃoes una fecha infinita en el futuro.
* Una fecha en el pasado indicará usar datos históricos.",0
-model,"ir.action,name",act_packing_out_form_assigned,Assigned Customer Shipments,EnvÃos a Clientes asignados,0
-model,"ir.action,name",act_packing_internal_assigned_form,Assigned Internal Shipments,EnvÃos internos asignados,0
-model,"ir.action,name",wizard_packing_in_return_assign,Assign Purchase Return Shipment,Asigne Devolución de Compra,0
-model,"ir.action,name",wizard_packing_internal_assign,Assign Shipment Internal,Asigne EnvÃo Interno,0
-model,"ir.action,name",wizard_packing_out_assign,Assign Shipment Out,Asignación de EnvÃo,0
+model,"ir.action,name",act_shipment_out_form_assigned,Assigned Customer Shipments,EnvÃos a Clientes asignados,0
+model,"ir.action,name",act_shipment_internal_assigned_form,Assigned Internal Shipments,EnvÃos internos asignados,0
+model,"ir.action,name",wizard_shipment_in_return_assign,Assign Purchase Return Shipment,Asigne Devolución de Compra,0
+model,"ir.action,name",wizard_shipment_internal_assign,Assign Shipment Internal,Asigne EnvÃo Interno,0
+model,"ir.action,name",wizard_shipment_out_assign,Assign Shipment Out,Asignación de EnvÃo,0
model,"ir.action,name",wizard_complete_inventory,Complete Inventory,Inventario Completo,0
-model,"ir.action,name",create_packing_out_return,Create Return Shipment,Crear Devolución,0
-model,"ir.action,name",act_packing_out_return_form,Customer Return Shipments,Devolución al Cliente,0
-model,"ir.action,name",act_packing_out_form,Customer Shipments,EnvÃos a Cliente,0
-model,"ir.action,name",act_packing_out_form2,Customer Shipments,EnvÃos a Cliente,0
-model,"ir.action,name",act_packing_out_form_ready,Customer Shipments Ready for Shipping,EnvÃos de Cliente listos para Enviar,0
-model,"ir.action,name",act_packing_out_form_waiting,Customer Shipments Waiting Assignation,EnvÃos de Cliente esperando Asignación,0
-model,"ir.action,name",report_packing_out_delivery_note,Delivery Note,Nota de EnvÃo,0
-model,"ir.action,name",act_packing_internal_draft_form,Draft Internal Shipments,EnvÃos Internos en Borrador,0
+model,"ir.action,name",create_shipment_out_return,Create Return Shipment,Crear Devolución,0
+model,"ir.action,name",act_shipment_out_return_form,Customer Return Shipments,Devolución al Cliente,0
+model,"ir.action,name",act_shipment_out_form,Customer Shipments,EnvÃos a Cliente,0
+model,"ir.action,name",act_shipment_out_form2,Customer Shipments,EnvÃos a Cliente,0
+model,"ir.action,name",act_shipment_out_form_ready,Customer Shipments Ready for Shipping,EnvÃos de Cliente listos para Enviar,0
+model,"ir.action,name",act_shipment_out_form_waiting,Customer Shipments Waiting Assignation,EnvÃos de Cliente esperando Asignación,0
+model,"ir.action,name",report_shipment_out_delivery_note,Delivery Note,Nota de EnvÃo,0
+model,"ir.action,name",act_shipment_internal_draft_form,Draft Internal Shipments,EnvÃos Internos en Borrador,0
model,"ir.action,name",act_location_form,Edit Locations,Editar Lugares,0
-model,"ir.action,name",report_packing_internal,Internal Shipment,EnvÃo Interno,0
-model,"ir.action,name",act_packing_internal_form,Internal Shipments,EnvÃos Internos,0
-model,"ir.action,name",act_packing_internal_waiting_form,Internal Shipments Waiting Assignation,EnvÃos Internos esperando Asignación,0
+model,"ir.action,name",report_shipment_internal,Internal Shipment,EnvÃo Interno,0
+model,"ir.action,name",act_shipment_internal_form,Internal Shipments,EnvÃos Internos,0
+model,"ir.action,name",act_shipment_internal_waiting_form,Internal Shipments Waiting Assignation,EnvÃos Internos esperando Asignación,0
model,"ir.action,name",act_inventory_form,Inventories,Inventarios,0
model,"ir.action,name",act_location_tree,Locations,Lugares,0
model,"ir.action,name",act_move_form,Moves,Movimientos,0
model,"ir.action,name",act_move_form_supp,Moves from Suppliers,Movimientos de Proveedores,0
model,"ir.action,name",act_move_form_supp_proceed,Moves from Suppliers Waiting Arrival,Movimientos de Proveedores en espera de Arrivo,0
model,"ir.action,name",act_move_form_cust,Moves to Customers,Movimientos hacia Clientes,0
-model,"ir.action,name",act_packing_out_return_form2,New Customer Return Shipment,Nueva Devolución al Cliente,0
-model,"ir.action,name",act_packing_internal_new_form,New Internal Shipment,Nuevo EnvÃo Interno,0
-model,"ir.action,name",act_packing_in_return_new_form,New Supplier Return Shipment,Nuevo Devolución al Proveedor,0
-model,"ir.action,name",act_packing_in_form2,New Supplier Shipment,Nuevo EnvÃo de Proveedor,0
-model,"ir.action,name",report_packing_out_picking_list,Picking List,Lista de Recogida,0
+model,"ir.action,name",act_shipment_out_return_form2,New Customer Return Shipment,Nueva Devolución al Cliente,0
+model,"ir.action,name",act_shipment_internal_new_form,New Internal Shipment,Nuevo EnvÃo Interno,0
+model,"ir.action,name",act_shipment_in_return_new_form,New Supplier Return Shipment,Nuevo Devolución al Proveedor,0
+model,"ir.action,name",act_shipment_in_form2,New Supplier Shipment,Nuevo EnvÃo de Proveedor,0
+model,"ir.action,name",report_shipment_out_picking_list,Picking List,Lista de Recogida,0
model,"ir.action,name",wizard_location_open,Product by Location,Producto por Lugar,0
model,"ir.action,name",wizard_product_open,Product Quantities,Cantidades de Producto,0
model,"ir.action,name",act_product_by_location,Products by Locations,Productos por Lugares,0
model,"ir.action,name",act_location_quantity_tree,Product Stock,Inventario de Producto,0
-model,"ir.action,name",act_packing_in_form_received,Received Supplier packings,Empaques de Proveedores recibidos,0
-model,"ir.action,name",report_packing_in_restocking_list,Restocking List,Lista de Renovación de Inventario,0
-model,"ir.action,name",report_packing_out_return_restocking_list,Restocking List,Lista de Renovación de Inventario,0
-model,"ir.action,name",act_packing_in_return_form,Supplier Return Shipments,Devolución al Proveedor,0
-model,"ir.action,name",act_packing_in_form,Supplier Shipments,EnvÃos del Proveedor,0
-model,"ir.action,name",act_packing_out_form3,Supplier Shipments,EnvÃos del Proveedor,0
-model,"ir.sequence,name",sequence_packing_out_return,Customer Return Shipment,Devolución al Cliente,0
-model,"ir.sequence,name",sequence_packing_out,Customer Shipment,EnvÃo a Cliente,0
-model,"ir.sequence,name",sequence_packing_internal,Internal Shipment,EnvÃo Interno,0
-model,"ir.sequence,name",sequence_packing_in_return,Supplier Return Shipment,Devolución al Proveedor,0
-model,"ir.sequence,name",sequence_packing_in,Supplier Shipment,EnvÃo del Proveedor,0
-model,"ir.sequence.type,name",sequence_type_packing_out_return,Customer Return Shipment,Devolución al Cliente,0
-model,"ir.sequence.type,name",sequence_type_packing_out,Customer Shipment,EnvÃo a Cliente,0
-model,"ir.sequence.type,name",sequence_type_packing_internal,Internal Shipment,EnvÃo Interno,0
-model,"ir.sequence.type,name",sequence_type_packing_in_return,Supplier Return Shipment,Devolución al Proveedor,0
-model,"ir.sequence.type,name",sequence_type_packing_in,Supplier Shipment,EnvÃo del Proveedor,0
-model,"ir.ui.menu,name",menu_packing_out_assigned,Assigned Customer Shipments,EnvÃos asignados a Clientes,0
-model,"ir.ui.menu,name",menu_packing_internal_assigned_form,Assigned Internal Shipments,EnvÃos asignados internamente,0
+model,"ir.action,name",act_shipment_in_form_received,Received Supplier shipments,Empaques de Proveedores recibidos,0
+model,"ir.action,name",report_shipment_in_restocking_list,Restocking List,Lista de Renovación de Inventario,0
+model,"ir.action,name",report_shipment_out_return_restocking_list,Restocking List,Lista de Renovación de Inventario,0
+model,"ir.action,name",act_shipment_in_return_form,Supplier Return Shipments,Devolución al Proveedor,0
+model,"ir.action,name",act_shipment_in_form,Supplier Shipments,EnvÃos del Proveedor,0
+model,"ir.action,name",act_shipment_out_form3,Supplier Shipments,EnvÃos del Proveedor,0
+model,"ir.sequence,name",sequence_shipment_out_return,Customer Return Shipment,Devolución al Cliente,0
+model,"ir.sequence,name",sequence_shipment_out,Customer Shipment,EnvÃo a Cliente,0
+model,"ir.sequence,name",sequence_shipment_internal,Internal Shipment,EnvÃo Interno,0
+model,"ir.sequence,name",sequence_shipment_in_return,Supplier Return Shipment,Devolución al Proveedor,0
+model,"ir.sequence,name",sequence_shipment_in,Supplier Shipment,EnvÃo del Proveedor,0
+model,"ir.sequence.type,name",sequence_type_shipment_out_return,Customer Return Shipment,Devolución al Cliente,0
+model,"ir.sequence.type,name",sequence_type_shipment_out,Customer Shipment,EnvÃo a Cliente,0
+model,"ir.sequence.type,name",sequence_type_shipment_internal,Internal Shipment,EnvÃo Interno,0
+model,"ir.sequence.type,name",sequence_type_shipment_in_return,Supplier Return Shipment,Devolución al Proveedor,0
+model,"ir.sequence.type,name",sequence_type_shipment_in,Supplier Shipment,EnvÃo del Proveedor,0
+model,"ir.ui.menu,name",menu_shipment_out_assigned,Assigned Customer Shipments,EnvÃos asignados a Clientes,0
+model,"ir.ui.menu,name",menu_shipment_internal_assigned_form,Assigned Internal Shipments,EnvÃos asignados internamente,0
model,"ir.ui.menu,name",menu_configuration,Configuration,Configuración,0
-model,"ir.ui.menu,name",menu_packing_out_return_form,Customer Return Shipments,Devolución al Cliente,0
-model,"ir.ui.menu,name",menu_packing_out_form,Customer Shipments,EnvÃos al Cliente,0
-model,"ir.ui.menu,name",menu_packing_out_ready,Customer Shipments Ready for Shipping,EnvÃos de Cliente listos para EnvÃo,0
-model,"ir.ui.menu,name",menu_packing_out_waiting,Customer Shipments Waiting Assignation,EnvÃos de Cliente listos esperando Asignación,0
-model,"ir.ui.menu,name",menu_packing_internal_draft_form,Draft Internal Shipments,EnvÃos Internos en Borrador,0
+model,"ir.ui.menu,name",menu_shipment_out_return_form,Customer Return Shipments,Devolución al Cliente,0
+model,"ir.ui.menu,name",menu_shipment_out_form,Customer Shipments,EnvÃos al Cliente,0
+model,"ir.ui.menu,name",menu_shipment_out_ready,Customer Shipments Ready for Shipping,EnvÃos de Cliente listos para EnvÃo,0
+model,"ir.ui.menu,name",menu_shipment_out_waiting,Customer Shipments Waiting Assignation,EnvÃos de Cliente listos esperando Asignación,0
+model,"ir.ui.menu,name",menu_shipment_internal_draft_form,Draft Internal Shipments,EnvÃos Internos en Borrador,0
model,"ir.ui.menu,name",menu_location_form,Edit Locations,Editar Lugares,0
-model,"ir.ui.menu,name",menu_packing_internal_form,Internal Shipments,EnvÃo Internos,0
-model,"ir.ui.menu,name",menu_packing_internal_waiting_form,Internal Shipments Waiting Assignation,EnvÃo Internos esperando Asignación,0
+model,"ir.ui.menu,name",menu_shipment_internal_form,Internal Shipments,EnvÃo Internos,0
+model,"ir.ui.menu,name",menu_shipment_internal_waiting_form,Internal Shipments Waiting Assignation,EnvÃo Internos esperando Asignación,0
model,"ir.ui.menu,name",menu_inventory_form,Inventories,Inventarios,0
-model,"ir.ui.menu,name",menu_stock,Inventory Management,Manejo de Inventarios,0
+model,"ir.ui.menu,name",menu_stock,Inventory Management,Gestión de Inventarios,0
model,"ir.ui.menu,name",menu_location_tree,Locations,Lugares,0
model,"ir.ui.menu,name",menu_move_form,Moves,Movimientos,0
model,"ir.ui.menu,name",menu_move_form_supp,Moves from Suppliers,Movimientos de Proveedores,0
model,"ir.ui.menu,name",menu_move_form_supp_proceed,Moves from Suppliers Waiting Arrival,Movimientos de Proveedores en espera de Arrivo,0
model,"ir.ui.menu,name",menu_move_form_cust,Moves to Customers,Movimientos hacia Clientes,0
-model,"ir.ui.menu,name",menu_packing_out_return_form2,New Customer Return Shipment,Nueva Devolución al Cliente,0
-model,"ir.ui.menu,name",menu_packing_internal_new_form,New Internal Shipment,Nuevo EnvÃo Interno,0
-model,"ir.ui.menu,name",menu_packing_in_return_new_form,New Supplier Return Shipment,Nueva Devolución al Proveedor,0
-model,"ir.ui.menu,name",menu_packing_in_form2,New Supplier Shipment,Nuevo EnvÃo de Proveedor,0
-model,"ir.ui.menu,name",menu_packing_in_received,Received Supplier packings,Empaques de Proveedores recibidos,0
+model,"ir.ui.menu,name",menu_shipment_out_return_form2,New Customer Return Shipment,Nueva Devolución al Cliente,0
+model,"ir.ui.menu,name",menu_shipment_internal_new_form,New Internal Shipment,Nuevo EnvÃo Interno,0
+model,"ir.ui.menu,name",menu_shipment_in_return_new_form,New Supplier Return Shipment,Nueva Devolución al Proveedor,0
+model,"ir.ui.menu,name",menu_shipment_in_form2,New Supplier Shipment,Nuevo EnvÃo de Proveedor,0
+model,"ir.ui.menu,name",menu_shipment_in_received,Received Supplier shipments,Empaques de Proveedores recibidos,0
model,"ir.ui.menu,name",menu_reporting,Reporting,Reportes,0
-model,"ir.ui.menu,name",menu_packing_in_return_form,Supplier Return Shipments,Devolución al Proveedor,0
-model,"ir.ui.menu,name",menu_packing_in_form,Supplier Shipments,EnvÃo del Proveedor,0
+model,"ir.ui.menu,name",menu_shipment_in_return_form,Supplier Return Shipments,Devolución al Proveedor,0
+model,"ir.ui.menu,name",menu_shipment_in_form,Supplier Shipments,EnvÃo del Proveedor,0
model,"res.group,name",group_stock,Stock,Stock,0
model,"res.group,name",group_stock_admin,Stock Administration,Administración de existencia,0
-model,"stock.inventory.complete.init,name",0,Complete Inventory Init,Inicio de Inventario Completo,0
+model,"res.group,name",group_stock_force_assignment,Stock Force Assignment,,0
model,"stock.inventory.line,name",0,Stock Inventory Line,LÃnea de existencia en Inventario ,0
model,"stock.inventory,name",0,Stock Inventory,Inventario de Existencia,0
model,"stock.location,name",location_customer,Customer,Cliente,0
@@ -237,116 +237,110 @@ model,"stock.location,name",location_supplier,Supplier,Proveedor,0
model,"stock.location,name",location_warehouse,Warehouse,Depósito,0
model,"stock.location_stock_date.init,name",0,Compute stock quantities,Calcule cantidad existencia,0
model,"stock.move,name",0,Stock Move,Movimiento de Existencias,0
-model,"stock.packing.in,name",0,Supplier Shipment,EnvÃo del Proveedor,0
-model,"stock.packing.in.return.assign.ask_force,name",0,Assign Supplier Return Shipment Ask Force,Fuerce Pregunta de Asigne Devolución a Proveedor,0
-model,"stock.packing.in.return,name",0,Supplier Return Shipment,Devolución a Proveedor,0
-model,"stock.packing.internal.assign.ask_force,name",0,Assign Shipment Internal Ask Force,Fuerce Pregunta de Asigne EnvÃo Interno,0
-model,"stock.packing.internal,name",0,Internal Shipment,EnvÃo Interno,0
-model,"stock.packing.out.assign.ask_force,name",0,Assign Shipment Out Ask Force,Fuerce Pregunta de Asigne EnvÃo,0
-model,"stock.packing.out,name",0,Customer Shipment,EnvÃo de Cliente,0
-model,"stock.packing.out.return,name",0,Customer Return Shipment,Devolución a Cliente,0
model,"stock.product_stock_date.init,name",0,Compute stock quantities,Calcule cantidad de existencia,0
-model,"workflow.activity,name",packingout_act_assigned,Assigned,Asignado,0
-model,"workflow.activity,name",packinginternal_act_assigned,Assigned,Asignado,0
-model,"workflow.activity,name",packing_in_return_act_assigned,Assigned,Asignado,0
-model,"workflow.activity,name",packingin_act_cancel,Canceled,Cancelado,0
-model,"workflow.activity,name",packingout_act_cancel,Canceled,Cancelado,0
-model,"workflow.activity,name",packinginternal_act_cancel,Canceled,Cancelado,0
-model,"workflow.activity,name",packing_out_return_act_cancel,Canceled,Cancelado,0
-model,"workflow.activity,name",packing_in_return_act_cancel,Canceled,Cancelado,0
+model,"stock.shipment.in,name",0,Supplier Shipment,EnvÃo del Proveedor,0
+model,"stock.shipment.in.return.assign.ask_force,name",0,Assign Supplier Return Shipment Ask Force,Fuerce Pregunta de Asigne Devolución a Proveedor,0
+model,"stock.shipment.in.return,name",0,Supplier Return Shipment,Devolución a Proveedor,0
+model,"stock.shipment.internal.assign.ask_force,name",0,Assign Shipment Internal Ask Force,Fuerce Pregunta de Asigne EnvÃo Interno,0
+model,"stock.shipment.internal,name",0,Internal Shipment,EnvÃo Interno,0
+model,"stock.shipment.out.assign.ask_force,name",0,Assign Shipment Out Ask Force,Fuerce Pregunta de Asigne EnvÃo,0
+model,"stock.shipment.out,name",0,Customer Shipment,EnvÃo de Cliente,0
+model,"stock.shipment.out.return,name",0,Customer Return Shipment,Devolución a Cliente,0
+model,"workflow.activity,name",shipmentout_act_assigned,Assigned,Asignado,0
+model,"workflow.activity,name",shipmentinternal_act_assigned,Assigned,Asignado,0
+model,"workflow.activity,name",shipment_in_return_act_assigned,Assigned,Asignado,0
+model,"workflow.activity,name",shipmentin_act_cancel,Canceled,Cancelado,0
+model,"workflow.activity,name",shipmentout_act_cancel,Canceled,Cancelado,0
+model,"workflow.activity,name",shipmentinternal_act_cancel,Canceled,Cancelado,0
+model,"workflow.activity,name",shipment_out_return_act_cancel,Canceled,Cancelado,0
+model,"workflow.activity,name",shipment_in_return_act_cancel,Canceled,Cancelado,0
model,"workflow.activity,name",inventory_act_cancel,Canceled,Cancelado,0
-model,"workflow.activity,name",packingin_act_done,Done,Hecho,0
-model,"workflow.activity,name",packingout_act_done,Done,Hecho,0
-model,"workflow.activity,name",packinginternal_act_done,Done,Hecho,0
-model,"workflow.activity,name",packing_out_return_act_done,Done,Hecho,0
-model,"workflow.activity,name",packing_in_return_act_done,Done,Hecho,0
+model,"workflow.activity,name",shipmentin_act_done,Done,Hecho,0
+model,"workflow.activity,name",shipmentout_act_done,Done,Hecho,0
+model,"workflow.activity,name",shipmentinternal_act_done,Done,Hecho,0
+model,"workflow.activity,name",shipment_out_return_act_done,Done,Hecho,0
+model,"workflow.activity,name",shipment_in_return_act_done,Done,Hecho,0
model,"workflow.activity,name",inventory_act_done,Done,Hecho,0
-model,"workflow.activity,name",packingin_act_draft,Draft,Borrador,0
-model,"workflow.activity,name",packingout_act_draft,Draft,Borrador,0
-model,"workflow.activity,name",packinginternal_act_draft,Draft,Borrador,0
-model,"workflow.activity,name",packing_out_return_act_draft,Draft,Borrador,0
-model,"workflow.activity,name",packing_in_return_act_draft,Draft,Borrador,0
+model,"workflow.activity,name",shipmentin_act_draft,Draft,Borrador,0
+model,"workflow.activity,name",shipmentout_act_draft,Draft,Borrador,0
+model,"workflow.activity,name",shipmentinternal_act_draft,Draft,Borrador,0
+model,"workflow.activity,name",shipment_out_return_act_draft,Draft,Borrador,0
+model,"workflow.activity,name",shipment_in_return_act_draft,Draft,Borrador,0
model,"workflow.activity,name",inventory_act_draft,Draft,Borrador,0
-model,"workflow.activity,name",packingout_act_packed,Packed,Empacado,0
-model,"workflow.activity,name",packingin_act_received,Received,Recibido,0
-model,"workflow.activity,name",packing_out_return_act_received,Received,Recibido,0
-model,"workflow.activity,name",packingout_act_waiting,Waiting,En Espera,0
-model,"workflow.activity,name",packinginternal_act_waiting,Waiting,En Espera,0
-model,"workflow.activity,name",packing_in_return_act_waiting,Waiting,En Espera,0
-model,"workflow,name",wkf_packing_out_return,Customer Return Shipment,Devolución a Cliente,0
-model,"workflow,name",wkf_packingout,Customer Shipment,EnvÃo de Cliente,0
-model,"workflow,name",wkf_packinginternal,Internal Shipment,EnvÃo Interno,0
+model,"workflow.activity,name",shipmentout_act_packed,Packed,Empacado,0
+model,"workflow.activity,name",shipmentin_act_received,Received,Recibido,0
+model,"workflow.activity,name",shipment_out_return_act_received,Received,Recibido,0
+model,"workflow.activity,name",shipmentout_act_waiting,Waiting,En Espera,0
+model,"workflow.activity,name",shipmentinternal_act_waiting,Waiting,En Espera,0
+model,"workflow.activity,name",shipment_in_return_act_waiting,Waiting,En Espera,0
+model,"workflow,name",wkf_shipment_out_return,Customer Return Shipment,Devolución a Cliente,0
+model,"workflow,name",wkf_shipmentout,Customer Shipment,EnvÃo de Cliente,0
+model,"workflow,name",wkf_shipmentinternal,Internal Shipment,EnvÃo Interno,0
model,"workflow,name",wkf_inventory,Inventory,Inventario,0
-model,"workflow,name",wkf_packing_in_return,Supplier Return Shipment,Devolución a Proveedor,0
-model,"workflow,name",wkf_packingin,Supplier Shipment,EnvÃo del Proveedor,0
-odt,stock.packing.in.restocking_list,0,/,/,0
-odt,stock.packing.in.restocking_list,0,2,2,0
-odt,stock.packing.in.restocking_list,0,Code:,Código:,0
-odt,stock.packing.in.restocking_list,0,E-Mail:,Correo electrónico:,0
-odt,stock.packing.in.restocking_list,0,From Location,Lugar Inicial,0
-odt,stock.packing.in.restocking_list,0,Phone:,Teléfono:,0
-odt,stock.packing.in.restocking_list,0,Planned Date:,Fecha Planeada:,0
-odt,stock.packing.in.restocking_list,0,Product,Producto,0
-odt,stock.packing.in.restocking_list,0,Quantity,Cantidad,0
-odt,stock.packing.in.restocking_list,0,Reference:,Referencia:,0
-odt,stock.packing.in.restocking_list,0,Restocking List,Lista de Renovación de Inventario,0
-odt,stock.packing.in.restocking_list,0,Supplier:,Proveedor:,0
-odt,stock.packing.in.restocking_list,0,To Location,Al Lugar:,0
-odt,stock.packing.in.restocking_list,0,Warehouse:,Bodega:,0
-odt,stock.packing.internal.report,0,/,/,0
-odt,stock.packing.internal.report,0,2,2,0
-odt,stock.packing.internal.report,0,Code:,Código:,0
-odt,stock.packing.internal.report,0,E-Mail:,Correo electrónico:,0
-odt,stock.packing.internal.report,0,From Location,Lugar Inicial,0
-odt,stock.packing.internal.report,0,From Location:,Origen:,0
-odt,stock.packing.internal.report,0,Internal Shipment,EnvÃo Interno,0
-odt,stock.packing.internal.report,0,Phone:,Teléfono:,0
-odt,stock.packing.internal.report,0,Planned Date:,Fecha Planeada:,0
-odt,stock.packing.internal.report,0,Product,Producto,0
-odt,stock.packing.internal.report,0,Quantity,Cantidad,0
-odt,stock.packing.internal.report,0,Reference:,Referencia:,0
-odt,stock.packing.internal.report,0,To Location,Al Lugar:,0
-odt,stock.packing.internal.report,0,To Location:,Destino:,0
-odt,stock.packing.out.delivery_note,0,/,/,0
-odt,stock.packing.out.delivery_note,0,1,1,0
-odt,stock.packing.out.delivery_note,0,2,2,0
-odt,stock.packing.out.delivery_note,0,Customer Code:,Código de Cliente:,0
-odt,stock.packing.out.delivery_note,0,Date:,Fecha:,0
-odt,stock.packing.out.delivery_note,0,Delivery Note,Nota de EnvÃo,0
-odt,stock.packing.out.delivery_note,0,E-Mail:,Correo electrónico:,0
-odt,stock.packing.out.delivery_note,0,Phone:,Teléfono:,0
-odt,stock.packing.out.delivery_note,0,Product,Producto,0
-odt,stock.packing.out.delivery_note,0,Quantity,Cantidad,0
-odt,stock.packing.out.delivery_note,0,Reference:,Referencia:,0
-odt,stock.packing.out.delivery_note,0,Shipment Number:,Número de EnvÃo,0
-odt,stock.packing.out.picking_list,0,/,/,0
-odt,stock.packing.out.picking_list,0,2,2,0
-odt,stock.packing.out.picking_list,0,Code:,Código:,0
-odt,stock.packing.out.picking_list,0,Customer:,Cliente:,0
-odt,stock.packing.out.picking_list,0,E-Mail:,Correo electrónico:,0
-odt,stock.packing.out.picking_list,0,From Location,Lugar Inicial,0
-odt,stock.packing.out.picking_list,0,Phone:,Teléfono:,0
-odt,stock.packing.out.picking_list,0,Picking List,Lista de Elección,0
-odt,stock.packing.out.picking_list,0,Planned Date:,Fecha Planeada:,0
-odt,stock.packing.out.picking_list,0,Product,Producto,0
-odt,stock.packing.out.picking_list,0,Quantity,Cantidad,0
-odt,stock.packing.out.picking_list,0,Reference:,Referencia:,0
-odt,stock.packing.out.picking_list,0,To Location,Al Lugar:,0
-odt,stock.packing.out.picking_list,0,Warehouse:,Bodega:,0
-odt,stock.packing.out.return.restocking_list,0,/,/,0
-odt,stock.packing.out.return.restocking_list,0,2,2,0
-odt,stock.packing.out.return.restocking_list,0,Code:,Código:,0
-odt,stock.packing.out.return.restocking_list,0,E-Mail:,Correo electrónico:,0
-odt,stock.packing.out.return.restocking_list,0,From Location,Lugar Inicial,0
-odt,stock.packing.out.return.restocking_list,0,Phone:,Teléfono:,0
-odt,stock.packing.out.return.restocking_list,0,Planned Date:,Fecha Planeada:,0
-odt,stock.packing.out.return.restocking_list,0,Product,Producto,0
-odt,stock.packing.out.return.restocking_list,0,Quantity,Cantidad,0
-odt,stock.packing.out.return.restocking_list,0,Reference:,Referencia:,0
-odt,stock.packing.out.return.restocking_list,0,Restocking List,Lista de reposición de existencias,0
-odt,stock.packing.out.return.restocking_list,0,Supplier:,Proveedor:,0
-odt,stock.packing.out.return.restocking_list,0,To Location,Al Lugar:,0
-odt,stock.packing.out.return.restocking_list,0,Warehouse:,Bodega:,0
+model,"workflow,name",wkf_shipment_in_return,Supplier Return Shipment,Devolución a Proveedor,0
+model,"workflow,name",wkf_shipmentin,Supplier Shipment,EnvÃo del Proveedor,0
+odt,stock.shipment.in.restocking_list,0,/,/,0
+odt,stock.shipment.in.restocking_list,0,Code:,Código:,0
+odt,stock.shipment.in.restocking_list,0,E-Mail:,Correo electrónico:,0
+odt,stock.shipment.in.restocking_list,0,From Location,Lugar Inicial,0
+odt,stock.shipment.in.restocking_list,0,Phone:,Teléfono:,0
+odt,stock.shipment.in.restocking_list,0,Planned Date:,Fecha Planeada:,0
+odt,stock.shipment.in.restocking_list,0,Product,Producto,0
+odt,stock.shipment.in.restocking_list,0,Quantity,Cantidad,0
+odt,stock.shipment.in.restocking_list,0,Reference:,Referencia:,0
+odt,stock.shipment.in.restocking_list,0,Restocking List,Lista de Renovación de Inventario,0
+odt,stock.shipment.in.restocking_list,0,Supplier:,Proveedor:,0
+odt,stock.shipment.in.restocking_list,0,To Location,Al Lugar:,0
+odt,stock.shipment.in.restocking_list,0,Warehouse:,Bodega:,0
+odt,stock.shipment.internal.report,0,/,/,0
+odt,stock.shipment.internal.report,0,Code:,Código:,0
+odt,stock.shipment.internal.report,0,E-Mail:,Correo electrónico:,0
+odt,stock.shipment.internal.report,0,From Location,Lugar Inicial,0
+odt,stock.shipment.internal.report,0,From Location:,Origen:,0
+odt,stock.shipment.internal.report,0,Internal Shipment,EnvÃo Interno,0
+odt,stock.shipment.internal.report,0,Phone:,Teléfono:,0
+odt,stock.shipment.internal.report,0,Planned Date:,Fecha Planeada:,0
+odt,stock.shipment.internal.report,0,Product,Producto,0
+odt,stock.shipment.internal.report,0,Quantity,Cantidad,0
+odt,stock.shipment.internal.report,0,Reference:,Referencia:,0
+odt,stock.shipment.internal.report,0,To Location,Al Lugar:,0
+odt,stock.shipment.internal.report,0,To Location:,Destino:,0
+odt,stock.shipment.out.delivery_note,0,/,/,0
+odt,stock.shipment.out.delivery_note,0,Customer Code:,Código de Cliente:,0
+odt,stock.shipment.out.delivery_note,0,Date:,Fecha:,0
+odt,stock.shipment.out.delivery_note,0,Delivery Note,Nota de EnvÃo,0
+odt,stock.shipment.out.delivery_note,0,E-Mail:,Correo electrónico:,0
+odt,stock.shipment.out.delivery_note,0,Phone:,Teléfono:,0
+odt,stock.shipment.out.delivery_note,0,Product,Producto,0
+odt,stock.shipment.out.delivery_note,0,Quantity,Cantidad,0
+odt,stock.shipment.out.delivery_note,0,Reference:,Referencia:,0
+odt,stock.shipment.out.delivery_note,0,Shipment Number:,Número de EnvÃo,0
+odt,stock.shipment.out.picking_list,0,/,/,0
+odt,stock.shipment.out.picking_list,0,Code:,Código:,0
+odt,stock.shipment.out.picking_list,0,Customer:,Cliente:,0
+odt,stock.shipment.out.picking_list,0,E-Mail:,Correo electrónico:,0
+odt,stock.shipment.out.picking_list,0,From Location,Lugar Inicial,0
+odt,stock.shipment.out.picking_list,0,Phone:,Teléfono:,0
+odt,stock.shipment.out.picking_list,0,Picking List,Lista de Elección,0
+odt,stock.shipment.out.picking_list,0,Planned Date:,Fecha Planeada:,0
+odt,stock.shipment.out.picking_list,0,Product,Producto,0
+odt,stock.shipment.out.picking_list,0,Quantity,Cantidad,0
+odt,stock.shipment.out.picking_list,0,Reference:,Referencia:,0
+odt,stock.shipment.out.picking_list,0,To Location,Al Lugar:,0
+odt,stock.shipment.out.picking_list,0,Warehouse:,Bodega:,0
+odt,stock.shipment.out.return.restocking_list,0,/,/,0
+odt,stock.shipment.out.return.restocking_list,0,Code:,Código:,0
+odt,stock.shipment.out.return.restocking_list,0,E-Mail:,Correo electrónico:,0
+odt,stock.shipment.out.return.restocking_list,0,From Location,Lugar Inicial,0
+odt,stock.shipment.out.return.restocking_list,0,Phone:,Teléfono:,0
+odt,stock.shipment.out.return.restocking_list,0,Planned Date:,Fecha Planeada:,0
+odt,stock.shipment.out.return.restocking_list,0,Product,Producto,0
+odt,stock.shipment.out.return.restocking_list,0,Quantity,Cantidad,0
+odt,stock.shipment.out.return.restocking_list,0,Reference:,Referencia:,0
+odt,stock.shipment.out.return.restocking_list,0,Restocking List,Lista de reposición de existencias,0
+odt,stock.shipment.out.return.restocking_list,0,Supplier:,Proveedor:,0
+odt,stock.shipment.out.return.restocking_list,0,To Location,Al Lugar:,0
+odt,stock.shipment.out.return.restocking_list,0,Warehouse:,Bodega:,0
selection,"stock.inventory,state",0,Canceled,Cancelado,0
selection,"stock.inventory,state",0,Done,Hecho,0
selection,"stock.inventory,state",0,Draft,Borrador,0
@@ -361,30 +355,30 @@ selection,"stock.move,state",0,Assigned,Asignado,0
selection,"stock.move,state",0,Canceled,Cancelado,0
selection,"stock.move,state",0,Done,Hecho,0
selection,"stock.move,state",0,Draft,Borrador,0
-selection,"stock.packing.in.return,state",0,Assigned,Asignado,0
-selection,"stock.packing.in.return,state",0,Canceled,Cancelado,0
-selection,"stock.packing.in.return,state",0,Done,Hecho,0
-selection,"stock.packing.in.return,state",0,Draft,Borrador,0
-selection,"stock.packing.in.return,state",0,Waiting,En Espera,0
-selection,"stock.packing.in,state",0,Canceled,Cancelado,0
-selection,"stock.packing.in,state",0,Done,Hecho,0
-selection,"stock.packing.in,state",0,Draft,Borrador,0
-selection,"stock.packing.in,state",0,Received,Recibido,0
-selection,"stock.packing.internal,state",0,Assigned,Asignado,0
-selection,"stock.packing.internal,state",0,Canceled,Cancelado,0
-selection,"stock.packing.internal,state",0,Done,Hecho,0
-selection,"stock.packing.internal,state",0,Draft,Borrador,0
-selection,"stock.packing.internal,state",0,Waiting,En Espera,0
-selection,"stock.packing.out.return,state",0,Canceled,Cancelado,0
-selection,"stock.packing.out.return,state",0,Done,Hecho,0
-selection,"stock.packing.out.return,state",0,Draft,Borrador,0
-selection,"stock.packing.out.return,state",0,Received,Recibido,0
-selection,"stock.packing.out,state",0,Assigned,Asignado,0
-selection,"stock.packing.out,state",0,Canceled,Cancelado,0
-selection,"stock.packing.out,state",0,Done,Hecho,0
-selection,"stock.packing.out,state",0,Draft,Borrador,0
-selection,"stock.packing.out,state",0,Packed,Empacado,0
-selection,"stock.packing.out,state",0,Waiting,En Espera,0
+selection,"stock.shipment.in.return,state",0,Assigned,Asignado,0
+selection,"stock.shipment.in.return,state",0,Canceled,Cancelado,0
+selection,"stock.shipment.in.return,state",0,Done,Hecho,0
+selection,"stock.shipment.in.return,state",0,Draft,Borrador,0
+selection,"stock.shipment.in.return,state",0,Waiting,En Espera,0
+selection,"stock.shipment.in,state",0,Canceled,Cancelado,0
+selection,"stock.shipment.in,state",0,Done,Hecho,0
+selection,"stock.shipment.in,state",0,Draft,Borrador,0
+selection,"stock.shipment.in,state",0,Received,Recibido,0
+selection,"stock.shipment.internal,state",0,Assigned,Asignado,0
+selection,"stock.shipment.internal,state",0,Canceled,Cancelado,0
+selection,"stock.shipment.internal,state",0,Done,Hecho,0
+selection,"stock.shipment.internal,state",0,Draft,Borrador,0
+selection,"stock.shipment.internal,state",0,Waiting,En Espera,0
+selection,"stock.shipment.out.return,state",0,Canceled,Cancelado,0
+selection,"stock.shipment.out.return,state",0,Done,Hecho,0
+selection,"stock.shipment.out.return,state",0,Draft,Borrador,0
+selection,"stock.shipment.out.return,state",0,Received,Recibido,0
+selection,"stock.shipment.out,state",0,Assigned,Asignado,0
+selection,"stock.shipment.out,state",0,Canceled,Cancelado,0
+selection,"stock.shipment.out,state",0,Done,Hecho,0
+selection,"stock.shipment.out,state",0,Draft,Borrador,0
+selection,"stock.shipment.out,state",0,Packed,Empacado,0
+selection,"stock.shipment.out,state",0,Waiting,En Espera,0
view,party.party,0,Stock,Stock,0
view,party.party,0,_Stock,_Existencias,0
view,product.product,0,Products,Productos,0
@@ -396,9 +390,6 @@ view,stock.inventory,0,Confirm,Confirmar,0
view,stock.inventory,0,Inventories,Inventarios,0
view,stock.inventory,0,Inventory,Inventario,0
view,stock.inventory,0,Re-Open,Re-abrir,0
-view,stock.inventory.complete.init,0,Categories,CategorÃas,0
-view,stock.inventory.complete.init,0,Complete Inventory,Inventario Completo,0
-view,stock.inventory.complete.init,0,Products,Productos,0
view,stock.inventory.line,0,Inventory Line,LÃnea de Inventario,0
view,stock.inventory.line,0,Inventory Lines,LÃneas de Inventario,0
view,stock.location,0,Location,Lugar,0
@@ -410,84 +401,76 @@ view,stock.move,0,Move,Movimiento,0
view,stock.move,0,Moves,Movimientos,0
view,stock.move,0,Set Done,Marcar como Hecho,0
view,stock.move,0,Set Draft,Marcar como Borrador,0
-view,stock.packing.in,0,Cancel,Cancelar,0
-view,stock.packing.in,0,Done,Hecho,0
-view,stock.packing.in,0,Draft,Borrador,0
-view,stock.packing.in,0,Incoming Moves,Movimientos de Entrada,0
-view,stock.packing.in,0,Inventory Moves,Movimientos de Inventario,0
-view,stock.packing.in,0,Moves,Movimientos,0
-view,stock.packing.in,0,Received,Recibido,0
-view,stock.packing.in,0,Reset to Draft,Revertir a Borrador,0
-view,stock.packing.in,0,Supplier Packing,Empaque del Proveedor,0
-view,stock.packing.in,0,Supplier Packings,Empaques del Proveedor,0
-view,stock.packing.in,0,Supplier Shipment,EnvÃo del Proveedor,0
-view,stock.packing.in,0,Supplier Shipments,EnvÃos del Proveedor,0
-view,stock.packing.in.return,0,Assign,Asignar,0
-view,stock.packing.in.return,0,Cancel,Cancelar,0
-view,stock.packing.in.return,0,Done,Hecho,0
-view,stock.packing.in.return,0,Draft,Borrador,0
-view,stock.packing.in.return,0,Reset to Draft,Revertir a Borrador,0
-view,stock.packing.in.return,0,Supplier Return Shipment,Devolución de Proveedor,0
-view,stock.packing.in.return,0,Supplier Return Shipments,Devoluciones de Proveedor,0
-view,stock.packing.in.return,0,Waiting,En Espera,0
-view,stock.packing.in.return.assign.ask_force,0,Moves,Movimientos,0
-view,stock.packing.in.return.assign.ask_force,0,Unable to Assign,No es posible asignar,0
-view,stock.packing.in.return.assign.ask_force,0,Unable to assign those products:,No es posible asignar esos productos:,0
-view,stock.packing.internal,0,Assign,Asignar,0
-view,stock.packing.internal,0,Cancel,Cancelar,0
-view,stock.packing.internal,0,Done,Hecho,0
-view,stock.packing.internal,0,Draft,Borrador,0
-view,stock.packing.internal,0,Force Assign,Forzar Asignación,0
-view,stock.packing.internal,0,Internal Packing,Empaque Interno,0
-view,stock.packing.internal,0,Internal Packings,Empaques Internos,0
-view,stock.packing.internal,0,Internal Shipment,EnvÃo Interno,0
-view,stock.packing.internal,0,Internal Shipments,EnvÃos Internos,0
-view,stock.packing.internal,0,Reset to Draft,Revertir a Borrador,0
-view,stock.packing.internal,0,Set Done,Marcar como Hecho,0
-view,stock.packing.internal,0,Set Waiting,Colocar en Espera,0
-view,stock.packing.internal,0,Waiting,En espera,0
-view,stock.packing.internal.assign.ask_force,0,Moves,Movimientos,0
-view,stock.packing.internal.assign.ask_force,0,Unable to Assign,No es posible asignar,0
-view,stock.packing.internal.assign.ask_force,0,Unable to assign those products:,No es posible asignar esos productos:,0
-view,stock.packing.out,0,Assign,Asignar,0
-view,stock.packing.out,0,Cancel,Cancelar,0
-view,stock.packing.out,0,Customer Packing,Empaque de Cliente,0
-view,stock.packing.out,0,Customer Packings,Empaques de Cliente,0
-view,stock.packing.out,0,Customer Shipment,EnvÃo de Cliente,0
-view,stock.packing.out,0,Customer Shipments,EnvÃos de Cliente,0
-view,stock.packing.out,0,Done,Hecho,0
-view,stock.packing.out,0,Draft,Borrador,0
-view,stock.packing.out,0,Force Assign,Forzar Asignación,0
-view,stock.packing.out,0,Inventory Moves,Movimientos de Inventario,0
-view,stock.packing.out,0,Make packing,Hacer Empaque,0
-view,stock.packing.out,0,Outgoing Moves,Movimientos de Salida,0
-view,stock.packing.out,0,Reset to Draft,Revertir a Borrador,0
-view,stock.packing.out,0,Set Done,Marcar como Hecho,0
-view,stock.packing.out,0,Set Waiting,Colocar en Espera,0
-view,stock.packing.out,0,Unpack,Sin empaque,0
-view,stock.packing.out,0,Waiting,En espera,0
-view,stock.packing.out.assign.ask_force,0,Inventory Moves,Movimientos de Inventario,0
-view,stock.packing.out.assign.ask_force,0,Unable to Assign,No es posible asignar,0
-view,stock.packing.out.assign.ask_force,0,Unable to assign those products:,No es posible asignar esos productos:,0
-view,stock.packing.out.return,0,Cancel,Cancelar,0
-view,stock.packing.out.return,0,Customer Return Shipment,Devolución a Cliente,0
-view,stock.packing.out.return,0,Customer Return Shipments,Devolución a Cliente,0
-view,stock.packing.out.return,0,Done,Hecho,0
-view,stock.packing.out.return,0,Incoming Moves,Movimientos de Entrada,0
-view,stock.packing.out.return,0,Inventory Moves,Movimientos de Inventario,0
-view,stock.packing.out.return,0,Moves,Movimientos,0
-view,stock.packing.out.return,0,Received,Recibido,0
-view,stock.packing.out.return,0,Reset to Draft,Revertir a Borrador,0
view,stock.product_stock_date.init,0,Product Quantity.,Cantidad de Producto.,0
-wizard_button,"stock.inventory.complete,init,complete",0,Complete,Completo,0
-wizard_button,"stock.inventory.complete,init,end",0,Cancel,Cancelar,0
+view,stock.shipment.in,0,Cancel,Cancelar,0
+view,stock.shipment.in,0,Done,Hecho,0
+view,stock.shipment.in,0,Draft,Borrador,0
+view,stock.shipment.in,0,Incoming Moves,Movimientos de Entrada,0
+view,stock.shipment.in,0,Inventory Moves,Movimientos de Inventario,0
+view,stock.shipment.in,0,Moves,Movimientos,0
+view,stock.shipment.in,0,Received,Recibido,0
+view,stock.shipment.in,0,Reset to Draft,Revertir a Borrador,0
+view,stock.shipment.in,0,Supplier Shipment,EnvÃo del Proveedor,0
+view,stock.shipment.in,0,Supplier Shipments,EnvÃos del Proveedor,0
+view,stock.shipment.in.return,0,Assign,Asignar,0
+view,stock.shipment.in.return,0,Cancel,Cancelar,0
+view,stock.shipment.in.return,0,Done,Hecho,0
+view,stock.shipment.in.return,0,Draft,Borrador,0
+view,stock.shipment.in.return,0,Reset to Draft,Revertir a Borrador,0
+view,stock.shipment.in.return,0,Supplier Return Shipment,Devolución de Proveedor,0
+view,stock.shipment.in.return,0,Supplier Return Shipments,Devoluciones de Proveedor,0
+view,stock.shipment.in.return,0,Waiting,En Espera,0
+view,stock.shipment.in.return.assign.ask_force,0,Moves,Movimientos,0
+view,stock.shipment.in.return.assign.ask_force,0,Unable to Assign,No es posible asignar,0
+view,stock.shipment.in.return.assign.ask_force,0,Unable to assign those products:,No es posible asignar esos productos:,0
+view,stock.shipment.internal,0,Assign,Asignar,0
+view,stock.shipment.internal,0,Cancel,Cancelar,0
+view,stock.shipment.internal,0,Done,Hecho,0
+view,stock.shipment.internal,0,Draft,Borrador,0
+view,stock.shipment.internal,0,Force Assign,Forzar Asignación,0
+view,stock.shipment.internal,0,Internal Shipment,EnvÃo Interno,0
+view,stock.shipment.internal,0,Internal Shipments,EnvÃos Internos,0
+view,stock.shipment.internal,0,Reset to Draft,Revertir a Borrador,0
+view,stock.shipment.internal,0,Set Done,Marcar como Hecho,0
+view,stock.shipment.internal,0,Set Waiting,Colocar en Espera,0
+view,stock.shipment.internal,0,Waiting,En espera,0
+view,stock.shipment.internal.assign.ask_force,0,Moves,Movimientos,0
+view,stock.shipment.internal.assign.ask_force,0,Unable to Assign,No es posible asignar,0
+view,stock.shipment.internal.assign.ask_force,0,Unable to assign those products:,No es posible asignar esos productos:,0
+view,stock.shipment.out,0,Assign,Asignar,0
+view,stock.shipment.out,0,Cancel,Cancelar,0
+view,stock.shipment.out,0,Customer Shipment,EnvÃo de Cliente,0
+view,stock.shipment.out,0,Customer Shipments,EnvÃos de Cliente,0
+view,stock.shipment.out,0,Done,Hecho,0
+view,stock.shipment.out,0,Draft,Borrador,0
+view,stock.shipment.out,0,Force Assign,Forzar Asignación,0
+view,stock.shipment.out,0,Inventory Moves,Movimientos de Inventario,0
+view,stock.shipment.out,0,Make shipment,Hacer Empaque,0
+view,stock.shipment.out,0,Outgoing Moves,Movimientos de Salida,0
+view,stock.shipment.out,0,Reset to Draft,Revertir a Borrador,0
+view,stock.shipment.out,0,Set Done,Marcar como Hecho,0
+view,stock.shipment.out,0,Set Waiting,Colocar en Espera,0
+view,stock.shipment.out,0,Unpack,Sin empaque,0
+view,stock.shipment.out,0,Waiting,En espera,0
+view,stock.shipment.out.assign.ask_force,0,Inventory Moves,Movimientos de Inventario,0
+view,stock.shipment.out.assign.ask_force,0,Unable to Assign,No es posible asignar,0
+view,stock.shipment.out.assign.ask_force,0,Unable to assign those products:,No es posible asignar esos productos:,0
+view,stock.shipment.out.return,0,Cancel,Cancelar,0
+view,stock.shipment.out.return,0,Customer Return Shipment,Devolución a Cliente,0
+view,stock.shipment.out.return,0,Customer Return Shipments,Devolución a Cliente,0
+view,stock.shipment.out.return,0,Done,Hecho,0
+view,stock.shipment.out.return,0,Incoming Moves,Movimientos de Entrada,0
+view,stock.shipment.out.return,0,Inventory Moves,Movimientos de Inventario,0
+view,stock.shipment.out.return,0,Moves,Movimientos,0
+view,stock.shipment.out.return,0,Received,Recibido,0
+view,stock.shipment.out.return,0,Reset to Draft,Revertir a Borrador,0
wizard_button,"stock.location.open,init,end",0,Cancel,Cancelar,0
wizard_button,"stock.location.open,init,open",0,Open,Abrir,0
-wizard_button,"stock.packing.in.return.assign,ask_force,end",0,Ok,Aceptar,0
-wizard_button,"stock.packing.in.return.assign,ask_force,force",0,Force Assign,Forzar Asignación,0
-wizard_button,"stock.packing.internal.assign,ask_force,end",0,Ok,Aceptar,0
-wizard_button,"stock.packing.internal.assign,ask_force,force",0,Force Assign,Forzar Asignación,0
-wizard_button,"stock.packing.out.assign,ask_force,end",0,Ok,Aceptar,0
-wizard_button,"stock.packing.out.assign,ask_force,force",0,Force Assign,Forzar Asignación,0
wizard_button,"stock.product.open,init,end",0,Cancel,Cancelar,0
wizard_button,"stock.product.open,init,open",0,Open,Abrir,0
+wizard_button,"stock.shipment.in.return.assign,ask_force,end",0,Ok,Aceptar,0
+wizard_button,"stock.shipment.in.return.assign,ask_force,force",0,Force Assign,Forzar Asignación,0
+wizard_button,"stock.shipment.internal.assign,ask_force,end",0,Ok,Aceptar,0
+wizard_button,"stock.shipment.internal.assign,ask_force,force",0,Force Assign,Forzar Asignación,0
+wizard_button,"stock.shipment.out.assign,ask_force,end",0,Ok,Aceptar,0
+wizard_button,"stock.shipment.out.assign,ask_force,force",0,Force Assign,Forzar Asignación,0
diff --git a/es_ES.csv b/es_ES.csv
index cefb6ad..69ff3d5 100644
--- a/es_ES.csv
+++ b/es_ES.csv
@@ -1,22 +1,24 @@
type,name,res_id,src,value,fuzzy
+error,product.template,0,You cannot change the default uom for a product which is associated to stock moves.,No puede cambiar la UdM predeterminada de un producto que está asociado con movimientos de existencias.,0
error,stock.inventory.line,0,Line quantity must be positive!,La cantidad de la lÃnea debe ser positiva,0
error,stock.inventory.line,0,Product must be unique by inventory!,El producto debe ser único por inventario,0
error,stock.location,0,A location with existing moves cannot be changed to a type that does not support moves.,Una ubicación con movimientos no puede ser cambiado a un tipo que no soporte movimientos.,0
+error,stock.location,0,"Location ""%s"" must be a child of warehouse ""%s""!",La ubicación «%s» debe ser hijo del almacén «%s»,0
error,stock.location,0,You can not create recursive locations!,No puede crear ubicaciones recursivas,0
error,stock.move,0,Move can be on only one Shipment,Un movimiento solo puede hacerse con un envio.,0
-error,stock.move,0,Move quantity must be positive,La cantidad a mover tiene que ser positivo,0
+error,stock.move,0,Move quantity must be positive,La cantidad a mover tiene que ser positiva,0
error,stock.move,0,Source and destination location must be different,Los lugares origen y destino deben ser distintos,0
error,stock.move,0,You can not set state to assigned!,No puede establecer el estado como asignado,0
-error,stock.move,0,You can not set state to done!,No puede establecer el estado como hecho,0
+error,stock.move,0,You can not set state to done!,No puede establecer el estado como terminado,0
error,stock.move,0,You can not set state to draft!,No puede establecer el estado como borrador,0
error,stock.move,0,You can not use service products for a move!,No puede usar productos de servicio para un movimiento,0
-error,stock.move,0,You can only delete draft or cancelled moves!,Solamente puede eliminar movimientos en borrador o cancelados,0
-error,stock.packing.in,0,Incoming Moves must have the warehouse input location as destination location!,Los movimientos de entrada deben tener la ubicación del almacén de entrada como la ubicación de destino,0
-error,stock.packing.in,0,Inventory Moves must have the warehouse input location as source location!,Los movimientos de inventario deben tener la ubicación del almacén de entrada como la ubicación de origen,0
-error,stock.packing.out.return,0,Incoming Moves must have the warehouse input location as destination location!,Los movimientos de entrada deben tener la ubicación del almacén de entrada como la ubicación de destino,0
-error,stock.packing.out.return,0,Inventory Moves must have the warehouse input location as source location!,Los movimientos de inventario deben tener la ubicación del almacén de entrada como la ubicación de origen,0
-error,stock.packing.out.return.create,0,The packing with code %s is not yet sent.,El paquete con código %s no ha sido enviado aún.,0
-error,stock.packing.out.return.create,0,You can not create return packing,No puede crear paquetes de retorno,0
+error,stock.move,0,You can only delete draft or cancelled moves!,Solamente puede borrar movimientos en borrador o cancelados,0
+error,stock.shipment.in,0,Incoming Moves must have the warehouse input location as destination location!,Los movimientos de entrada deben tener la ubicación del almacén de entrada como la ubicación de destino,0
+error,stock.shipment.in,0,Inventory Moves must have the warehouse input location as source location!,Los movimientos de inventario deben tener la ubicación del almacén de entrada como la ubicación de origen,0
+error,stock.shipment.out.return,0,Incoming Moves must have the warehouse input location as destination location!,Los movimientos de entrada deben tener la ubicación del almacén de entrada como la ubicación de destino,0
+error,stock.shipment.out.return,0,Inventory Moves must have the warehouse input location as source location!,Los movimientos de inventario deben tener la ubicación del almacén de entrada como la ubicación de origen,0
+error,stock.shipment.out.return.create,0,The shipment with code %s is not yet sent.,El paquete con código %s no ha sido enviado aún.,0
+error,stock.shipment.out.return.create,0,You can not create return shipment,No puede crear paquetes de retorno,0
field,"party.address,delivery",0,Delivery,EnvÃo,0
field,"party.party,customer_location",0,Customer Location,Ubicación del cliente,0
field,"party.party,supplier_location",0,Supplier Location,Ubicación del proveedor,0
@@ -25,8 +27,6 @@ field,"product.product,quantity",0,Quantity,Cantidad,0
field,"product.template,forecast_quantity",0,Forecast Quantity,Cantidad prevista,0
field,"product.template,quantity",0,Quantity,Cantidad,0
field,"stock.inventory,company",0,Company,Empresa,0
-field,"stock.inventory.complete.init,categories",0,Categories,CategorÃas,0
-field,"stock.inventory.complete.init,products",0,Products,Productos,0
field,"stock.inventory,date",0,Date,Fecha,0
field,"stock.inventory.line,expected_quantity",0,Expected Quantity,Cantidad esperada,0
field,"stock.inventory.line,inventory",0,Inventory,Inventario,0
@@ -62,79 +62,79 @@ field,"stock.move,cost_price",0,Cost Price,Precio de coste,0
field,"stock.move,currency",0,Currency,Divisa,0
field,"stock.move,effective_date",0,Effective Date,Fecha efectiva,0
field,"stock.move,from_location",0,From Location,Desde ubicación,0
-field,"stock.move,packing_in",0,Supplier Shipment,EnvÃo del proveedor,0
-field,"stock.move,packing_in_return",0,Supplier Return Shipment,Envio de devolución a proveedor,0
-field,"stock.move,packing_internal",0,Internal Shipment,EnvÃo interno,0
-field,"stock.move,packing_out",0,Customer Shipment,EnvÃo a cliente,0
-field,"stock.move,packing_out_return",0,Customer Return Shipment,Envio de devolución de cliente,0
field,"stock.move,planned_date",0,Planned Date,Fecha estimada,0
field,"stock.move,product",0,Product,Producto,0
field,"stock.move,quantity",0,Quantity,Cantidad,0
field,"stock.move,rec_name",0,Name,Nombre,0
+field,"stock.move,shipment_in",0,Supplier Shipment,EnvÃo del proveedor,0
+field,"stock.move,shipment_in_return",0,Supplier Return Shipment,Envio de devolución a proveedor,0
+field,"stock.move,shipment_internal",0,Internal Shipment,EnvÃo interno,0
+field,"stock.move,shipment_out",0,Customer Shipment,EnvÃo a cliente,0
+field,"stock.move,shipment_out_return",0,Customer Return Shipment,Envio de devolución de cliente,0
field,"stock.move,state",0,State,Estado,0
field,"stock.move,to_location",0,To Location,A ubicación,0
field,"stock.move,unit_digits",0,Unit Digits,DÃgitos de unidad,0
field,"stock.move,unit_price",0,Unit Price,Precio unitario,0
field,"stock.move,unit_price_required",0,Unit Price Required,Requiere precio unitario,0
field,"stock.move,uom",0,Uom,UdM,0
-field,"stock.packing.in,code",0,Code,Código,0
-field,"stock.packing.in,contact_address",0,Contact Address,Dirección de contacto,0
-field,"stock.packing.in,effective_date",0,Effective Date,Fecha efectiva,0
-field,"stock.packing.in,incoming_moves",0,Incoming Moves,Movimientos de entrada,0
-field,"stock.packing.in,inventory_moves",0,Inventory Moves,Movimientos de inventario,0
-field,"stock.packing.in,moves",0,Moves,Movimientos,0
-field,"stock.packing.in,planned_date",0,Planned Date,Fecha estimada,0
-field,"stock.packing.in,rec_name",0,Name,Nombre,0
-field,"stock.packing.in,reference",0,Reference,Referencia,0
-field,"stock.packing.in.return.assign.ask_force,moves",0,Moves,Movimientos,0
-field,"stock.packing.in.return,code",0,Code,Código,0
-field,"stock.packing.in.return,effective_date",0,Effective Date,Fecha efectiva,0
-field,"stock.packing.in.return,from_location",0,From Location,Desde ubicación,0
-field,"stock.packing.in.return,moves",0,Moves,Movimientos,0
-field,"stock.packing.in.return,planned_date",0,Planned Date,Fecha estimada,0
-field,"stock.packing.in.return,rec_name",0,Name,Nombre,0
-field,"stock.packing.in.return,reference",0,Reference,Referencia,0
-field,"stock.packing.in.return,state",0,State,Estado,0
-field,"stock.packing.in.return,to_location",0,To Location,A ubicación,0
-field,"stock.packing.in,state",0,State,Estado,0
-field,"stock.packing.in,supplier",0,Supplier,Proveedor,0
-field,"stock.packing.internal.assign.ask_force,moves",0,Moves,Movimientos,0
-field,"stock.packing.internal,code",0,Code,Código,0
-field,"stock.packing.internal,effective_date",0,Effective Date,Fecha efectiva,0
-field,"stock.packing.internal,from_location",0,From Location,Desde ubicación,0
-field,"stock.packing.internal,moves",0,Moves,Movimientos,0
-field,"stock.packing.internal,planned_date",0,Planned Date,Fecha estimada,0
-field,"stock.packing.internal,rec_name",0,Name,Nombre,0
-field,"stock.packing.internal,reference",0,Reference,Referencia,0
-field,"stock.packing.internal,state",0,State,Estado,0
-field,"stock.packing.internal,to_location",0,To Location,A ubicación,0
-field,"stock.packing.in,warehouse",0,Warehouse,Almacén,0
-field,"stock.packing.out.assign.ask_force,inventory_moves",0,Inventory Moves,Movimientos de inventario,0
-field,"stock.packing.out,code",0,Code,Código,0
-field,"stock.packing.out,customer",0,Customer,Cliente,0
-field,"stock.packing.out,delivery_address",0,Delivery Address,Dirección de envÃo,0
-field,"stock.packing.out,effective_date",0,Effective Date,Fecha efectiva,0
-field,"stock.packing.out,inventory_moves",0,Inventory Moves,Movimientos de inventario,0
-field,"stock.packing.out,moves",0,Moves,Movimientos,0
-field,"stock.packing.out,outgoing_moves",0,Outgoing Moves,Movimientos de salida,0
-field,"stock.packing.out,planned_date",0,Planned Date,Fecha estimada,0
-field,"stock.packing.out,rec_name",0,Name,Nombre,0
-field,"stock.packing.out,reference",0,Reference,Referencia,0
-field,"stock.packing.out.return,code",0,Code,Código,0
-field,"stock.packing.out.return,customer",0,Customer,Cliente,0
-field,"stock.packing.out.return,delivery_address",0,Delivery Address,Dirección de envÃo,0
-field,"stock.packing.out.return,effective_date",0,Effective Date,Fecha efectiva,0
-field,"stock.packing.out.return,incoming_moves",0,Incoming Moves,Movimientos de entrada,0
-field,"stock.packing.out.return,inventory_moves",0,Inventory Moves,Movimientos de inventario,0
-field,"stock.packing.out.return,moves",0,Moves,Movimientos,0
-field,"stock.packing.out.return,planned_date",0,Planned Date,Fecha estimada,0
-field,"stock.packing.out.return,rec_name",0,Name,Nombre,0
-field,"stock.packing.out.return,reference",0,Reference,Referencia,0
-field,"stock.packing.out.return,state",0,State,Estado,0
-field,"stock.packing.out.return,warehouse",0,Warehouse,Almacén,0
-field,"stock.packing.out,state",0,State,Estado,0
-field,"stock.packing.out,warehouse",0,Warehouse,Almacén,0
field,"stock.product_stock_date.init,forecast_date",0,At Date,En la fecha,0
+field,"stock.shipment.in,code",0,Code,Código,0
+field,"stock.shipment.in,contact_address",0,Contact Address,Dirección de contacto,0
+field,"stock.shipment.in,effective_date",0,Effective Date,Fecha efectiva,0
+field,"stock.shipment.in,incoming_moves",0,Incoming Moves,Movimientos de entrada,0
+field,"stock.shipment.in,inventory_moves",0,Inventory Moves,Movimientos de inventario,0
+field,"stock.shipment.in,moves",0,Moves,Movimientos,0
+field,"stock.shipment.in,planned_date",0,Planned Date,Fecha estimada,0
+field,"stock.shipment.in,rec_name",0,Name,Nombre,0
+field,"stock.shipment.in,reference",0,Reference,Referencia,0
+field,"stock.shipment.in.return.assign.ask_force,moves",0,Moves,Movimientos,0
+field,"stock.shipment.in.return,code",0,Code,Código,0
+field,"stock.shipment.in.return,effective_date",0,Effective Date,Fecha efectiva,0
+field,"stock.shipment.in.return,from_location",0,From Location,Desde ubicación,0
+field,"stock.shipment.in.return,moves",0,Moves,Movimientos,0
+field,"stock.shipment.in.return,planned_date",0,Planned Date,Fecha estimada,0
+field,"stock.shipment.in.return,rec_name",0,Name,Nombre,0
+field,"stock.shipment.in.return,reference",0,Reference,Referencia,0
+field,"stock.shipment.in.return,state",0,State,Estado,0
+field,"stock.shipment.in.return,to_location",0,To Location,A ubicación,0
+field,"stock.shipment.in,state",0,State,Estado,0
+field,"stock.shipment.in,supplier",0,Supplier,Proveedor,0
+field,"stock.shipment.internal.assign.ask_force,moves",0,Moves,Movimientos,0
+field,"stock.shipment.internal,code",0,Code,Código,0
+field,"stock.shipment.internal,effective_date",0,Effective Date,Fecha efectiva,0
+field,"stock.shipment.internal,from_location",0,From Location,Desde ubicación,0
+field,"stock.shipment.internal,moves",0,Moves,Movimientos,0
+field,"stock.shipment.internal,planned_date",0,Planned Date,Fecha estimada,0
+field,"stock.shipment.internal,rec_name",0,Name,Nombre,0
+field,"stock.shipment.internal,reference",0,Reference,Referencia,0
+field,"stock.shipment.internal,state",0,State,Estado,0
+field,"stock.shipment.internal,to_location",0,To Location,A ubicación,0
+field,"stock.shipment.in,warehouse",0,Warehouse,Almacén,0
+field,"stock.shipment.out.assign.ask_force,inventory_moves",0,Inventory Moves,Movimientos de inventario,0
+field,"stock.shipment.out,code",0,Code,Código,0
+field,"stock.shipment.out,customer",0,Customer,Cliente,0
+field,"stock.shipment.out,delivery_address",0,Delivery Address,Dirección de envÃo,0
+field,"stock.shipment.out,effective_date",0,Effective Date,Fecha efectiva,0
+field,"stock.shipment.out,inventory_moves",0,Inventory Moves,Movimientos de inventario,0
+field,"stock.shipment.out,moves",0,Moves,Movimientos,0
+field,"stock.shipment.out,outgoing_moves",0,Outgoing Moves,Movimientos de salida,0
+field,"stock.shipment.out,planned_date",0,Planned Date,Fecha estimada,0
+field,"stock.shipment.out,rec_name",0,Name,Nombre,0
+field,"stock.shipment.out,reference",0,Reference,Referencia,0
+field,"stock.shipment.out.return,code",0,Code,Código,0
+field,"stock.shipment.out.return,customer",0,Customer,Cliente,0
+field,"stock.shipment.out.return,delivery_address",0,Delivery Address,Dirección de envÃo,0
+field,"stock.shipment.out.return,effective_date",0,Effective Date,Fecha efectiva,0
+field,"stock.shipment.out.return,incoming_moves",0,Incoming Moves,Movimientos de entrada,0
+field,"stock.shipment.out.return,inventory_moves",0,Inventory Moves,Movimientos de inventario,0
+field,"stock.shipment.out.return,moves",0,Moves,Movimientos,0
+field,"stock.shipment.out.return,planned_date",0,Planned Date,Fecha estimada,0
+field,"stock.shipment.out.return,rec_name",0,Name,Nombre,0
+field,"stock.shipment.out.return,reference",0,Reference,Referencia,0
+field,"stock.shipment.out.return,state",0,State,Estado,0
+field,"stock.shipment.out.return,warehouse",0,Warehouse,Almacén,0
+field,"stock.shipment.out,state",0,State,Estado,0
+field,"stock.shipment.out,warehouse",0,Warehouse,Almacén,0
help,"party.party,customer_location",0,The default destination location when sending products to the party.,El lugar de destino predeterminado cuando se envian productos al tercero.,0
help,"party.party,supplier_location",0,The default source location when receiving products from the party.,La ubicación de origen predeterminado cuando se reciben productos del tercero.,0
help,"stock.location_stock_date.init,forecast_date",0,"Allow to compute expected stock quantities for this date.
@@ -147,67 +147,66 @@ help,"stock.product_stock_date.init,forecast_date",0,"Allow to compute expected
* A date in the past will provide historical values.","Permite calcular las existencias esperadas para esta fecha.
* Un valor vacÃo es una fecha infinita en el futuro.
* Una fecha pasada proveerá de datos históricos.",0
-model,"ir.action,name",act_packing_out_form_assigned,Assigned Customer Shipments,EnvÃos a clientes asignados,0
-model,"ir.action,name",act_packing_internal_assigned_form,Assigned Internal Shipments,EnvÃos internos asignados,0
-model,"ir.action,name",wizard_packing_in_return_assign,Assign Purchase Return Shipment,Asignar envio de devolución de compra,0
-model,"ir.action,name",wizard_packing_internal_assign,Assign Shipment Internal,Asignar envÃo interno,0
-model,"ir.action,name",wizard_packing_out_assign,Assign Shipment Out,Asignación de salida de envÃo,0
+model,"ir.action,name",act_shipment_out_form_assigned,Assigned Customer Shipments,EnvÃos a clientes asignados,0
+model,"ir.action,name",act_shipment_internal_assigned_form,Assigned Internal Shipments,EnvÃos internos asignados,0
+model,"ir.action,name",wizard_shipment_in_return_assign,Assign Purchase Return Shipment,Asignar envio de devolución de compra,0
+model,"ir.action,name",wizard_shipment_internal_assign,Assign Shipment Internal,Asignar envÃo interno,0
+model,"ir.action,name",wizard_shipment_out_assign,Assign Shipment Out,Asignación de salida de envÃo,0
model,"ir.action,name",wizard_complete_inventory,Complete Inventory,Inventario completo,0
-model,"ir.action,name",create_packing_out_return,Create Return Shipment,Crear envio de devolución,0
-model,"ir.action,name",act_packing_out_return_form,Customer Return Shipments,Envios de devoluciones de cliente,0
-model,"ir.action,name",,Customer Shipment,EnvÃo de Cliente,1
-model,"ir.action,name",act_packing_out_form,Customer Shipments,EnvÃos a cliente,0
-model,"ir.action,name",act_packing_out_form2,Customer Shipments,EnvÃos de cliente,0
-model,"ir.action,name",act_packing_out_form_ready,Customer Shipments Ready for Shipping,EnvÃos a cliente listos para ser enviados,0
-model,"ir.action,name",act_packing_out_form_waiting,Customer Shipments Waiting Assignation,EnvÃos a cliente esperando asignación,0
-model,"ir.action,name",report_packing_out_delivery_note,Delivery Note,Albarán de envÃo,0
-model,"ir.action,name",act_packing_internal_draft_form,Draft Internal Shipments,EnvÃos internos en borrador,0
+model,"ir.action,name",create_shipment_out_return,Create Return Shipment,Crear envio de devolución,0
+model,"ir.action,name",act_shipment_out_return_form,Customer Return Shipments,Envios de devoluciones de cliente,0
+model,"ir.action,name",act_shipment_out_form,Customer Shipments,EnvÃos a cliente,0
+model,"ir.action,name",act_shipment_out_form2,Customer Shipments,EnvÃos de cliente,0
+model,"ir.action,name",act_shipment_out_form_ready,Customer Shipments Ready for Shipping,EnvÃos a cliente listos para ser enviados,0
+model,"ir.action,name",act_shipment_out_form_waiting,Customer Shipments Waiting Assignation,EnvÃos a cliente esperando asignación,0
+model,"ir.action,name",report_shipment_out_delivery_note,Delivery Note,Albarán de envÃo,0
+model,"ir.action,name",act_shipment_internal_draft_form,Draft Internal Shipments,EnvÃos internos en borrador,0
model,"ir.action,name",act_location_form,Edit Locations,Editar ubicaciones,0
-model,"ir.action,name",report_packing_internal,Internal Shipment,EnvÃo interno,0
-model,"ir.action,name",act_packing_internal_form,Internal Shipments,EnvÃos internos,0
-model,"ir.action,name",act_packing_internal_waiting_form,Internal Shipments Waiting Assignation,EnvÃos internos esperando asignación,0
+model,"ir.action,name",report_shipment_internal,Internal Shipment,EnvÃo interno,0
+model,"ir.action,name",act_shipment_internal_form,Internal Shipments,EnvÃos internos,0
+model,"ir.action,name",act_shipment_internal_waiting_form,Internal Shipments Waiting Assignation,EnvÃos internos esperando asignación,0
model,"ir.action,name",act_inventory_form,Inventories,Inventarios,0
model,"ir.action,name",act_location_tree,Locations,Ubicaciones,0
model,"ir.action,name",act_move_form,Moves,Movimientos,0
model,"ir.action,name",act_move_form_supp,Moves from Suppliers,Movimientos de proveedores,0
model,"ir.action,name",act_move_form_supp_proceed,Moves from Suppliers Waiting Arrival,Movimientos de proveedores en espera de llegada,0
model,"ir.action,name",act_move_form_cust,Moves to Customers,Movimientos hacia clientes,0
-model,"ir.action,name",act_packing_out_return_form2,New Customer Return Shipment,Nuevo envio de devolución de cliente,0
-model,"ir.action,name",act_packing_internal_new_form,New Internal Shipment,Nuevo envÃo interno,0
-model,"ir.action,name",act_packing_in_return_new_form,New Supplier Return Shipment,Nuevo envio de devolución a proveedor,0
-model,"ir.action,name",act_packing_in_form2,New Supplier Shipment,Nuevo envÃo de proveedor,0
-model,"ir.action,name",report_packing_out_picking_list,Picking List,Lista de recogida,0
+model,"ir.action,name",act_shipment_out_return_form2,New Customer Return Shipment,Nuevo envio de devolución de cliente,0
+model,"ir.action,name",act_shipment_internal_new_form,New Internal Shipment,Nuevo envÃo interno,0
+model,"ir.action,name",act_shipment_in_return_new_form,New Supplier Return Shipment,Nuevo envio de devolución a proveedor,0
+model,"ir.action,name",act_shipment_in_form2,New Supplier Shipment,Nuevo envÃo de proveedor,0
+model,"ir.action,name",report_shipment_out_picking_list,Picking List,Lista de selección,0
model,"ir.action,name",wizard_location_open,Product by Location,Producto por ubicación,0
model,"ir.action,name",wizard_product_open,Product Quantities,Cantidades de producto,0
model,"ir.action,name",act_product_by_location,Products by Locations,Productos por Ubicaciones,0
model,"ir.action,name",act_location_quantity_tree,Product Stock,Existencias de producto,0
-model,"ir.action,name",act_packing_in_form_received,Received Supplier packings,Paquetes recibidos de proveedores,0
-model,"ir.action,name",report_packing_in_restocking_list,Restocking List,Lista de renovación de inventario,0
-model,"ir.action,name",report_packing_out_return_restocking_list,Restocking List,Lista de renovación de inventario,0
-model,"ir.action,name",act_packing_in_return_form,Supplier Return Shipments,Envios de devolución a proveedor,0
-model,"ir.action,name",act_packing_in_form,Supplier Shipments,EnvÃos del proveedor,0
-model,"ir.action,name",act_packing_out_form3,Supplier Shipments,Envios a proveedor,0
-model,"ir.sequence,name",sequence_packing_out_return,Customer Return Shipment,Envio de devolución de cliente,0
-model,"ir.sequence,name",sequence_packing_out,Customer Shipment,EnvÃo a cliente,0
-model,"ir.sequence,name",sequence_packing_internal,Internal Shipment,EnvÃo interno,0
-model,"ir.sequence,name",sequence_packing_in_return,Supplier Return Shipment,Envio de devolución a proveedor,0
-model,"ir.sequence,name",sequence_packing_in,Supplier Shipment,EnvÃo de proveedor,0
-model,"ir.sequence.type,name",sequence_type_packing_out_return,Customer Return Shipment,Envio de devolución de cliente,0
-model,"ir.sequence.type,name",sequence_type_packing_out,Customer Shipment,EnvÃo a cliente,0
-model,"ir.sequence.type,name",sequence_type_packing_internal,Internal Shipment,EnvÃo interno,0
-model,"ir.sequence.type,name",sequence_type_packing_in_return,Supplier Return Shipment,Envio de devolución a proveedor,0
-model,"ir.sequence.type,name",sequence_type_packing_in,Supplier Shipment,EnvÃo de proveedor,0
-model,"ir.ui.menu,name",menu_packing_out_assigned,Assigned Customer Shipments,EnvÃos a clientes asignados,0
-model,"ir.ui.menu,name",menu_packing_internal_assigned_form,Assigned Internal Shipments,EnvÃos internos asignados,0
+model,"ir.action,name",act_shipment_in_form_received,Received Supplier shipments,Paquetes recibidos de proveedores,0
+model,"ir.action,name",report_shipment_in_restocking_list,Restocking List,Lista de renovación de inventario,0
+model,"ir.action,name",report_shipment_out_return_restocking_list,Restocking List,Lista de renovación de inventario,0
+model,"ir.action,name",act_shipment_in_return_form,Supplier Return Shipments,Envios de devolución a proveedor,0
+model,"ir.action,name",act_shipment_in_form,Supplier Shipments,EnvÃos del proveedor,0
+model,"ir.action,name",act_shipment_out_form3,Supplier Shipments,Envios a proveedor,0
+model,"ir.sequence,name",sequence_shipment_out_return,Customer Return Shipment,Envio de devolución de cliente,0
+model,"ir.sequence,name",sequence_shipment_out,Customer Shipment,EnvÃo a cliente,0
+model,"ir.sequence,name",sequence_shipment_internal,Internal Shipment,EnvÃo interno,0
+model,"ir.sequence,name",sequence_shipment_in_return,Supplier Return Shipment,Envio de devolución a proveedor,0
+model,"ir.sequence,name",sequence_shipment_in,Supplier Shipment,EnvÃo de proveedor,0
+model,"ir.sequence.type,name",sequence_type_shipment_out_return,Customer Return Shipment,Envio de devolución de cliente,0
+model,"ir.sequence.type,name",sequence_type_shipment_out,Customer Shipment,EnvÃo a cliente,0
+model,"ir.sequence.type,name",sequence_type_shipment_internal,Internal Shipment,EnvÃo interno,0
+model,"ir.sequence.type,name",sequence_type_shipment_in_return,Supplier Return Shipment,Envio de devolución a proveedor,0
+model,"ir.sequence.type,name",sequence_type_shipment_in,Supplier Shipment,EnvÃo de proveedor,0
+model,"ir.ui.menu,name",menu_shipment_out_assigned,Assigned Customer Shipments,EnvÃos a clientes asignados,0
+model,"ir.ui.menu,name",menu_shipment_internal_assigned_form,Assigned Internal Shipments,EnvÃos internos asignados,0
model,"ir.ui.menu,name",menu_configuration,Configuration,Configuración,0
-model,"ir.ui.menu,name",menu_packing_out_return_form,Customer Return Shipments,Envio de devolución de cliente,0
-model,"ir.ui.menu,name",menu_packing_out_form,Customer Shipments,EnvÃos al cliente,0
-model,"ir.ui.menu,name",menu_packing_out_ready,Customer Shipments Ready for Shipping,EnvÃos al cliente listos para su envio,0
-model,"ir.ui.menu,name",menu_packing_out_waiting,Customer Shipments Waiting Assignation,EnvÃos a cliente esperando asignación,0
-model,"ir.ui.menu,name",menu_packing_internal_draft_form,Draft Internal Shipments,EnvÃos Internos en borrador,0
+model,"ir.ui.menu,name",menu_shipment_out_return_form,Customer Return Shipments,Envio de devolución de cliente,0
+model,"ir.ui.menu,name",menu_shipment_out_form,Customer Shipments,EnvÃos al cliente,0
+model,"ir.ui.menu,name",menu_shipment_out_ready,Customer Shipments Ready for Shipping,EnvÃos al cliente listos para su envio,0
+model,"ir.ui.menu,name",menu_shipment_out_waiting,Customer Shipments Waiting Assignation,EnvÃos a cliente esperando asignación,0
+model,"ir.ui.menu,name",menu_shipment_internal_draft_form,Draft Internal Shipments,EnvÃos Internos en borrador,0
model,"ir.ui.menu,name",menu_location_form,Edit Locations,Editar ubicaciones,0
-model,"ir.ui.menu,name",menu_packing_internal_form,Internal Shipments,EnvÃos internos,0
-model,"ir.ui.menu,name",menu_packing_internal_waiting_form,Internal Shipments Waiting Assignation,EnvÃo internos esperando asignación,0
+model,"ir.ui.menu,name",menu_shipment_internal_form,Internal Shipments,EnvÃos internos,0
+model,"ir.ui.menu,name",menu_shipment_internal_waiting_form,Internal Shipments Waiting Assignation,EnvÃo internos esperando asignación,0
model,"ir.ui.menu,name",menu_inventory_form,Inventories,Inventarios,0
model,"ir.ui.menu,name",menu_stock,Inventory Management,Gestión de Inventarios,0
model,"ir.ui.menu,name",menu_location_tree,Locations,Ubicaciones,0
@@ -215,17 +214,17 @@ model,"ir.ui.menu,name",menu_move_form,Moves,Movimientos,0
model,"ir.ui.menu,name",menu_move_form_supp,Moves from Suppliers,Movimientos de proveedores,0
model,"ir.ui.menu,name",menu_move_form_supp_proceed,Moves from Suppliers Waiting Arrival,Movimientos de proveedores en espera de llegada,0
model,"ir.ui.menu,name",menu_move_form_cust,Moves to Customers,Movimientos hacia clientes,0
-model,"ir.ui.menu,name",menu_packing_out_return_form2,New Customer Return Shipment,Nuevo envio de devolución de cliente,0
-model,"ir.ui.menu,name",menu_packing_internal_new_form,New Internal Shipment,Nuevo envÃo interno,0
-model,"ir.ui.menu,name",menu_packing_in_return_new_form,New Supplier Return Shipment,Nuevo envio de devolución a proveedor,0
-model,"ir.ui.menu,name",menu_packing_in_form2,New Supplier Shipment,Nuevo envÃo de proveedor,0
-model,"ir.ui.menu,name",menu_packing_in_received,Received Supplier packings,Paquetes de proveedores recibidos,0
+model,"ir.ui.menu,name",menu_shipment_out_return_form2,New Customer Return Shipment,Nuevo envio de devolución de cliente,0
+model,"ir.ui.menu,name",menu_shipment_internal_new_form,New Internal Shipment,Nuevo envÃo interno,0
+model,"ir.ui.menu,name",menu_shipment_in_return_new_form,New Supplier Return Shipment,Nuevo envio de devolución a proveedor,0
+model,"ir.ui.menu,name",menu_shipment_in_form2,New Supplier Shipment,Nuevo envÃo de proveedor,0
+model,"ir.ui.menu,name",menu_shipment_in_received,Received Supplier shipments,Paquetes de proveedores recibidos,0
model,"ir.ui.menu,name",menu_reporting,Reporting,Informes,0
-model,"ir.ui.menu,name",menu_packing_in_return_form,Supplier Return Shipments,Envios de devolución a proveedor,0
-model,"ir.ui.menu,name",menu_packing_in_form,Supplier Shipments,EnvÃos del proveedor,0
+model,"ir.ui.menu,name",menu_shipment_in_return_form,Supplier Return Shipments,Envios de devolución a proveedor,0
+model,"ir.ui.menu,name",menu_shipment_in_form,Supplier Shipments,EnvÃos del proveedor,0
model,"res.group,name",group_stock,Stock,Existencias,0
model,"res.group,name",group_stock_admin,Stock Administration,Administración de existencias,0
-model,"stock.inventory.complete.init,name",0,Complete Inventory Init,Iniciar inventario completo,0
+model,"res.group,name",group_stock_force_assignment,Stock Force Assignment,Asignación forzada de existencias,0
model,"stock.inventory.line,name",0,Stock Inventory Line,LÃnea de existencia en Inventario ,0
model,"stock.inventory,name",0,Stock Inventory,Inventario de existencia,0
model,"stock.location,name",location_customer,Customer,Cliente,0
@@ -238,112 +237,112 @@ model,"stock.location,name",location_supplier,Supplier,Proveedor,0
model,"stock.location,name",location_warehouse,Warehouse,Almacén,0
model,"stock.location_stock_date.init,name",0,Compute stock quantities,Calcular cantidades de existencias,0
model,"stock.move,name",0,Stock Move,Movimiento de existencias,0
-model,"stock.packing.in,name",0,Supplier Shipment,EnvÃo de proveedor,0
-model,"stock.packing.in.return.assign.ask_force,name",0,Assign Supplier Return Shipment Ask Force,,0
-model,"stock.packing.in.return,name",0,Supplier Return Shipment,Envio de devolución a proveedor,0
-model,"stock.packing.internal.assign.ask_force,name",0,Assign Shipment Internal Ask Force,,0
-model,"stock.packing.internal,name",0,Internal Shipment,EnvÃo interno,0
-model,"stock.packing.out.assign.ask_force,name",0,Assign Shipment Out Ask Force,,0
-model,"stock.packing.out,name",0,Customer Shipment,EnvÃo a cliente,0
-model,"stock.packing.out.return,name",0,Customer Return Shipment,Envio de devolución de cliente,0
model,"stock.product_stock_date.init,name",0,Compute stock quantities,Calcular cantidades de existencias,0
-model,"workflow.activity,name",packingout_act_assigned,Assigned,Asignado,0
-model,"workflow.activity,name",packinginternal_act_assigned,Assigned,Asignado,0
-model,"workflow.activity,name",packing_in_return_act_assigned,Assigned,Asignado,0
-model,"workflow.activity,name",packingin_act_cancel,Canceled,Cancelado,0
-model,"workflow.activity,name",packingout_act_cancel,Canceled,Cancelado,0
-model,"workflow.activity,name",packinginternal_act_cancel,Canceled,Cancelado,0
-model,"workflow.activity,name",packing_out_return_act_cancel,Canceled,Cancelado,0
-model,"workflow.activity,name",packing_in_return_act_cancel,Canceled,Cancelado,0
+model,"stock.shipment.in,name",0,Supplier Shipment,EnvÃo de proveedor,0
+model,"stock.shipment.in.return.assign.ask_force,name",0,Assign Supplier Return Shipment Ask Force,Asignar envio interno de proveedor - Solicitud forzosa,0
+model,"stock.shipment.in.return,name",0,Supplier Return Shipment,Envio de devolución a proveedor,0
+model,"stock.shipment.internal.assign.ask_force,name",0,Assign Shipment Internal Ask Force,Asignar envio interno - Solicitud forzosa,0
+model,"stock.shipment.internal,name",0,Internal Shipment,EnvÃo interno,0
+model,"stock.shipment.out.assign.ask_force,name",0,Assign Shipment Out Ask Force,Asignar envio de salida - Solicitud forzosa,0
+model,"stock.shipment.out,name",0,Customer Shipment,EnvÃo a cliente,0
+model,"stock.shipment.out.return,name",0,Customer Return Shipment,Envio de devolución de cliente,0
+model,"workflow.activity,name",shipmentout_act_assigned,Assigned,Asignado,0
+model,"workflow.activity,name",shipmentinternal_act_assigned,Assigned,Asignado,0
+model,"workflow.activity,name",shipment_in_return_act_assigned,Assigned,Asignado,0
+model,"workflow.activity,name",shipmentin_act_cancel,Canceled,Cancelado,0
+model,"workflow.activity,name",shipmentout_act_cancel,Canceled,Cancelado,0
+model,"workflow.activity,name",shipmentinternal_act_cancel,Canceled,Cancelado,0
+model,"workflow.activity,name",shipment_out_return_act_cancel,Canceled,Cancelado,0
+model,"workflow.activity,name",shipment_in_return_act_cancel,Canceled,Cancelado,0
model,"workflow.activity,name",inventory_act_cancel,Canceled,Cancelado,0
-model,"workflow.activity,name",packingin_act_done,Done,Hecho,0
-model,"workflow.activity,name",packingout_act_done,Done,Hecho,0
-model,"workflow.activity,name",packinginternal_act_done,Done,Hecho,0
-model,"workflow.activity,name",packing_out_return_act_done,Done,Hecho,0
-model,"workflow.activity,name",packing_in_return_act_done,Done,Hecho,0
-model,"workflow.activity,name",inventory_act_done,Done,Hecho,0
-model,"workflow.activity,name",packingin_act_draft,Draft,Borrador,0
-model,"workflow.activity,name",packingout_act_draft,Draft,Borrador,0
-model,"workflow.activity,name",packinginternal_act_draft,Draft,Borrador,0
-model,"workflow.activity,name",packing_out_return_act_draft,Draft,Borrador,0
-model,"workflow.activity,name",packing_in_return_act_draft,Draft,Borrador,0
+model,"workflow.activity,name",shipmentin_act_done,Done,Terminado,0
+model,"workflow.activity,name",shipmentout_act_done,Done,Terminado,0
+model,"workflow.activity,name",shipmentinternal_act_done,Done,Terminado,0
+model,"workflow.activity,name",shipment_out_return_act_done,Done,Terminado,0
+model,"workflow.activity,name",shipment_in_return_act_done,Done,Terminado,0
+model,"workflow.activity,name",inventory_act_done,Done,Terminado,0
+model,"workflow.activity,name",shipmentin_act_draft,Draft,Borrador,0
+model,"workflow.activity,name",shipmentout_act_draft,Draft,Borrador,0
+model,"workflow.activity,name",shipmentinternal_act_draft,Draft,Borrador,0
+model,"workflow.activity,name",shipment_out_return_act_draft,Draft,Borrador,0
+model,"workflow.activity,name",shipment_in_return_act_draft,Draft,Borrador,0
model,"workflow.activity,name",inventory_act_draft,Draft,Borrador,0
-model,"workflow.activity,name",packingout_act_packed,Packed,Empaquetado,0
-model,"workflow.activity,name",packingin_act_received,Received,Recibido,0
-model,"workflow.activity,name",packing_out_return_act_received,Received,Recibido,0
-model,"workflow.activity,name",packingout_act_waiting,Waiting,En espera,0
-model,"workflow.activity,name",packinginternal_act_waiting,Waiting,En espera,0
-model,"workflow.activity,name",packing_in_return_act_waiting,Waiting,En espera,0
-model,"workflow,name",wkf_packing_out_return,Customer Return Shipment,Envio de devolución de Cliente,0
-model,"workflow,name",wkf_packingout,Customer Shipment,EnvÃo a cliente,0
-model,"workflow,name",wkf_packinginternal,Internal Shipment,EnvÃo interno,0
+model,"workflow.activity,name",shipmentout_act_packed,Packed,Empaquetado,0
+model,"workflow.activity,name",shipmentin_act_received,Received,Recibido,0
+model,"workflow.activity,name",shipment_out_return_act_received,Received,Recibido,0
+model,"workflow.activity,name",shipmentout_act_waiting,Waiting,En espera,0
+model,"workflow.activity,name",shipmentinternal_act_waiting,Waiting,En espera,0
+model,"workflow.activity,name",shipment_in_return_act_waiting,Waiting,En espera,0
+model,"workflow,name",wkf_shipment_out_return,Customer Return Shipment,Envio de devolución de Cliente,0
+model,"workflow,name",wkf_shipmentout,Customer Shipment,EnvÃo a cliente,0
+model,"workflow,name",wkf_shipmentinternal,Internal Shipment,EnvÃo interno,0
model,"workflow,name",wkf_inventory,Inventory,Inventario,0
-model,"workflow,name",wkf_packing_in_return,Supplier Return Shipment,Envio de devolución a proveedor,0
-model,"workflow,name",wkf_packingin,Supplier Shipment,EnvÃo de proveedor,0
-odt,stock.packing.in.restocking_list,0,/,/,0
-odt,stock.packing.in.restocking_list,0,Code:,Código:,0
-odt,stock.packing.in.restocking_list,0,E-Mail:,Correo electrónico:,0
-odt,stock.packing.in.restocking_list,0,From Location,Desde ubicación,0
-odt,stock.packing.in.restocking_list,0,Phone:,Teléfono:,0
-odt,stock.packing.in.restocking_list,0,Planned Date:,Fecha planeada:,0
-odt,stock.packing.in.restocking_list,0,Product,Producto,0
-odt,stock.packing.in.restocking_list,0,Quantity,Cantidad,0
-odt,stock.packing.in.restocking_list,0,Reference:,Referencia:,0
-odt,stock.packing.in.restocking_list,0,Restocking List,Lista de renovación de existencias,0
-odt,stock.packing.in.restocking_list,0,Supplier:,Proveedor:,0
-odt,stock.packing.in.restocking_list,0,To Location,A ubicación,0
-odt,stock.packing.in.restocking_list,0,Warehouse:,Almacén:,0
-odt,stock.packing.internal.report,0,/,/,0
-odt,stock.packing.internal.report,0,Code:,Código:,0
-odt,stock.packing.internal.report,0,E-Mail:,Correo electrónico:,0
-odt,stock.packing.internal.report,0,From Location,Desde ubicación,0
-odt,stock.packing.internal.report,0,From Location:,Desde ubicación:,0
-odt,stock.packing.internal.report,0,Internal Shipment,EnvÃo interno,0
-odt,stock.packing.internal.report,0,Phone:,Teléfono:,0
-odt,stock.packing.internal.report,0,Planned Date:,Fecha estimada:,0
-odt,stock.packing.internal.report,0,Product,Producto,0
-odt,stock.packing.internal.report,0,Quantity,Cantidad,0
-odt,stock.packing.internal.report,0,Reference:,Referencia:,0
-odt,stock.packing.internal.report,0,To Location,A ubicación,0
-odt,stock.packing.internal.report,0,To Location:,A ubicación:,0
-odt,stock.packing.out.delivery_note,0,/,/,0
-odt,stock.packing.out.delivery_note,0,Customer Code:,Código de cliente:,0
-odt,stock.packing.out.delivery_note,0,Date:,Fecha:,0
-odt,stock.packing.out.delivery_note,0,Delivery Note,Albarán de envio,0
-odt,stock.packing.out.delivery_note,0,E-Mail:,Correo electrónico:,0
-odt,stock.packing.out.delivery_note,0,Phone:,Teléfono:,0
-odt,stock.packing.out.delivery_note,0,Product,Producto,0
-odt,stock.packing.out.delivery_note,0,Quantity,Cantidad,0
-odt,stock.packing.out.delivery_note,0,Reference:,Referencia:,0
-odt,stock.packing.out.delivery_note,0,Shipment Number:,Número de envÃo:,0
-odt,stock.packing.out.picking_list,0,/,/,0
-odt,stock.packing.out.picking_list,0,Code:,Código:,0
-odt,stock.packing.out.picking_list,0,Customer:,Cliente:,0
-odt,stock.packing.out.picking_list,0,E-Mail:,Correo electrónico:,0
-odt,stock.packing.out.picking_list,0,From Location,Desde ubicación,0
-odt,stock.packing.out.picking_list,0,Phone:,Teléfono:,0
-odt,stock.packing.out.picking_list,0,Picking List,Lista de recogida,1
-odt,stock.packing.out.picking_list,0,Planned Date:,Fecha estimada:,0
-odt,stock.packing.out.picking_list,0,Product,Producto,0
-odt,stock.packing.out.picking_list,0,Quantity,Cantidad,0
-odt,stock.packing.out.picking_list,0,Reference:,Referencia:,0
-odt,stock.packing.out.picking_list,0,To Location,A ubicación,0
-odt,stock.packing.out.picking_list,0,Warehouse:,Almacén:,0
-odt,stock.packing.out.return.restocking_list,0,/,/,0
-odt,stock.packing.out.return.restocking_list,0,Code:,Código:,0
-odt,stock.packing.out.return.restocking_list,0,E-Mail:,Correo electrónico:,0
-odt,stock.packing.out.return.restocking_list,0,From Location,De ubicación,0
-odt,stock.packing.out.return.restocking_list,0,Phone:,Teléfono:,0
-odt,stock.packing.out.return.restocking_list,0,Planned Date:,Fecha estimada:,0
-odt,stock.packing.out.return.restocking_list,0,Product,Producto,0
-odt,stock.packing.out.return.restocking_list,0,Quantity,Cantidad,0
-odt,stock.packing.out.return.restocking_list,0,Reference:,Referencia:,0
-odt,stock.packing.out.return.restocking_list,0,Restocking List,Lista de renovación de existencias,0
-odt,stock.packing.out.return.restocking_list,0,Supplier:,Proveedor:,0
-odt,stock.packing.out.return.restocking_list,0,To Location,A ubicación,0
-odt,stock.packing.out.return.restocking_list,0,Warehouse:,Almacén:,0
+model,"workflow,name",wkf_shipment_in_return,Supplier Return Shipment,Envio de devolución a proveedor,0
+model,"workflow,name",wkf_shipmentin,Supplier Shipment,EnvÃo de proveedor,0
+odt,stock.shipment.in.restocking_list,0,/,/,0
+odt,stock.shipment.in.restocking_list,0,Code:,Código:,0
+odt,stock.shipment.in.restocking_list,0,E-Mail:,Correo electrónico:,0
+odt,stock.shipment.in.restocking_list,0,From Location,Desde ubicación,0
+odt,stock.shipment.in.restocking_list,0,Phone:,Teléfono:,0
+odt,stock.shipment.in.restocking_list,0,Planned Date:,Fecha planeada:,0
+odt,stock.shipment.in.restocking_list,0,Product,Producto,0
+odt,stock.shipment.in.restocking_list,0,Quantity,Cantidad,0
+odt,stock.shipment.in.restocking_list,0,Reference:,Referencia:,0
+odt,stock.shipment.in.restocking_list,0,Restocking List,Lista de renovación de existencias,0
+odt,stock.shipment.in.restocking_list,0,Supplier:,Proveedor:,0
+odt,stock.shipment.in.restocking_list,0,To Location,A ubicación,0
+odt,stock.shipment.in.restocking_list,0,Warehouse:,Almacén:,0
+odt,stock.shipment.internal.report,0,/,/,0
+odt,stock.shipment.internal.report,0,Code:,Código:,0
+odt,stock.shipment.internal.report,0,E-Mail:,Correo electrónico:,0
+odt,stock.shipment.internal.report,0,From Location,Desde ubicación,0
+odt,stock.shipment.internal.report,0,From Location:,Desde ubicación:,0
+odt,stock.shipment.internal.report,0,Internal Shipment,EnvÃo interno,0
+odt,stock.shipment.internal.report,0,Phone:,Teléfono:,0
+odt,stock.shipment.internal.report,0,Planned Date:,Fecha estimada:,0
+odt,stock.shipment.internal.report,0,Product,Producto,0
+odt,stock.shipment.internal.report,0,Quantity,Cantidad,0
+odt,stock.shipment.internal.report,0,Reference:,Referencia:,0
+odt,stock.shipment.internal.report,0,To Location,A ubicación,0
+odt,stock.shipment.internal.report,0,To Location:,A ubicación:,0
+odt,stock.shipment.out.delivery_note,0,/,/,0
+odt,stock.shipment.out.delivery_note,0,Customer Code:,Código de cliente:,0
+odt,stock.shipment.out.delivery_note,0,Date:,Fecha:,0
+odt,stock.shipment.out.delivery_note,0,Delivery Note,Albarán de envio,0
+odt,stock.shipment.out.delivery_note,0,E-Mail:,Correo electrónico:,0
+odt,stock.shipment.out.delivery_note,0,Phone:,Teléfono:,0
+odt,stock.shipment.out.delivery_note,0,Product,Producto,0
+odt,stock.shipment.out.delivery_note,0,Quantity,Cantidad,0
+odt,stock.shipment.out.delivery_note,0,Reference:,Referencia:,0
+odt,stock.shipment.out.delivery_note,0,Shipment Number:,Número de envÃo:,0
+odt,stock.shipment.out.picking_list,0,/,/,0
+odt,stock.shipment.out.picking_list,0,Code:,Código:,0
+odt,stock.shipment.out.picking_list,0,Customer:,Cliente:,0
+odt,stock.shipment.out.picking_list,0,E-Mail:,Correo electrónico:,0
+odt,stock.shipment.out.picking_list,0,From Location,Desde ubicación,0
+odt,stock.shipment.out.picking_list,0,Phone:,Teléfono:,0
+odt,stock.shipment.out.picking_list,0,Picking List,Lista de selección,0
+odt,stock.shipment.out.picking_list,0,Planned Date:,Fecha estimada:,0
+odt,stock.shipment.out.picking_list,0,Product,Producto,0
+odt,stock.shipment.out.picking_list,0,Quantity,Cantidad,0
+odt,stock.shipment.out.picking_list,0,Reference:,Referencia:,0
+odt,stock.shipment.out.picking_list,0,To Location,A ubicación,0
+odt,stock.shipment.out.picking_list,0,Warehouse:,Almacén:,0
+odt,stock.shipment.out.return.restocking_list,0,/,/,0
+odt,stock.shipment.out.return.restocking_list,0,Code:,Código:,0
+odt,stock.shipment.out.return.restocking_list,0,E-Mail:,Correo electrónico:,0
+odt,stock.shipment.out.return.restocking_list,0,From Location,De ubicación,0
+odt,stock.shipment.out.return.restocking_list,0,Phone:,Teléfono:,0
+odt,stock.shipment.out.return.restocking_list,0,Planned Date:,Fecha estimada:,0
+odt,stock.shipment.out.return.restocking_list,0,Product,Producto,0
+odt,stock.shipment.out.return.restocking_list,0,Quantity,Cantidad,0
+odt,stock.shipment.out.return.restocking_list,0,Reference:,Referencia:,0
+odt,stock.shipment.out.return.restocking_list,0,Restocking List,Lista de renovación de existencias,0
+odt,stock.shipment.out.return.restocking_list,0,Supplier:,Proveedor:,0
+odt,stock.shipment.out.return.restocking_list,0,To Location,A ubicación,0
+odt,stock.shipment.out.return.restocking_list,0,Warehouse:,Almacén:,0
selection,"stock.inventory,state",0,Canceled,Cancelado,0
-selection,"stock.inventory,state",0,Done,Hecho,0
+selection,"stock.inventory,state",0,Done,Terminado,0
selection,"stock.inventory,state",0,Draft,Borrador,0
selection,"stock.location,type",0,Customer,Cliente,0
selection,"stock.location,type",0,Lost and Found,Perdido y encontrado,0
@@ -354,32 +353,32 @@ selection,"stock.location,type",0,View,Vista,0
selection,"stock.location,type",0,Warehouse,Almacén,0
selection,"stock.move,state",0,Assigned,Asignado,0
selection,"stock.move,state",0,Canceled,Cancelado,0
-selection,"stock.move,state",0,Done,Hecho,0
+selection,"stock.move,state",0,Done,Terminado,0
selection,"stock.move,state",0,Draft,Borrador,0
-selection,"stock.packing.in.return,state",0,Assigned,Asignado,0
-selection,"stock.packing.in.return,state",0,Canceled,Cancelado,0
-selection,"stock.packing.in.return,state",0,Done,Hecho,0
-selection,"stock.packing.in.return,state",0,Draft,Borrador,0
-selection,"stock.packing.in.return,state",0,Waiting,En espera,0
-selection,"stock.packing.in,state",0,Canceled,Cancelado,0
-selection,"stock.packing.in,state",0,Done,Hecho,0
-selection,"stock.packing.in,state",0,Draft,Borrador,0
-selection,"stock.packing.in,state",0,Received,Recibido,0
-selection,"stock.packing.internal,state",0,Assigned,Asignado,0
-selection,"stock.packing.internal,state",0,Canceled,Cancelado,0
-selection,"stock.packing.internal,state",0,Done,Hecho,0
-selection,"stock.packing.internal,state",0,Draft,Borrador,0
-selection,"stock.packing.internal,state",0,Waiting,En espera,0
-selection,"stock.packing.out.return,state",0,Canceled,Cancelado,0
-selection,"stock.packing.out.return,state",0,Done,Hecho,0
-selection,"stock.packing.out.return,state",0,Draft,Borrador,0
-selection,"stock.packing.out.return,state",0,Received,Recibido,0
-selection,"stock.packing.out,state",0,Assigned,Asignado,0
-selection,"stock.packing.out,state",0,Canceled,Cancelado,0
-selection,"stock.packing.out,state",0,Done,Hecho,0
-selection,"stock.packing.out,state",0,Draft,Borrador,0
-selection,"stock.packing.out,state",0,Packed,Empaquetado,0
-selection,"stock.packing.out,state",0,Waiting,En espera,0
+selection,"stock.shipment.in.return,state",0,Assigned,Asignado,0
+selection,"stock.shipment.in.return,state",0,Canceled,Cancelado,0
+selection,"stock.shipment.in.return,state",0,Done,Terminado,0
+selection,"stock.shipment.in.return,state",0,Draft,Borrador,0
+selection,"stock.shipment.in.return,state",0,Waiting,En espera,0
+selection,"stock.shipment.in,state",0,Canceled,Cancelado,0
+selection,"stock.shipment.in,state",0,Done,Terminado,0
+selection,"stock.shipment.in,state",0,Draft,Borrador,0
+selection,"stock.shipment.in,state",0,Received,Recibido,0
+selection,"stock.shipment.internal,state",0,Assigned,Asignado,0
+selection,"stock.shipment.internal,state",0,Canceled,Cancelado,0
+selection,"stock.shipment.internal,state",0,Done,Terminado,0
+selection,"stock.shipment.internal,state",0,Draft,Borrador,0
+selection,"stock.shipment.internal,state",0,Waiting,En espera,0
+selection,"stock.shipment.out.return,state",0,Canceled,Cancelado,0
+selection,"stock.shipment.out.return,state",0,Done,Terminado,0
+selection,"stock.shipment.out.return,state",0,Draft,Borrador,0
+selection,"stock.shipment.out.return,state",0,Received,Recibido,0
+selection,"stock.shipment.out,state",0,Assigned,Asignado,0
+selection,"stock.shipment.out,state",0,Canceled,Cancelado,0
+selection,"stock.shipment.out,state",0,Done,Terminado,0
+selection,"stock.shipment.out,state",0,Draft,Borrador,0
+selection,"stock.shipment.out,state",0,Packed,Empaquetado,0
+selection,"stock.shipment.out,state",0,Waiting,En espera,0
view,party.party,0,Stock,Existencias,0
view,party.party,0,_Stock,_Existencias,0
view,product.product,0,Products,Productos,0
@@ -391,9 +390,6 @@ view,stock.inventory,0,Confirm,Confirmar,0
view,stock.inventory,0,Inventories,Inventarios,0
view,stock.inventory,0,Inventory,Inventario,0
view,stock.inventory,0,Re-Open,Reabrir,0
-view,stock.inventory.complete.init,0,Categories,CategorÃas,0
-view,stock.inventory.complete.init,0,Complete Inventory,Inventario completo,0
-view,stock.inventory.complete.init,0,Products,Productos,0
view,stock.inventory.line,0,Inventory Line,LÃnea de inventario,0
view,stock.inventory.line,0,Inventory Lines,LÃneas de inventario,0
view,stock.location,0,Location,Ubicación,0
@@ -403,86 +399,78 @@ view,stock.location_stock_date.init,0,Product Quantity.,Cantidad de producto.,0
view,stock.move,0,Cancel,Cancelar,0
view,stock.move,0,Move,Movimiento,0
view,stock.move,0,Moves,Movimientos,0
-view,stock.move,0,Set Done,Marcar como hecho,0
+view,stock.move,0,Set Done,Marcar como terminado,0
view,stock.move,0,Set Draft,Marcar como borrador,0
-view,stock.packing.in,0,Cancel,Cancelar,0
-view,stock.packing.in,0,Done,Hecho,0
-view,stock.packing.in,0,Draft,Borrador,0
-view,stock.packing.in,0,Incoming Moves,Movimientos de entrada,0
-view,stock.packing.in,0,Inventory Moves,Movimientos de inventario,0
-view,stock.packing.in,0,Moves,Movimientos,0
-view,stock.packing.in,0,Received,Recibido,0
-view,stock.packing.in,0,Reset to Draft,Restablecer a borrador,0
-view,stock.packing.in,0,Supplier Packing,Empaquetado del proveedor,0
-view,stock.packing.in,0,Supplier Packings,Empaquetados del proveedor,0
-view,stock.packing.in,0,Supplier Shipment,EnvÃo de proveedor,0
-view,stock.packing.in,0,Supplier Shipments,EnvÃos de proveedor,0
-view,stock.packing.in.return,0,Assign,Asignar,0
-view,stock.packing.in.return,0,Cancel,Cancelar,0
-view,stock.packing.in.return,0,Done,Hecho,0
-view,stock.packing.in.return,0,Draft,Borrador,0
-view,stock.packing.in.return,0,Reset to Draft,Restablecer a borrador,0
-view,stock.packing.in.return,0,Supplier Return Shipment,Envio de devolución a proveedor,0
-view,stock.packing.in.return,0,Supplier Return Shipments,Envios de devolución a proveedor,0
-view,stock.packing.in.return,0,Waiting,En espera,0
-view,stock.packing.in.return.assign.ask_force,0,Moves,Movimientos,0
-view,stock.packing.in.return.assign.ask_force,0,Unable to Assign,No es posible asignar,0
-view,stock.packing.in.return.assign.ask_force,0,Unable to assign those products:,No es posible asignar esos productos:,0
-view,stock.packing.internal,0,Assign,Asignar,0
-view,stock.packing.internal,0,Cancel,Cancelar,0
-view,stock.packing.internal,0,Done,Hecho,0
-view,stock.packing.internal,0,Draft,Borrador,0
-view,stock.packing.internal,0,Force Assign,Forzar asignación,0
-view,stock.packing.internal,0,Internal Packing,Empaquetado interno,0
-view,stock.packing.internal,0,Internal Packings,Empaquetados internos,0
-view,stock.packing.internal,0,Internal Shipment,EnvÃo interno,0
-view,stock.packing.internal,0,Internal Shipments,EnvÃos internos,0
-view,stock.packing.internal,0,Reset to Draft,Restablecer a borrador,0
-view,stock.packing.internal,0,Set Done,Marcar como hecho,0
-view,stock.packing.internal,0,Set Waiting,Colocar en espera,0
-view,stock.packing.internal,0,Waiting,En espera,0
-view,stock.packing.internal.assign.ask_force,0,Moves,Movimientos,0
-view,stock.packing.internal.assign.ask_force,0,Unable to Assign,No es posible asignar,0
-view,stock.packing.internal.assign.ask_force,0,Unable to assign those products:,No es posible asignar esos productos:,0
-view,stock.packing.out,0,Assign,Asignar,0
-view,stock.packing.out,0,Cancel,Cancelar,0
-view,stock.packing.out,0,Customer Packing,Empaquetado de cliente,0
-view,stock.packing.out,0,Customer Packings,Empaquetados de cliente,0
-view,stock.packing.out,0,Customer Shipment,EnvÃo a cliente,0
-view,stock.packing.out,0,Customer Shipments,EnvÃos a clientes,0
-view,stock.packing.out,0,Done,Hecho,0
-view,stock.packing.out,0,Draft,Borrador,0
-view,stock.packing.out,0,Force Assign,Forzar asignación,0
-view,stock.packing.out,0,Inventory Moves,Movimientos de inventario,0
-view,stock.packing.out,0,Make packing,Hacer empaquetado,0
-view,stock.packing.out,0,Outgoing Moves,Movimientos de salida,0
-view,stock.packing.out,0,Reset to Draft,Restablecer a borrador,0
-view,stock.packing.out,0,Set Done,Marcar como hecho,0
-view,stock.packing.out,0,Set Waiting,Colocar en espera,0
-view,stock.packing.out,0,Unpack,Desempaquetar,0
-view,stock.packing.out,0,Waiting,En espera,0
-view,stock.packing.out.assign.ask_force,0,Inventory Moves,Movimientos de inventario,0
-view,stock.packing.out.assign.ask_force,0,Unable to Assign,No es posible asignar,0
-view,stock.packing.out.assign.ask_force,0,Unable to assign those products:,No es posible asignar esos productos:,0
-view,stock.packing.out.return,0,Cancel,Cancelar,0
-view,stock.packing.out.return,0,Customer Return Shipment,Envio de devolución de cliente,0
-view,stock.packing.out.return,0,Customer Return Shipments,Envios de devolución de cliente,0
-view,stock.packing.out.return,0,Done,Hecho,0
-view,stock.packing.out.return,0,Incoming Moves,Movimientos de entrada,0
-view,stock.packing.out.return,0,Inventory Moves,Movimientos de inventario,0
-view,stock.packing.out.return,0,Moves,Movimientos,0
-view,stock.packing.out.return,0,Received,Recibido,0
-view,stock.packing.out.return,0,Reset to Draft,Restablecer a borrador,0
view,stock.product_stock_date.init,0,Product Quantity.,Cantidad de producto.,0
-wizard_button,"stock.inventory.complete,init,complete",0,Complete,Completo,0
-wizard_button,"stock.inventory.complete,init,end",0,Cancel,Cancelar,0
+view,stock.shipment.in,0,Cancel,Cancelar,0
+view,stock.shipment.in,0,Done,Terminado,0
+view,stock.shipment.in,0,Draft,Borrador,0
+view,stock.shipment.in,0,Incoming Moves,Movimientos de entrada,0
+view,stock.shipment.in,0,Inventory Moves,Movimientos de inventario,0
+view,stock.shipment.in,0,Moves,Movimientos,0
+view,stock.shipment.in,0,Received,Recibido,0
+view,stock.shipment.in,0,Reset to Draft,Restablecer a borrador,0
+view,stock.shipment.in,0,Supplier Shipment,EnvÃo de proveedor,0
+view,stock.shipment.in,0,Supplier Shipments,EnvÃos de proveedor,0
+view,stock.shipment.in.return,0,Assign,Asignar,0
+view,stock.shipment.in.return,0,Cancel,Cancelar,0
+view,stock.shipment.in.return,0,Done,Terminado,0
+view,stock.shipment.in.return,0,Draft,Borrador,0
+view,stock.shipment.in.return,0,Reset to Draft,Restablecer a borrador,0
+view,stock.shipment.in.return,0,Supplier Return Shipment,Envio de devolución a proveedor,0
+view,stock.shipment.in.return,0,Supplier Return Shipments,Envios de devolución a proveedor,0
+view,stock.shipment.in.return,0,Waiting,En espera,0
+view,stock.shipment.in.return.assign.ask_force,0,Moves,Movimientos,0
+view,stock.shipment.in.return.assign.ask_force,0,Unable to Assign,No es posible asignar,0
+view,stock.shipment.in.return.assign.ask_force,0,Unable to assign those products:,No es posible asignar esos productos:,0
+view,stock.shipment.internal,0,Assign,Asignar,0
+view,stock.shipment.internal,0,Cancel,Cancelar,0
+view,stock.shipment.internal,0,Done,Terminado,0
+view,stock.shipment.internal,0,Draft,Borrador,0
+view,stock.shipment.internal,0,Force Assign,Forzar asignación,0
+view,stock.shipment.internal,0,Internal Shipment,EnvÃo interno,0
+view,stock.shipment.internal,0,Internal Shipments,EnvÃos internos,0
+view,stock.shipment.internal,0,Reset to Draft,Restablecer a borrador,0
+view,stock.shipment.internal,0,Set Done,Marcar como terminado,0
+view,stock.shipment.internal,0,Set Waiting,Colocar en espera,0
+view,stock.shipment.internal,0,Waiting,En espera,0
+view,stock.shipment.internal.assign.ask_force,0,Moves,Movimientos,0
+view,stock.shipment.internal.assign.ask_force,0,Unable to Assign,No es posible asignar,0
+view,stock.shipment.internal.assign.ask_force,0,Unable to assign those products:,No es posible asignar esos productos:,0
+view,stock.shipment.out,0,Assign,Asignar,0
+view,stock.shipment.out,0,Cancel,Cancelar,0
+view,stock.shipment.out,0,Customer Shipment,EnvÃo a cliente,0
+view,stock.shipment.out,0,Customer Shipments,EnvÃos a clientes,0
+view,stock.shipment.out,0,Done,Terminado,0
+view,stock.shipment.out,0,Draft,Borrador,0
+view,stock.shipment.out,0,Force Assign,Forzar asignación,0
+view,stock.shipment.out,0,Inventory Moves,Movimientos de inventario,0
+view,stock.shipment.out,0,Make shipment,Hacer empaquetado,0
+view,stock.shipment.out,0,Outgoing Moves,Movimientos de salida,0
+view,stock.shipment.out,0,Reset to Draft,Restablecer a borrador,0
+view,stock.shipment.out,0,Set Done,Marcar como terminado,0
+view,stock.shipment.out,0,Set Waiting,Colocar en espera,0
+view,stock.shipment.out,0,Unpack,Desempaquetar,0
+view,stock.shipment.out,0,Waiting,En espera,0
+view,stock.shipment.out.assign.ask_force,0,Inventory Moves,Movimientos de inventario,0
+view,stock.shipment.out.assign.ask_force,0,Unable to Assign,No es posible asignar,0
+view,stock.shipment.out.assign.ask_force,0,Unable to assign those products:,No es posible asignar esos productos:,0
+view,stock.shipment.out.return,0,Cancel,Cancelar,0
+view,stock.shipment.out.return,0,Customer Return Shipment,Envio de devolución de cliente,0
+view,stock.shipment.out.return,0,Customer Return Shipments,Envios de devolución de cliente,0
+view,stock.shipment.out.return,0,Done,Terminado,0
+view,stock.shipment.out.return,0,Incoming Moves,Movimientos de entrada,0
+view,stock.shipment.out.return,0,Inventory Moves,Movimientos de inventario,0
+view,stock.shipment.out.return,0,Moves,Movimientos,0
+view,stock.shipment.out.return,0,Received,Recibido,0
+view,stock.shipment.out.return,0,Reset to Draft,Restablecer a borrador,0
wizard_button,"stock.location.open,init,end",0,Cancel,Cancelar,0
wizard_button,"stock.location.open,init,open",0,Open,Abrir,0
-wizard_button,"stock.packing.in.return.assign,ask_force,end",0,Ok,Aceptar,0
-wizard_button,"stock.packing.in.return.assign,ask_force,force",0,Force Assign,Forzar asignación,0
-wizard_button,"stock.packing.internal.assign,ask_force,end",0,Ok,Aceptar,0
-wizard_button,"stock.packing.internal.assign,ask_force,force",0,Force Assign,Forzar asignación,0
-wizard_button,"stock.packing.out.assign,ask_force,end",0,Ok,Aceptar,0
-wizard_button,"stock.packing.out.assign,ask_force,force",0,Force Assign,Forzar asignación,0
wizard_button,"stock.product.open,init,end",0,Cancel,Cancelar,0
wizard_button,"stock.product.open,init,open",0,Open,Abrir,0
+wizard_button,"stock.shipment.in.return.assign,ask_force,end",0,Ok,Aceptar,0
+wizard_button,"stock.shipment.in.return.assign,ask_force,force",0,Force Assign,Forzar asignación,0
+wizard_button,"stock.shipment.internal.assign,ask_force,end",0,Ok,Aceptar,0
+wizard_button,"stock.shipment.internal.assign,ask_force,force",0,Force Assign,Forzar asignación,0
+wizard_button,"stock.shipment.out.assign,ask_force,end",0,Ok,Aceptar,0
+wizard_button,"stock.shipment.out.assign,ask_force,force",0,Force Assign,Forzar asignación,0
diff --git a/fr_FR.csv b/fr_FR.csv
index 9422a15..89c2c9c 100644
--- a/fr_FR.csv
+++ b/fr_FR.csv
@@ -1,7 +1,9 @@
type,name,res_id,src,value,fuzzy
+error,product.template,0,You cannot change the default uom for a product which is associated to stock moves.,Vous ne pouvez pas changer l'UDM par défaut pour un produit qui a déjà fait l'objet de mouvements de stock,0
error,stock.inventory.line,0,Line quantity must be positive!,Les quantités sur les lignes doivent être positives!,0
error,stock.inventory.line,0,Product must be unique by inventory!,Chaque produit ne peut apparaître qu'une seule fois par inventaire,0
error,stock.location,0,A location with existing moves cannot be changed to a type that does not support moves.,Un emplacement avec des mouvements ne peut pas être changé en un type qui ne supporte pas les mouvements.,0
+error,stock.location,0,"Location ""%s"" must be a child of warehouse ""%s""!","L'emplacement ""%s"" doit être un sous-emplacement de l'entrepôt ""%s"" !",0
error,stock.location,0,You can not create recursive locations!,Vous ne pouvez pas créer des emplacements récursifs !,0
error,stock.move,0,Move can be on only one Shipment,Un mouvement ne peut être que sur une seule expédition,0
error,stock.move,0,Move quantity must be positive,La quantité sur le mouvement doit être positive.,0
@@ -11,12 +13,12 @@ error,stock.move,0,You can not set state to done!,Vous ne pouvez pas mettre l'é
error,stock.move,0,You can not set state to draft!,Vous ne pouvez pas mettre l'état à brouillon !,0
error,stock.move,0,You can not use service products for a move!,Vous ne pouvez pas utiliser un produit de type service sur un mouvement !,0
error,stock.move,0,You can only delete draft or cancelled moves!,Vous pouvez supprimer que des mouvements qui sont annulés ou a l'état de brouillon !,0
-error,stock.packing.in,0,Incoming Moves must have the warehouse input location as destination location!,Les mouvements d'entrée doivent avoir l'emplacement d'entrée de l'entrepôt comme destination !,0
-error,stock.packing.in,0,Inventory Moves must have the warehouse input location as source location!,Les mouvements d'inventaire doivent avoir l'emplacement d'entrée de l'entrepôt comme source !,0
-error,stock.packing.out.return,0,Incoming Moves must have the warehouse input location as destination location!,Les mouvements d'entrée doivent avoir l'emplacement d'entrée de l'entrepôt comme destination !,0
-error,stock.packing.out.return,0,Inventory Moves must have the warehouse input location as source location!,Les mouvements d'inventaire doivent avoir l'emplacement d'entrée de l'entrepôt comme source!,0
-error,stock.packing.out.return.create,0,The packing with code %s is not yet sent.,L'emballage avec le code %s n'est pas encore envoyé.,0
-error,stock.packing.out.return.create,0,You can not create return packing,Vous ne pouvez pas créer d'expédition retour,0
+error,stock.shipment.in,0,Incoming Moves must have the warehouse input location as destination location!,Les mouvements d'entrée doivent avoir l'emplacement d'entrée de l'entrepôt comme destination !,0
+error,stock.shipment.in,0,Inventory Moves must have the warehouse input location as source location!,Les mouvements d'inventaire doivent avoir l'emplacement d'entrée de l'entrepôt comme source !,0
+error,stock.shipment.out.return,0,Incoming Moves must have the warehouse input location as destination location!,Les mouvements d'entrée doivent avoir l'emplacement d'entrée de l'entrepôt comme destination !,0
+error,stock.shipment.out.return,0,Inventory Moves must have the warehouse input location as source location!,Les mouvements d'inventaire doivent avoir l'emplacement d'entrée de l'entrepôt comme source!,0
+error,stock.shipment.out.return.create,0,The shipment with code %s is not yet sent.,L'emballage avec le code %s n'est pas encore envoyé.,0
+error,stock.shipment.out.return.create,0,You can not create return shipment,Vous ne pouvez pas créer d'expédition retour,0
field,"party.address,delivery",0,Delivery,Livraison,0
field,"party.party,customer_location",0,Customer Location,Emplacement client,0
field,"party.party,supplier_location",0,Supplier Location,Emplacement fournisseur,0
@@ -25,8 +27,6 @@ field,"product.product,quantity",0,Quantity,Quantité,0
field,"product.template,forecast_quantity",0,Forecast Quantity,Quantité prévue,0
field,"product.template,quantity",0,Quantity,Quantité,0
field,"stock.inventory,company",0,Company,Société,0
-field,"stock.inventory.complete.init,categories",0,Categories,Catégories,0
-field,"stock.inventory.complete.init,products",0,Products,Produits,0
field,"stock.inventory,date",0,Date,Date,0
field,"stock.inventory.line,expected_quantity",0,Expected Quantity,Quantité attendue,0
field,"stock.inventory.line,inventory",0,Inventory,Inventaire,0
@@ -62,79 +62,79 @@ field,"stock.move,cost_price",0,Cost Price,Prix de revient,0
field,"stock.move,currency",0,Currency,Devise,0
field,"stock.move,effective_date",0,Effective Date,Date effective,0
field,"stock.move,from_location",0,From Location,Emplacement d'origine,0
-field,"stock.move,packing_in",0,Supplier Shipment,Expédition fournisseur,0
-field,"stock.move,packing_in_return",0,Supplier Return Shipment,Expédition de retour fournisseur,0
-field,"stock.move,packing_internal",0,Internal Shipment,Expédition interne,0
-field,"stock.move,packing_out",0,Customer Shipment,Expédition client,0
-field,"stock.move,packing_out_return",0,Customer Return Shipment,Retour d'expédition client,0
field,"stock.move,planned_date",0,Planned Date,Date planifiée,0
field,"stock.move,product",0,Product,Produit,0
field,"stock.move,quantity",0,Quantity,Quantité,0
field,"stock.move,rec_name",0,Name,Nom,0
+field,"stock.move,shipment_in",0,Supplier Shipment,Expédition fournisseur,0
+field,"stock.move,shipment_in_return",0,Supplier Return Shipment,Expédition de retour fournisseur,0
+field,"stock.move,shipment_internal",0,Internal Shipment,Expédition interne,0
+field,"stock.move,shipment_out",0,Customer Shipment,Expédition client,0
+field,"stock.move,shipment_out_return",0,Customer Return Shipment,Retour d'expédition client,0
field,"stock.move,state",0,State,Etat,0
field,"stock.move,to_location",0,To Location,Emplacement de destination,0
field,"stock.move,unit_digits",0,Unit Digits,Décimales de l'unité,0
field,"stock.move,unit_price",0,Unit Price,Prix unitaire,0
field,"stock.move,unit_price_required",0,Unit Price Required,Prix unitaire requis,0
field,"stock.move,uom",0,Uom,UDM,0
-field,"stock.packing.in,code",0,Code,Code,0
-field,"stock.packing.in,contact_address",0,Contact Address,Adresse de contact,0
-field,"stock.packing.in,effective_date",0,Effective Date,Date effective,0
-field,"stock.packing.in,incoming_moves",0,Incoming Moves,Mouvements entrants,0
-field,"stock.packing.in,inventory_moves",0,Inventory Moves,Mouvement internes,0
-field,"stock.packing.in,moves",0,Moves,Mouvements,0
-field,"stock.packing.in,planned_date",0,Planned Date,Date planifiée,0
-field,"stock.packing.in,rec_name",0,Name,Nom,0
-field,"stock.packing.in,reference",0,Reference,Référence,0
-field,"stock.packing.in.return.assign.ask_force,moves",0,Moves,Mouvements,0
-field,"stock.packing.in.return,code",0,Code,Code,0
-field,"stock.packing.in.return,effective_date",0,Effective Date,Date effective,0
-field,"stock.packing.in.return,from_location",0,From Location,Emplacement d'origine,0
-field,"stock.packing.in.return,moves",0,Moves,Mouvements,0
-field,"stock.packing.in.return,planned_date",0,Planned Date,Date planifiée,0
-field,"stock.packing.in.return,rec_name",0,Name,Nom,0
-field,"stock.packing.in.return,reference",0,Reference,Référence,0
-field,"stock.packing.in.return,state",0,State,Ãtat,0
-field,"stock.packing.in.return,to_location",0,To Location,Emplacement de destination,0
-field,"stock.packing.in,state",0,State,Ãtat,0
-field,"stock.packing.in,supplier",0,Supplier,Fournisseur,0
-field,"stock.packing.internal.assign.ask_force,moves",0,Moves,Mouvements,0
-field,"stock.packing.internal,code",0,Code,Code,0
-field,"stock.packing.internal,effective_date",0,Effective Date,Date effective,0
-field,"stock.packing.internal,from_location",0,From Location,Emplacement d'origine,0
-field,"stock.packing.internal,moves",0,Moves,Mouvements,0
-field,"stock.packing.internal,planned_date",0,Planned Date,Date planifiée,0
-field,"stock.packing.internal,rec_name",0,Name,Nom,0
-field,"stock.packing.internal,reference",0,Reference,Référence,0
-field,"stock.packing.internal,state",0,State,Ãtat,0
-field,"stock.packing.internal,to_location",0,To Location,Emplacement de destination,0
-field,"stock.packing.in,warehouse",0,Warehouse,Entrepôt,0
-field,"stock.packing.out.assign.ask_force,inventory_moves",0,Inventory Moves,Mouvements internes,0
-field,"stock.packing.out,code",0,Code,Code,0
-field,"stock.packing.out,customer",0,Customer,Client,0
-field,"stock.packing.out,delivery_address",0,Delivery Address,Adresse de livraison,0
-field,"stock.packing.out,effective_date",0,Effective Date,Date effective,0
-field,"stock.packing.out,inventory_moves",0,Inventory Moves,Mouvements internes,0
-field,"stock.packing.out,moves",0,Moves,Mouvements,0
-field,"stock.packing.out,outgoing_moves",0,Outgoing Moves,Mouvements de sortie,0
-field,"stock.packing.out,planned_date",0,Planned Date,Date planifiée,0
-field,"stock.packing.out,rec_name",0,Name,Nom,0
-field,"stock.packing.out,reference",0,Reference,Référence,0
-field,"stock.packing.out.return,code",0,Code,Code,0
-field,"stock.packing.out.return,customer",0,Customer,Client,0
-field,"stock.packing.out.return,delivery_address",0,Delivery Address,Adresse de livraison,0
-field,"stock.packing.out.return,effective_date",0,Effective Date,Date effective,0
-field,"stock.packing.out.return,incoming_moves",0,Incoming Moves,Mouvements entrants,0
-field,"stock.packing.out.return,inventory_moves",0,Inventory Moves,Mouvements internes,0
-field,"stock.packing.out.return,moves",0,Moves,Mouvements,0
-field,"stock.packing.out.return,planned_date",0,Planned Date,Date planifiée,0
-field,"stock.packing.out.return,rec_name",0,Name,Nom,0
-field,"stock.packing.out.return,reference",0,Reference,Référence,0
-field,"stock.packing.out.return,state",0,State,Ãtat,0
-field,"stock.packing.out.return,warehouse",0,Warehouse,Entrepôt,0
-field,"stock.packing.out,state",0,State,Ãtat,0
-field,"stock.packing.out,warehouse",0,Warehouse,Entrepôt,0
field,"stock.product_stock_date.init,forecast_date",0,At Date,Ã la date,0
+field,"stock.shipment.in,code",0,Code,Code,0
+field,"stock.shipment.in,contact_address",0,Contact Address,Adresse de contact,0
+field,"stock.shipment.in,effective_date",0,Effective Date,Date effective,0
+field,"stock.shipment.in,incoming_moves",0,Incoming Moves,Mouvements entrants,0
+field,"stock.shipment.in,inventory_moves",0,Inventory Moves,Mouvement internes,0
+field,"stock.shipment.in,moves",0,Moves,Mouvements,0
+field,"stock.shipment.in,planned_date",0,Planned Date,Date planifiée,0
+field,"stock.shipment.in,rec_name",0,Name,Nom,0
+field,"stock.shipment.in,reference",0,Reference,Référence,0
+field,"stock.shipment.in.return.assign.ask_force,moves",0,Moves,Mouvements,0
+field,"stock.shipment.in.return,code",0,Code,Code,0
+field,"stock.shipment.in.return,effective_date",0,Effective Date,Date effective,0
+field,"stock.shipment.in.return,from_location",0,From Location,Emplacement d'origine,0
+field,"stock.shipment.in.return,moves",0,Moves,Mouvements,0
+field,"stock.shipment.in.return,planned_date",0,Planned Date,Date planifiée,0
+field,"stock.shipment.in.return,rec_name",0,Name,Nom,0
+field,"stock.shipment.in.return,reference",0,Reference,Référence,0
+field,"stock.shipment.in.return,state",0,State,Ãtat,0
+field,"stock.shipment.in.return,to_location",0,To Location,Emplacement de destination,0
+field,"stock.shipment.in,state",0,State,Ãtat,0
+field,"stock.shipment.in,supplier",0,Supplier,Fournisseur,0
+field,"stock.shipment.internal.assign.ask_force,moves",0,Moves,Mouvements,0
+field,"stock.shipment.internal,code",0,Code,Code,0
+field,"stock.shipment.internal,effective_date",0,Effective Date,Date effective,0
+field,"stock.shipment.internal,from_location",0,From Location,Emplacement d'origine,0
+field,"stock.shipment.internal,moves",0,Moves,Mouvements,0
+field,"stock.shipment.internal,planned_date",0,Planned Date,Date planifiée,0
+field,"stock.shipment.internal,rec_name",0,Name,Nom,0
+field,"stock.shipment.internal,reference",0,Reference,Référence,0
+field,"stock.shipment.internal,state",0,State,Ãtat,0
+field,"stock.shipment.internal,to_location",0,To Location,Emplacement de destination,0
+field,"stock.shipment.in,warehouse",0,Warehouse,Entrepôt,0
+field,"stock.shipment.out.assign.ask_force,inventory_moves",0,Inventory Moves,Mouvements internes,0
+field,"stock.shipment.out,code",0,Code,Code,0
+field,"stock.shipment.out,customer",0,Customer,Client,0
+field,"stock.shipment.out,delivery_address",0,Delivery Address,Adresse de livraison,0
+field,"stock.shipment.out,effective_date",0,Effective Date,Date effective,0
+field,"stock.shipment.out,inventory_moves",0,Inventory Moves,Mouvements internes,0
+field,"stock.shipment.out,moves",0,Moves,Mouvements,0
+field,"stock.shipment.out,outgoing_moves",0,Outgoing Moves,Mouvements de sortie,0
+field,"stock.shipment.out,planned_date",0,Planned Date,Date planifiée,0
+field,"stock.shipment.out,rec_name",0,Name,Nom,0
+field,"stock.shipment.out,reference",0,Reference,Référence,0
+field,"stock.shipment.out.return,code",0,Code,Code,0
+field,"stock.shipment.out.return,customer",0,Customer,Client,0
+field,"stock.shipment.out.return,delivery_address",0,Delivery Address,Adresse de livraison,0
+field,"stock.shipment.out.return,effective_date",0,Effective Date,Date effective,0
+field,"stock.shipment.out.return,incoming_moves",0,Incoming Moves,Mouvements entrants,0
+field,"stock.shipment.out.return,inventory_moves",0,Inventory Moves,Mouvements internes,0
+field,"stock.shipment.out.return,moves",0,Moves,Mouvements,0
+field,"stock.shipment.out.return,planned_date",0,Planned Date,Date planifiée,0
+field,"stock.shipment.out.return,rec_name",0,Name,Nom,0
+field,"stock.shipment.out.return,reference",0,Reference,Référence,0
+field,"stock.shipment.out.return,state",0,State,Ãtat,0
+field,"stock.shipment.out.return,warehouse",0,Warehouse,Entrepôt,0
+field,"stock.shipment.out,state",0,State,Ãtat,0
+field,"stock.shipment.out,warehouse",0,Warehouse,Entrepôt,0
help,"party.party,customer_location",0,The default destination location when sending products to the party.,L'emplacement de destination par défaut quand des produits sont envoyés vers ce tiers.,0
help,"party.party,supplier_location",0,The default source location when receiving products from the party.,L'emplacement d'origine par défaut quand des produits sont reçus depuis ce tiers.,0
help,"stock.location_stock_date.init,forecast_date",0,"Allow to compute expected stock quantities for this date.
@@ -147,66 +147,66 @@ help,"stock.product_stock_date.init,forecast_date",0,"Allow to compute expected
* A date in the past will provide historical values.","Permet de calculer les quantités en stock attendues pour cette date.
* Une valeur vide correspond à une date infinie dans le futur.
* Une date dans le passé retournera des données historiques.",0
-model,"ir.action,name",act_packing_out_form_assigned,Assigned Customer Shipments,Expéditions client assignées,0
-model,"ir.action,name",act_packing_internal_assigned_form,Assigned Internal Shipments,Expédition internes assignées,0
-model,"ir.action,name",wizard_packing_in_return_assign,Assign Purchase Return Shipment,Assigner le retour d'expédition fournisseur,0
-model,"ir.action,name",wizard_packing_internal_assign,Assign Shipment Internal,Assigner l'expédition interne,0
-model,"ir.action,name",wizard_packing_out_assign,Assign Shipment Out,Assigner l'expédition de sortie,0
+model,"ir.action,name",act_shipment_out_form_assigned,Assigned Customer Shipments,Expéditions client assignées,0
+model,"ir.action,name",act_shipment_internal_assigned_form,Assigned Internal Shipments,Expédition internes assignées,0
+model,"ir.action,name",wizard_shipment_in_return_assign,Assign Purchase Return Shipment,Assigner le retour d'expédition fournisseur,0
+model,"ir.action,name",wizard_shipment_internal_assign,Assign Shipment Internal,Assigner l'expédition interne,0
+model,"ir.action,name",wizard_shipment_out_assign,Assign Shipment Out,Assigner l'expédition de sortie,0
model,"ir.action,name",wizard_complete_inventory,Complete Inventory,Compléter l'inventaire,0
-model,"ir.action,name",create_packing_out_return,Create Return Shipment,Créer l'expédition de retour,0
-model,"ir.action,name",act_packing_out_return_form,Customer Return Shipments,Retour d'expéditions client,0
-model,"ir.action,name",act_packing_out_form,Customer Shipments,Expéditions client,0
-model,"ir.action,name",act_packing_out_form2,Customer Shipments,Expéditions client,0
-model,"ir.action,name",act_packing_out_form_ready,Customer Shipments Ready for Shipping,Expéditions client prêtes à livrer,0
-model,"ir.action,name",act_packing_out_form_waiting,Customer Shipments Waiting Assignation,Expéditions client en attente d'assignation,0
-model,"ir.action,name",report_packing_out_delivery_note,Delivery Note,Bon de livraison,0
-model,"ir.action,name",act_packing_internal_draft_form,Draft Internal Shipments,Expéditions internes brouillon,0
+model,"ir.action,name",create_shipment_out_return,Create Return Shipment,Créer l'expédition de retour,0
+model,"ir.action,name",act_shipment_out_return_form,Customer Return Shipments,Retour d'expéditions client,0
+model,"ir.action,name",act_shipment_out_form,Customer Shipments,Expéditions client,0
+model,"ir.action,name",act_shipment_out_form2,Customer Shipments,Expéditions client,0
+model,"ir.action,name",act_shipment_out_form_ready,Customer Shipments Ready for Shipping,Expéditions client prêtes à livrer,0
+model,"ir.action,name",act_shipment_out_form_waiting,Customer Shipments Waiting Assignation,Expéditions client en attente d'assignation,0
+model,"ir.action,name",report_shipment_out_delivery_note,Delivery Note,Bon de livraison,0
+model,"ir.action,name",act_shipment_internal_draft_form,Draft Internal Shipments,Expéditions internes brouillon,0
model,"ir.action,name",act_location_form,Edit Locations,Ãditer les emplacements,0
-model,"ir.action,name",report_packing_internal,Internal Shipment,Expédition interne,0
-model,"ir.action,name",act_packing_internal_form,Internal Shipments,Expédition interne,0
-model,"ir.action,name",act_packing_internal_waiting_form,Internal Shipments Waiting Assignation,Expéditions internes en attente d'assignation,0
+model,"ir.action,name",report_shipment_internal,Internal Shipment,Expédition interne,0
+model,"ir.action,name",act_shipment_internal_form,Internal Shipments,Expédition interne,0
+model,"ir.action,name",act_shipment_internal_waiting_form,Internal Shipments Waiting Assignation,Expéditions internes en attente d'assignation,0
model,"ir.action,name",act_inventory_form,Inventories,Inventaires,0
model,"ir.action,name",act_location_tree,Locations,Emplacements,0
model,"ir.action,name",act_move_form,Moves,Mouvements,0
model,"ir.action,name",act_move_form_supp,Moves from Suppliers,Mouvements fournisseurs,0
model,"ir.action,name",act_move_form_supp_proceed,Moves from Suppliers Waiting Arrival,Mouvement fournisseur en attente de réception,0
model,"ir.action,name",act_move_form_cust,Moves to Customers,Mouvements clients,0
-model,"ir.action,name",act_packing_out_return_form2,New Customer Return Shipment,Nouveau retour d'expédition client,0
-model,"ir.action,name",act_packing_internal_new_form,New Internal Shipment,Nouvelle expédition Interne,0
-model,"ir.action,name",act_packing_in_return_new_form,New Supplier Return Shipment,Nouveau retour d'expédition fournisseur,0
-model,"ir.action,name",act_packing_in_form2,New Supplier Shipment,Nouvelle expédition fournisseur,0
-model,"ir.action,name",report_packing_out_picking_list,Picking List,Liste de prélèvement,0
+model,"ir.action,name",act_shipment_out_return_form2,New Customer Return Shipment,Nouveau retour d'expédition client,0
+model,"ir.action,name",act_shipment_internal_new_form,New Internal Shipment,Nouvelle expédition Interne,0
+model,"ir.action,name",act_shipment_in_return_new_form,New Supplier Return Shipment,Nouveau retour d'expédition fournisseur,0
+model,"ir.action,name",act_shipment_in_form2,New Supplier Shipment,Nouvelle expédition fournisseur,0
+model,"ir.action,name",report_shipment_out_picking_list,Picking List,Liste de prélèvement,0
model,"ir.action,name",wizard_location_open,Product by Location,Produits par emplacement,0
model,"ir.action,name",wizard_product_open,Product Quantities,Quantités de produit,0
model,"ir.action,name",act_product_by_location,Products by Locations,Produits par emplacements,0
model,"ir.action,name",act_location_quantity_tree,Product Stock,Quantités en stock,0
-model,"ir.action,name",act_packing_in_form_received,Received Supplier packings,Expéditions fournisseur reçues,0
-model,"ir.action,name",report_packing_in_restocking_list,Restocking List,Liste de restockage,0
-model,"ir.action,name",report_packing_out_return_restocking_list,Restocking List,Liste de restockage,0
-model,"ir.action,name",act_packing_in_return_form,Supplier Return Shipments,Retour d'expéditions fournisseur,0
-model,"ir.action,name",act_packing_in_form,Supplier Shipments,Expéditions fournisseur,0
-model,"ir.action,name",act_packing_out_form3,Supplier Shipments,Expéditions fournisseur,0
-model,"ir.sequence,name",sequence_packing_out_return,Customer Return Shipment,Retour d'expédition client,0
-model,"ir.sequence,name",sequence_packing_out,Customer Shipment,Expédition client,0
-model,"ir.sequence,name",sequence_packing_internal,Internal Shipment,Expédition Interne,0
-model,"ir.sequence,name",sequence_packing_in_return,Supplier Return Shipment,Retour d'expédition fournisseur,0
-model,"ir.sequence,name",sequence_packing_in,Supplier Shipment,Expédition fournisseur,0
-model,"ir.sequence.type,name",sequence_type_packing_out_return,Customer Return Shipment,Retour d'expédition client,0
-model,"ir.sequence.type,name",sequence_type_packing_out,Customer Shipment,Expédition client,0
-model,"ir.sequence.type,name",sequence_type_packing_internal,Internal Shipment,Expédition interne,0
-model,"ir.sequence.type,name",sequence_type_packing_in_return,Supplier Return Shipment,Retour d'expédition fournisseur,0
-model,"ir.sequence.type,name",sequence_type_packing_in,Supplier Shipment,Expédition fournisseur,0
-model,"ir.ui.menu,name",menu_packing_out_assigned,Assigned Customer Shipments,Expéditions client assignées,0
-model,"ir.ui.menu,name",menu_packing_internal_assigned_form,Assigned Internal Shipments,Expéditions internes assignées,0
+model,"ir.action,name",act_shipment_in_form_received,Received Supplier shipments,Expéditions fournisseur reçues,0
+model,"ir.action,name",report_shipment_in_restocking_list,Restocking List,Liste de restockage,0
+model,"ir.action,name",report_shipment_out_return_restocking_list,Restocking List,Liste de restockage,0
+model,"ir.action,name",act_shipment_in_return_form,Supplier Return Shipments,Retour d'expéditions fournisseur,0
+model,"ir.action,name",act_shipment_in_form,Supplier Shipments,Expéditions fournisseur,0
+model,"ir.action,name",act_shipment_out_form3,Supplier Shipments,Expéditions fournisseur,0
+model,"ir.sequence,name",sequence_shipment_out_return,Customer Return Shipment,Retour d'expédition client,0
+model,"ir.sequence,name",sequence_shipment_out,Customer Shipment,Expédition client,0
+model,"ir.sequence,name",sequence_shipment_internal,Internal Shipment,Expédition Interne,0
+model,"ir.sequence,name",sequence_shipment_in_return,Supplier Return Shipment,Retour d'expédition fournisseur,0
+model,"ir.sequence,name",sequence_shipment_in,Supplier Shipment,Expédition fournisseur,0
+model,"ir.sequence.type,name",sequence_type_shipment_out_return,Customer Return Shipment,Retour d'expédition client,0
+model,"ir.sequence.type,name",sequence_type_shipment_out,Customer Shipment,Expédition client,0
+model,"ir.sequence.type,name",sequence_type_shipment_internal,Internal Shipment,Expédition interne,0
+model,"ir.sequence.type,name",sequence_type_shipment_in_return,Supplier Return Shipment,Retour d'expédition fournisseur,0
+model,"ir.sequence.type,name",sequence_type_shipment_in,Supplier Shipment,Expédition fournisseur,0
+model,"ir.ui.menu,name",menu_shipment_out_assigned,Assigned Customer Shipments,Expéditions client assignées,0
+model,"ir.ui.menu,name",menu_shipment_internal_assigned_form,Assigned Internal Shipments,Expéditions internes assignées,0
model,"ir.ui.menu,name",menu_configuration,Configuration,Configuration,0
-model,"ir.ui.menu,name",menu_packing_out_return_form,Customer Return Shipments,Retour d'expédition client,0
-model,"ir.ui.menu,name",menu_packing_out_form,Customer Shipments,Expéditions client,0
-model,"ir.ui.menu,name",menu_packing_out_ready,Customer Shipments Ready for Shipping,Expéditions client prêtes pour la livraison,0
-model,"ir.ui.menu,name",menu_packing_out_waiting,Customer Shipments Waiting Assignation,Expéditions client en attente d'assignation,0
-model,"ir.ui.menu,name",menu_packing_internal_draft_form,Draft Internal Shipments,Expéditions internes brouillons,0
+model,"ir.ui.menu,name",menu_shipment_out_return_form,Customer Return Shipments,Retour d'expédition client,0
+model,"ir.ui.menu,name",menu_shipment_out_form,Customer Shipments,Expéditions client,0
+model,"ir.ui.menu,name",menu_shipment_out_ready,Customer Shipments Ready for Shipping,Expéditions client prêtes pour la livraison,0
+model,"ir.ui.menu,name",menu_shipment_out_waiting,Customer Shipments Waiting Assignation,Expéditions client en attente d'assignation,0
+model,"ir.ui.menu,name",menu_shipment_internal_draft_form,Draft Internal Shipments,Expéditions internes brouillons,0
model,"ir.ui.menu,name",menu_location_form,Edit Locations,Ãditer les emplacements,0
-model,"ir.ui.menu,name",menu_packing_internal_form,Internal Shipments,Expéditions internes,0
-model,"ir.ui.menu,name",menu_packing_internal_waiting_form,Internal Shipments Waiting Assignation,Expéditions internes en attente d'assignation,0
+model,"ir.ui.menu,name",menu_shipment_internal_form,Internal Shipments,Expéditions internes,0
+model,"ir.ui.menu,name",menu_shipment_internal_waiting_form,Internal Shipments Waiting Assignation,Expéditions internes en attente d'assignation,0
model,"ir.ui.menu,name",menu_inventory_form,Inventories,Inventaires,0
model,"ir.ui.menu,name",menu_stock,Inventory Management,Gestion des stocks,0
model,"ir.ui.menu,name",menu_location_tree,Locations,Emplacements,0
@@ -214,17 +214,17 @@ model,"ir.ui.menu,name",menu_move_form,Moves,Mouvements,0
model,"ir.ui.menu,name",menu_move_form_supp,Moves from Suppliers,Mouvements fournisseurs,0
model,"ir.ui.menu,name",menu_move_form_supp_proceed,Moves from Suppliers Waiting Arrival,Mouvements fournisseur en attente de réception,0
model,"ir.ui.menu,name",menu_move_form_cust,Moves to Customers,Mouvements clients,0
-model,"ir.ui.menu,name",menu_packing_out_return_form2,New Customer Return Shipment,Nouveau retour d'expédition client,0
-model,"ir.ui.menu,name",menu_packing_internal_new_form,New Internal Shipment,Nouvelle expédition Interne,0
-model,"ir.ui.menu,name",menu_packing_in_return_new_form,New Supplier Return Shipment,Nouveau retour d'expédition fournisseur,0
-model,"ir.ui.menu,name",menu_packing_in_form2,New Supplier Shipment,Nouvelle expédition fournisseur,0
-model,"ir.ui.menu,name",menu_packing_in_received,Received Supplier packings,Expéditions fournisseur reçues,0
+model,"ir.ui.menu,name",menu_shipment_out_return_form2,New Customer Return Shipment,Nouveau retour d'expédition client,0
+model,"ir.ui.menu,name",menu_shipment_internal_new_form,New Internal Shipment,Nouvelle expédition Interne,0
+model,"ir.ui.menu,name",menu_shipment_in_return_new_form,New Supplier Return Shipment,Nouveau retour d'expédition fournisseur,0
+model,"ir.ui.menu,name",menu_shipment_in_form2,New Supplier Shipment,Nouvelle expédition fournisseur,0
+model,"ir.ui.menu,name",menu_shipment_in_received,Received Supplier shipments,Expéditions fournisseur reçues,0
model,"ir.ui.menu,name",menu_reporting,Reporting,Rapports,0
-model,"ir.ui.menu,name",menu_packing_in_return_form,Supplier Return Shipments,Retour d'expédition fournisseur,0
-model,"ir.ui.menu,name",menu_packing_in_form,Supplier Shipments,Expéditions fournisseur,0
+model,"ir.ui.menu,name",menu_shipment_in_return_form,Supplier Return Shipments,Retour d'expédition fournisseur,0
+model,"ir.ui.menu,name",menu_shipment_in_form,Supplier Shipments,Expéditions fournisseur,0
model,"res.group,name",group_stock,Stock,Stock,0
model,"res.group,name",group_stock_admin,Stock Administration,Administration des stocks,0
-model,"stock.inventory.complete.init,name",0,Complete Inventory Init,Compléter l'inventaire - Init,0
+model,"res.group,name",group_stock_force_assignment,Stock Force Assignment,Stock forcer assignation,0
model,"stock.inventory.line,name",0,Stock Inventory Line,Ligne d'inventaire de stock,0
model,"stock.inventory,name",0,Stock Inventory,Inventaire du stock,0
model,"stock.location,name",location_customer,Customer,Client,0
@@ -237,105 +237,110 @@ model,"stock.location,name",location_supplier,Supplier,Fournisseur,0
model,"stock.location,name",location_warehouse,Warehouse,Entrepôt,0
model,"stock.location_stock_date.init,name",0,Compute stock quantities,Quantité de stock calculées,0
model,"stock.move,name",0,Stock Move,Mouvement de stock,0
-model,"stock.packing.in,name",0,Supplier Shipment,Expédition fournisseur,0
-model,"stock.packing.in.return.assign.ask_force,name",0,Assign Supplier Return Shipment Ask Force,Assigner le retour d'expédition fournisseur - Demande forcée,0
-model,"stock.packing.in.return,name",0,Supplier Return Shipment,Retour d'expédition fournisseur,0
-model,"stock.packing.internal.assign.ask_force,name",0,Assign Shipment Internal Ask Force,Assigner l'expédition interne - Demande forcée,0
-model,"stock.packing.internal,name",0,Internal Shipment,Expédition interne,0
-model,"stock.packing.out.assign.ask_force,name",0,Assign Shipment Out Ask Force,Assigner l'expédition de sortie - Demande forcée,0
-model,"stock.packing.out,name",0,Customer Shipment,Expédition Client,0
-model,"stock.packing.out.return,name",0,Customer Return Shipment,Retour d'expédition client,0
model,"stock.product_stock_date.init,name",0,Compute stock quantities,Quantités de stock calculées,0
-model,"workflow.activity,name",packingout_act_assigned,Assigned,Assigné,0
-model,"workflow.activity,name",packinginternal_act_assigned,Assigned,Assigné,0
-model,"workflow.activity,name",packing_in_return_act_assigned,Assigned,Assigné,0
-model,"workflow.activity,name",packingin_act_cancel,Canceled,Annulé,0
-model,"workflow.activity,name",packingout_act_cancel,Canceled,Annulé,0
-model,"workflow.activity,name",packinginternal_act_cancel,Canceled,Annulé,0
-model,"workflow.activity,name",packing_out_return_act_cancel,Canceled,Annuler,0
-model,"workflow.activity,name",packing_in_return_act_cancel,Canceled,Annuler,0
+model,"stock.shipment.in,name",0,Supplier Shipment,Expédition fournisseur,0
+model,"stock.shipment.in.return.assign.ask_force,name",0,Assign Supplier Return Shipment Ask Force,Assigner le retour d'expédition fournisseur - Demande forcée,0
+model,"stock.shipment.in.return,name",0,Supplier Return Shipment,Retour d'expédition fournisseur,0
+model,"stock.shipment.internal.assign.ask_force,name",0,Assign Shipment Internal Ask Force,Assigner l'expédition interne - Demande forcée,0
+model,"stock.shipment.internal,name",0,Internal Shipment,Expédition interne,0
+model,"stock.shipment.out.assign.ask_force,name",0,Assign Shipment Out Ask Force,Assigner l'expédition de sortie - Demande forcée,0
+model,"stock.shipment.out,name",0,Customer Shipment,Expédition Client,0
+model,"stock.shipment.out.return,name",0,Customer Return Shipment,Retour d'expédition client,0
+model,"workflow.activity,name",shipmentout_act_assigned,Assigned,Assigné,0
+model,"workflow.activity,name",shipmentinternal_act_assigned,Assigned,Assigné,0
+model,"workflow.activity,name",shipment_in_return_act_assigned,Assigned,Assigné,0
+model,"workflow.activity,name",shipmentin_act_cancel,Canceled,Annulé,0
+model,"workflow.activity,name",shipmentout_act_cancel,Canceled,Annulé,0
+model,"workflow.activity,name",shipmentinternal_act_cancel,Canceled,Annulé,0
+model,"workflow.activity,name",shipment_out_return_act_cancel,Canceled,Annuler,0
+model,"workflow.activity,name",shipment_in_return_act_cancel,Canceled,Annuler,0
model,"workflow.activity,name",inventory_act_cancel,Canceled,Annulé,0
-model,"workflow.activity,name",packingin_act_done,Done,Fait,0
-model,"workflow.activity,name",packingout_act_done,Done,Fait,0
-model,"workflow.activity,name",packinginternal_act_done,Done,Fait,0
-model,"workflow.activity,name",packing_out_return_act_done,Done,Fait,0
-model,"workflow.activity,name",packing_in_return_act_done,Done,Fait,0
+model,"workflow.activity,name",shipmentin_act_done,Done,Fait,0
+model,"workflow.activity,name",shipmentout_act_done,Done,Fait,0
+model,"workflow.activity,name",shipmentinternal_act_done,Done,Fait,0
+model,"workflow.activity,name",shipment_out_return_act_done,Done,Fait,0
+model,"workflow.activity,name",shipment_in_return_act_done,Done,Fait,0
model,"workflow.activity,name",inventory_act_done,Done,Fait,0
-model,"workflow.activity,name",packingin_act_draft,Draft,Brouillon,0
-model,"workflow.activity,name",packingout_act_draft,Draft,Brouillon,0
-model,"workflow.activity,name",packinginternal_act_draft,Draft,Brouillon,0
-model,"workflow.activity,name",packing_out_return_act_draft,Draft,Brouillon,0
-model,"workflow.activity,name",packing_in_return_act_draft,Draft,Brouillon,0
+model,"workflow.activity,name",shipmentin_act_draft,Draft,Brouillon,0
+model,"workflow.activity,name",shipmentout_act_draft,Draft,Brouillon,0
+model,"workflow.activity,name",shipmentinternal_act_draft,Draft,Brouillon,0
+model,"workflow.activity,name",shipment_out_return_act_draft,Draft,Brouillon,0
+model,"workflow.activity,name",shipment_in_return_act_draft,Draft,Brouillon,0
model,"workflow.activity,name",inventory_act_draft,Draft,Brouillon,0
-model,"workflow.activity,name",packingout_act_packed,Packed,Emballé,0
-model,"workflow.activity,name",packingin_act_received,Received,Reçu,0
-model,"workflow.activity,name",packing_out_return_act_received,Received,Reçu,0
-model,"workflow.activity,name",packingout_act_waiting,Waiting,En attente,0
-model,"workflow.activity,name",packinginternal_act_waiting,Waiting,En attente,0
-model,"workflow.activity,name",packing_in_return_act_waiting,Waiting,En attente,0
-model,"workflow,name",wkf_packing_out_return,Customer Return Shipment,Retour d'expédition client,0
-model,"workflow,name",wkf_packingout,Customer Shipment,Expédition client,0
-model,"workflow,name",wkf_packinginternal,Internal Shipment,Expédition interne,0
+model,"workflow.activity,name",shipmentout_act_packed,Packed,Emballé,0
+model,"workflow.activity,name",shipmentin_act_received,Received,Reçu,0
+model,"workflow.activity,name",shipment_out_return_act_received,Received,Reçu,0
+model,"workflow.activity,name",shipmentout_act_waiting,Waiting,En attente,0
+model,"workflow.activity,name",shipmentinternal_act_waiting,Waiting,En attente,0
+model,"workflow.activity,name",shipment_in_return_act_waiting,Waiting,En attente,0
+model,"workflow,name",wkf_shipment_out_return,Customer Return Shipment,Retour d'expédition client,0
+model,"workflow,name",wkf_shipmentout,Customer Shipment,Expédition client,0
+model,"workflow,name",wkf_shipmentinternal,Internal Shipment,Expédition interne,0
model,"workflow,name",wkf_inventory,Inventory,Inventaire,0
-model,"workflow,name",wkf_packing_in_return,Supplier Return Shipment,Retour d'expédition fournisseur,0
-model,"workflow,name",wkf_packingin,Supplier Shipment,Expédition fournisseur,0
-odt,stock.packing.in.restocking_list,0,Code:,Code :,0
-odt,stock.packing.in.restocking_list,0,E-Mail:,E-Mail :,0
-odt,stock.packing.in.restocking_list,0,From Location,Emplacement d'origine,0
-odt,stock.packing.in.restocking_list,0,Phone:,Téléphone :,0
-odt,stock.packing.in.restocking_list,0,Planned Date:,Date planifiée :,0
-odt,stock.packing.in.restocking_list,0,Product,Produit,0
-odt,stock.packing.in.restocking_list,0,Quantity,Quantité,0
-odt,stock.packing.in.restocking_list,0,Reference:,Référence :,0
-odt,stock.packing.in.restocking_list,0,Restocking List,Liste de restockage,0
-odt,stock.packing.in.restocking_list,0,Supplier:,Fournisseur :,0
-odt,stock.packing.in.restocking_list,0,To Location,Emplacement de destination,0
-odt,stock.packing.in.restocking_list,0,Warehouse:,Entrepôt :,0
-odt,stock.packing.internal.report,0,Code:,Code :,0
-odt,stock.packing.internal.report,0,E-Mail:,E-Mail :,0
-odt,stock.packing.internal.report,0,From Location,Emplacement d'origine,0
-odt,stock.packing.internal.report,0,From Location:,Emplacement d'origine :,0
-odt,stock.packing.internal.report,0,Internal Shipment,Expédition interne,0
-odt,stock.packing.internal.report,0,Phone:,Téléphone :,0
-odt,stock.packing.internal.report,0,Planned Date:,Date planifiée :,0
-odt,stock.packing.internal.report,0,Product,Produit,0
-odt,stock.packing.internal.report,0,Quantity,Quantité,0
-odt,stock.packing.internal.report,0,Reference:,Référence :,0
-odt,stock.packing.internal.report,0,To Location,Emplacement de destination,0
-odt,stock.packing.internal.report,0,To Location:,Emplacement de destination :,0
-odt,stock.packing.out.delivery_note,0,Customer Code:,Code client :,0
-odt,stock.packing.out.delivery_note,0,Date:,Date :,0
-odt,stock.packing.out.delivery_note,0,Delivery Note,Bon de livraison,0
-odt,stock.packing.out.delivery_note,0,E-Mail:,E-Mail :,0
-odt,stock.packing.out.delivery_note,0,Phone:,Téléphone :,0
-odt,stock.packing.out.delivery_note,0,Product,Produit,0
-odt,stock.packing.out.delivery_note,0,Quantity,Quantité,0
-odt,stock.packing.out.delivery_note,0,Reference:,Référence :,0
-odt,stock.packing.out.delivery_note,0,Shipment Number:,Numéro d'expédition :,0
-odt,stock.packing.out.picking_list,0,Code:,Code :,0
-odt,stock.packing.out.picking_list,0,Customer:,Client :,0
-odt,stock.packing.out.picking_list,0,E-Mail:,E-Mail:,0
-odt,stock.packing.out.picking_list,0,From Location,Emplacement d'origine,0
-odt,stock.packing.out.picking_list,0,Phone:,Téléphone :,0
-odt,stock.packing.out.picking_list,0,Picking List,Liste de prélèvement,0
-odt,stock.packing.out.picking_list,0,Planned Date:,Date planifiée :,0
-odt,stock.packing.out.picking_list,0,Product,Produit,0
-odt,stock.packing.out.picking_list,0,Quantity,Quantité,0
-odt,stock.packing.out.picking_list,0,Reference:,Référence :,0
-odt,stock.packing.out.picking_list,0,To Location,Emplacement de destination,0
-odt,stock.packing.out.picking_list,0,Warehouse:,Entrepôt :,0
-odt,stock.packing.out.return.restocking_list,0,Code:,Code :,0
-odt,stock.packing.out.return.restocking_list,0,E-Mail:,E-Mail :,0
-odt,stock.packing.out.return.restocking_list,0,From Location,Emplacement d'origine,0
-odt,stock.packing.out.return.restocking_list,0,Phone:,Téléphone :,0
-odt,stock.packing.out.return.restocking_list,0,Planned Date:,Date planifiée :,0
-odt,stock.packing.out.return.restocking_list,0,Product,Produit,0
-odt,stock.packing.out.return.restocking_list,0,Quantity,Quantité,0
-odt,stock.packing.out.return.restocking_list,0,Reference:,Référence :,0
-odt,stock.packing.out.return.restocking_list,0,Restocking List,Liste de restockage,0
-odt,stock.packing.out.return.restocking_list,0,Supplier:,Fournisseur :,0
-odt,stock.packing.out.return.restocking_list,0,To Location,Emplacement de destination,0
-odt,stock.packing.out.return.restocking_list,0,Warehouse:,Entrepôt :,0
+model,"workflow,name",wkf_shipment_in_return,Supplier Return Shipment,Retour d'expédition fournisseur,0
+model,"workflow,name",wkf_shipmentin,Supplier Shipment,Expédition fournisseur,0
+odt,stock.shipment.in.restocking_list,0,/,/,0
+odt,stock.shipment.in.restocking_list,0,Code:,Code :,0
+odt,stock.shipment.in.restocking_list,0,E-Mail:,E-Mail :,0
+odt,stock.shipment.in.restocking_list,0,From Location,Emplacement d'origine,0
+odt,stock.shipment.in.restocking_list,0,Phone:,Téléphone :,0
+odt,stock.shipment.in.restocking_list,0,Planned Date:,Date planifiée :,0
+odt,stock.shipment.in.restocking_list,0,Product,Produit,0
+odt,stock.shipment.in.restocking_list,0,Quantity,Quantité,0
+odt,stock.shipment.in.restocking_list,0,Reference:,Référence :,0
+odt,stock.shipment.in.restocking_list,0,Restocking List,Liste de restockage,0
+odt,stock.shipment.in.restocking_list,0,Supplier:,Fournisseur :,0
+odt,stock.shipment.in.restocking_list,0,To Location,Emplacement de destination,0
+odt,stock.shipment.in.restocking_list,0,Warehouse:,Entrepôt :,0
+odt,stock.shipment.internal.report,0,/,/,0
+odt,stock.shipment.internal.report,0,Code:,Code :,0
+odt,stock.shipment.internal.report,0,E-Mail:,E-Mail :,0
+odt,stock.shipment.internal.report,0,From Location,Emplacement d'origine,0
+odt,stock.shipment.internal.report,0,From Location:,Emplacement d'origine :,0
+odt,stock.shipment.internal.report,0,Internal Shipment,Expédition interne,0
+odt,stock.shipment.internal.report,0,Phone:,Téléphone :,0
+odt,stock.shipment.internal.report,0,Planned Date:,Date planifiée :,0
+odt,stock.shipment.internal.report,0,Product,Produit,0
+odt,stock.shipment.internal.report,0,Quantity,Quantité,0
+odt,stock.shipment.internal.report,0,Reference:,Référence :,0
+odt,stock.shipment.internal.report,0,To Location,Emplacement de destination,0
+odt,stock.shipment.internal.report,0,To Location:,Emplacement de destination :,0
+odt,stock.shipment.out.delivery_note,0,/,/,0
+odt,stock.shipment.out.delivery_note,0,Customer Code:,Code client :,0
+odt,stock.shipment.out.delivery_note,0,Date:,Date :,0
+odt,stock.shipment.out.delivery_note,0,Delivery Note,Bon de livraison,0
+odt,stock.shipment.out.delivery_note,0,E-Mail:,E-Mail :,0
+odt,stock.shipment.out.delivery_note,0,Phone:,Téléphone :,0
+odt,stock.shipment.out.delivery_note,0,Product,Produit,0
+odt,stock.shipment.out.delivery_note,0,Quantity,Quantité,0
+odt,stock.shipment.out.delivery_note,0,Reference:,Référence :,0
+odt,stock.shipment.out.delivery_note,0,Shipment Number:,Numéro d'expédition :,0
+odt,stock.shipment.out.picking_list,0,/,/,0
+odt,stock.shipment.out.picking_list,0,Code:,Code :,0
+odt,stock.shipment.out.picking_list,0,Customer:,Client :,0
+odt,stock.shipment.out.picking_list,0,E-Mail:,E-Mail:,0
+odt,stock.shipment.out.picking_list,0,From Location,Emplacement d'origine,0
+odt,stock.shipment.out.picking_list,0,Phone:,Téléphone :,0
+odt,stock.shipment.out.picking_list,0,Picking List,Liste de prélèvement,0
+odt,stock.shipment.out.picking_list,0,Planned Date:,Date planifiée :,0
+odt,stock.shipment.out.picking_list,0,Product,Produit,0
+odt,stock.shipment.out.picking_list,0,Quantity,Quantité,0
+odt,stock.shipment.out.picking_list,0,Reference:,Référence :,0
+odt,stock.shipment.out.picking_list,0,To Location,Emplacement de destination,0
+odt,stock.shipment.out.picking_list,0,Warehouse:,Entrepôt :,0
+odt,stock.shipment.out.return.restocking_list,0,/,/,0
+odt,stock.shipment.out.return.restocking_list,0,Code:,Code :,0
+odt,stock.shipment.out.return.restocking_list,0,E-Mail:,E-Mail :,0
+odt,stock.shipment.out.return.restocking_list,0,From Location,Emplacement d'origine,0
+odt,stock.shipment.out.return.restocking_list,0,Phone:,Téléphone :,0
+odt,stock.shipment.out.return.restocking_list,0,Planned Date:,Date planifiée :,0
+odt,stock.shipment.out.return.restocking_list,0,Product,Produit,0
+odt,stock.shipment.out.return.restocking_list,0,Quantity,Quantité,0
+odt,stock.shipment.out.return.restocking_list,0,Reference:,Référence :,0
+odt,stock.shipment.out.return.restocking_list,0,Restocking List,Liste de restockage,0
+odt,stock.shipment.out.return.restocking_list,0,Supplier:,Fournisseur :,0
+odt,stock.shipment.out.return.restocking_list,0,To Location,Emplacement de destination,0
+odt,stock.shipment.out.return.restocking_list,0,Warehouse:,Entrepôt :,0
selection,"stock.inventory,state",0,Canceled,Annulé,0
selection,"stock.inventory,state",0,Done,Fait,0
selection,"stock.inventory,state",0,Draft,Brouillon,0
@@ -350,30 +355,30 @@ selection,"stock.move,state",0,Assigned,Assigné,0
selection,"stock.move,state",0,Canceled,Annulé,0
selection,"stock.move,state",0,Done,Fait,0
selection,"stock.move,state",0,Draft,Brouillon,0
-selection,"stock.packing.in.return,state",0,Assigned,Assigné,0
-selection,"stock.packing.in.return,state",0,Canceled,Annuler,0
-selection,"stock.packing.in.return,state",0,Done,Fait,0
-selection,"stock.packing.in.return,state",0,Draft,Brouillon,0
-selection,"stock.packing.in.return,state",0,Waiting,En attente,0
-selection,"stock.packing.in,state",0,Canceled,Annulé,0
-selection,"stock.packing.in,state",0,Done,Fait,0
-selection,"stock.packing.in,state",0,Draft,Brouillon,0
-selection,"stock.packing.in,state",0,Received,Reçu,0
-selection,"stock.packing.internal,state",0,Assigned,Assigné,0
-selection,"stock.packing.internal,state",0,Canceled,Annulé,0
-selection,"stock.packing.internal,state",0,Done,Fait,0
-selection,"stock.packing.internal,state",0,Draft,Brouillon,0
-selection,"stock.packing.internal,state",0,Waiting,En attente,0
-selection,"stock.packing.out.return,state",0,Canceled,Annulé,0
-selection,"stock.packing.out.return,state",0,Done,Fait,0
-selection,"stock.packing.out.return,state",0,Draft,Brouillon,0
-selection,"stock.packing.out.return,state",0,Received,Reçu,0
-selection,"stock.packing.out,state",0,Assigned,Assigné,0
-selection,"stock.packing.out,state",0,Canceled,Annulé,0
-selection,"stock.packing.out,state",0,Done,Fait,0
-selection,"stock.packing.out,state",0,Draft,Brouillon,0
-selection,"stock.packing.out,state",0,Packed,Emballé,0
-selection,"stock.packing.out,state",0,Waiting,En attente,0
+selection,"stock.shipment.in.return,state",0,Assigned,Assigné,0
+selection,"stock.shipment.in.return,state",0,Canceled,Annuler,0
+selection,"stock.shipment.in.return,state",0,Done,Fait,0
+selection,"stock.shipment.in.return,state",0,Draft,Brouillon,0
+selection,"stock.shipment.in.return,state",0,Waiting,En attente,0
+selection,"stock.shipment.in,state",0,Canceled,Annulé,0
+selection,"stock.shipment.in,state",0,Done,Fait,0
+selection,"stock.shipment.in,state",0,Draft,Brouillon,0
+selection,"stock.shipment.in,state",0,Received,Reçu,0
+selection,"stock.shipment.internal,state",0,Assigned,Assigné,0
+selection,"stock.shipment.internal,state",0,Canceled,Annulé,0
+selection,"stock.shipment.internal,state",0,Done,Fait,0
+selection,"stock.shipment.internal,state",0,Draft,Brouillon,0
+selection,"stock.shipment.internal,state",0,Waiting,En attente,0
+selection,"stock.shipment.out.return,state",0,Canceled,Annulé,0
+selection,"stock.shipment.out.return,state",0,Done,Fait,0
+selection,"stock.shipment.out.return,state",0,Draft,Brouillon,0
+selection,"stock.shipment.out.return,state",0,Received,Reçu,0
+selection,"stock.shipment.out,state",0,Assigned,Assigné,0
+selection,"stock.shipment.out,state",0,Canceled,Annulé,0
+selection,"stock.shipment.out,state",0,Done,Fait,0
+selection,"stock.shipment.out,state",0,Draft,Brouillon,0
+selection,"stock.shipment.out,state",0,Packed,Emballé,0
+selection,"stock.shipment.out,state",0,Waiting,En attente,0
view,party.party,0,Stock,Stock,0
view,party.party,0,_Stock,_Stocks,0
view,product.product,0,Products,Produits,0
@@ -385,9 +390,6 @@ view,stock.inventory,0,Confirm,Confirmer,0
view,stock.inventory,0,Inventories,Inventaires,0
view,stock.inventory,0,Inventory,Inventaire,0
view,stock.inventory,0,Re-Open,Ré-Ouvrir,0
-view,stock.inventory.complete.init,0,Categories,Catégories,0
-view,stock.inventory.complete.init,0,Complete Inventory,Inventaire complet,0
-view,stock.inventory.complete.init,0,Products,Produits,0
view,stock.inventory.line,0,Inventory Line,Ligne d'inventaire,0
view,stock.inventory.line,0,Inventory Lines,Lignes d'inventaire,0
view,stock.location,0,Location,Emplacement,0
@@ -396,75 +398,73 @@ view,stock.location,0,Product Stock,Quantités en stock,0
view,stock.location_stock_date.init,0,Product Quantity.,Quantité de produit,0
view,stock.move,0,Move,Mouvement,0
view,stock.move,0,Moves,Mouvements,0
-view,stock.packing.in,0,Cancel,Annuler,0
-view,stock.packing.in,0,Done,Fait,0
-view,stock.packing.in,0,Draft,Brouillon,0
-view,stock.packing.in,0,Incoming Moves,Mouvements en entrée,0
-view,stock.packing.in,0,Inventory Moves,Mouvements internes,0
-view,stock.packing.in,0,Moves,Mouvements,0
-view,stock.packing.in,0,Received,Réception,0
-view,stock.packing.in,0,Reset to Draft,Remettre en brouillon,0
-view,stock.packing.in,0,Supplier Shipment,Expédition fournisseur,0
-view,stock.packing.in,0,Supplier Shipments,Expéditions fournisseur,0
-view,stock.packing.in.return,0,Assign,Assigner,0
-view,stock.packing.in.return,0,Cancel,Annuler,0
-view,stock.packing.in.return,0,Done,Fait,0
-view,stock.packing.in.return,0,Draft,Brouillon,0
-view,stock.packing.in.return,0,Reset to Draft,Remettre en brouillon,0
-view,stock.packing.in.return,0,Supplier Return Shipment,Retour d'expédition fournisseur,0
-view,stock.packing.in.return,0,Supplier Return Shipments,Retours d'expédition fournisseur,0
-view,stock.packing.in.return,0,Waiting,En attente,0
-view,stock.packing.in.return.assign.ask_force,0,Moves,Mouvements,0
-view,stock.packing.in.return.assign.ask_force,0,Unable to Assign,Impossible d'assigner,0
-view,stock.packing.in.return.assign.ask_force,0,Unable to assign those products:,Impossible d'assigner ces produits :,0
-view,stock.packing.internal,0,Assign,Assigner,0
-view,stock.packing.internal,0,Cancel,Annuler,0
-view,stock.packing.internal,0,Done,Fait,0
-view,stock.packing.internal,0,Draft,Brouillon,0
-view,stock.packing.internal,0,Force Assign,Forcer l'assignation,0
-view,stock.packing.internal,0,Internal Shipment,Expédition interne,0
-view,stock.packing.internal,0,Internal Shipments,Expéditions internes,0
-view,stock.packing.internal,0,Reset to Draft,Remettre en brouillon,0
-view,stock.packing.internal,0,Waiting,En attente,0
-view,stock.packing.internal.assign.ask_force,0,Moves,Mouvements,0
-view,stock.packing.internal.assign.ask_force,0,Unable to Assign,Impossible d'assigner,0
-view,stock.packing.internal.assign.ask_force,0,Unable to assign those products:,Impossible d'assigner ces produits :,0
-view,stock.packing.out,0,Are you sure to force assignation?,Ãtes-vous sûr de forcer l'assignation ?,0
-view,stock.packing.out,0,Assign,Assigner,0
-view,stock.packing.out,0,Cancel,Annuler,0
-view,stock.packing.out,0,Customer Shipment,Expédition client,0
-view,stock.packing.out,0,Customer Shipments,Expéditions client,0
-view,stock.packing.out,0,Done,Fait,0
-view,stock.packing.out,0,Draft,Brouillon,0
-view,stock.packing.out,0,Force Assign,Forcer l'assignation,0
-view,stock.packing.out,0,Inventory Moves,Mouvements internes,0
-view,stock.packing.out,0,Make packing,Faire l'expédition,0
-view,stock.packing.out,0,Outgoing Moves,Mouvements en sortie,0
-view,stock.packing.out,0,Reset to Draft,Remettre en brouillon,0
-view,stock.packing.out,0,Unpack,Déballer,0
-view,stock.packing.out,0,Waiting,En attente,0
-view,stock.packing.out.assign.ask_force,0,Inventory Moves,Mouvements internes,0
-view,stock.packing.out.assign.ask_force,0,Unable to Assign,Impossible d'assigner,0
-view,stock.packing.out.assign.ask_force,0,Unable to assign those products:,Impossible d'assigner ces produits :,0
-view,stock.packing.out.return,0,Cancel,Annuler,0
-view,stock.packing.out.return,0,Customer Return Shipment,Retour d'expédition client,0
-view,stock.packing.out.return,0,Customer Return Shipments,Retours d'expédition client,0
-view,stock.packing.out.return,0,Done,Fait,0
-view,stock.packing.out.return,0,Incoming Moves,Mouvements entrants,0
-view,stock.packing.out.return,0,Inventory Moves,Mouvements internes,0
-view,stock.packing.out.return,0,Moves,Mouvements,0
-view,stock.packing.out.return,0,Received,Reçu,0
-view,stock.packing.out.return,0,Reset to Draft,Remettre en brouillon,0
view,stock.product_stock_date.init,0,Product Quantity.,Quantité Produit :,0
-wizard_button,"stock.inventory.complete,init,complete",0,Complete,Achevé,0
-wizard_button,"stock.inventory.complete,init,end",0,Cancel,Annuler,0
+view,stock.shipment.in,0,Cancel,Annuler,0
+view,stock.shipment.in,0,Done,Fait,0
+view,stock.shipment.in,0,Draft,Brouillon,0
+view,stock.shipment.in,0,Incoming Moves,Mouvements en entrée,0
+view,stock.shipment.in,0,Inventory Moves,Mouvements internes,0
+view,stock.shipment.in,0,Moves,Mouvements,0
+view,stock.shipment.in,0,Received,Réception,0
+view,stock.shipment.in,0,Reset to Draft,Remettre en brouillon,0
+view,stock.shipment.in,0,Supplier Shipment,Expédition fournisseur,0
+view,stock.shipment.in,0,Supplier Shipments,Expéditions fournisseur,0
+view,stock.shipment.in.return,0,Assign,Assigner,0
+view,stock.shipment.in.return,0,Cancel,Annuler,0
+view,stock.shipment.in.return,0,Done,Fait,0
+view,stock.shipment.in.return,0,Draft,Brouillon,0
+view,stock.shipment.in.return,0,Reset to Draft,Remettre en brouillon,0
+view,stock.shipment.in.return,0,Supplier Return Shipment,Retour d'expédition fournisseur,0
+view,stock.shipment.in.return,0,Supplier Return Shipments,Retours d'expédition fournisseur,0
+view,stock.shipment.in.return,0,Waiting,En attente,0
+view,stock.shipment.in.return.assign.ask_force,0,Moves,Mouvements,0
+view,stock.shipment.in.return.assign.ask_force,0,Unable to Assign,Impossible d'assigner,0
+view,stock.shipment.in.return.assign.ask_force,0,Unable to assign those products:,Impossible d'assigner ces produits :,0
+view,stock.shipment.internal,0,Assign,Assigner,0
+view,stock.shipment.internal,0,Cancel,Annuler,0
+view,stock.shipment.internal,0,Done,Fait,0
+view,stock.shipment.internal,0,Draft,Brouillon,0
+view,stock.shipment.internal,0,Force Assign,Forcer l'assignation,0
+view,stock.shipment.internal,0,Internal Shipment,Expédition interne,0
+view,stock.shipment.internal,0,Internal Shipments,Expéditions internes,0
+view,stock.shipment.internal,0,Reset to Draft,Remettre en brouillon,0
+view,stock.shipment.internal,0,Waiting,En attente,0
+view,stock.shipment.internal.assign.ask_force,0,Moves,Mouvements,0
+view,stock.shipment.internal.assign.ask_force,0,Unable to Assign,Impossible d'assigner,0
+view,stock.shipment.internal.assign.ask_force,0,Unable to assign those products:,Impossible d'assigner ces produits :,0
+view,stock.shipment.out,0,Are you sure to force assignation?,Ãtes-vous sûr de forcer l'assignation ?,0
+view,stock.shipment.out,0,Assign,Assigner,0
+view,stock.shipment.out,0,Cancel,Annuler,0
+view,stock.shipment.out,0,Customer Shipment,Expédition client,0
+view,stock.shipment.out,0,Customer Shipments,Expéditions client,0
+view,stock.shipment.out,0,Done,Fait,0
+view,stock.shipment.out,0,Draft,Brouillon,0
+view,stock.shipment.out,0,Force Assign,Forcer l'assignation,0
+view,stock.shipment.out,0,Inventory Moves,Mouvements internes,0
+view,stock.shipment.out,0,Make shipment,Faire l'expédition,0
+view,stock.shipment.out,0,Outgoing Moves,Mouvements en sortie,0
+view,stock.shipment.out,0,Reset to Draft,Remettre en brouillon,0
+view,stock.shipment.out,0,Unpack,Déballer,0
+view,stock.shipment.out,0,Waiting,En attente,0
+view,stock.shipment.out.assign.ask_force,0,Inventory Moves,Mouvements internes,0
+view,stock.shipment.out.assign.ask_force,0,Unable to Assign,Impossible d'assigner,0
+view,stock.shipment.out.assign.ask_force,0,Unable to assign those products:,Impossible d'assigner ces produits :,0
+view,stock.shipment.out.return,0,Cancel,Annuler,0
+view,stock.shipment.out.return,0,Customer Return Shipment,Retour d'expédition client,0
+view,stock.shipment.out.return,0,Customer Return Shipments,Retours d'expédition client,0
+view,stock.shipment.out.return,0,Done,Fait,0
+view,stock.shipment.out.return,0,Incoming Moves,Mouvements entrants,0
+view,stock.shipment.out.return,0,Inventory Moves,Mouvements internes,0
+view,stock.shipment.out.return,0,Moves,Mouvements,0
+view,stock.shipment.out.return,0,Received,Reçu,0
+view,stock.shipment.out.return,0,Reset to Draft,Remettre en brouillon,0
wizard_button,"stock.location.open,init,end",0,Cancel,Annuler,0
wizard_button,"stock.location.open,init,open",0,Open,Ouvrir,0
-wizard_button,"stock.packing.in.return.assign,ask_force,end",0,Ok,Ok,0
-wizard_button,"stock.packing.in.return.assign,ask_force,force",0,Force Assign,Forcer l'assignation,0
-wizard_button,"stock.packing.internal.assign,ask_force,end",0,Ok,Ok,0
-wizard_button,"stock.packing.internal.assign,ask_force,force",0,Force Assign,Forcer l'assignation,0
-wizard_button,"stock.packing.out.assign,ask_force,end",0,Ok,Ok,0
-wizard_button,"stock.packing.out.assign,ask_force,force",0,Force Assign,Forcer l'assignation,0
wizard_button,"stock.product.open,init,end",0,Cancel,Annuler,0
wizard_button,"stock.product.open,init,open",0,Open,Ouvrir,0
+wizard_button,"stock.shipment.in.return.assign,ask_force,end",0,Ok,Ok,0
+wizard_button,"stock.shipment.in.return.assign,ask_force,force",0,Force Assign,Forcer l'assignation,0
+wizard_button,"stock.shipment.internal.assign,ask_force,end",0,Ok,Ok,0
+wizard_button,"stock.shipment.internal.assign,ask_force,force",0,Force Assign,Forcer l'assignation,0
+wizard_button,"stock.shipment.out.assign,ask_force,end",0,Ok,Ok,0
+wizard_button,"stock.shipment.out.assign,ask_force,force",0,Force Assign,Forcer l'assignation,0
diff --git a/internal_packing.odt b/internal_shipment.odt
similarity index 100%
rename from internal_packing.odt
rename to internal_shipment.odt
diff --git a/inventory.py b/inventory.py
index 5b8e6e6..171306e 100644
--- a/inventory.py
+++ b/inventory.py
@@ -118,24 +118,20 @@ class Inventory(ModelWorkflow, ModelSQL, ModelView):
'inventory': new_id,
'move': False,
}, context=context)
- self.complete_lines(cursor, user, new_id,
- product_ids=[x.product.id for x in inventory.lines],
- context=context)
+ self.complete_lines(cursor, user, new_id, context=context)
new_ids.append(new_id)
if int_id:
return new_ids[0]
return new_ids
- def complete_lines(self, cursor, user, ids, product_ids=None, context=None):
+ def complete_lines(self, cursor, user, ids, context=None):
'''
Complete or update the inventories
:param cursor: the database cursor
:param user: the user id
:param ids: the ids of stock.inventory
- :param product_ids: the ids of product.product
- if None all products are used
:param context: the context
'''
line_obj = self.pool.get('stock.inventory.line')
@@ -151,10 +147,10 @@ class Inventory(ModelWorkflow, ModelSQL, ModelView):
for inventory in inventories:
# Compute product quantities
- context['stock_date_end'] = inventory.date
+ ctx = context and context.copy() or {}
+ ctx['stock_date_end'] = inventory.date
pbl = product_obj.products_by_location(
- cursor, user, [inventory.location.id],
- product_ids=product_ids, context=context)
+ cursor, user, [inventory.location.id], context=ctx)
# Index some data
product2uom = {}
@@ -170,41 +166,28 @@ class Inventory(ModelWorkflow, ModelSQL, ModelView):
# Update existing lines
for line in inventory.lines:
+ if not (line.product.active and
+ line.product.type == 'stockable'):
+ line_obj.delete(cursor, user, line.id, context=context)
+ continue
+ quantity, uom_id = 0.0, product2uom[line.product.id]
if line.product.id in product_qty:
- quantity, uom_id = product_qty[line.product.id]
- del product_qty[line.product.id]
- # if nothing as changed, continue
- if line.quantity == line.expected_quantity == quantity \
- and line.uom.id == uom_id:
- continue
- values = {'expected_quantity': quantity,
- 'uom': uom_id}
- # update also quantity field if not edited
- if line.quantity == line.expected_quantity:
- values['quantity'] = max(quantity, 0.0)
- else:
- values = {'expected_quantity': 0.0,}
- if line.quantity == line.expected_quantity:
- values['quantity'] = 0
-
-
- line_obj.write(
- cursor, user, line.id, values, context=context)
+ quantity, uom_id = product_qty.pop(line.product.id)
+ values = line_obj.update_values4complete(cursor, user,
+ line, quantity, uom_id, context=context)
+ if values:
+ line_obj.write(cursor, user, line.id, values,
+ context=context)
# Create lines if needed
- for product in product_qty:
- if product2type[product] != 'stockable':
+ for product_id in product_qty:
+ if product2type[product_id] != 'stockable':
continue
- quantity, uom_id = product_qty[product]
- values = {
- 'product': product,
- 'expected_quantity': quantity,
- 'quantity': max(quantity, 0.0),
- 'uom': uom_id,
- 'inventory': inventory.id,
- }
- line_obj.create(
- cursor, user, values, context=context)
+ quantity, uom_id = product_qty[product_id]
+ values = line_obj.create_values4complete(cursor, user,
+ product_id, inventory, quantity, uom_id,
+ context=context)
+ line_obj.create(cursor, user, values, context=context)
Inventory()
@@ -278,6 +261,15 @@ class InventoryLine(ModelSQL, ModelView):
context=context)
def create_move(self, cursor, user, line, context=None):
+ '''
+ Create move for an inventory line
+
+ :param cursor: the database cursor
+ :param user: the user id
+ :param line: a BrowseRecord of inventory.line
+ :param context: the context
+ :return: the stock.move id or None
+ '''
move_obj = self.pool.get('stock.move')
delta_qty = line.expected_quantity - line.quantity
if delta_qty == 0.0:
@@ -299,21 +291,56 @@ class InventoryLine(ModelSQL, ModelView):
'effective_date': line.inventory.date,
}, context=context)
self.write(cursor, user, line.id, {'move': move_id}, context=context)
+ return move_id
-InventoryLine()
+ def update_values4complete(self, cursor, user, line, quantity, uom_id,
+ context=None):
+ '''
+ Return update values to complete inventory
+ :param cursor: the database cursor
+ :param user: the user id
+ :param line: a BrowseRecord of inventory.line
+ :param quantity: the actual product quantity for the inventory location
+ :param uom_id: the UoM id of the product line
+ :param context: the context
+ :return: a dictionary
+ '''
+ res = {}
+ # if nothing changed, no update
+ if line.quantity == line.expected_quantity == quantity \
+ and line.uom.id == uom_id:
+ return {}
+ res['expected_quantity'] = quantity
+ res['uom'] = uom_id
+ # update also quantity field if not edited
+ if line.quantity == line.expected_quantity:
+ res['quantity'] = max(quantity, 0.0)
+ return res
-class CompleteInventoryInit(ModelView):
- 'Complete Inventory Init'
- _name = 'stock.inventory.complete.init'
- _description = __doc__
+ def create_values4complete(self, cursor, user, product_id, inventory,
+ quantity, uom_id, context=None):
+ '''
+ Return create values to complete inventory
- products = fields.Many2Many('product.product', None, None,
- 'Products', domain=[('type', '=', 'stockable')])
- categories = fields.Many2Many('product.category', None, None,
- 'Categories')
+ :param cursor: the database cursor
+ :param user: the user id
+ :param product_id: the product.product id
+ :param inventory: a BrowseRecord of inventory.inventory
+ :param quantity: the actual product quantity for the inventory location
+ :param uom_id: the UoM id of the product_id
+ :param context: the context
+ :return: a dictionary
+ '''
+ return {
+ 'inventory': inventory.id,
+ 'product': product_id,
+ 'expected_quantity': quantity,
+ 'quantity': max(quantity, 0.0),
+ 'uom': uom_id,
+ }
-CompleteInventoryInit()
+InventoryLine()
class CompleteInventory(Wizard):
@@ -322,16 +349,6 @@ class CompleteInventory(Wizard):
states = {
'init': {
'result': {
- 'type': 'form',
- 'object': 'stock.inventory.complete.init',
- 'state': [
- ('end', 'Cancel', 'tryton-cancel'),
- ('complete', 'Complete', 'tryton-ok', True),
- ],
- },
- },
- 'complete': {
- 'result': {
'type': 'action',
'action': '_complete',
'state': 'end',
@@ -340,25 +357,8 @@ class CompleteInventory(Wizard):
}
def _complete(self, cursor, user, data, context=None):
- category_obj = self.pool.get('product.category')
- product_obj = self.pool.get('product.product')
inventory_obj = self.pool.get('stock.inventory')
-
- product_ids = data['form']['products'][0][1] or []
- category_ids = data['form']['categories'][0][1] or []
-
- if category_ids:
- child_category_ids = category_obj.search(cursor, user,
- [('parent', 'child_of', category_ids)], context=context)
- cat_product_ids = product_obj.search(cursor, user, [
- ('category', 'in', child_category_ids),
- ('type', '=', 'stockable'),
- ], context=context)
- if cat_product_ids:
- product_ids += cat_product_ids
-
- inventory_obj.complete_lines(cursor, user, data['ids'],
- product_ids=product_ids, context=context)
+ inventory_obj.complete_lines(cursor, user, data['ids'], context=context)
return {}
diff --git a/inventory.xml b/inventory.xml
index 200b3fc..6a41b56 100644
--- a/inventory.xml
+++ b/inventory.xml
@@ -125,7 +125,7 @@ this repository contains the full copyright notices and license terms. -->
<!-- Workflow inventory -->
<record model="workflow" id="wkf_inventory">
<field name="name">Inventory</field>
- <field name="osv">stock.inventory</field>
+ <field name="model">stock.inventory</field>
<field name="on_create">True</field>
</record>
<record model="workflow.activity" id="inventory_act_draft">
@@ -196,30 +196,5 @@ this repository contains the full copyright notices and license terms. -->
<field name="perm_delete" eval="True"/>
</record>
- <record model="ir.ui.view" id="inventory_complete_init_view_form">
- <field name="model">stock.inventory.complete.init</field>
- <field name="type">form</field>
- <field name="arch" type="xml">
- <![CDATA[
- <form string="Complete Inventory">
- <separator name="categories" colspan="2"/>
- <separator name="products" colspan="2"/>
- <field name="categories" colspan="2">
- <tree string="Categories" fill="1">
- <field name="rec_name"/>
- <field name="name" select="1" tree_invisible="1"/>
- </tree>
- </field>
- <field name="products" colspan="2">
- <tree string="Products" fill="1">
- <field name="name" select="1"/>
- <field name="code" select="1"/>
- </tree>
- </field>
- </form>
- ]]>
- </field>
- </record>
-
</data>
</tryton>
diff --git a/location.py b/location.py
index e78de8d..95b3efa 100644
--- a/location.py
+++ b/location.py
@@ -44,27 +44,30 @@ class Location(ModelSQL, ModelView):
'readonly': "not active",
'required': "type == 'warehouse'",
},
- domain="[('type','=','storage'), ['OR', " \
- "('parent', 'child_of', [active_id]), " \
- "('parent', '=', False)]]")
+ domain=["('type','=','storage')",
+ ['OR',
+ "('parent', 'child_of', [active_id])",
+ "('parent', '=', False)"]])
output_location = fields.Many2One(
"stock.location", "Output", states={
'invisible': "type != 'warehouse'",
'readonly': "not active",
'required': "type == 'warehouse'",
},
- domain="[('type','=','storage'), ['OR', " \
- "('parent', 'child_of', [active_id]), " \
- "('parent', '=', False)]]")
+ domain=["('type','=','storage')",
+ ['OR',
+ "('parent', 'child_of', [active_id])",
+ "('parent', '=', False)"]])
storage_location = fields.Many2One(
"stock.location", "Storage", states={
'invisible': "type != 'warehouse'",
'readonly': "not active",
'required': "type == 'warehouse'",
},
- domain="[('type','=','storage'), ['OR', " \
- "('parent', 'child_of', [active_id]), " \
- "('parent', '=', False)]]")
+ domain=["('type','=','storage')",
+ ['OR',
+ "('parent', 'child_of', [active_id])",
+ "('parent', '=', False)"]])
quantity = fields.Function('get_quantity', type='float', string='Quantity')
forecast_quantity = fields.Function('get_quantity', type='float',
string='Forecast Quantity')
@@ -80,6 +83,7 @@ class Location(ModelSQL, ModelView):
'recursive_locations': 'You can not create recursive locations!',
'invalid_type_for_moves': 'A location with existing moves ' \
'cannot be changed to a type that does not support moves.',
+ 'child_of_warehouse': 'Location "%s" must be a child of warehouse "%s"!',
})
def init(self, cursor, module_name):
@@ -222,6 +226,35 @@ class Location(ModelSQL, ModelView):
ids = [ids]
locations = self.browse(cursor, user, ids, context=context)
self._set_warehouse_parent(cursor, user, locations, context=context)
+
+ check_wh = self.search(
+ cursor, user,
+ [('type', '=', 'warehouse'),
+ ['OR',
+ ('storage_location', 'in', ids),
+ ('input_location', 'in', ids),
+ ('output_location', 'in', ids)
+ ]],
+ context=context)
+
+ warehouses = self.browse(cursor, user, check_wh, context=context)
+ fields = ('storage_location', 'input_location', 'output_location')
+ wh2childs = {}
+ for warehouse in warehouses:
+ in_out_sto = (warehouse[f].id for f in fields)
+ for location in locations:
+ if location.id not in in_out_sto:
+ continue
+ childs = wh2childs.setdefault(
+ warehouse.id,
+ self.search(
+ cursor, user, [('parent', 'child_of', warehouse.id)],
+ context=context))
+ if location.id not in childs:
+ self.raise_user_error(
+ cursor, 'child_of_warehouse',
+ (location.name, warehouse.name), context=context)
+
return res
def copy(self, cursor, user, ids, default=None, context=None):
@@ -349,13 +382,13 @@ class OpenProduct(Wizard):
context=context)
res = act_window_obj.read(cursor, user, model_data.db_id, context=context)
- if context == None: context = {}
- context['locations'] = data['ids']
+ ctx = {}
+ ctx['locations'] = data['ids']
if data['form']['forecast_date']:
- context['stock_date_end'] = data['form']['forecast_date']
+ ctx['stock_date_end'] = data['form']['forecast_date']
else:
- context['stock_date_end'] = datetime.date.max
- res['context'] = str(context)
+ ctx['stock_date_end'] = datetime.date.max
+ res['context'] = str(ctx)
return res
diff --git a/move.py b/move.py
index f1dd31e..6796b86 100644
--- a/move.py
+++ b/move.py
@@ -4,7 +4,6 @@
from trytond.model import ModelView, ModelSQL, fields
from trytond.backend import TableHandler
from decimal import Decimal
-import datetime
STATES = {
'readonly': "(state in ('cancel', 'done'))",
@@ -21,8 +20,8 @@ class Move(ModelSQL, ModelView):
'from_location', 'to_location'],
domain=[('type', '!=', 'service')])
uom = fields.Many2One("product.uom", "Uom", required=True, states=STATES,
- domain="[('category', '=', " \
- "(product, 'product.default_uom.category'))]",
+ domain=["('category', '=', " \
+ "(product, 'product.default_uom.category'))"],
context="{'category': (product, 'product.default_uom.category')}",
on_change=['product', 'currency', 'uom', 'company',
'from_location', 'to_location'])
@@ -32,23 +31,23 @@ class Move(ModelSQL, ModelView):
digits="(16, unit_digits)", states=STATES)
from_location = fields.Many2One("stock.location", "From Location", select=1,
required=True, states=STATES,
- domain="[('type', 'not in', " \
- "('warehouse', 'view'))]")
+ domain=["('type', 'not in', " \
+ "('warehouse', 'view'))"])
to_location = fields.Many2One("stock.location", "To Location", select=1,
required=True, states=STATES,
- domain="[('type', 'not in', " \
- "('warehouse', 'view'))]")
- packing_in = fields.Many2One('stock.packing.in', 'Supplier Shipment',
+ domain=["('type', 'not in', " \
+ "('warehouse', 'view'))"])
+ shipment_in = fields.Many2One('stock.shipment.in', 'Supplier Shipment',
readonly=True, select=1, ondelete='CASCADE')
- packing_out = fields.Many2One('stock.packing.out', 'Customer Shipment',
+ shipment_out = fields.Many2One('stock.shipment.out', 'Customer Shipment',
readonly=True, select=1, ondelete='CASCADE')
- packing_out_return = fields.Many2One('stock.packing.out.return',
+ shipment_out_return = fields.Many2One('stock.shipment.out.return',
'Customer Return Shipment', readonly=True, select=1,
ondelete='CASCADE')
- packing_in_return = fields.Many2One('stock.packing.in.return',
+ shipment_in_return = fields.Many2One('stock.shipment.in.return',
'Supplier Return Shipment', readonly=True, select=1,
ondelete='CASCADE')
- packing_internal = fields.Many2One('stock.packing.internal',
+ shipment_internal = fields.Many2One('stock.shipment.internal',
'Internal Shipment', readonly=True, select=1, ondelete='CASCADE')
planned_date = fields.Date("Planned Date", states=STATES, select=2)
effective_date = fields.Date("Effective Date", readonly=True, select=2)
@@ -61,7 +60,7 @@ class Move(ModelSQL, ModelView):
company = fields.Many2One('company.company', 'Company', required=True,
states={
'readonly': "state != 'draft'",
- }, domain="[('id', '=', context.get('company', 0))]")
+ }, domain=["('id', '=', context.get('company', 0))"])
unit_price = fields.Numeric('Unit Price', digits=(16, 4),
states={
'invisible': "not unit_price_required",
@@ -87,16 +86,16 @@ class Move(ModelSQL, ModelView):
('check_from_to_locations',
'CHECK(from_location != to_location)',
'Source and destination location must be different'),
- ('check_packing',
- 'CHECK((COALESCE(packing_in, 0) / COALESCE(packing_in, 1) ' \
- '+ COALESCE(packing_out, 0) / ' \
- 'COALESCE(packing_out, 1) ' \
- '+ COALESCE(packing_internal, 0) / ' \
- 'COALESCE(packing_internal, 1) ' \
- '+ COALESCE(packing_in_return, 0) / ' \
- 'COALESCE(packing_in_return, 1) ' \
- '+ COALESCE(packing_out_return, 0) / ' \
- 'COALESCE(packing_out_return, 1)) ' \
+ ('check_shipment',
+ 'CHECK((COALESCE(shipment_in, 0) / COALESCE(shipment_in, 1) ' \
+ '+ COALESCE(shipment_out, 0) / ' \
+ 'COALESCE(shipment_out, 1) ' \
+ '+ COALESCE(shipment_internal, 0) / ' \
+ 'COALESCE(shipment_internal, 1) ' \
+ '+ COALESCE(shipment_in_return, 0) / ' \
+ 'COALESCE(shipment_in_return, 1) ' \
+ '+ COALESCE(shipment_out_return, 0) / ' \
+ 'COALESCE(shipment_out_return, 1)) ' \
'<= 1)',
'Move can be on only one Shipment'),
]
@@ -113,11 +112,20 @@ class Move(ModelSQL, ModelView):
})
def init(self, cursor, module_name):
- super(Move, self).init(cursor, module_name)
-
+ # Migration from 1.2: packing renamed into shipment
table = TableHandler(cursor, self, module_name)
+ table.drop_constraint('check_packing')
+ for suffix in ('in', 'out', 'in_return', 'out_return', 'internal'):
+ old_column = 'packing_%s' % suffix
+ new_column = 'shipment_%s' % suffix
+ if table.column_exist(old_column):
+ table.index_action(old_column, action='remove')
+ table.drop_fk(old_column)
+ table.column_rename(old_column, new_column)
+ super(Move, self).init(cursor, module_name)
# Migration from 1.0 check_packing_in_out has been removed
+ table = TableHandler(cursor, self, module_name)
table.drop_constraint('check_packing_in_out')
def default_planned_date(self, cursor, user, context=None):
@@ -418,6 +426,7 @@ class Move(ModelSQL, ModelView):
location_obj = self.pool.get('stock.location')
currency_obj = self.pool.get('currency.currency')
company_obj = self.pool.get('company.company')
+ date_obj = self.pool.get('ir.date')
if context is None:
context = {}
@@ -430,7 +439,7 @@ class Move(ModelSQL, ModelView):
ctx = context and context.copy() or {}
ctx['locations'] = location_obj.search(
cursor, user, [('type', '=', 'storage')], context=context)
- ctx['stock_date_end'] = datetime.date.today()
+ ctx['stock_date_end'] = date_obj.today(cursor, user, context=context)
product = product_obj.browse(cursor, user, product_id, context=ctx)
qty = uom_obj.compute_qty(
cursor, user, uom, quantity, product.default_uom, context=context)
@@ -460,12 +469,14 @@ class Move(ModelSQL, ModelView):
def create(self, cursor, user, vals, context=None):
location_obj = self.pool.get('stock.location')
product_obj = self.pool.get('product.product')
+ date_obj = self.pool.get('ir.date')
vals = vals.copy()
if vals.get('state') == 'done':
if not vals.get('effective_date'):
- vals['effective_date'] = datetime.date.today()
+ vals['effective_date'] = date_obj.today(cursor, user,
+ context=context)
from_location = location_obj.browse(cursor, user,
vals['from_location'], context=context)
to_location = location_obj.browse(cursor, user,
@@ -492,10 +503,13 @@ class Move(ModelSQL, ModelView):
elif vals.get('state') == 'assigned':
if not vals.get('effective_date'):
- vals['effective_date'] = datetime.date.today()
+ vals['effective_date'] = date_obj.today(cursor, user,
+ context=context)
return super(Move, self).create(cursor, user, vals, context=context)
def write(self, cursor, user, ids, vals, context=None):
+ date_obj = self.pool.get('ir.date')
+
if context is None:
context = {}
@@ -529,12 +543,14 @@ class Move(ModelSQL, ModelView):
if move.state in ('cancel', 'done'):
self.raise_user_error(cursor, 'set_state_assigned',
context=context)
- vals['effective_date'] = datetime.date.today()
+ vals['effective_date'] = date_obj.today(cursor, user,
+ context=context)
elif vals['state'] == 'done':
if move.state in ('cancel'):
self.raise_user_error(cursor, 'set_state_done',
context=context)
- vals['effective_date'] = datetime.date.today()
+ vals['effective_date'] = date_obj.today(cursor, user,
+ context=context)
if move.from_location.type == 'supplier' \
and move.state != 'done' \
@@ -618,7 +634,8 @@ class Move(ModelSQL, ModelView):
if context is None:
context = {}
- cursor.execute('LOCK TABLE stock_move')
+ if cursor.has_lock():
+ cursor.execute('LOCK TABLE stock_move')
local_ctx = context and context.copy() or {}
local_ctx['stock_date_end'] = date_obj.today(cursor, user,
diff --git a/move.xml b/move.xml
index 21d330e..62eb441 100644
--- a/move.xml
+++ b/move.xml
@@ -98,7 +98,7 @@ this repository contains the full copyright notices and license terms. -->
<field name="name">Moves from Suppliers Waiting Arrival</field>
<field name="res_model">stock.move</field>
<field name="view_type">form</field>
- <field name="domain">[('from_location.type', '=', 'supplier'), ('state', '=', 'draft'), ('packing_in', '=', False)]</field>
+ <field name="domain">[('from_location.type', '=', 'supplier'), ('state', '=', 'draft'), ('shipment_in', '=', False)]</field>
</record>
<record model="ir.action.act_window.view"
id="act_move_form_supp_proceed_view1">
diff --git a/party.xml b/party.xml
index efb5f32..3759c97 100644
--- a/party.xml
+++ b/party.xml
@@ -3,9 +3,9 @@
this repository contains the full copyright notices and license terms. -->
<tryton>
<data>
- <record model="ir.action.act_window" id="act_packing_out_form2">
+ <record model="ir.action.act_window" id="act_shipment_out_form2">
<field name="name">Customer Shipments</field>
- <field name="res_model">stock.packing.out</field>
+ <field name="res_model">stock.shipment.out</field>
<field name="view_type">form</field>
<field name="domain">[("customer", "=", active_id)]</field>
</record>
@@ -13,12 +13,12 @@ this repository contains the full copyright notices and license terms. -->
id="act_open_purchase_keyword1">
<field name="keyword">form_relate</field>
<field name="model">party.party,0</field>
- <field name="action" ref="act_packing_out_form2"/>
+ <field name="action" ref="act_shipment_out_form2"/>
</record>
- <record model="ir.action.act_window" id="act_packing_out_form3">
+ <record model="ir.action.act_window" id="act_shipment_out_form3">
<field name="name">Supplier Shipments</field>
- <field name="res_model">stock.packing.in</field>
+ <field name="res_model">stock.shipment.in</field>
<field name="view_type">form</field>
<field name="domain">[("supplier", "=", active_id)]</field>
</record>
@@ -26,7 +26,7 @@ this repository contains the full copyright notices and license terms. -->
id="act_open_purchase_keyword2">
<field name="keyword">form_relate</field>
<field name="model">party.party,0</field>
- <field name="action" ref="act_packing_out_form3"/>
+ <field name="action" ref="act_shipment_out_form3"/>
</record>
</data>
diff --git a/product.py b/product.py
index 527f76c..02f375b 100644
--- a/product.py
+++ b/product.py
@@ -175,7 +175,7 @@ class Product(ModelSQL, ModelView):
today = date_obj.today(cursor, user, context=context)
if not location_ids:
- return []
+ return {}
if context is None:
context= {}
# Skip warehouse location in favor of their storage location
@@ -363,25 +363,36 @@ class Product(ModelSQL, ModelView):
where_vals = args
else:
where_clause = " IN (" + \
- ",".join(["%s" for i in location_ids]) + ") "
+ ",".join(('%s',) * len(location_ids)) + ") "
where_vals = location_ids[:]
if move_query:
where_clause += " AND " + move_query + " "
where_vals += move_val
+ product_template_join = ""
if product_ids:
where_clause += "AND product in (" + \
- ",".join(["%s" for i in product_ids]) + ")"
+ ",".join(('%s',) * len(product_ids)) + ")"
where_vals += 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) "\
+
if context.get('stock_destinations'):
destinations = context.get('stock_destinations')
dest_clause_from = " AND from_location in ("
- dest_clause_from += ",".join("%s" for i in destinations)
+ dest_clause_from += ",".join(('%s',) * len(destinations))
dest_clause_from += ") "
dest_clause_to = " AND to_location in ("
- dest_clause_to += ",".join("%s" for i in destinations)
+ dest_clause_to += ",".join(('%s',) * len(destinations))
dest_clause_to += ") "
dest_vals = destinations
@@ -394,14 +405,14 @@ class Product(ModelSQL, ModelView):
"FROM ( "\
"SELECT to_location AS location, product, uom, "\
"sum(quantity) AS quantity "\
- "FROM stock_move "\
+ "FROM stock_move " + product_template_join + \
"WHERE (%s) " \
"AND to_location %s "\
"GROUP BY to_location, product ,uom "\
"UNION "\
"SELECT from_location AS location, product, uom, "\
"-sum(quantity) AS quantity "\
- "FROM stock_move "\
+ "FROM stock_move " + product_template_join + \
"WHERE (%s) " \
"AND from_location %s "\
"GROUP BY from_location, product, uom "\
@@ -424,13 +435,10 @@ class Product(ModelSQL, ModelView):
if line[position] not in id_list:
id_list.append(line[position])
- if not product_ids:
- product_ids = self.pool.get("product.product").search(
- cursor, user, [], context=context)
uom_by_id = dict([(x.id, x) for x in uom_obj.browse(
cursor, user, uom_ids, context=context)])
default_uom = dict((x.id, x.default_uom) for x in product_obj.browse(
- cursor, user, product_ids, context=context))
+ cursor, user, product_ids or res_product_ids, context=context))
for line in raw_lines:
location, product, uom, quantity = line
@@ -483,7 +491,13 @@ class Product(ModelSQL, ModelView):
# Complete result with missing products if asked
if not skip_zero:
- keys = ((l,p) for l in location_ids for p in product_ids)
+ # Search for all products, even if not linked with moves
+ if product_ids:
+ all_product_ids = product_ids
+ else:
+ all_product_ids = self.pool.get("product.product").search(
+ cursor, user, [], context=context)
+ 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
@@ -505,7 +519,7 @@ class Product(ModelSQL, ModelView):
location_obj = self.pool.get('stock.location')
locations = location_obj.browse(cursor, user, context.get('locations'),
context=context)
- return value + " (" + ",".join([l.name for l in locations]) + ")"
+ return value + " (" + ",".join(l.name for l in locations) + ")"
Product()
@@ -561,13 +575,13 @@ class OpenLocation(Wizard):
context=context)
res = act_window_obj.read(cursor, user, model_data.db_id, context=context)
- if context == None: context = {}
- context['product'] = data['id']
+ ctx = {}
+ ctx['product'] = data['id']
if data['form']['forecast_date']:
- context['stock_date_end'] = data['form']['forecast_date']
+ ctx['stock_date_end'] = data['form']['forecast_date']
else:
- context['stock_date_end'] = datetime.date.max
- res['context'] = str(context)
+ ctx['stock_date_end'] = datetime.date.max
+ res['context'] = str(ctx)
return res
diff --git a/setup.py b/setup.py
index 82d5a77..37b26e1 100644
--- a/setup.py
+++ b/setup.py
@@ -9,17 +9,12 @@ info = eval(file('__tryton__.py').read())
requires = []
for dep in info.get('depends', []):
- match = re.compile(
- '(ir|res|workflow|webdav)((\s|$|<|>|<=|>=|==|!=).*?$)').match(dep)
- if match:
- continue
- else:
- dep = 'trytond_' + dep
- requires.append(dep)
+ if not re.match(r'(ir|res|workflow|webdav)(\W|$)', dep):
+ requires.append('trytond_' + dep)
major_version, minor_version, _ = info.get('version', '0.0.1').split('.', 2)
requires.append('trytond >= %s.%s' % (major_version, minor_version))
-requires.append('trytond < %s.%s' % (major_version, str(int(minor_version) + 1)))
+requires.append('trytond < %s.%s' % (major_version, int(minor_version) + 1))
setup(name='trytond_stock',
version=info.get('version', '0.0.1'),
@@ -38,7 +33,7 @@ setup(name='trytond_stock',
+ info.get('translation', []) \
+ ['customer_return_restocking_list.odt',
'delivery_note.odt',
- 'internal_packing.odt',
+ 'internal_shipment.odt',
'picking_list.odt',
'supplier_restocking_list.odt'],
},
diff --git a/packing.py b/shipment.py
similarity index 63%
rename from packing.py
rename to shipment.py
index 193e79e..813b25b 100644
--- a/packing.py
+++ b/shipment.py
@@ -2,19 +2,18 @@
#this repository contains the full copyright notices and license terms.
"Shipment"
from trytond.model import ModelWorkflow, ModelView, ModelSQL, fields
-from trytond.report import CompanyReport
+from trytond.modules.company import CompanyReport
from trytond.wizard import Wizard
from trytond.backend import TableHandler
-import datetime
STATES = {
'readonly': "state in ('cancel', 'done')",
}
-class PackingIn(ModelWorkflow, ModelSQL, ModelView):
+class ShipmentIn(ModelWorkflow, ModelSQL, ModelView):
"Supplier Shipment"
- _name = 'stock.packing.in'
+ _name = 'stock.shipment.in'
_description = __doc__
_rec_name = 'code'
@@ -32,7 +31,7 @@ class PackingIn(ModelWorkflow, ModelSQL, ModelView):
contact_address = fields.Many2One('party.address', 'Contact Address',
states={
'readonly': "state != 'draft'",
- }, domain="[('party', '=', supplier)]")
+ }, domain=["('party', '=', supplier)"])
warehouse = fields.Many2One('stock.location', "Warehouse",
required=True, domain=[('type', '=', 'warehouse')],
states={
@@ -42,7 +41,7 @@ class PackingIn(ModelWorkflow, ModelSQL, ModelView):
incoming_moves = fields.Function('get_incoming_moves', type='one2many',
relation='stock.move', string='Incoming Moves',
fnct_inv='set_incoming_moves', add_remove="[" \
- "('packing_in', '=', False),"\
+ "('shipment_in', '=', False),"\
"('from_location.type', '=', 'supplier'),"\
"('state', '=', 'draft'),"\
"('to_location_warehouse', '=', warehouse),"\
@@ -58,7 +57,7 @@ class PackingIn(ModelWorkflow, ModelSQL, ModelView):
states={
'readonly': "state in ('draft', 'done', 'cancel')",
}, context="{'warehouse': warehouse, 'type': 'inventory_in'}")
- moves = fields.One2Many('stock.move', 'packing_in', 'Moves',
+ moves = fields.One2Many('stock.move', 'shipment_in', 'Moves',
readonly=True)
code = fields.Char("Code", size=None, select=1, readonly=True)
state = fields.Selection([
@@ -69,7 +68,7 @@ class PackingIn(ModelWorkflow, ModelSQL, ModelView):
], 'State', readonly=True)
def __init__(self):
- super(PackingIn, self).__init__()
+ super(ShipmentIn, self).__init__()
self._rpc.update({
'button_draft': True,
})
@@ -81,6 +80,45 @@ class PackingIn(ModelWorkflow, ModelSQL, ModelView):
'have the warehouse input location as source location!',
})
+ def init(self, cursor, module_name):
+ # 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("UPDATE wkf "\
+ "SET model = 'stock.shipment.in' "\
+ "where model = 'stock.packing.in'")
+ cursor.execute("UPDATE wkf_instance "\
+ "SET res_type = 'stock.shipment.in' "\
+ "where res_type = 'stock.packing.in'")
+ cursor.execute("UPDATE wkf_trigger "\
+ "SET model = 'stock.shipment.in' "\
+ "WHERE model = 'stock.packing.in'")
+
+ old_table = 'stock_packing_in'
+ if TableHandler.table_exist(cursor, old_table):
+ TableHandler.table_rename(cursor, old_table, self._table)
+ table = TableHandler(cursor, self, module_name)
+ for field in ('create_uid', 'write_uid', 'contact_address',
+ 'warehouse', 'supplier'):
+ table.drop_fk(field, table=old_table)
+ for field in ('code', 'reference'):
+ table.index_action(field, action='remove', table=old_table)
+
+ super(ShipmentIn, self).init(cursor, module_name)
+
def default_state(self, cursor, user, context=None):
return 'draft'
@@ -102,33 +140,33 @@ class PackingIn(ModelWorkflow, ModelSQL, ModelView):
def get_incoming_moves(self, cursor, user, ids, name, arg, context=None):
res = {}
- for packing in self.browse(cursor, user, ids, context=context):
- res[packing.id] = []
- for move in packing.moves:
- if move.to_location.id == packing.warehouse.input_location.id:
- res[packing.id].append(move.id)
+ for shipment in self.browse(cursor, user, ids, context=context):
+ res[shipment.id] = []
+ for move in shipment.moves:
+ if move.to_location.id == shipment.warehouse.input_location.id:
+ res[shipment.id].append(move.id)
return res
- def set_incoming_moves(self, cursor, user, packing_id, name, value, arg,
+ def set_incoming_moves(self, cursor, user, shipment_id, name, value, arg,
context=None):
move_obj = self.pool.get('stock.move')
if not value:
return
- packing = self.browse(cursor, user, packing_id, context=context)
+ shipment = self.browse(cursor, user, shipment_id, context=context)
move_ids = []
for act in value:
if act[0] == 'create':
if 'to_location' in act[1]:
if act[1]['to_location'] != \
- packing.warehouse.input_location.id:
+ shipment.warehouse.input_location.id:
self.raise_user_error(cursor,
'incoming_move_input_dest', context=context)
elif act[0] == 'write':
if 'to_location' in act[2]:
if act[2]['to_location'] != \
- packing.warehouse.input_location.id:
+ shipment.warehouse.input_location.id:
self.raise_user_error(cursor,
'incoming_move_input_dest', context=context)
elif act[0] == 'add':
@@ -139,43 +177,43 @@ class PackingIn(ModelWorkflow, ModelSQL, ModelView):
moves = move_obj.browse(cursor, user, move_ids, context=context)
for move in moves:
if move.to_location.id != \
- packing.warehouse.input_location.id:
+ shipment.warehouse.input_location.id:
self.raise_user_error(cursor,
'incoming_move_input_dest', context=context)
- self.write(cursor, user, packing_id, {
+ self.write(cursor, user, shipment_id, {
'moves': value,
}, context=context)
def get_inventory_moves(self, cursor, user, ids, name, arg, context=None):
res = {}
- for packing in self.browse(cursor, user, ids, context=context):
- res[packing.id] = []
- for move in packing.moves:
- if move.from_location.id == packing.warehouse.input_location.id:
- res[packing.id].append(move.id)
+ for shipment in self.browse(cursor, user, ids, context=context):
+ res[shipment.id] = []
+ for move in shipment.moves:
+ if move.from_location.id == shipment.warehouse.input_location.id:
+ res[shipment.id].append(move.id)
return res
- def set_inventory_moves(self, cursor, user, packing_id, name, value, arg,
+ def set_inventory_moves(self, cursor, user, shipment_id, name, value, arg,
context=None):
move_obj = self.pool.get('stock.move')
if not value:
return
- packing = self.browse(cursor, user, packing_id, context=context)
+ shipment = self.browse(cursor, user, shipment_id, context=context)
move_ids = []
for act in value:
if act[0] == 'create':
if 'from_location' in act[1]:
if act[1]['from_location'] != \
- packing.warehouse.input_location.id:
+ shipment.warehouse.input_location.id:
self.raise_user_error(cursor,
'inventory_move_input_source', context=context)
elif act[0] == 'write':
if 'from_location' in act[2]:
if act[2]['from_location'] != \
- packing.warehouse.input_location.id:
+ shipment.warehouse.input_location.id:
self.raise_user_error(cursor,
'inventory_move_input_source', context=context)
elif act[0] == 'add':
@@ -186,70 +224,72 @@ class PackingIn(ModelWorkflow, ModelSQL, ModelView):
moves = move_obj.browse(cursor, user, move_ids, context=context)
for move in moves:
if move.from_location.id != \
- packing.warehouse.input_location.id:
+ shipment.warehouse.input_location.id:
self.raise_user_error(cursor,
'inventory_move_input_source', context=context)
- self.write(cursor, user, packing_id, {
+ self.write(cursor, user, shipment_id, {
'moves': value,
}, context=context)
- def set_state_done(self, cursor, user, packing_id, context=None):
+ def set_state_done(self, cursor, user, shipment_id, context=None):
move_obj = self.pool.get('stock.move')
- packing = self.browse(cursor, user, packing_id, context=context)
+ date_obj = self.pool.get('ir.date')
+
+ shipment = self.browse(cursor, user, shipment_id, context=context)
move_obj.write(
cursor, user,
- [m.id for m in packing.inventory_moves \
+ [m.id for m in shipment.inventory_moves \
if m.state not in ('done', 'cancel')],
{'state': 'done'}, context)
- self.write(cursor, user, packing_id,{
+ self.write(cursor, user, shipment_id,{
'state': 'done',
- 'effective_date': datetime.date.today(),
+ 'effective_date': date_obj.today(cursor, user, context=context),
}, context=context)
- def set_state_cancel(self, cursor, user, packing_id, context=None):
+ def set_state_cancel(self, cursor, user, shipment_id, context=None):
move_obj = self.pool.get('stock.move')
- packing = self.browse(cursor, user, packing_id, context=context)
+ shipment = self.browse(cursor, user, shipment_id, context=context)
move_obj.write(
cursor, user,
- [m.id for m in packing.incoming_moves \
+ [m.id for m in shipment.incoming_moves \
if m.state != 'cancel'] +\
- [m.id for m in packing.inventory_moves \
+ [m.id for m in shipment.inventory_moves \
if m.state != 'cancel'],
{'state': 'cancel'}, context)
- self.write(cursor, user, packing_id, {'state': 'cancel'},
+ self.write(cursor, user, shipment_id, {'state': 'cancel'},
context=context)
- def set_state_received(self, cursor, user, packing_id, context=None):
+ def set_state_received(self, cursor, user, shipment_id, context=None):
move_obj = self.pool.get('stock.move')
- packing = self.browse(cursor, user, packing_id, context=context)
+ shipment = self.browse(cursor, user, shipment_id, context=context)
move_obj.write(
cursor, user,
- [m.id for m in packing.incoming_moves \
+ [m.id for m in shipment.incoming_moves \
if m.state not in ('done', 'cancel')],
{'state': 'done'}, context=context)
- self.write(cursor, user, packing_id, {
+ self.write(cursor, user, shipment_id, {
'state': 'received'
}, context=context)
- def set_state_draft(self, cursor, user, packing_id, context=None):
+ def set_state_draft(self, cursor, user, shipment_id, context=None):
move_obj = self.pool.get('stock.move')
- packing = self.browse(cursor, user, packing_id, context=context)
- move_obj.write(cursor, user, [m.id for m in packing.incoming_moves
+ shipment = self.browse(cursor, user, shipment_id, context=context)
+ move_obj.write(cursor, user, [m.id for m in shipment.incoming_moves
if m.state != 'draft'], {
'state': 'draft',
}, context=context)
move_obj.delete(cursor, user,
- [m.id for m in packing.inventory_moves], context=context)
- self.write(cursor, user, packing_id, {
+ [m.id for m in shipment.inventory_moves], context=context)
+ self.write(cursor, user, shipment_id, {
'state': 'draft',
}, context=context)
def create(self, cursor, user, values, context=None):
values = values.copy()
values['code'] = self.pool.get('ir.sequence').get(
- cursor, user, 'stock.packing.in', context=context)
- return super(PackingIn, self).create(
+ cursor, user, 'stock.shipment.in', context=context)
+ return super(ShipmentIn, self).create(
cursor, user, values, context=context)
def copy(self, cursor, user, ids, default=None, context=None):
@@ -258,7 +298,7 @@ class PackingIn(ModelWorkflow, ModelSQL, ModelView):
default = default.copy()
default['inventory_moves']= False
default['incoming_moves']= False
- return super(PackingIn, self).copy(cursor, user, ids,
+ return super(ShipmentIn, self).copy(cursor, user, ids,
default=default, context=context)
def _get_inventory_moves(self, cursor, user, incoming_move, context=None):
@@ -269,19 +309,19 @@ class PackingIn(ModelWorkflow, ModelSQL, ModelView):
res['uom'] = incoming_move.uom.id
res['quantity'] = incoming_move.quantity
res['from_location'] = incoming_move.to_location.id
- res['to_location'] = incoming_move.packing_in.warehouse.\
+ res['to_location'] = incoming_move.shipment_in.warehouse.\
storage_location.id
res['state'] = 'draft'
res['company'] = incoming_move.company.id
return res
- def create_inventory_moves(self, cursor, user, packing_id, context=None):
- packing = self.browse(cursor, user, packing_id, context=context)
- for incoming_move in packing.incoming_moves:
+ def create_inventory_moves(self, cursor, user, shipment_id, context=None):
+ shipment = self.browse(cursor, user, shipment_id, context=context)
+ for incoming_move in shipment.incoming_moves:
vals = self._get_inventory_moves(cursor, user, incoming_move,
context=context)
if vals:
- self.write(cursor, user, packing.id, {
+ self.write(cursor, user, shipment.id, {
'inventory_moves': [('create', vals)]
}, context=context)
@@ -289,12 +329,12 @@ class PackingIn(ModelWorkflow, ModelSQL, ModelView):
self.workflow_trigger_create(cursor, user, ids, context=context)
return True
-PackingIn()
+ShipmentIn()
-class PackingInReturn(ModelWorkflow, ModelSQL, ModelView):
+class ShipmentInReturn(ModelWorkflow, ModelSQL, ModelView):
"Supplier Return Shipment"
- _name = 'stock.packing.in.return'
+ _name = 'stock.shipment.in.return'
_description = __doc__
_rec_name = 'code'
@@ -314,7 +354,7 @@ class PackingInReturn(ModelWorkflow, ModelSQL, ModelView):
'readonly': "state != 'draft' or bool(moves)",
}, domain=[('type', '=', 'supplier')])
moves = fields.One2Many(
- 'stock.move', 'packing_in_return', 'Moves',
+ 'stock.move', 'shipment_in_return', 'Moves',
states={'readonly': "state != 'draft' or "\
"not(bool(from_location) and bool (to_location))"},
context="{'from_location': from_location,"
@@ -336,8 +376,32 @@ class PackingInReturn(ModelWorkflow, ModelSQL, ModelView):
self.workflow_trigger_create(cursor, user, ids, context=context)
return True
+ def init(self, cursor, module_name):
+ # Migration from 1.2: packing renamed into shipment
+ cursor.execute("UPDATE wkf "\
+ "SET model = 'stock.shipment.in.return' "\
+ "where model = 'stock.packing.in.return'")
+ cursor.execute("UPDATE wkf_instance "\
+ "SET res_type = 'stock.shipment.in.return' "\
+ "where res_type = 'stock.packing.in.return'")
+ cursor.execute("UPDATE wkf_trigger "\
+ "SET model = 'stock.shipment.in.return' "\
+ "WHERE model = 'stock.packing.in.return'")
+
+ old_table = 'stock_packing_in_return'
+ if TableHandler.table_exist(cursor, old_table):
+ TableHandler.table_rename(cursor, old_table, self._table)
+ table = TableHandler(cursor, self, module_name)
+ for field in ('create_uid', 'write_uid', 'from_location',
+ 'to_location'):
+ table.drop_fk(field, table=old_table)
+ for field in ('code', 'reference'):
+ table.index_action(field, action='remove', table=old_table)
+
+ super(ShipmentInReturn, self).init(cursor, module_name)
+
def __init__(self):
- super(PackingInReturn, self).__init__()
+ super(ShipmentInReturn, self).__init__()
self._rpc.update({
'button_draft': True,
})
@@ -346,63 +410,65 @@ class PackingInReturn(ModelWorkflow, ModelSQL, ModelView):
def create(self, cursor, user, values, context=None):
values = values.copy()
values['code'] = self.pool.get('ir.sequence').get(
- cursor, user, 'stock.packing.in.return', context=context)
- return super(PackingInReturn, self).create(
+ cursor, user, 'stock.shipment.in.return', context=context)
+ return super(ShipmentInReturn, self).create(
cursor, user, values, context=context)
- def set_state_draft(self, cursor, user, packing_id, context=None):
+ def set_state_draft(self, cursor, user, shipment_id, context=None):
move_obj = self.pool.get('stock.move')
- packing = self.browse(cursor, user, packing_id, context=context)
+ shipment = self.browse(cursor, user, shipment_id, context=context)
self.write(
- cursor, user, packing_id, {'state': 'draft'}, context=context)
+ cursor, user, shipment_id, {'state': 'draft'}, context=context)
move_obj.write(
- cursor, user, [m.id for m in packing.moves if m.state != 'draft'],
+ cursor, user, [m.id for m in shipment.moves if m.state != 'draft'],
{'state': 'draft'}, context=context)
- def set_state_waiting(self, cursor, user, packing_id, context=None):
+ def set_state_waiting(self, cursor, user, shipment_id, context=None):
move_obj = self.pool.get('stock.move')
- packing = self.browse(cursor, user, packing_id, context=context)
+ shipment = self.browse(cursor, user, shipment_id, context=context)
move_obj.write(
cursor, user,
- [m.id for m in packing.moves if m.state not in ('cancel', 'draft')],
- {'state': 'draft', 'planned_date': packing.planned_date,},
+ [m.id for m in shipment.moves if m.state not in ('cancel', 'draft')],
+ {'state': 'draft', 'planned_date': shipment.planned_date,},
context=context)
self.write(
- cursor, user, packing_id, {'state': 'waiting'}, context=context)
+ cursor, user, shipment_id, {'state': 'waiting'}, context=context)
- def set_state_assigned(self, cursor, user, packing_id, context=None):
+ def set_state_assigned(self, cursor, user, shipment_id, context=None):
self.write(
- cursor, user, packing_id, {'state': 'assigned'}, context=context)
+ cursor, user, shipment_id, {'state': 'assigned'}, context=context)
- def set_state_done(self, cursor, user, packing_id, context=None):
+ def set_state_done(self, cursor, user, shipment_id, context=None):
move_obj = self.pool.get('stock.move')
- packing = self.browse(cursor, user, packing_id, context=context)
+ date_obj = self.pool.get('ir.date')
+
+ shipment = self.browse(cursor, user, shipment_id, context=context)
move_obj.write(
cursor, user,
- [m.id for m in packing.moves if m.state not in ('done', 'cancel')],
+ [m.id for m in shipment.moves if m.state not in ('done', 'cancel')],
{'state': 'done'}, context=context)
- self.write(cursor, user, packing_id,
- {'state': 'done',
- 'effective_date': datetime.date.today()},
- context=context)
+ self.write(cursor, user, shipment_id, {
+ 'state': 'done',
+ 'effective_date': date_obj.today(cursor, user, context=context),
+ }, context=context)
- def set_state_cancel(self, cursor, user, packing_id, context=None):
+ def set_state_cancel(self, cursor, user, shipment_id, context=None):
move_obj = self.pool.get('stock.move')
- packing = self.browse(cursor, user, packing_id, context=context)
+ shipment = self.browse(cursor, user, shipment_id, context=context)
move_obj.write(
- cursor, user, [m.id for m in packing.moves if m.state != 'cancel'],
+ cursor, user, [m.id for m in shipment.moves if m.state != 'cancel'],
{'state': 'cancel'}, context=context)
self.write(
- cursor, user, packing_id, {'state': 'cancel'}, context=context)
+ cursor, user, shipment_id, {'state': 'cancel'}, context=context)
- def assign_try(self, cursor, user, packing_id, context=None):
+ def assign_try(self, cursor, user, shipment_id, context=None):
product_obj = self.pool.get('product.product')
uom_obj = self.pool.get('product.uom')
date_obj = self.pool.get('ir.date')
move_obj = self.pool.get('stock.move')
- packing = self.browse(cursor, user, packing_id, context=context)
+ shipment = self.browse(cursor, user, shipment_id, context=context)
cursor.execute('LOCK TABLE stock_move')
@@ -410,13 +476,13 @@ class PackingInReturn(ModelWorkflow, ModelSQL, ModelView):
local_ctx['stock_date_end'] = date_obj.today(cursor, user,
context=context)
local_ctx['stock_assign'] = True
- location_ids = [m.from_location.id for m in packing.moves]
+ location_ids = [m.from_location.id for m in shipment.moves]
pbl = product_obj.products_by_location(cursor, user,
location_ids=location_ids,
- product_ids=[m.product.id for m in packing.moves],
+ product_ids=[m.product.id for m in shipment.moves],
context=local_ctx)
- for move in packing.moves:
+ for move in shipment.moves:
if move.state != 'draft':
continue
if (move.from_location.id, move.product.id) in pbl:
@@ -431,25 +497,25 @@ class PackingInReturn(ModelWorkflow, ModelSQL, ModelView):
else:
return False
- move_obj.write(cursor, user, [m.id for m in packing.moves],
+ move_obj.write(cursor, user, [m.id for m in shipment.moves],
{'state': 'assigned'}, context=context)
return True
- def assign_force(self, cursor, user, packing_id, context=None):
- packing = self.browse(cursor, user, packing_id, context=context)
+ def assign_force(self, cursor, user, shipment_id, context=None):
+ shipment = self.browse(cursor, user, shipment_id, context=context)
move_obj = self.pool.get('stock.move')
- move_obj.write(cursor, user, [m.id for m in packing.moves], {
+ move_obj.write(cursor, user, [m.id for m in shipment.moves], {
'state': 'assigned',
}, context=context)
return True
-PackingInReturn()
+ShipmentInReturn()
-class PackingOut(ModelWorkflow, ModelSQL, ModelView):
+class ShipmentOut(ModelWorkflow, ModelSQL, ModelView):
"Customer Shipment"
- _name = 'stock.packing.out'
+ _name = 'stock.shipment.out'
_description = __doc__
_rec_name = 'code'
@@ -466,7 +532,7 @@ class PackingOut(ModelWorkflow, ModelSQL, ModelView):
'Delivery Address', required=True,
states={
'readonly': "state != 'draft'",
- }, domain="[('party', '=', customer)]")
+ }, domain=["('party', '=', customer)"])
reference = fields.Char("Reference", size=None, select=1,
states={
'readonly': "state != 'draft'",
@@ -488,7 +554,7 @@ class PackingOut(ModelWorkflow, ModelSQL, ModelView):
states={
'readonly':"state in ('draft', 'packed', 'done')",
}, context="{'warehouse': warehouse, 'type': 'inventory_out',}")
- moves = fields.One2Many('stock.move', 'packing_out', 'Moves',
+ moves = fields.One2Many('stock.move', 'shipment_out', 'Moves',
readonly=True)
code = fields.Char("Code", size=None, select=1, readonly=True)
state = fields.Selection([
@@ -501,17 +567,39 @@ class PackingOut(ModelWorkflow, ModelSQL, ModelView):
], 'State', readonly=True)
def __init__(self):
- super(PackingOut, self).__init__()
+ super(ShipmentOut, self).__init__()
self._rpc.update({
'button_draft': True,
})
self._order[0] = ('id', 'DESC')
def init(self, cursor, module_name):
- super(PackingOut, self).init(cursor, module_name)
+ # Migration from 1.2: packing renamed into shipment
+ cursor.execute("UPDATE wkf "\
+ "SET model = 'stock.shipment.out' "\
+ "where model = 'stock.packing.out'")
+ cursor.execute("UPDATE wkf_instance "\
+ "SET res_type = 'stock.shipment.out' "\
+ "where res_type = 'stock.packing.out'")
+ cursor.execute("UPDATE wkf_trigger "\
+ "SET model = 'stock.shipment.out' "\
+ "WHERE model = 'stock.packing.out'")
+
+ old_table = 'stock_packing_out'
+ if TableHandler.table_exist(cursor, old_table):
+ TableHandler.table_rename(cursor, old_table, self._table)
+
table = TableHandler(cursor, self, module_name)
+ for field in ('create_uid', 'write_uid', 'delivery_address',
+ 'warehouse', 'customer'):
+ table.drop_fk(field, table=old_table)
+ for field in ('code', 'reference'):
+ table.index_action(field, action='remove', table=old_table)
+
+ super(ShipmentOut, self).init(cursor, module_name)
# Migration from 1.0 customer_location is no more used
+ table = TableHandler(cursor, self, module_name)
table.drop_column('customer_location', exception=True)
def default_state(self, cursor, user, context=None):
@@ -536,34 +624,34 @@ class PackingOut(ModelWorkflow, ModelSQL, ModelView):
def get_outgoing_moves(self, cursor, user, ids, name, arg, context=None):
res = {}
- for packing in self.browse(cursor, user, ids, context=context):
- res[packing.id] = []
- for move in packing.moves:
+ for shipment in self.browse(cursor, user, ids, context=context):
+ res[shipment.id] = []
+ for move in shipment.moves:
if move.from_location.id == \
- packing.warehouse.output_location.id:
- res[packing.id].append(move.id)
+ shipment.warehouse.output_location.id:
+ res[shipment.id].append(move.id)
return res
- def set_outgoing_moves(self, cursor, user, packing_id, name, value, arg,
+ def set_outgoing_moves(self, cursor, user, shipment_id, name, value, arg,
context=None):
move_obj = self.pool.get('stock.move')
if not value:
return
- packing = self.browse(cursor, user, packing_id, context=context)
+ shipment = self.browse(cursor, user, shipment_id, context=context)
move_ids = []
for act in value:
if act[0] == 'create':
if 'from_location' in act[1]:
if act[1]['from_location'] != \
- packing.warehouse.output_location.id:
+ shipment.warehouse.output_location.id:
self.raise_user_error(cursor,
'outgoing_move_output_source', context=context)
elif act[0] == 'write':
if 'from_location' in act[2]:
if act[2]['from_location'] != \
- packing.warehouse.output_location.id:
+ shipment.warehouse.output_location.id:
self.raise_user_error(cursor,
'outgoing_move_output_source', context=context)
elif act[0] == 'add':
@@ -574,43 +662,43 @@ class PackingOut(ModelWorkflow, ModelSQL, ModelView):
moves = move_obj.browse(cursor, user, move_ids, context=context)
for move in moves:
if move.from_location.id != \
- packing.warehouse.output_location.id:
+ shipment.warehouse.output_location.id:
self.raise_user_error(cursor,
'outgoing_move_output_source', context=context)
- self.write(cursor, user, packing_id, {
+ self.write(cursor, user, shipment_id, {
'moves': value,
}, context=context)
def get_inventory_moves(self, cursor, user, ids, name, arg, context=None):
res = {}
- for packing in self.browse(cursor, user, ids, context=context):
- res[packing.id] = []
- for move in packing.moves:
+ for shipment in self.browse(cursor, user, ids, context=context):
+ res[shipment.id] = []
+ for move in shipment.moves:
if move.to_location.id == \
- packing.warehouse.output_location.id:
- res[packing.id].append(move.id)
+ shipment.warehouse.output_location.id:
+ res[shipment.id].append(move.id)
return res
- def set_inventory_moves(self, cursor, user, packing_id, name, value, arg,
+ def set_inventory_moves(self, cursor, user, shipment_id, name, value, arg,
context=None):
move_obj = self.pool.get('stock.move')
if not value:
return
- packing = self.browse(cursor, user, packing_id, context=context)
+ shipment = self.browse(cursor, user, shipment_id, context=context)
move_ids = []
for act in value:
if act[0] == 'create':
if 'to_location' in act[1]:
if act[1]['to_location'] != \
- packing.warehouse.output_location.id:
+ shipment.warehouse.output_location.id:
self.raise_user_error(cursor,
'inventory_move_output_dest', context=context)
elif act[0] == 'write':
if 'to_location' in act[2]:
if act[2]['to_location'] != \
- packing.warehouse.output_location.id:
+ shipment.warehouse.output_location.id:
self.raise_user_error(cursor,
'inventory_move_output_dest', context=context)
elif act[0] == 'add':
@@ -621,53 +709,55 @@ class PackingOut(ModelWorkflow, ModelSQL, ModelView):
moves = move_obj.browse(cursor, user, move_ids, context=context)
for move in moves:
if move.to_location.id != \
- packing.warehouse.output_location.id:
+ shipment.warehouse.output_location.id:
self.raise_user_error(cursor,
'inventory_move_output_dest', context=context)
- self.write(cursor, user, packing_id, {
+ self.write(cursor, user, shipment_id, {
'moves': value,
}, context=context)
- def set_state_assigned(self, cursor, user, packing_id, context=None):
- self.write(cursor, user, packing_id, {'state': 'assigned'},
+ def set_state_assigned(self, cursor, user, shipment_id, context=None):
+ self.write(cursor, user, shipment_id, {'state': 'assigned'},
context=context)
- def set_state_draft(self, cursor, user, packing_id, context=None):
+ def set_state_draft(self, cursor, user, shipment_id, context=None):
move_obj = self.pool.get('stock.move')
- packing = self.browse(cursor, user, packing_id, context=context)
+ shipment = self.browse(cursor, user, shipment_id, context=context)
self.write(
- cursor, user, packing_id, {'state': 'draft'}, context=context)
+ cursor, user, shipment_id, {'state': 'draft'}, context=context)
move_obj.write(
cursor, user,
- [m.id for m in packing.inventory_moves + packing.outgoing_moves \
+ [m.id for m in shipment.inventory_moves + shipment.outgoing_moves \
if m.state != 'draft'],
{'state': 'draft'}, context=context)
- def set_state_done(self, cursor, user, packing_id, context=None):
+ def set_state_done(self, cursor, user, shipment_id, context=None):
move_obj = self.pool.get('stock.move')
- packing = self.browse(cursor, user, packing_id, context=context)
+ date_obj = self.pool.get('ir.date')
+
+ shipment = self.browse(cursor, user, shipment_id, context=context)
move_obj.write(
- cursor, user, [m.id for m in packing.outgoing_moves \
+ cursor, user, [m.id for m in shipment.outgoing_moves \
if m.state not in ('done', 'cancel')],
{'state': 'done'}, context=context)
- self.write(cursor, user, packing_id, {
+ self.write(cursor, user, shipment_id, {
'state': 'done',
- 'effective_date': datetime.date.today(),
+ 'effective_date': date_obj.today(cursor, user, context=context),
}, context=context)
- def set_state_packed(self, cursor, user, packing_id, context=None):
+ def set_state_packed(self, cursor, user, shipment_id, context=None):
move_obj = self.pool.get('stock.move')
uom_obj = self.pool.get('product.uom')
- packing = self.browse(cursor, user, packing_id, context=context)
+ shipment = self.browse(cursor, user, shipment_id, context=context)
move_obj.write(
- cursor, user, [m.id for m in packing.inventory_moves \
+ cursor, user, [m.id for m in shipment.inventory_moves \
if m.state not in ('done', 'cancel')],
{'state': 'done'}, context=context)
- self.write(cursor, user, packing_id, {'state': 'packed'},
+ self.write(cursor, user, shipment_id, {'state': 'packed'},
context=context)
# Sum all outgoing quantities
outgoing_qty = {}
- for move in packing.outgoing_moves:
+ for move in shipment.outgoing_moves:
if move.state == 'cancel': continue
quantity = uom_obj.compute_qty(
cursor, user, move.uom, move.quantity, move.product.default_uom,
@@ -675,7 +765,7 @@ class PackingOut(ModelWorkflow, ModelSQL, ModelView):
outgoing_qty.setdefault(move.product.id, 0.0)
outgoing_qty[move.product.id] += quantity
- for move in packing.inventory_moves:
+ for move in shipment.inventory_moves:
if move.state == 'cancel': continue
qty_default_uom = uom_obj.compute_qty(
cursor, user, move.uom, move.quantity, move.product.default_uom,
@@ -701,20 +791,20 @@ class PackingOut(ModelWorkflow, ModelSQL, ModelView):
move.uom, context=context)
move_obj.create(cursor, user, {
'from_location': move.to_location.id,
- 'to_location': packing.customer.customer_location.id,
+ 'to_location': shipment.customer.customer_location.id,
'product': move.product.id,
'uom': move.uom.id,
'quantity': out_quantity,
- 'packing_out': packing.id,
+ 'shipment_out': shipment.id,
'state': 'draft',
'company': move.company.id,
'currency': move.company.currency.id,
'unit_price': unit_price,
}, context=context)
- #Re-read the packing and remove exceeding quantities
- packing = self.browse(cursor, user, packing_id, context=context)
- for move in packing.outgoing_moves:
+ #Re-read the shipment and remove exceeding quantities
+ shipment = self.browse(cursor, user, shipment_id, context=context)
+ for move in shipment.outgoing_moves:
if move.state == 'cancel': continue
if outgoing_qty.get(move.product.id, 0.0) > 0.0:
exc_qty = uom_obj.compute_qty(
@@ -728,57 +818,57 @@ class PackingOut(ModelWorkflow, ModelSQL, ModelView):
move.product.default_uom, round=False, context=context)
outgoing_qty[move.product.id] -= removed_qty
- move_obj.write(cursor, user, [x.id for x in packing.outgoing_moves
+ move_obj.write(cursor, user, [x.id for x in shipment.outgoing_moves
if x.state != 'cancel'], {
'state': 'assigned',
}, context=context)
- def set_state_cancel(self, cursor, user, packing_id, context=None):
+ def set_state_cancel(self, cursor, user, shipment_id, context=None):
move_obj = self.pool.get('stock.move')
- packing = self.browse(cursor, user, packing_id, context=context)
+ shipment = self.browse(cursor, user, shipment_id, context=context)
move_obj.write(
cursor, user,
- [m.id for m in packing.outgoing_moves + packing.inventory_moves \
+ [m.id for m in shipment.outgoing_moves + shipment.inventory_moves \
if m.state != 'cancel'],
{'state': 'cancel'}, context=context)
- self.write(cursor, user, packing_id, {'state': 'cancel'},
+ self.write(cursor, user, shipment_id, {'state': 'cancel'},
context=context)
- def set_state_waiting(self, cursor, user, packing_id, context=None):
+ def set_state_waiting(self, cursor, user, shipment_id, context=None):
"""
Complete inventory moves to match the products and quantities
that are in the outgoing moves.
"""
move_obj = self.pool.get('stock.move')
uom_obj = self.pool.get('product.uom')
- packing = self.browse(cursor, user, packing_id, context=context)
+ shipment = self.browse(cursor, user, shipment_id, context=context)
self.write(
- cursor, user, packing_id, {'state': 'waiting'}, context=context)
+ cursor, user, shipment_id, {'state': 'waiting'}, context=context)
- if packing.inventory_moves:
+ if shipment.inventory_moves:
move_obj.write(cursor, user,
- [x.id for x in packing.inventory_moves], {
+ [x.id for x in shipment.inventory_moves], {
'state': 'draft',
}, context=context)
move_obj.delete(cursor, user,
- [x.id for x in packing.inventory_moves], context=context)
+ [x.id for x in shipment.inventory_moves], context=context)
# Re-Browse because moves have been deleted
- packing = self.browse(cursor, user, packing_id, context=context)
+ shipment = self.browse(cursor, user, shipment_id, context=context)
- for move in packing.outgoing_moves:
+ for move in shipment.outgoing_moves:
if move.state in ('cancel', 'done'):
continue
qty_default_uom = uom_obj.compute_qty(
cursor, user, move.uom, move.quantity, move.product.default_uom,
context=context)
move_obj.create(cursor, user, {
- 'from_location': move.packing_out.warehouse.storage_location.id,
+ 'from_location': move.shipment_out.warehouse.storage_location.id,
'to_location': move.from_location.id,
'product': move.product.id,
'uom': move.uom.id,
'quantity': move.quantity,
- 'packing_out': packing.id,
+ 'shipment_out': shipment.id,
'state': 'draft',
'company': move.company.id,
}, context=context)
@@ -786,8 +876,8 @@ class PackingOut(ModelWorkflow, ModelSQL, ModelView):
def create(self, cursor, user, values, context=None):
values = values.copy()
values['code'] = self.pool.get('ir.sequence').get(
- cursor, user, 'stock.packing.out', context=context)
- return super(PackingOut, self).create(cursor, user, values,
+ cursor, user, 'stock.shipment.out', context=context)
+ return super(ShipmentOut, self).create(cursor, user, values,
context=context)
def copy(self, cursor, user, ids, default=None, context=None):
@@ -796,7 +886,7 @@ class PackingOut(ModelWorkflow, ModelSQL, ModelView):
default = default.copy()
default['inventory_moves']= False
default['outgoing_moves']= False
- return super(PackingOut, self).copy(cursor, user, ids,
+ return super(ShipmentOut, self).copy(cursor, user, ids,
default=default, context=context)
@@ -814,30 +904,30 @@ class PackingOut(ModelWorkflow, ModelSQL, ModelView):
context=context)
return res
- def assign_try(self, cursor, user, packing_id, context=None):
+ def assign_try(self, cursor, user, shipment_id, context=None):
move_obj = self.pool.get('stock.move')
- packing = self.browse(cursor, user, packing_id, context=context)
+ shipment = self.browse(cursor, user, shipment_id, context=context)
return move_obj.assign_try(
- cursor, user, packing.inventory_moves, context=context)
+ cursor, user, shipment.inventory_moves, context=context)
- def assign_force(self, cursor, user, packing_id, context=None):
- packing = self.browse(cursor, user, packing_id, context=context)
+ def assign_force(self, cursor, user, shipment_id, context=None):
+ shipment = self.browse(cursor, user, shipment_id, context=context)
move_obj = self.pool.get('stock.move')
move_obj.write(
- cursor, user, [m.id for m in packing.inventory_moves],
+ cursor, user, [m.id for m in shipment.inventory_moves],
{'state': 'assigned'})
return True
def button_draft(self, cursor, user, ids, context=None):
self.workflow_trigger_create(cursor, user, ids, context=context)
-PackingOut()
+ShipmentOut()
-class PackingOutReturn(ModelWorkflow, ModelSQL, ModelView):
+class ShipmentOutReturn(ModelWorkflow, ModelSQL, ModelView):
"Customer Return Shipment"
- _name = 'stock.packing.out.return'
+ _name = 'stock.shipment.out.return'
_description = __doc__
_rec_name = 'code'
@@ -854,7 +944,7 @@ class PackingOutReturn(ModelWorkflow, ModelSQL, ModelView):
'Delivery Address', required=True,
states={
'readonly': "state != 'draft'",
- }, domain="[('party', '=', customer)]")
+ }, domain=["('party', '=', customer)"])
reference = fields.Char("Reference", size=None, select=1,
states={
'readonly': "state != 'draft'",
@@ -876,7 +966,7 @@ class PackingOutReturn(ModelWorkflow, ModelSQL, ModelView):
states={
'readonly':"state in ('draft', 'cancel', 'done')",
}, context="{'warehouse': warehouse, 'type': 'inventory_out',}")
- moves = fields.One2Many('stock.move', 'packing_out_return', 'Moves',
+ moves = fields.One2Many('stock.move', 'shipment_out_return', 'Moves',
readonly=True)
code = fields.Char("Code", size=None, select=1, readonly=True)
state = fields.Selection([
@@ -887,7 +977,7 @@ class PackingOutReturn(ModelWorkflow, ModelSQL, ModelView):
], 'State', readonly=True)
def __init__(self):
- super(PackingOutReturn, self).__init__()
+ super(ShipmentOutReturn, self).__init__()
self._rpc.update({
'button_draft': True,
})
@@ -899,6 +989,30 @@ class PackingOutReturn(ModelWorkflow, ModelSQL, ModelView):
'have the warehouse input location as source location!',
})
+ def init(self, cursor, module_name):
+ # Migration from 1.2: packing renamed into shipment
+ cursor.execute("UPDATE wkf "\
+ "SET model = 'stock.shipment.out.return' "\
+ "where model = 'stock.packing.out.return'")
+ cursor.execute("UPDATE wkf_instance "\
+ "SET res_type = 'stock.shipment.out.return' "\
+ "where res_type = 'stock.packing.out.return'")
+ cursor.execute("UPDATE wkf_trigger "\
+ "SET model = 'stock.shipment.out.return' "\
+ "WHERE model = 'stock.packing.out.return'")
+
+ old_table = 'stock_packing_out_return'
+ if TableHandler.table_exist(cursor, old_table):
+ TableHandler.table_rename(cursor, old_table, self._table)
+
+ table = TableHandler(cursor, self, module_name)
+ for field in ('create_uid', 'write_uid', 'delivery_address',
+ 'warehouse', 'customer'):
+ table.drop_fk(field, table=old_table)
+ for field in ('code', 'reference'):
+ table.index_action(field, action='remove', table=old_table)
+
+ super(ShipmentOutReturn, self).init(cursor, module_name)
def default_state(self, cursor, user, context=None):
return 'draft'
@@ -924,34 +1038,34 @@ class PackingOutReturn(ModelWorkflow, ModelSQL, ModelView):
def get_incoming_moves(self, cursor, user, ids, name, arg, context=None):
res = {}
- for packing in self.browse(cursor, user, ids, context=context):
- res[packing.id] = []
- for move in packing.moves:
+ for shipment in self.browse(cursor, user, ids, context=context):
+ res[shipment.id] = []
+ for move in shipment.moves:
if move.to_location.id == \
- packing.warehouse.input_location.id:
- res[packing.id].append(move.id)
+ shipment.warehouse.input_location.id:
+ res[shipment.id].append(move.id)
return res
- def set_incoming_moves(self, cursor, user, packing_id, name, value, arg,
+ def set_incoming_moves(self, cursor, user, shipment_id, name, value, arg,
context=None):
move_obj = self.pool.get('stock.move')
if not value:
return
- packing = self.browse(cursor, user, packing_id, context=context)
+ shipment = self.browse(cursor, user, shipment_id, context=context)
move_ids = []
for act in value:
if act[0] == 'create':
if 'to_location' in act[1]:
if act[1]['to_location'] != \
- packing.warehouse.input_location.id:
+ shipment.warehouse.input_location.id:
self.raise_user_error(cursor,
'incoming_move_input_dest', context=context)
elif act[0] == 'write':
if 'to_location' in act[2]:
if act[2]['to_location'] != \
- packing.warehouse.input_location.id:
+ shipment.warehouse.input_location.id:
self.raise_user_error(cursor,
'incoming_move_input_dest', context=context)
elif act[0] == 'add':
@@ -962,43 +1076,43 @@ class PackingOutReturn(ModelWorkflow, ModelSQL, ModelView):
moves = move_obj.browse(cursor, user, move_ids, context=context)
for move in moves:
if move.to_location.id != \
- packing.warehouse.input_location.id:
+ shipment.warehouse.input_location.id:
self.raise_user_error(cursor,
'incoming_move_input_dest', context=context)
- self.write(cursor, user, packing_id, {
+ self.write(cursor, user, shipment_id, {
'moves': value,
}, context=context)
def get_inventory_moves(self, cursor, user, ids, name, arg, context=None):
res = {}
- for packing in self.browse(cursor, user, ids, context=context):
- res[packing.id] = []
- for move in packing.moves:
+ for shipment in self.browse(cursor, user, ids, context=context):
+ res[shipment.id] = []
+ for move in shipment.moves:
if move.from_location.id == \
- packing.warehouse.input_location.id:
- res[packing.id].append(move.id)
+ shipment.warehouse.input_location.id:
+ res[shipment.id].append(move.id)
return res
- def set_inventory_moves(self, cursor, user, packing_id, name, value, arg,
+ def set_inventory_moves(self, cursor, user, shipment_id, name, value, arg,
context=None):
move_obj = self.pool.get('stock.move')
if not value:
return
- packing = self.browse(cursor, user, packing_id, context=context)
+ shipment = self.browse(cursor, user, shipment_id, context=context)
move_ids = []
for act in value:
if act[0] == 'create':
if 'from_location' in act[1]:
if act[1]['from_location'] != \
- packing.warehouse.input_location.id:
+ shipment.warehouse.input_location.id:
self.raise_user_error(cursor,
'inventory_move_input_source', context=context)
elif act[0] == 'write':
if 'from_location' in act[2]:
if act[2]['from_location'] != \
- packing.warehouse.input_location.id:
+ shipment.warehouse.input_location.id:
self.raise_user_error(cursor,
'inventory_move_input_source', context=context)
elif act[0] == 'add':
@@ -1009,18 +1123,18 @@ class PackingOutReturn(ModelWorkflow, ModelSQL, ModelView):
moves = move_obj.browse(cursor, user, move_ids, context=context)
for move in moves:
if move.from_location.id != \
- packing.warehouse.input_location.id:
+ shipment.warehouse.input_location.id:
self.raise_user_error(cursor,
'inventory_move_input_source', context=context)
- self.write(cursor, user, packing_id, {
+ self.write(cursor, user, shipment_id, {
'moves': value,
}, context=context)
def create(self, cursor, user, values, context=None):
values = values.copy()
values['code'] = self.pool.get('ir.sequence').get(
- cursor, user, 'stock.packing.out.return', context=context)
- return super(PackingOutReturn, self).create(cursor, user, values,
+ cursor, user, 'stock.shipment.out.return', context=context)
+ return super(ShipmentOutReturn, self).create(cursor, user, values,
context=context)
def copy(self, cursor, user, ids, default=None, context=None):
@@ -1029,59 +1143,61 @@ class PackingOutReturn(ModelWorkflow, ModelSQL, ModelView):
default = default.copy()
default['inventory_moves']= False
default['incoming_moves']= False
- return super(PackingOutReturn, self).copy(cursor, user, ids,
+ return super(ShipmentOutReturn, self).copy(cursor, user, ids,
default=default, context=context)
def button_draft(self, cursor, user, ids, context=None):
self.workflow_trigger_create(cursor, user, ids, context=context)
- def set_state_done(self, cursor, user, packing_id, context=None):
+ def set_state_done(self, cursor, user, shipment_id, context=None):
move_obj = self.pool.get('stock.move')
- packing = self.browse(cursor, user, packing_id, context=context)
+ date_obj = self.pool.get('ir.date')
+
+ shipment = self.browse(cursor, user, shipment_id, context=context)
move_obj.write(
cursor, user,
- [m.id for m in packing.inventory_moves \
+ [m.id for m in shipment.inventory_moves \
if m.state not in ('done', 'cancel')],
{'state': 'done'}, context)
- self.write(cursor, user, packing_id,{
+ self.write(cursor, user, shipment_id,{
'state': 'done',
- 'effective_date': datetime.date.today(),
+ 'effective_date': date_obj.today(cursor, user, context=context),
}, context=context)
- def set_state_cancel(self, cursor, user, packing_id, context=None):
+ def set_state_cancel(self, cursor, user, shipment_id, context=None):
move_obj = self.pool.get('stock.move')
- packing = self.browse(cursor, user, packing_id, context=context)
+ shipment = self.browse(cursor, user, shipment_id, context=context)
move_obj.write(
cursor, user,
- [m.id for m in packing.incoming_moves + packing.inventory_moves \
+ [m.id for m in shipment.incoming_moves + shipment.inventory_moves \
if m.state != 'cancel'],
{'state': 'cancel'}, context)
- self.write(cursor, user, packing_id, {'state': 'cancel'},
+ self.write(cursor, user, shipment_id, {'state': 'cancel'},
context=context)
- def set_state_received(self, cursor, user, packing_id, context=None):
+ def set_state_received(self, cursor, user, shipment_id, context=None):
move_obj = self.pool.get('stock.move')
- packing = self.browse(cursor, user, packing_id, context=context)
+ shipment = self.browse(cursor, user, shipment_id, context=context)
move_obj.write(
cursor, user,
- [m.id for m in packing.incoming_moves \
+ [m.id for m in shipment.incoming_moves \
if m.state not in ('done', 'cancel')],
{'state': 'done'}, context=context)
- self.write(cursor, user, packing_id, {
+ self.write(cursor, user, shipment_id, {
'state': 'received'
}, context=context)
- def set_state_draft(self, cursor, user, packing_id, context=None):
+ def set_state_draft(self, cursor, user, shipment_id, context=None):
move_obj = self.pool.get('stock.move')
- packing = self.browse(cursor, user, packing_id, context=context)
- move_obj.write(cursor, user, [m.id for m in packing.incoming_moves
+ shipment = self.browse(cursor, user, shipment_id, context=context)
+ move_obj.write(cursor, user, [m.id for m in shipment.incoming_moves
if m.state != 'draft'], {
'state': 'draft',
}, context=context)
move_obj.delete(cursor, user,
- [m.id for m in packing.inventory_moves], context=context)
- self.write(cursor, user, packing_id, {
+ [m.id for m in shipment.inventory_moves], context=context)
+ self.write(cursor, user, shipment_id, {
'state': 'draft',
}, context=context)
@@ -1093,39 +1209,39 @@ class PackingOutReturn(ModelWorkflow, ModelSQL, ModelView):
res['uom'] = incoming_move.uom.id
res['quantity'] = incoming_move.quantity
res['from_location'] = incoming_move.to_location.id
- res['to_location'] = incoming_move.packing_out_return.warehouse.\
+ res['to_location'] = incoming_move.shipment_out_return.warehouse.\
storage_location.id
res['state'] = 'draft'
res['company'] = incoming_move.company.id
return res
- def create_inventory_moves(self, cursor, user, packing_id, context=None):
- packing = self.browse(cursor, user, packing_id, context=context)
- for incoming_move in packing.incoming_moves:
+ def create_inventory_moves(self, cursor, user, shipment_id, context=None):
+ shipment = self.browse(cursor, user, shipment_id, context=context)
+ for incoming_move in shipment.incoming_moves:
vals = self._get_inventory_moves(cursor, user, incoming_move,
context=context)
if vals:
- self.write(cursor, user, packing.id, {
+ self.write(cursor, user, shipment.id, {
'inventory_moves': [('create', vals)]
}, context=context)
-PackingOutReturn()
+ShipmentOutReturn()
-class AssignPackingOutAskForce(ModelView):
+class AssignShipmentOutAskForce(ModelView):
'Assign Shipment Out Ask Force'
- _name = 'stock.packing.out.assign.ask_force'
+ _name = 'stock.shipment.out.assign.ask_force'
_description = __doc__
inventory_moves = fields.Many2Many('stock.move', None, None,
'Inventory Moves', readonly=True)
-AssignPackingOutAskForce()
+AssignShipmentOutAskForce()
-class AssignPackingOut(Wizard):
+class AssignShipmentOut(Wizard):
'Assign Shipment Out'
- _name = 'stock.packing.out.assign'
+ _name = 'stock.shipment.out.assign'
states = {
'init': {
'result': {
@@ -1137,7 +1253,7 @@ class AssignPackingOut(Wizard):
'actions': ['_moves'],
'result': {
'type': 'form',
- 'object': 'stock.packing.out.assign.ask_force',
+ 'object': 'stock.shipment.out.assign.ask_force',
'state': [
('force', 'Force Assign', 'tryton-go-next'),
('end', 'Ok', 'tryton-ok', True),
@@ -1154,37 +1270,37 @@ class AssignPackingOut(Wizard):
}
def _choice(self, cursor, user, data, context=None):
- packing_out_obj = self.pool.get('stock.packing.out')
+ shipment_out_obj = self.pool.get('stock.shipment.out')
- packing_out_obj.workflow_trigger_validate(cursor, user, data['id'],
+ shipment_out_obj.workflow_trigger_validate(cursor, user, data['id'],
'assign', context=context)
- packing = packing_out_obj.browse(cursor, user, data['id'],
+ shipment = shipment_out_obj.browse(cursor, user, data['id'],
context=context)
- if not [x.id for x in packing.inventory_moves if x.state == 'draft']:
+ if not [x.id for x in shipment.inventory_moves if x.state == 'draft']:
return 'end'
else:
return 'ask_force'
def _moves(self, cursor, user, data, context=None):
- packing_out_obj = self.pool.get('stock.packing.out')
- packing = packing_out_obj.browse(cursor, user, data['id'],
+ shipment_out_obj = self.pool.get('stock.shipment.out')
+ shipment = shipment_out_obj.browse(cursor, user, data['id'],
context=context)
- return {'inventory_moves': [x.id for x in packing.inventory_moves
+ return {'inventory_moves': [x.id for x in shipment.inventory_moves
if x.state == 'draft']}
def _force(self, cursor, user, data, context=None):
- packing_out_obj = self.pool.get('stock.packing.out')
+ shipment_out_obj = self.pool.get('stock.shipment.out')
- packing_out_obj.workflow_trigger_validate(cursor, user, data['id'],
+ shipment_out_obj.workflow_trigger_validate(cursor, user, data['id'],
'force_assign', context=context)
return {}
-AssignPackingOut()
+AssignShipmentOut()
-class PackingInternal(ModelWorkflow, ModelSQL, ModelView):
+class ShipmentInternal(ModelWorkflow, ModelSQL, ModelView):
"Internal Shipment"
- _name = 'stock.packing.internal'
+ _name = 'stock.shipment.internal'
_description = __doc__
_rec_name = 'code'
@@ -1198,15 +1314,15 @@ class PackingInternal(ModelWorkflow, ModelSQL, ModelView):
from_location = fields.Many2One(
'stock.location', "From Location", required=True,
states={ 'readonly': "state != 'draft' or bool(moves)", },
- domain="[('type', 'not in', " \
- "('supplier', 'customer', 'warehouse', 'view'))]")
+ domain=["('type', 'not in', " \
+ "('supplier', 'customer', 'warehouse', 'view'))"])
to_location = fields.Many2One('stock.location', "To Location",
required=True, states={
'readonly': "state != 'draft' or bool(moves)",
- }, domain="[('type', 'not in', " \
- "('supplier', 'customer', 'warehouse', 'view'))]")
+ }, domain=["('type', 'not in', " \
+ "('supplier', 'customer', 'warehouse', 'view'))"])
moves = fields.One2Many(
- 'stock.move', 'packing_internal', 'Moves',
+ 'stock.move', 'shipment_internal', 'Moves',
states={'readonly': "state != 'draft' or "\
"not(bool(from_location) and bool (to_location))"},
context="{'from_location': from_location,"
@@ -1221,6 +1337,30 @@ class PackingInternal(ModelWorkflow, ModelSQL, ModelView):
('done', 'Done'),
], 'State', readonly=True)
+ def init(self, cursor, module_name):
+ # Migration from 1.2: packing renamed into shipment
+ cursor.execute("UPDATE wkf "\
+ "SET model = 'stock.shipment.internal' "\
+ "where model = 'stock.packing.internal'")
+ cursor.execute("UPDATE wkf_instance "\
+ "SET res_type = 'stock.shipment.internal' "\
+ "where res_type = 'stock.packing.internal'")
+ cursor.execute("UPDATE wkf_trigger "\
+ "SET model = 'stock.shipment.internal' "\
+ "WHERE model = 'stock.packing.internal'")
+
+ old_table = 'stock_packing_internal'
+ if TableHandler.table_exist(cursor, old_table):
+ TableHandler.table_rename(cursor, old_table, self._table)
+ table = TableHandler(cursor, self, module_name)
+ for field in ('create_uid', 'write_uid', 'from_location',
+ 'to_location'):
+ table.drop_fk(field, table=old_table)
+ for field in ('code', 'reference'):
+ table.index_action(field, action='remove', table=old_table)
+
+ super(ShipmentInternal, self).init(cursor, module_name)
+
def default_state(self, cursor, user, context=None):
return 'draft'
@@ -1229,7 +1369,7 @@ class PackingInternal(ModelWorkflow, ModelSQL, ModelView):
return True
def __init__(self):
- super(PackingInternal, self).__init__()
+ super(ShipmentInternal, self).__init__()
self._rpc.update({
'button_draft': True,
})
@@ -1238,70 +1378,72 @@ class PackingInternal(ModelWorkflow, ModelSQL, ModelView):
def create(self, cursor, user, values, context=None):
values = values.copy()
values['code'] = self.pool.get('ir.sequence').get(
- cursor, user, 'stock.packing.internal', context=context)
- return super(PackingInternal, self).create(
+ cursor, user, 'stock.shipment.internal', context=context)
+ return super(ShipmentInternal, self).create(
cursor, user, values, context=context)
- def set_state_draft(self, cursor, user, packing_id, context=None):
+ def set_state_draft(self, cursor, user, shipment_id, context=None):
move_obj = self.pool.get('stock.move')
- packing = self.browse(cursor, user, packing_id, context=context)
+ shipment = self.browse(cursor, user, shipment_id, context=context)
self.write(
- cursor, user, packing_id, {'state': 'draft'}, context=context)
+ cursor, user, shipment_id, {'state': 'draft'}, context=context)
move_obj.write(
- cursor, user, [m.id for m in packing.moves], {'state': 'draft'},
+ cursor, user, [m.id for m in shipment.moves], {'state': 'draft'},
context=context)
- def set_state_waiting(self, cursor, user, packing_id, context=None):
+ def set_state_waiting(self, cursor, user, shipment_id, context=None):
move_obj = self.pool.get('stock.move')
- packing = self.browse(cursor, user, packing_id, context=context)
- move_obj.write(cursor, user, [m.id for m in packing.moves], {
- 'from_location': packing.from_location.id,
- 'to_location': packing.to_location.id,
+ shipment = self.browse(cursor, user, shipment_id, context=context)
+ move_obj.write(cursor, user, [m.id for m in shipment.moves], {
+ 'from_location': shipment.from_location.id,
+ 'to_location': shipment.to_location.id,
'state': 'draft',
- 'planned_date': packing.planned_date,
+ 'planned_date': shipment.planned_date,
}, context=context)
self.write(
- cursor, user, packing_id, {'state': 'waiting'}, context=context)
+ cursor, user, shipment_id, {'state': 'waiting'}, context=context)
- def set_state_assigned(self, cursor, user, packing_id, context=None):
+ def set_state_assigned(self, cursor, user, shipment_id, context=None):
self.write(
- cursor, user, packing_id, {'state': 'assigned'}, context=context)
+ cursor, user, shipment_id, {'state': 'assigned'}, context=context)
- def set_state_done(self, cursor, user, packing_id, context=None):
+ def set_state_done(self, cursor, user, shipment_id, context=None):
move_obj = self.pool.get('stock.move')
- packing = self.browse(cursor, user, packing_id, context=context)
+ date_obj = self.pool.get('ir.date')
+
+ shipment = self.browse(cursor, user, shipment_id, context=context)
move_obj.write(
- cursor, user, [m.id for m in packing.moves], {'state': 'done'},
+ cursor, user, [m.id for m in shipment.moves], {'state': 'done'},
context=context)
- self.write( cursor, user, packing_id,
- {'state': 'done',
- 'effective_date': datetime.date.today()},
- context=context)
+ self.write(cursor, user, shipment_id, {
+ 'state': 'done',
+ 'effective_date': date_obj.today(cursor, user, context=context),
+ }, context=context)
- def set_state_cancel(self, cursor, user, packing_id, context=None):
+ def set_state_cancel(self, cursor, user, shipment_id, context=None):
move_obj = self.pool.get('stock.move')
- packing = self.browse(cursor, user, packing_id, context=context)
+ shipment = self.browse(cursor, user, shipment_id, context=context)
move_obj.write(
- cursor, user, [m.id for m in packing.moves], {'state': 'cancel'},
+ cursor, user, [m.id for m in shipment.moves], {'state': 'cancel'},
context=context)
self.write(
- cursor, user, packing_id, {'state': 'cancel'}, context=context)
+ cursor, user, shipment_id, {'state': 'cancel'}, context=context)
- def assign_try(self, cursor, user, packing_id, context=None):
+ def assign_try(self, cursor, user, shipment_id, context=None):
move_obj = self.pool.get('stock.move')
- packing = self.browse(cursor, user, packing_id, context=context)
+ shipment = self.browse(cursor, user, shipment_id, context=context)
return move_obj.assign_try(
- cursor, user, packing.moves, context=context)
+ cursor, user, shipment.moves, context=context)
- def assign_force(self, cursor, user, packing_id, context=None):
- packing = self.browse(cursor, user, packing_id, context=context)
+ def assign_force(self, cursor, user, shipment_id, context=None):
+ shipment = self.browse(cursor, user, shipment_id, context=context)
move_obj = self.pool.get('stock.move')
- move_obj.write(cursor, user, [m.id for m in packing.moves], {
+ move_obj.write(cursor, user, [m.id for m in shipment.moves], {
'state': 'assigned',
}, context=context)
return True
-PackingInternal()
+ShipmentInternal()
class Address(ModelSQL, ModelView):
@@ -1311,20 +1453,20 @@ class Address(ModelSQL, ModelView):
Address()
-class AssignPackingInternalAskForce(ModelView):
+class AssignShipmentInternalAskForce(ModelView):
'Assign Shipment Internal Ask Force'
- _name = 'stock.packing.internal.assign.ask_force'
+ _name = 'stock.shipment.internal.assign.ask_force'
_description = __doc__
moves = fields.Many2Many('stock.move', None, None, 'Moves',
readonly=True)
-AssignPackingInternalAskForce()
+AssignShipmentInternalAskForce()
-class AssignPackingInternal(Wizard):
+class AssignShipmentInternal(Wizard):
'Assign Shipment Internal'
- _name = 'stock.packing.internal.assign'
+ _name = 'stock.shipment.internal.assign'
states = {
'init': {
'result': {
@@ -1336,7 +1478,7 @@ class AssignPackingInternal(Wizard):
'actions': ['_moves'],
'result': {
'type': 'form',
- 'object': 'stock.packing.internal.assign.ask_force',
+ 'object': 'stock.shipment.internal.assign.ask_force',
'state': [
('force', 'Force Assign', 'tryton-go-next'),
('end', 'Ok', 'tryton-ok', True),
@@ -1353,47 +1495,47 @@ class AssignPackingInternal(Wizard):
}
def _choice(self, cursor, user, data, context=None):
- packing_internal_obj = self.pool.get('stock.packing.internal')
+ shipment_internal_obj = self.pool.get('stock.shipment.internal')
- packing_internal_obj.workflow_trigger_validate(cursor, user,
+ shipment_internal_obj.workflow_trigger_validate(cursor, user,
data['id'], 'assign', context=context)
- packing = packing_internal_obj.browse(cursor, user, data['id'],
+ shipment = shipment_internal_obj.browse(cursor, user, data['id'],
context=context)
- if not [x.id for x in packing.moves if x.state == 'draft']:
+ if not [x.id for x in shipment.moves if x.state == 'draft']:
return 'end'
else:
return 'ask_force'
def _moves(self, cursor, user, data, context=None):
- packing_internal_obj = self.pool.get('stock.packing.internal')
- packing = packing_internal_obj.browse(cursor, user, data['id'],
+ shipment_internal_obj = self.pool.get('stock.shipment.internal')
+ shipment = shipment_internal_obj.browse(cursor, user, data['id'],
context=context)
- return {'moves': [x.id for x in packing.moves if x.state == 'draft']}
+ return {'moves': [x.id for x in shipment.moves if x.state == 'draft']}
def _force(self, cursor, user, data, context=None):
- packing_internal_obj = self.pool.get('stock.packing.internal')
+ shipment_internal_obj = self.pool.get('stock.shipment.internal')
- packing_internal_obj.workflow_trigger_validate(cursor, user,
+ shipment_internal_obj.workflow_trigger_validate(cursor, user,
data['id'], 'force_assign', context=context)
return {}
-AssignPackingInternal()
+AssignShipmentInternal()
-class AssignPackingInReturnAskForce(ModelView):
+class AssignShipmentInReturnAskForce(ModelView):
'Assign Supplier Return Shipment Ask Force'
- _name = 'stock.packing.in.return.assign.ask_force'
+ _name = 'stock.shipment.in.return.assign.ask_force'
_description = __doc__
moves = fields.Many2Many('stock.move', None, None, 'Moves',
readonly=True)
-AssignPackingInReturnAskForce()
+AssignShipmentInReturnAskForce()
-class AssignPackingInReturn(Wizard):
+class AssignShipmentInReturn(Wizard):
'Assign Supplier Return Shipment'
- _name = 'stock.packing.in.return.assign'
+ _name = 'stock.shipment.in.return.assign'
states = {
'init': {
'result': {
@@ -1405,7 +1547,7 @@ class AssignPackingInReturn(Wizard):
'actions': ['_moves'],
'result': {
'type': 'form',
- 'object': 'stock.packing.in.return.assign.ask_force',
+ 'object': 'stock.shipment.in.return.assign.ask_force',
'state': [
('force', 'Force Assign', 'tryton-go-next'),
('end', 'Ok', 'tryton-ok', True),
@@ -1422,36 +1564,36 @@ class AssignPackingInReturn(Wizard):
}
def _choice(self, cursor, user, data, context=None):
- packing_internal_obj = self.pool.get('stock.packing.in.return')
+ shipment_internal_obj = self.pool.get('stock.shipment.in.return')
- packing_internal_obj.workflow_trigger_validate(cursor, user,
+ shipment_internal_obj.workflow_trigger_validate(cursor, user,
data['id'], 'assign', context=context)
- packing = packing_internal_obj.browse(cursor, user, data['id'],
+ shipment = shipment_internal_obj.browse(cursor, user, data['id'],
context=context)
- if not [x.id for x in packing.moves if x.state == 'draft']:
+ if not [x.id for x in shipment.moves if x.state == 'draft']:
return 'end'
else:
return 'ask_force'
def _moves(self, cursor, user, data, context=None):
- packing_internal_obj = self.pool.get('stock.packing.in.return')
- packing = packing_internal_obj.browse(cursor, user, data['id'],
+ shipment_internal_obj = self.pool.get('stock.shipment.in.return')
+ shipment = shipment_internal_obj.browse(cursor, user, data['id'],
context=context)
- return {'moves': [x.id for x in packing.moves if x.state == 'draft']}
+ return {'moves': [x.id for x in shipment.moves if x.state == 'draft']}
def _force(self, cursor, user, data, context=None):
- packing_internal_obj = self.pool.get('stock.packing.in.return')
+ shipment_internal_obj = self.pool.get('stock.shipment.in.return')
- packing_internal_obj.workflow_trigger_validate(cursor, user,
+ shipment_internal_obj.workflow_trigger_validate(cursor, user,
data['id'], 'force_assign', context=context)
return {}
-AssignPackingInReturn()
+AssignShipmentInReturn()
-class CreatePackingOutReturn(Wizard):
+class CreateShipmentOutReturn(Wizard):
'Create Customer Return Shipment'
- _name = 'stock.packing.out.return.create'
+ _name = 'stock.shipment.out.return.create'
states = {
'init': {
'result': {
@@ -1462,71 +1604,71 @@ class CreatePackingOutReturn(Wizard):
},
}
def __init__(self):
- super(CreatePackingOutReturn, self).__init__()
+ super(CreateShipmentOutReturn, self).__init__()
self._error_messages.update({
- 'packing_done_title': 'You can not create return packing',
- 'packing_done_msg': 'The packing with code %s is not yet sent.',
+ 'shipment_done_title': 'You can not create return shipment',
+ 'shipment_done_msg': 'The shipment with code %s is not yet sent.',
})
def _create(self, cursor, user, data, context=None):
model_data_obj = self.pool.get('ir.model.data')
act_window_obj = self.pool.get('ir.action.act_window')
- packing_out_obj = self.pool.get('stock.packing.out')
- packing_out_return_obj = self.pool.get('stock.packing.out.return')
+ shipment_out_obj = self.pool.get('stock.shipment.out')
+ shipment_out_return_obj = self.pool.get('stock.shipment.out.return')
- packing_outs = packing_out_obj.browse(
+ shipment_outs = shipment_out_obj.browse(
cursor, user, data['ids'], context=context)
- packing_out_return_ids = []
- for packing_out in packing_outs:
- if packing_out.state != 'done':
+ shipment_out_return_ids = []
+ for shipment_out in shipment_outs:
+ if shipment_out.state != 'done':
self.raise_user_error(
- cursor, 'packing_done_title',
- error_description='packing_done_msg',
- error_description_args=packing_out.code,
+ cursor, 'shipment_done_title',
+ error_description='shipment_done_msg',
+ error_description_args=shipment_out.code,
context=context)
incoming_moves = []
- for move in packing_out.outgoing_moves:
+ for move in shipment_out.outgoing_moves:
incoming_moves.append(('create', {
'product': move.product.id,
'quantity': move.quantity,
'uom': move.uom.id,
'from_location': move.to_location.id,
- 'to_location': packing_out.warehouse.input_location.id,
+ 'to_location': shipment_out.warehouse.input_location.id,
'company': move.company.id,
}))
- packing_out_return_ids.append(
- packing_out_return_obj.create(
+ shipment_out_return_ids.append(
+ shipment_out_return_obj.create(
cursor, user,
- {'customer': packing_out.customer.id,
- 'delivery_address': packing_out.delivery_address.id,
- 'warehouse': packing_out.warehouse.id,
+ {'customer': shipment_out.customer.id,
+ 'delivery_address': shipment_out.delivery_address.id,
+ 'warehouse': shipment_out.warehouse.id,
'incoming_moves': incoming_moves,
},
context=context)
)
model_data_ids = model_data_obj.search(cursor, user, [
- ('fs_id', '=', 'act_packing_out_return_form'),
+ ('fs_id', '=', 'act_shipment_out_return_form'),
('module', '=', 'stock'),
('inherit', '=', False),
], limit=1, context=context)
model_data = model_data_obj.browse(cursor, user, model_data_ids[0],
context=context)
res = act_window_obj.read(cursor, user, model_data.db_id, context=context)
- res['res_id'] = packing_out_return_ids
- if len(packing_out_return_ids) == 1:
+ res['res_id'] = shipment_out_return_ids
+ if len(shipment_out_return_ids) == 1:
res['views'].reverse()
return res
-CreatePackingOutReturn()
+CreateShipmentOutReturn()
class DeliveryNote(CompanyReport):
- _name = 'stock.packing.out.delivery_note'
+ _name = 'stock.shipment.out.delivery_note'
def parse(self, cursor, user, report, objects, datas, context):
if context is None:
@@ -1549,19 +1691,19 @@ DeliveryNote()
class PickingList(CompanyReport):
- _name = 'stock.packing.out.picking_list'
+ _name = 'stock.shipment.out.picking_list'
def parse(self, cursor, user, report, objects, datas, context):
move_obj = self.pool.get('stock.move')
- packing_out_obj = self.pool.get('stock.packing.out')
+ shipment_out_obj = self.pool.get('stock.shipment.out')
compare_context = self.get_compare_context(
cursor, user, report, objects, datas, context)
sorted_moves = {}
- for packing in objects:
- sorted_moves[packing.id] = sorted(
- packing.inventory_moves,
+ for shipment in objects:
+ sorted_moves[shipment.id] = sorted(
+ shipment.inventory_moves,
lambda x,y: cmp(self.get_compare_key(x, compare_context),
self.get_compare_key(y, compare_context))
)
@@ -1599,19 +1741,19 @@ PickingList()
class SupplierRestockingList(CompanyReport):
- _name = 'stock.packing.in.restocking_list'
+ _name = 'stock.shipment.in.restocking_list'
def parse(self, cursor, user, report, objects, datas, context):
move_obj = self.pool.get('stock.move')
- packing_in_obj = self.pool.get('stock.packing.in')
+ shipment_in_obj = self.pool.get('stock.shipment.in')
compare_context = self.get_compare_context(
cursor, user, report, objects, datas, context)
sorted_moves = {}
- for packing in objects:
- sorted_moves[packing.id] = sorted(
- packing.inventory_moves,
+ for shipment in objects:
+ sorted_moves[shipment.id] = sorted(
+ shipment.inventory_moves,
lambda x,y: cmp(self.get_compare_key(x, compare_context),
self.get_compare_key(y, compare_context))
)
@@ -1649,19 +1791,19 @@ SupplierRestockingList()
class CustomerReturnRestockingList(CompanyReport):
- _name = 'stock.packing.out.return.restocking_list'
+ _name = 'stock.shipment.out.return.restocking_list'
def parse(self, cursor, user, report, objects, datas, context):
move_obj = self.pool.get('stock.move')
- packing_in_obj = self.pool.get('stock.packing.out.return')
+ shipment_in_obj = self.pool.get('stock.shipment.out.return')
compare_context = self.get_compare_context(
cursor, user, report, objects, datas, context)
sorted_moves = {}
- for packing in objects:
- sorted_moves[packing.id] = sorted(
- packing.inventory_moves,
+ for shipment in objects:
+ sorted_moves[shipment.id] = sorted(
+ shipment.inventory_moves,
lambda x,y: cmp(self.get_compare_key(x, compare_context),
self.get_compare_key(y, compare_context))
)
@@ -1698,27 +1840,27 @@ class CustomerReturnRestockingList(CompanyReport):
CustomerReturnRestockingList()
-class InteralPackingReport(CompanyReport):
- _name = 'stock.packing.internal.report'
+class InteralShipmentReport(CompanyReport):
+ _name = 'stock.shipment.internal.report'
def parse(self, cursor, user, report, objects, datas, context):
move_obj = self.pool.get('stock.move')
- packing_in_obj = self.pool.get('stock.packing.internal')
+ shipment_in_obj = self.pool.get('stock.shipment.internal')
compare_context = self.get_compare_context(
cursor, user, report, objects, datas, context)
sorted_moves = {}
- for packing in objects:
- sorted_moves[packing.id] = sorted(
- packing.moves,
+ for shipment in objects:
+ sorted_moves[shipment.id] = sorted(
+ shipment.moves,
lambda x,y: cmp(self.get_compare_key(x, compare_context),
self.get_compare_key(y, compare_context))
)
context['moves'] = sorted_moves
- return super(InteralPackingReport, self).parse(
+ return super(InteralShipmentReport, self).parse(
cursor, user, report, objects, datas, context)
def get_compare_context(self, cursor, user, report, objects, datas, context):
@@ -1745,4 +1887,4 @@ class InteralPackingReport(CompanyReport):
return [from_location_ids.index(move.from_location.id),
to_location_ids.index(move.to_location.id)]
-InteralPackingReport()
+InteralShipmentReport()
diff --git a/packing.xml b/shipment.xml
similarity index 61%
rename from packing.xml
rename to shipment.xml
index 9c87164..1e3d35c 100644
--- a/packing.xml
+++ b/shipment.xml
@@ -5,8 +5,8 @@ this repository contains the full copyright notices and license terms. -->
<data>
<!--Shipment in view-->
- <record model="ir.ui.view" id="packing_in_view_form">
- <field name="model">stock.packing.in</field>
+ <record model="ir.ui.view" id="shipment_in_view_form">
+ <field name="model">stock.shipment.in</field>
<field name="type">form</field>
<field name="arch" type="xml">
<![CDATA[
@@ -67,8 +67,8 @@ this repository contains the full copyright notices and license terms. -->
]]>
</field>
</record>
- <record model="ir.ui.view" id="packing_in_view_tree">
- <field name="model">stock.packing.in</field>
+ <record model="ir.ui.view" id="shipment_in_view_tree">
+ <field name="model">stock.shipment.in</field>
<field name="type">tree</field>
<field name="arch" type="xml">
<![CDATA[
@@ -84,77 +84,77 @@ this repository contains the full copyright notices and license terms. -->
]]>
</field>
</record>
- <record model="ir.action.act_window" id="act_packing_in_form">
+ <record model="ir.action.act_window" id="act_shipment_in_form">
<field name="name">Supplier Shipments</field>
- <field name="res_model">stock.packing.in</field>
+ <field name="res_model">stock.shipment.in</field>
<field name="view_type">form</field>
</record>
<record model="ir.action.act_window.view"
- id="act_packing_in_form_view1">
+ id="act_shipment_in_form_view1">
<field name="sequence" eval="1"/>
- <field name="view" ref="packing_in_view_tree"/>
- <field name="act_window" ref="act_packing_in_form"/>
+ <field name="view" ref="shipment_in_view_tree"/>
+ <field name="act_window" ref="act_shipment_in_form"/>
</record>
<record model="ir.action.act_window.view"
- id="act_packing_in_form_view2">
+ id="act_shipment_in_form_view2">
<field name="sequence" eval="2"/>
- <field name="view" ref="packing_in_view_form"/>
- <field name="act_window" ref="act_packing_in_form"/>
+ <field name="view" ref="shipment_in_view_form"/>
+ <field name="act_window" ref="act_shipment_in_form"/>
</record>
<menuitem parent="menu_stock" sequence="20"
- action="act_packing_in_form" id="menu_packing_in_form"/>
+ action="act_shipment_in_form" id="menu_shipment_in_form"/>
- <record model="ir.action.act_window" id="act_packing_in_form2">
+ <record model="ir.action.act_window" id="act_shipment_in_form2">
<field name="name">New Supplier Shipment</field>
- <field name="res_model">stock.packing.in</field>
+ <field name="res_model">stock.shipment.in</field>
<field name="view_type">form</field>
</record>
<record model="ir.action.act_window.view"
- id="act_packing_in_form2_view1">
+ id="act_shipment_in_form2_view1">
<field name="sequence" eval="1"/>
- <field name="view" ref="packing_in_view_form"/>
- <field name="act_window" ref="act_packing_in_form2"/>
+ <field name="view" ref="shipment_in_view_form"/>
+ <field name="act_window" ref="act_shipment_in_form2"/>
</record>
<record model="ir.action.act_window.view"
- id="act_packing_in_form2_view2">
+ id="act_shipment_in_form2_view2">
<field name="sequence" eval="2"/>
- <field name="view" ref="packing_in_view_tree"/>
- <field name="act_window" ref="act_packing_in_form2"/>
+ <field name="view" ref="shipment_in_view_tree"/>
+ <field name="act_window" ref="act_shipment_in_form2"/>
</record>
- <menuitem parent="menu_packing_in_form" sequence="10"
- action="act_packing_in_form2" id="menu_packing_in_form2"/>
+ <menuitem parent="menu_shipment_in_form" sequence="10"
+ action="act_shipment_in_form2" id="menu_shipment_in_form2"/>
- <record model="ir.action.act_window" id="act_packing_in_form_received">
- <field name="name">Received Supplier packings</field>
- <field name="res_model">stock.packing.in</field>
+ <record model="ir.action.act_window" id="act_shipment_in_form_received">
+ <field name="name">Received Supplier shipments</field>
+ <field name="res_model">stock.shipment.in</field>
<field name="view_type">form</field>
<field name="domain">[('state', '=', 'received')]</field>
</record>
<record model="ir.action.act_window.view"
- id="act_packing_in_received_form_view1">
+ id="act_shipment_in_received_form_view1">
<field name="sequence" eval="1"/>
- <field name="view" ref="packing_in_view_tree"/>
- <field name="act_window" ref="act_packing_in_form_received"/>
+ <field name="view" ref="shipment_in_view_tree"/>
+ <field name="act_window" ref="act_shipment_in_form_received"/>
</record>
<record model="ir.action.act_window.view"
- id="act_packing_in_received_form_view2">
+ id="act_shipment_in_received_form_view2">
<field name="sequence" eval="2"/>
- <field name="view" ref="packing_in_view_form"/>
- <field name="act_window" ref="act_packing_in_form_received"/>
+ <field name="view" ref="shipment_in_view_form"/>
+ <field name="act_window" ref="act_shipment_in_form_received"/>
</record>
- <menuitem parent="menu_packing_in_form" sequence="20"
- action="act_packing_in_form_received"
- id="menu_packing_in_received"/>
+ <menuitem parent="menu_shipment_in_form" sequence="20"
+ action="act_shipment_in_form_received"
+ id="menu_shipment_in_received"/>
<!-- Shipment In Return view-->
- <record model="ir.action.wizard" id="wizard_packing_in_return_assign">
+ <record model="ir.action.wizard" id="wizard_shipment_in_return_assign">
<field name="name">Assign Purchase Return Shipment</field>
- <field name="wiz_name">stock.packing.in.return.assign</field>
- <field name="model">stock.packing.in.return</field>
+ <field name="wiz_name">stock.shipment.in.return.assign</field>
+ <field name="model">stock.shipment.in.return</field>
</record>
- <record model="ir.ui.view" id="packing_in_return_view_form">
- <field name="model">stock.packing.in.return</field>
+ <record model="ir.ui.view" id="shipment_in_return_view_form">
+ <field name="model">stock.shipment.in.return</field>
<field name="type">form</field>
<field name="arch" type="xml">
<![CDATA[
@@ -184,7 +184,7 @@ this repository contains the full copyright notices and license terms. -->
icon="tryton-go-previous"/>
<button string="Waiting" name="waiting"
states="{'invisible': '''state not in ('assigned', 'draft')''', 'readonly': '''%(group_stock)d not in groups''', 'icon': '''state == 'assigned' and 'tryton-go-previous' or state == 'draft' and 'tryton-go-next' or False'''}"/>
- <button string="Assign" name="%(wizard_packing_in_return_assign)d"
+ <button string="Assign" name="%(wizard_shipment_in_return_assign)d"
type="action"
states="{'invisible': '''state != 'waiting' ''', 'readonly': '''%(group_stock)d not in groups'''}"
icon="tryton-go-next"/>
@@ -199,8 +199,8 @@ this repository contains the full copyright notices and license terms. -->
]]>
</field>
</record>
- <record model="ir.ui.view" id="packing_in_return_view_tree">
- <field name="model">stock.packing.in.return</field>
+ <record model="ir.ui.view" id="shipment_in_return_view_tree">
+ <field name="model">stock.shipment.in.return</field>
<field name="type">tree</field>
<field name="arch" type="xml">
<![CDATA[
@@ -216,50 +216,50 @@ this repository contains the full copyright notices and license terms. -->
]]>
</field>
</record>
- <record model="ir.action.act_window" id="act_packing_in_return_form">
+ <record model="ir.action.act_window" id="act_shipment_in_return_form">
<field name="name">Supplier Return Shipments</field>
- <field name="res_model">stock.packing.in.return</field>
+ <field name="res_model">stock.shipment.in.return</field>
<field name="view_type">form</field>
</record>
<record model="ir.action.act_window.view"
- id="act_packing_in_return_form_view1">
+ id="act_shipment_in_return_form_view1">
<field name="sequence" eval="1"/>
- <field name="view" ref="packing_in_return_view_tree"/>
- <field name="act_window" ref="act_packing_in_return_form"/>
+ <field name="view" ref="shipment_in_return_view_tree"/>
+ <field name="act_window" ref="act_shipment_in_return_form"/>
</record>
<record model="ir.action.act_window.view"
- id="act_packing_in_return_form_view2">
+ id="act_shipment_in_return_form_view2">
<field name="sequence" eval="2"/>
- <field name="view" ref="packing_in_return_view_form"/>
- <field name="act_window" ref="act_packing_in_return_form"/>
+ <field name="view" ref="shipment_in_return_view_form"/>
+ <field name="act_window" ref="act_shipment_in_return_form"/>
</record>
- <menuitem parent="menu_packing_in_form" sequence="40"
- action="act_packing_in_return_form"
- id="menu_packing_in_return_form"/>
+ <menuitem parent="menu_shipment_in_form" sequence="40"
+ action="act_shipment_in_return_form"
+ id="menu_shipment_in_return_form"/>
- <record model="ir.action.act_window" id="act_packing_in_return_new_form">
+ <record model="ir.action.act_window" id="act_shipment_in_return_new_form">
<field name="name">New Supplier Return Shipment</field>
- <field name="res_model">stock.packing.in.return</field>
+ <field name="res_model">stock.shipment.in.return</field>
<field name="view_type">form</field>
</record>
<record model="ir.action.act_window.view"
- id="act_packing_in_return_new_form_view1">
+ id="act_shipment_in_return_new_form_view1">
<field name="sequence" eval="2"/>
- <field name="view" ref="packing_in_return_view_tree"/>
- <field name="act_window" ref="act_packing_in_return_new_form"/>
+ <field name="view" ref="shipment_in_return_view_tree"/>
+ <field name="act_window" ref="act_shipment_in_return_new_form"/>
</record>
<record model="ir.action.act_window.view"
- id="act_packing_in_return_new_form_view2">
+ id="act_shipment_in_return_new_form_view2">
<field name="sequence" eval="1"/>
- <field name="view" ref="packing_in_return_view_form"/>
- <field name="act_window" ref="act_packing_in_return_new_form"/>
+ <field name="view" ref="shipment_in_return_view_form"/>
+ <field name="act_window" ref="act_shipment_in_return_new_form"/>
</record>
- <menuitem parent="menu_packing_in_return_form" sequence="10"
- action="act_packing_in_return_new_form"
- id="menu_packing_in_return_new_form"/>
+ <menuitem parent="menu_shipment_in_return_form" sequence="10"
+ action="act_shipment_in_return_new_form"
+ id="menu_shipment_in_return_new_form"/>
- <record model="ir.ui.view" id="packing_in_return_assign_ask_force_view_form">
- <field name="model">stock.packing.in.return.assign.ask_force</field>
+ <record model="ir.ui.view" id="shipment_in_return_assign_ask_force_view_form">
+ <field name="model">stock.shipment.in.return.assign.ask_force</field>
<field name="type">form</field>
<field name="arch" type="xml">
<![CDATA[
@@ -283,14 +283,14 @@ this repository contains the full copyright notices and license terms. -->
</record>
<!--Shipment out view-->
- <record model="ir.action.wizard" id="wizard_packing_out_assign">
+ <record model="ir.action.wizard" id="wizard_shipment_out_assign">
<field name="name">Assign Shipment Out</field>
- <field name="wiz_name">stock.packing.out.assign</field>
- <field name="model">stock.packing.out</field>
+ <field name="wiz_name">stock.shipment.out.assign</field>
+ <field name="model">stock.shipment.out</field>
</record>
- <record model="ir.ui.view" id="packing_out_view_form">
- <field name="model">stock.packing.out</field>
+ <record model="ir.ui.view" id="shipment_out_view_form">
+ <field name="model">stock.shipment.out</field>
<field name="type">form</field>
<field name="arch" type="xml">
<![CDATA[
@@ -329,11 +329,11 @@ this repository contains the full copyright notices and license terms. -->
icon="tryton-go-previous"/>
<button string="Waiting" name="waiting"
states="{'invisible': '''state not in ('assigned', 'waiting', 'draft')''', 'readonly': '''%(group_stock)d not in groups''', 'icon': '''state == 'assigned' and 'tryton-go-previous' or state == 'waiting' and 'tryton-clear' or state == 'draft' and 'tryton-go-next' or False'''}"/>
- <button string="Assign" name="%(wizard_packing_out_assign)d"
+ <button string="Assign" name="%(wizard_shipment_out_assign)d"
type="action"
states="{'invisible': '''state != 'waiting' ''', 'readonly': '''%(group_stock)d not in groups'''}"
icon="tryton-go-next"/>
- <button string="Make packing" name="packed"
+ <button string="Make shipment" name="packed"
states="{'invisible': '''state != 'assigned' ''', 'readonly': '''%(group_stock)d not in groups'''}"
icon="tryton-go-next"/>
<button string="Done" name="done"
@@ -349,8 +349,8 @@ this repository contains the full copyright notices and license terms. -->
]]>
</field>
</record>
- <record model="ir.ui.view" id="packing_out_view_tree">
- <field name="model">stock.packing.out</field>
+ <record model="ir.ui.view" id="shipment_out_view_tree">
+ <field name="model">stock.shipment.out</field>
<field name="type">tree</field>
<field name="arch" type="xml">
<![CDATA[
@@ -367,105 +367,105 @@ this repository contains the full copyright notices and license terms. -->
</field>
</record>
- <record model="ir.action.wizard" id="create_packing_out_return">
+ <record model="ir.action.wizard" id="create_shipment_out_return">
<field name="name">Create Return Shipment</field>
- <field name="wiz_name">stock.packing.out.return.create</field>
- <field name="model">stock.packing.out</field>
+ <field name="wiz_name">stock.shipment.out.return.create</field>
+ <field name="model">stock.shipment.out</field>
</record>
- <record model="ir.action.keyword" id="create_packing_out_return_keyword">
+ <record model="ir.action.keyword" id="create_shipment_out_return_keyword">
<field name="keyword">form_action</field>
- <field name="model">stock.packing.out,0</field>
- <field name="action" ref="create_packing_out_return"/>
+ <field name="model">stock.shipment.out,0</field>
+ <field name="action" ref="create_shipment_out_return"/>
</record>
- <record model="ir.action.act_window" id="act_packing_out_form">
+ <record model="ir.action.act_window" id="act_shipment_out_form">
<field name="name">Customer Shipments</field>
- <field name="res_model">stock.packing.out</field>
+ <field name="res_model">stock.shipment.out</field>
<field name="view_type">form</field>
</record>
<record model="ir.action.act_window.view"
- id="act_packing_out_form_view1">
+ id="act_shipment_out_form_view1">
<field name="sequence" eval="1"/>
- <field name="view" ref="packing_out_view_tree"/>
- <field name="act_window" ref="act_packing_out_form"/>
+ <field name="view" ref="shipment_out_view_tree"/>
+ <field name="act_window" ref="act_shipment_out_form"/>
</record>
<record model="ir.action.act_window.view"
- id="act_packing_out_form_view2">
+ id="act_shipment_out_form_view2">
<field name="sequence" eval="2"/>
- <field name="view" ref="packing_out_view_form"/>
- <field name="act_window" ref="act_packing_out_form"/>
+ <field name="view" ref="shipment_out_view_form"/>
+ <field name="act_window" ref="act_shipment_out_form"/>
</record>
<menuitem parent="menu_stock" sequence="30"
- action="act_packing_out_form" id="menu_packing_out_form"/>
+ action="act_shipment_out_form" id="menu_shipment_out_form"/>
- <record model="ir.action.act_window" id="act_packing_out_form_waiting">
+ <record model="ir.action.act_window" id="act_shipment_out_form_waiting">
<field name="name">Customer Shipments Waiting Assignation</field>
- <field name="res_model">stock.packing.out</field>
+ <field name="res_model">stock.shipment.out</field>
<field name="view_type">form</field>
<field name="domain">[('state', '=', 'waiting')]</field>
</record>
<record model="ir.action.act_window.view"
- id="act_packing_out_waiting_form_view1">
+ id="act_shipment_out_waiting_form_view1">
<field name="sequence" eval="1"/>
- <field name="view" ref="packing_out_view_tree"/>
- <field name="act_window" ref="act_packing_out_form_waiting"/>
+ <field name="view" ref="shipment_out_view_tree"/>
+ <field name="act_window" ref="act_shipment_out_form_waiting"/>
</record>
<record model="ir.action.act_window.view"
- id="act_packing_out_waiting_form_view2">
+ id="act_shipment_out_waiting_form_view2">
<field name="sequence" eval="2"/>
- <field name="view" ref="packing_out_view_form"/>
- <field name="act_window" ref="act_packing_out_form_waiting"/>
+ <field name="view" ref="shipment_out_view_form"/>
+ <field name="act_window" ref="act_shipment_out_form_waiting"/>
</record>
- <menuitem parent="menu_packing_out_form" sequence="10"
- action="act_packing_out_form_waiting"
- id="menu_packing_out_waiting"/>
+ <menuitem parent="menu_shipment_out_form" sequence="10"
+ action="act_shipment_out_form_waiting"
+ id="menu_shipment_out_waiting"/>
<record model="ir.action.act_window"
- id="act_packing_out_form_assigned">
+ id="act_shipment_out_form_assigned">
<field name="name">Assigned Customer Shipments</field>
- <field name="res_model">stock.packing.out</field>
+ <field name="res_model">stock.shipment.out</field>
<field name="view_type">form</field>
<field name="domain">[('state', '=', 'assigned')]</field>
</record>
<record model="ir.action.act_window.view"
- id="act_packing_out_assigned_form_view1">
+ id="act_shipment_out_assigned_form_view1">
<field name="sequence" eval="1"/>
- <field name="view" ref="packing_out_view_tree"/>
- <field name="act_window" ref="act_packing_out_form_assigned"/>
+ <field name="view" ref="shipment_out_view_tree"/>
+ <field name="act_window" ref="act_shipment_out_form_assigned"/>
</record>
<record model="ir.action.act_window.view"
- id="act_packing_out_assigned_form_view2">
+ id="act_shipment_out_assigned_form_view2">
<field name="sequence" eval="2"/>
- <field name="view" ref="packing_out_view_form"/>
- <field name="act_window" ref="act_packing_out_form_assigned"/>
+ <field name="view" ref="shipment_out_view_form"/>
+ <field name="act_window" ref="act_shipment_out_form_assigned"/>
</record>
- <menuitem parent="menu_packing_out_form" sequence="20"
- action="act_packing_out_form_assigned"
- id="menu_packing_out_assigned"/>
+ <menuitem parent="menu_shipment_out_form" sequence="20"
+ action="act_shipment_out_form_assigned"
+ id="menu_shipment_out_assigned"/>
- <record model="ir.action.act_window" id="act_packing_out_form_ready">
+ <record model="ir.action.act_window" id="act_shipment_out_form_ready">
<field name="name">Customer Shipments Ready for Shipping</field>
- <field name="res_model">stock.packing.out</field>
+ <field name="res_model">stock.shipment.out</field>
<field name="view_type">form</field>
<field name="domain">[('state', '=', 'packed')]</field>
</record>
<record model="ir.action.act_window.view"
- id="act_packing_out_ready_form_view1">
+ id="act_shipment_out_ready_form_view1">
<field name="sequence" eval="1"/>
- <field name="view" ref="packing_out_view_tree"/>
- <field name="act_window" ref="act_packing_out_form_ready"/>
+ <field name="view" ref="shipment_out_view_tree"/>
+ <field name="act_window" ref="act_shipment_out_form_ready"/>
</record>
<record model="ir.action.act_window.view"
- id="act_packing_out_ready_form_view2">
+ id="act_shipment_out_ready_form_view2">
<field name="sequence" eval="2"/>
- <field name="view" ref="packing_out_view_form"/>
- <field name="act_window" ref="act_packing_out_form_ready"/>
+ <field name="view" ref="shipment_out_view_form"/>
+ <field name="act_window" ref="act_shipment_out_form_ready"/>
</record>
- <menuitem parent="menu_packing_out_form" sequence="30"
- action="act_packing_out_form_ready" id="menu_packing_out_ready"/>
+ <menuitem parent="menu_shipment_out_form" sequence="30"
+ action="act_shipment_out_form_ready" id="menu_shipment_out_ready"/>
- <record model="ir.ui.view" id="packing_out_assign_ask_force_view_form">
- <field name="model">stock.packing.out.assign.ask_force</field>
+ <record model="ir.ui.view" id="shipment_out_assign_ask_force_view_form">
+ <field name="model">stock.shipment.out.assign.ask_force</field>
<field name="type">form</field>
<field name="arch" type="xml">
<![CDATA[
@@ -489,14 +489,14 @@ this repository contains the full copyright notices and license terms. -->
</record>
<!--Internal Shipment view-->
- <record model="ir.action.wizard" id="wizard_packing_internal_assign">
+ <record model="ir.action.wizard" id="wizard_shipment_internal_assign">
<field name="name">Assign Shipment Internal</field>
- <field name="wiz_name">stock.packing.internal.assign</field>
- <field name="model">stock.packing.internal</field>
+ <field name="wiz_name">stock.shipment.internal.assign</field>
+ <field name="model">stock.shipment.internal</field>
</record>
- <record model="ir.ui.view" id="packing_internal_view_form">
- <field name="model">stock.packing.internal</field>
+ <record model="ir.ui.view" id="shipment_internal_view_form">
+ <field name="model">stock.shipment.internal</field>
<field name="type">form</field>
<field name="arch" type="xml">
<![CDATA[
@@ -526,7 +526,7 @@ this repository contains the full copyright notices and license terms. -->
icon="tryton-go-previous"/>
<button string="Waiting" name="waiting"
states="{'invisible': '''state not in ('assigned', 'waiting', 'draft')''', 'readonly': '''%(group_stock)d not in groups''', 'icon': '''state == 'assigned' and 'tryton-go-previous' or state == 'waiting' and 'tryton-clear' or state == 'draft' and 'tryton-go-next' or False'''}"/>
- <button string="Assign" name="%(wizard_packing_internal_assign)d"
+ <button string="Assign" name="%(wizard_shipment_internal_assign)d"
type="action"
states="{'invisible': '''state != 'waiting' ''', 'readonly': '''%(group_stock)d not in groups'''}"
icon="tryton-go-next"/>
@@ -541,8 +541,8 @@ this repository contains the full copyright notices and license terms. -->
]]>
</field>
</record>
- <record model="ir.ui.view" id="packing_internal_view_tree">
- <field name="model">stock.packing.internal</field>
+ <record model="ir.ui.view" id="shipment_internal_view_tree">
+ <field name="model">stock.shipment.internal</field>
<field name="type">tree</field>
<field name="arch" type="xml">
<![CDATA[
@@ -558,116 +558,116 @@ this repository contains the full copyright notices and license terms. -->
]]>
</field>
</record>
- <record model="ir.action.act_window" id="act_packing_internal_form">
+ <record model="ir.action.act_window" id="act_shipment_internal_form">
<field name="name">Internal Shipments</field>
- <field name="res_model">stock.packing.internal</field>
+ <field name="res_model">stock.shipment.internal</field>
<field name="view_type">form</field>
</record>
<record model="ir.action.act_window.view"
- id="act_packing_internal_form_view1">
+ id="act_shipment_internal_form_view1">
<field name="sequence" eval="1"/>
- <field name="view" ref="packing_internal_view_tree"/>
- <field name="act_window" ref="act_packing_internal_form"/>
+ <field name="view" ref="shipment_internal_view_tree"/>
+ <field name="act_window" ref="act_shipment_internal_form"/>
</record>
<record model="ir.action.act_window.view"
- id="act_packing_internal_form_view2">
+ id="act_shipment_internal_form_view2">
<field name="sequence" eval="2"/>
- <field name="view" ref="packing_internal_view_form"/>
- <field name="act_window" ref="act_packing_internal_form"/>
+ <field name="view" ref="shipment_internal_view_form"/>
+ <field name="act_window" ref="act_shipment_internal_form"/>
</record>
<menuitem parent="menu_stock" sequence="35"
- action="act_packing_internal_form"
- id="menu_packing_internal_form"/>
+ action="act_shipment_internal_form"
+ id="menu_shipment_internal_form"/>
- <record model="ir.action.act_window" id="act_packing_internal_new_form">
+ <record model="ir.action.act_window" id="act_shipment_internal_new_form">
<field name="name">New Internal Shipment</field>
- <field name="res_model">stock.packing.internal</field>
+ <field name="res_model">stock.shipment.internal</field>
<field name="view_type">form</field>
</record>
<record model="ir.action.act_window.view"
- id="act_packing_internal_new_form_view1">
+ id="act_shipment_internal_new_form_view1">
<field name="sequence" eval="2"/>
- <field name="view" ref="packing_internal_view_tree"/>
- <field name="act_window" ref="act_packing_internal_new_form"/>
+ <field name="view" ref="shipment_internal_view_tree"/>
+ <field name="act_window" ref="act_shipment_internal_new_form"/>
</record>
<record model="ir.action.act_window.view"
- id="act_packing_internal_new_form_view2">
+ id="act_shipment_internal_new_form_view2">
<field name="sequence" eval="1"/>
- <field name="view" ref="packing_internal_view_form"/>
- <field name="act_window" ref="act_packing_internal_new_form"/>
+ <field name="view" ref="shipment_internal_view_form"/>
+ <field name="act_window" ref="act_shipment_internal_new_form"/>
</record>
- <menuitem parent="menu_packing_internal_form" sequence="10"
- action="act_packing_internal_new_form"
- id="menu_packing_internal_new_form"/>
+ <menuitem parent="menu_shipment_internal_form" sequence="10"
+ action="act_shipment_internal_new_form"
+ id="menu_shipment_internal_new_form"/>
- <record model="ir.action.act_window" id="act_packing_internal_draft_form">
+ <record model="ir.action.act_window" id="act_shipment_internal_draft_form">
<field name="name">Draft Internal Shipments</field>
- <field name="res_model">stock.packing.internal</field>
+ <field name="res_model">stock.shipment.internal</field>
<field name="view_type">form</field>
<field name="domain">[('state', '=', 'draft')]</field>
</record>
<record model="ir.action.act_window.view"
- id="act_packing_internal_draft_form_view1">
+ id="act_shipment_internal_draft_form_view1">
<field name="sequence" eval="1"/>
- <field name="view" ref="packing_internal_view_tree"/>
- <field name="act_window" ref="act_packing_internal_draft_form"/>
+ <field name="view" ref="shipment_internal_view_tree"/>
+ <field name="act_window" ref="act_shipment_internal_draft_form"/>
</record>
<record model="ir.action.act_window.view"
- id="act_packing_internal_draft_form_view2">
+ id="act_shipment_internal_draft_form_view2">
<field name="sequence" eval="2"/>
- <field name="view" ref="packing_internal_view_form"/>
- <field name="act_window" ref="act_packing_internal_draft_form"/>
+ <field name="view" ref="shipment_internal_view_form"/>
+ <field name="act_window" ref="act_shipment_internal_draft_form"/>
</record>
- <menuitem parent="menu_packing_internal_form" sequence="20"
- action="act_packing_internal_draft_form"
- id="menu_packing_internal_draft_form"/>
+ <menuitem parent="menu_shipment_internal_form" sequence="20"
+ action="act_shipment_internal_draft_form"
+ id="menu_shipment_internal_draft_form"/>
- <record model="ir.action.act_window" id="act_packing_internal_waiting_form">
+ <record model="ir.action.act_window" id="act_shipment_internal_waiting_form">
<field name="name">Internal Shipments Waiting Assignation</field>
- <field name="res_model">stock.packing.internal</field>
+ <field name="res_model">stock.shipment.internal</field>
<field name="view_type">form</field>
<field name="domain">[('state', '=', 'waiting')]</field>
</record>
<record model="ir.action.act_window.view"
- id="act_packing_internal_waiting_form_view1">
+ id="act_shipment_internal_waiting_form_view1">
<field name="sequence" eval="1"/>
- <field name="view" ref="packing_internal_view_tree"/>
- <field name="act_window" ref="act_packing_internal_waiting_form"/>
+ <field name="view" ref="shipment_internal_view_tree"/>
+ <field name="act_window" ref="act_shipment_internal_waiting_form"/>
</record>
<record model="ir.action.act_window.view"
- id="act_packing_internal_waiting_form_view2">
+ id="act_shipment_internal_waiting_form_view2">
<field name="sequence" eval="2"/>
- <field name="view" ref="packing_internal_view_form"/>
- <field name="act_window" ref="act_packing_internal_waiting_form"/>
+ <field name="view" ref="shipment_internal_view_form"/>
+ <field name="act_window" ref="act_shipment_internal_waiting_form"/>
</record>
- <menuitem parent="menu_packing_internal_form" sequence="30"
- action="act_packing_internal_waiting_form"
- id="menu_packing_internal_waiting_form"/>
+ <menuitem parent="menu_shipment_internal_form" sequence="30"
+ action="act_shipment_internal_waiting_form"
+ id="menu_shipment_internal_waiting_form"/>
- <record model="ir.action.act_window" id="act_packing_internal_assigned_form">
+ <record model="ir.action.act_window" id="act_shipment_internal_assigned_form">
<field name="name">Assigned Internal Shipments</field>
- <field name="res_model">stock.packing.internal</field>
+ <field name="res_model">stock.shipment.internal</field>
<field name="view_type">form</field>
<field name="domain">[('state', '=', 'assigned')]</field>
</record>
<record model="ir.action.act_window.view"
- id="act_packing_internal_assigned_form_view1">
+ id="act_shipment_internal_assigned_form_view1">
<field name="sequence" eval="1"/>
- <field name="view" ref="packing_internal_view_tree"/>
- <field name="act_window" ref="act_packing_internal_assigned_form"/>
+ <field name="view" ref="shipment_internal_view_tree"/>
+ <field name="act_window" ref="act_shipment_internal_assigned_form"/>
</record>
<record model="ir.action.act_window.view"
- id="act_packing_internal_assigned_form_view2">
+ id="act_shipment_internal_assigned_form_view2">
<field name="sequence" eval="2"/>
- <field name="view" ref="packing_internal_view_form"/>
- <field name="act_window" ref="act_packing_internal_assigned_form"/>
+ <field name="view" ref="shipment_internal_view_form"/>
+ <field name="act_window" ref="act_shipment_internal_assigned_form"/>
</record>
- <menuitem parent="menu_packing_internal_form" sequence="40"
- action="act_packing_internal_assigned_form"
- id="menu_packing_internal_assigned_form"/>
+ <menuitem parent="menu_shipment_internal_form" sequence="40"
+ action="act_shipment_internal_assigned_form"
+ id="menu_shipment_internal_assigned_form"/>
- <record model="ir.ui.view" id="packing_internal_assign_ask_force_view_form">
- <field name="model">stock.packing.internal.assign.ask_force</field>
+ <record model="ir.ui.view" id="shipment_internal_assign_ask_force_view_form">
+ <field name="model">stock.shipment.internal.assign.ask_force</field>
<field name="type">form</field>
<field name="arch" type="xml">
<![CDATA[
@@ -691,8 +691,8 @@ this repository contains the full copyright notices and license terms. -->
</record>
<!--Return Shipment Out view-->
- <record model="ir.ui.view" id="packing_out_return_view_form">
- <field name="model">stock.packing.out.return</field>
+ <record model="ir.ui.view" id="shipment_out_return_view_form">
+ <field name="model">stock.shipment.out.return</field>
<field name="type">form</field>
<field name="arch" type="xml">
<![CDATA[
@@ -753,8 +753,8 @@ this repository contains the full copyright notices and license terms. -->
]]>
</field>
</record>
- <record model="ir.ui.view" id="packing_out_return_view_tree">
- <field name="model">stock.packing.out.return</field>
+ <record model="ir.ui.view" id="shipment_out_return_view_tree">
+ <field name="model">stock.shipment.out.return</field>
<field name="type">tree</field>
<field name="arch" type="xml">
<![CDATA[
@@ -771,651 +771,651 @@ this repository contains the full copyright notices and license terms. -->
</field>
</record>
- <record model="ir.action.act_window" id="act_packing_out_return_form">
+ <record model="ir.action.act_window" id="act_shipment_out_return_form">
<field name="name">Customer Return Shipments</field>
- <field name="res_model">stock.packing.out.return</field>
+ <field name="res_model">stock.shipment.out.return</field>
<field name="view_type">form</field>
</record>
<record model="ir.action.act_window.view"
- id="act_packing_out_return_form_view1">
+ id="act_shipment_out_return_form_view1">
<field name="sequence" eval="1"/>
- <field name="view" ref="packing_out_return_view_tree"/>
- <field name="act_window" ref="act_packing_out_return_form"/>
+ <field name="view" ref="shipment_out_return_view_tree"/>
+ <field name="act_window" ref="act_shipment_out_return_form"/>
</record>
<record model="ir.action.act_window.view"
- id="act_packing_out_return_form_view2">
+ id="act_shipment_out_return_form_view2">
<field name="sequence" eval="2"/>
- <field name="view" ref="packing_out_return_view_form"/>
- <field name="act_window" ref="act_packing_out_return_form"/>
+ <field name="view" ref="shipment_out_return_view_form"/>
+ <field name="act_window" ref="act_shipment_out_return_form"/>
</record>
- <menuitem parent="menu_packing_out_form" sequence="40"
- action="act_packing_out_return_form"
- id="menu_packing_out_return_form"/>
+ <menuitem parent="menu_shipment_out_form" sequence="40"
+ action="act_shipment_out_return_form"
+ id="menu_shipment_out_return_form"/>
- <record model="ir.action.act_window" id="act_packing_out_return_form2">
+ <record model="ir.action.act_window" id="act_shipment_out_return_form2">
<field name="name">New Customer Return Shipment</field>
- <field name="res_model">stock.packing.out.return</field>
+ <field name="res_model">stock.shipment.out.return</field>
<field name="view_type">form</field>
</record>
<record model="ir.action.act_window.view"
- id="act_packing_out_return_form2_view1">
+ id="act_shipment_out_return_form2_view1">
<field name="sequence" eval="1"/>
- <field name="view" ref="packing_out_return_view_form"/>
- <field name="act_window" ref="act_packing_out_return_form2"/>
+ <field name="view" ref="shipment_out_return_view_form"/>
+ <field name="act_window" ref="act_shipment_out_return_form2"/>
</record>
<record model="ir.action.act_window.view"
- id="act_packing_out_return_form2_view2">
+ id="act_shipment_out_return_form2_view2">
<field name="sequence" eval="2"/>
- <field name="view" ref="packing_out_return_view_tree"/>
- <field name="act_window" ref="act_packing_out_return_form2"/>
+ <field name="view" ref="shipment_out_return_view_tree"/>
+ <field name="act_window" ref="act_shipment_out_return_form2"/>
</record>
- <menuitem parent="menu_packing_out_return_form" sequence="10"
- action="act_packing_out_return_form2" id="menu_packing_out_return_form2"/>
+ <menuitem parent="menu_shipment_out_return_form" sequence="10"
+ action="act_shipment_out_return_form2" id="menu_shipment_out_return_form2"/>
- <!-- Workflow packing in -->
- <record model="workflow" id="wkf_packingin">
+ <!-- Workflow shipment in -->
+ <record model="workflow" id="wkf_shipmentin">
<field name="name">Supplier Shipment</field>
- <field name="osv">stock.packing.in</field>
+ <field name="model">stock.shipment.in</field>
<field name="on_create">True</field>
</record>
- <record model="workflow.activity" id="packingin_act_draft">
- <field name="workflow" ref="wkf_packingin"/>
+ <record model="workflow.activity" id="shipmentin_act_draft">
+ <field name="workflow" ref="wkf_shipmentin"/>
<field name="flow_start">True</field>
<field name="kind">function</field>
<field name="action">set_state_draft()</field>
<field name="name">Draft</field>
</record>
- <record model="workflow.activity" id="packingin_act_cancel">
- <field name="workflow" ref="wkf_packingin"/>
+ <record model="workflow.activity" id="shipmentin_act_cancel">
+ <field name="workflow" ref="wkf_shipmentin"/>
<field name="flow_stop">True</field>
<field name="name">Canceled</field>
<field name="kind">function</field>
<field name="action">set_state_cancel()</field>
</record>
- <record model="workflow.activity" id="packingin_act_done">
- <field name="workflow" ref="wkf_packingin"/>
+ <record model="workflow.activity" id="shipmentin_act_done">
+ <field name="workflow" ref="wkf_shipmentin"/>
<field name="flow_stop">True</field>
<field name="name">Done</field>
<field name="kind">function</field>
<field name="action">set_state_done()</field>
</record>
- <record model="workflow.activity" id="packingin_act_received">
+ <record model="workflow.activity" id="shipmentin_act_received">
<field name="name">Received</field>
<field name="kind">function</field>
- <field name="workflow" ref="wkf_packingin"/>
+ <field name="workflow" ref="wkf_shipmentin"/>
<field name="action">set_state_received()
create_inventory_moves()</field>
</record>
<record model="workflow.transition"
- id="packingin_trans_draft_received">
- <field name="act_from" ref="packingin_act_draft"/>
- <field name="act_to" ref="packingin_act_received"/>
+ id="shipmentin_trans_draft_received">
+ <field name="act_from" ref="shipmentin_act_draft"/>
+ <field name="act_to" ref="shipmentin_act_received"/>
<field name="group" ref="group_stock"/>
<field name="signal">received</field>
</record>
<record model="workflow.transition"
- id="packingin_trans_received_draft">
- <field name="act_from" ref="packingin_act_received"/>
- <field name="act_to" ref="packingin_act_draft"/>
+ id="shipmentin_trans_received_draft">
+ <field name="act_from" ref="shipmentin_act_received"/>
+ <field name="act_to" ref="shipmentin_act_draft"/>
<field name="group" ref="group_stock"/>
<field name="signal">draft</field>
</record>
- <record model="workflow.transition" id="packingin_trans_received_done">
- <field name="act_from" ref="packingin_act_received"/>
- <field name="act_to" ref="packingin_act_done"/>
+ <record model="workflow.transition" id="shipmentin_trans_received_done">
+ <field name="act_from" ref="shipmentin_act_received"/>
+ <field name="act_to" ref="shipmentin_act_done"/>
<field name="group" ref="group_stock"/>
<field name="signal">done</field>
</record>
- <record model="workflow.transition" id="packingin_trans_draft_cancel">
- <field name="act_from" ref="packingin_act_draft"/>
- <field name="act_to" ref="packingin_act_cancel"/>
+ <record model="workflow.transition" id="shipmentin_trans_draft_cancel">
+ <field name="act_from" ref="shipmentin_act_draft"/>
+ <field name="act_to" ref="shipmentin_act_cancel"/>
<field name="group" ref="group_stock"/>
<field name="signal">cancel</field>
</record>
<record model="workflow.transition"
- id="packingin_trans_received_cancel">
- <field name="act_from" ref="packingin_act_received"/>
- <field name="act_to" ref="packingin_act_cancel"/>
+ id="shipmentin_trans_received_cancel">
+ <field name="act_from" ref="shipmentin_act_received"/>
+ <field name="act_to" ref="shipmentin_act_cancel"/>
<field name="group" ref="group_stock"/>
<field name="signal">cancel</field>
</record>
- <!-- Workflow packing out -->
- <record model="workflow" id="wkf_packingout">
+ <!-- Workflow shipment out -->
+ <record model="workflow" id="wkf_shipmentout">
<field name="name">Customer Shipment</field>
- <field name="osv">stock.packing.out</field>
+ <field name="model">stock.shipment.out</field>
<field name="on_create">True</field>
</record>
- <record model="workflow.activity" id="packingout_act_draft">
- <field name="workflow" ref="wkf_packingout"/>
+ <record model="workflow.activity" id="shipmentout_act_draft">
+ <field name="workflow" ref="wkf_shipmentout"/>
<field name="flow_start">True</field>
<field name="name">Draft</field>
<field name="kind">function</field>
<field name="action">set_state_draft()</field>
</record>
- <record model="workflow.activity" id="packingout_act_cancel">
- <field name="workflow" ref="wkf_packingout"/>
+ <record model="workflow.activity" id="shipmentout_act_cancel">
+ <field name="workflow" ref="wkf_shipmentout"/>
<field name="flow_stop">True</field>
<field name="name">Canceled</field>
<field name="kind">function</field>
<field name="action">set_state_cancel()</field>
</record>
- <record model="workflow.activity" id="packingout_act_done">
- <field name="workflow" ref="wkf_packingout"/>
+ <record model="workflow.activity" id="shipmentout_act_done">
+ <field name="workflow" ref="wkf_shipmentout"/>
<field name="flow_stop">True</field>
<field name="name">Done</field>
<field name="kind">function</field>
<field name="action">set_state_done()</field>
</record>
- <record model="workflow.activity" id="packingout_act_waiting">
+ <record model="workflow.activity" id="shipmentout_act_waiting">
<field name="name">Waiting</field>
<field name="kind">function</field>
- <field name="workflow" ref="wkf_packingout"/>
+ <field name="workflow" ref="wkf_shipmentout"/>
<field name="action">set_state_waiting()</field>
</record>
- <record model="workflow.activity" id="packingout_act_assigned">
+ <record model="workflow.activity" id="shipmentout_act_assigned">
<field name="name">Assigned</field>
<field name="kind">function</field>
- <field name="workflow" ref="wkf_packingout"/>
+ <field name="workflow" ref="wkf_shipmentout"/>
<field name="action">set_state_assigned()</field>
</record>
- <record model="workflow.activity" id="packingout_act_packed">
+ <record model="workflow.activity" id="shipmentout_act_packed">
<field name="name">Packed</field>
<field name="kind">function</field>
- <field name="workflow" ref="wkf_packingout"/>
+ <field name="workflow" ref="wkf_shipmentout"/>
<field name="action">set_state_packed()</field>
</record>
<record model="workflow.transition"
- id="packingout_trans_waiting_assigned">
- <field name="act_from" ref="packingout_act_waiting"/>
- <field name="act_to" ref="packingout_act_assigned"/>
+ id="shipmentout_trans_waiting_assigned">
+ <field name="act_from" ref="shipmentout_act_waiting"/>
+ <field name="act_to" ref="shipmentout_act_assigned"/>
<field name="group" ref="group_stock"/>
<field name="signal">assign</field>
<field name="condition">assign_try()</field>
</record>
<record model="workflow.transition"
- id="packingout_trans_assigned_waiting">
- <field name="act_from" ref="packingout_act_assigned"/>
- <field name="act_to" ref="packingout_act_waiting"/>
+ id="shipmentout_trans_assigned_waiting">
+ <field name="act_from" ref="shipmentout_act_assigned"/>
+ <field name="act_to" ref="shipmentout_act_waiting"/>
<field name="group" ref="group_stock"/>
<field name="signal">waiting</field>
</record>
<record model="workflow.transition"
- id="packingout_trans_waiting_waiting">
- <field name="act_from" ref="packingout_act_waiting"/>
- <field name="act_to" ref="packingout_act_waiting"/>
+ id="shipmentout_trans_waiting_waiting">
+ <field name="act_from" ref="shipmentout_act_waiting"/>
+ <field name="act_to" ref="shipmentout_act_waiting"/>
<field name="group" ref="group_stock"/>
<field name="signal">waiting</field>
</record>
<record model="workflow.transition"
- id="packingout_trans_waiting_assigned_force">
- <field name="act_from" ref="packingout_act_waiting"/>
- <field name="act_to" ref="packingout_act_assigned"/>
- <field name="group" ref="group_stock"/>
+ id="shipmentout_trans_waiting_assigned_force">
+ <field name="act_from" ref="shipmentout_act_waiting"/>
+ <field name="act_to" ref="shipmentout_act_assigned"/>
+ <field name="group" ref="group_stock_force_assignment"/>
<field name="signal">force_assign</field>
<field name="condition">assign_force()</field>
</record>
<record model="workflow.transition"
- id="packingout_trans_draft_waiting">
- <field name="act_from" ref="packingout_act_draft"/>
- <field name="act_to" ref="packingout_act_waiting"/>
+ id="shipmentout_trans_draft_waiting">
+ <field name="act_from" ref="shipmentout_act_draft"/>
+ <field name="act_to" ref="shipmentout_act_waiting"/>
<field name="group" ref="group_stock"/>
<field name="signal">waiting</field>
</record>
<record model="workflow.transition"
- id="packingout_trans_waiting_draft">
- <field name="act_from" ref="packingout_act_waiting"/>
- <field name="act_to" ref="packingout_act_draft"/>
+ id="shipmentout_trans_waiting_draft">
+ <field name="act_from" ref="shipmentout_act_waiting"/>
+ <field name="act_to" ref="shipmentout_act_draft"/>
<field name="group" ref="group_stock"/>
<field name="signal">draft</field>
</record>
<record model="workflow.transition"
- id="packingout_trans_waiting_cancel">
- <field name="act_from" ref="packingout_act_waiting"/>
- <field name="act_to" ref="packingout_act_cancel"/>
+ id="shipmentout_trans_waiting_cancel">
+ <field name="act_from" ref="shipmentout_act_waiting"/>
+ <field name="act_to" ref="shipmentout_act_cancel"/>
<field name="group" ref="group_stock"/>
<field name="signal">cancel</field>
</record>
<record model="workflow.transition"
- id="packingout_trans_draft_cancel">
- <field name="act_from" ref="packingout_act_draft"/>
- <field name="act_to" ref="packingout_act_cancel"/>
+ id="shipmentout_trans_draft_cancel">
+ <field name="act_from" ref="shipmentout_act_draft"/>
+ <field name="act_to" ref="shipmentout_act_cancel"/>
<field name="group" ref="group_stock"/>
<field name="signal">cancel</field>
</record>
<record model="workflow.transition"
- id="packingout_trans_assigned_packed">
- <field name="act_from" ref="packingout_act_assigned"/>
- <field name="act_to" ref="packingout_act_packed"/>
+ id="shipmentout_trans_assigned_packed">
+ <field name="act_from" ref="shipmentout_act_assigned"/>
+ <field name="act_to" ref="shipmentout_act_packed"/>
<field name="group" ref="group_stock"/>
<field name="signal">packed</field>
</record>
<record model="workflow.transition"
- id="packingout_trans_packed_done">
- <field name="act_from" ref="packingout_act_packed"/>
- <field name="act_to" ref="packingout_act_done"/>
+ id="shipmentout_trans_packed_done">
+ <field name="act_from" ref="shipmentout_act_packed"/>
+ <field name="act_to" ref="shipmentout_act_done"/>
<field name="group" ref="group_stock"/>
<field name="signal">done</field>
</record>
<record model="workflow.transition"
- id="packingout_trans_assigned_cancel">
- <field name="act_from" ref="packingout_act_assigned"/>
- <field name="act_to" ref="packingout_act_cancel"/>
+ id="shipmentout_trans_assigned_cancel">
+ <field name="act_from" ref="shipmentout_act_assigned"/>
+ <field name="act_to" ref="shipmentout_act_cancel"/>
<field name="group" ref="group_stock"/>
<field name="signal">cancel</field>
</record>
<record model="workflow.transition"
- id="packingout_trans_packed_cancel">
- <field name="act_from" ref="packingout_act_packed"/>
- <field name="act_to" ref="packingout_act_cancel"/>
+ id="shipmentout_trans_packed_cancel">
+ <field name="act_from" ref="shipmentout_act_packed"/>
+ <field name="act_to" ref="shipmentout_act_cancel"/>
<field name="group" ref="group_stock"/>
<field name="signal">cancel</field>
</record>
- <record model="ir.action.report" id="report_packing_out_delivery_note">
+ <record model="ir.action.report" id="report_shipment_out_delivery_note">
<field name="name">Delivery Note</field>
- <field name="model">stock.packing.out</field>
- <field name="report_name">stock.packing.out.delivery_note</field>
+ <field name="model">stock.shipment.out</field>
+ <field name="report_name">stock.shipment.out.delivery_note</field>
<field name="report">stock/delivery_note.odt</field>
<field name="style">company/header_A4.odt</field>
</record>
<record model="ir.action.keyword"
- id="report_packing_out_delivery_note_keyword">
+ id="report_shipment_out_delivery_note_keyword">
<field name="keyword">form_print</field>
- <field name="model">stock.packing.out,0</field>
- <field name="action" ref="report_packing_out_delivery_note"/>
+ <field name="model">stock.shipment.out,0</field>
+ <field name="action" ref="report_shipment_out_delivery_note"/>
</record>
- <record model="ir.action.report" id="report_packing_out_picking_list">
+ <record model="ir.action.report" id="report_shipment_out_picking_list">
<field name="name">Picking List</field>
- <field name="model">stock.packing.out</field>
- <field name="report_name">stock.packing.out.picking_list</field>
+ <field name="model">stock.shipment.out</field>
+ <field name="report_name">stock.shipment.out.picking_list</field>
<field name="report">stock/picking_list.odt</field>
<field name="style">company/header_A4.odt</field>
</record>
<record model="ir.action.keyword"
- id="report_packing_out_picking_list_keyword">
+ id="report_shipment_out_picking_list_keyword">
<field name="keyword">form_print</field>
- <field name="model">stock.packing.out,0</field>
- <field name="action" ref="report_packing_out_picking_list"/>
+ <field name="model">stock.shipment.out,0</field>
+ <field name="action" ref="report_shipment_out_picking_list"/>
</record>
- <record model="ir.action.report" id="report_packing_in_restocking_list">
+ <record model="ir.action.report" id="report_shipment_in_restocking_list">
<field name="name">Restocking List</field>
- <field name="model">stock.packing.in</field>
- <field name="report_name">stock.packing.in.restocking_list</field>
+ <field name="model">stock.shipment.in</field>
+ <field name="report_name">stock.shipment.in.restocking_list</field>
<field name="report">stock/supplier_restocking_list.odt</field>
<field name="style">company/header_A4.odt</field>
</record>
<record model="ir.action.keyword"
- id="report_packing_in_restocking_list_keyword">
+ id="report_shipment_in_restocking_list_keyword">
<field name="keyword">form_print</field>
- <field name="model">stock.packing.in,0</field>
- <field name="action" ref="report_packing_in_restocking_list"/>
+ <field name="model">stock.shipment.in,0</field>
+ <field name="action" ref="report_shipment_in_restocking_list"/>
</record>
- <record model="ir.action.report" id="report_packing_out_return_restocking_list">
+ <record model="ir.action.report" id="report_shipment_out_return_restocking_list">
<field name="name">Restocking List</field>
- <field name="model">stock.packing.out.return</field>
- <field name="report_name">stock.packing.out.return.restocking_list</field>
+ <field name="model">stock.shipment.out.return</field>
+ <field name="report_name">stock.shipment.out.return.restocking_list</field>
<field name="report">stock/customer_return_restocking_list.odt</field>
<field name="style">company/header_A4.odt</field>
</record>
<record model="ir.action.keyword"
- id="report_packing_out_return_restocking_list_keyword">
+ id="report_shipment_out_return_restocking_list_keyword">
<field name="keyword">form_print</field>
- <field name="model">stock.packing.out.return,0</field>
- <field name="action" ref="report_packing_out_return_restocking_list"/>
+ <field name="model">stock.shipment.out.return,0</field>
+ <field name="action" ref="report_shipment_out_return_restocking_list"/>
</record>
- <record model="ir.action.report" id="report_packing_internal">
+ <record model="ir.action.report" id="report_shipment_internal">
<field name="name">Internal Shipment</field>
- <field name="model">stock.packing.internal</field>
- <field name="report_name">stock.packing.internal.report</field>
- <field name="report">stock/internal_packing.odt</field>
+ <field name="model">stock.shipment.internal</field>
+ <field name="report_name">stock.shipment.internal.report</field>
+ <field name="report">stock/internal_shipment.odt</field>
<field name="style">company/header_A4.odt</field>
</record>
<record model="ir.action.keyword"
- id="report_packing_internal_keyword">
+ id="report_shipment_internal_keyword">
<field name="keyword">form_print</field>
- <field name="model">stock.packing.internal,0</field>
- <field name="action" ref="report_packing_internal"/>
+ <field name="model">stock.shipment.internal,0</field>
+ <field name="action" ref="report_shipment_internal"/>
</record>
- <!-- Workflow internal packing -->
- <record model="workflow" id="wkf_packinginternal">
+ <!-- Workflow internal shipment -->
+ <record model="workflow" id="wkf_shipmentinternal">
<field name="name">Internal Shipment</field>
- <field name="osv">stock.packing.internal</field>
+ <field name="model">stock.shipment.internal</field>
<field name="on_create">True</field>
</record>
- <record model="workflow.activity" id="packinginternal_act_draft">
- <field name="workflow" ref="wkf_packinginternal"/>
+ <record model="workflow.activity" id="shipmentinternal_act_draft">
+ <field name="workflow" ref="wkf_shipmentinternal"/>
<field name="flow_start">True</field>
<field name="kind">function</field>
<field name="action">set_state_draft()</field>
<field name="name">Draft</field>
</record>
- <record model="workflow.activity" id="packinginternal_act_cancel">
- <field name="workflow" ref="wkf_packinginternal"/>
+ <record model="workflow.activity" id="shipmentinternal_act_cancel">
+ <field name="workflow" ref="wkf_shipmentinternal"/>
<field name="flow_stop">True</field>
<field name="name">Canceled</field>
<field name="kind">function</field>
<field name="action">set_state_cancel()</field>
</record>
- <record model="workflow.activity" id="packinginternal_act_done">
- <field name="workflow" ref="wkf_packinginternal"/>
+ <record model="workflow.activity" id="shipmentinternal_act_done">
+ <field name="workflow" ref="wkf_shipmentinternal"/>
<field name="flow_stop">True</field>
<field name="name">Done</field>
<field name="kind">function</field>
<field name="action">set_state_done()</field>
</record>
- <record model="workflow.activity" id="packinginternal_act_waiting">
+ <record model="workflow.activity" id="shipmentinternal_act_waiting">
<field name="name">Waiting</field>
<field name="kind">function</field>
- <field name="workflow" ref="wkf_packinginternal"/>
+ <field name="workflow" ref="wkf_shipmentinternal"/>
<field name="action">set_state_waiting()</field>
</record>
- <record model="workflow.activity" id="packinginternal_act_assigned">
+ <record model="workflow.activity" id="shipmentinternal_act_assigned">
<field name="name">Assigned</field>
<field name="kind">function</field>
- <field name="workflow" ref="wkf_packinginternal"/>
+ <field name="workflow" ref="wkf_shipmentinternal"/>
<field name="action">set_state_assigned()</field>
</record>
<record model="workflow.transition"
- id="packinginternal_trans_draft_waiting">
- <field name="act_from" ref="packinginternal_act_draft"/>
- <field name="act_to" ref="packinginternal_act_waiting"/>
+ id="shipmentinternal_trans_draft_waiting">
+ <field name="act_from" ref="shipmentinternal_act_draft"/>
+ <field name="act_to" ref="shipmentinternal_act_waiting"/>
<field name="group" ref="group_stock"/>
<field name="signal">waiting</field>
</record>
<record model="workflow.transition"
- id="packinginternal_trans_waiting_draft">
- <field name="act_from" ref="packinginternal_act_waiting"/>
- <field name="act_to" ref="packinginternal_act_draft"/>
+ id="shipmentinternal_trans_waiting_draft">
+ <field name="act_from" ref="shipmentinternal_act_waiting"/>
+ <field name="act_to" ref="shipmentinternal_act_draft"/>
<field name="group" ref="group_stock"/>
<field name="signal">draft</field>
</record>
<record model="workflow.transition"
- id="packinginternal_trans_waiting_waiting">
- <field name="act_from" ref="packinginternal_act_waiting"/>
- <field name="act_to" ref="packinginternal_act_waiting"/>
+ id="shipmentinternal_trans_waiting_waiting">
+ <field name="act_from" ref="shipmentinternal_act_waiting"/>
+ <field name="act_to" ref="shipmentinternal_act_waiting"/>
<field name="group" ref="group_stock"/>
<field name="signal">waiting</field>
</record>
<record model="workflow.transition"
- id="packinginternal_trans_waiting_assigned">
- <field name="act_from" ref="packinginternal_act_waiting"/>
- <field name="act_to" ref="packinginternal_act_assigned"/>
+ id="shipmentinternal_trans_waiting_assigned">
+ <field name="act_from" ref="shipmentinternal_act_waiting"/>
+ <field name="act_to" ref="shipmentinternal_act_assigned"/>
<field name="group" ref="group_stock"/>
<field name="signal">assign</field>
<field name="condition">assign_try()</field>
</record>
<record model="workflow.transition"
- id="packinginternal_trans_assigned_waiting">
- <field name="act_from" ref="packinginternal_act_assigned"/>
- <field name="act_to" ref="packinginternal_act_waiting"/>
+ id="shipmentinternal_trans_assigned_waiting">
+ <field name="act_from" ref="shipmentinternal_act_assigned"/>
+ <field name="act_to" ref="shipmentinternal_act_waiting"/>
<field name="group" ref="group_stock"/>
<field name="signal">waiting</field>
</record>
<record model="workflow.transition"
- id="packinginternal_trans_waiting_assigned_force">
- <field name="act_from" ref="packinginternal_act_waiting"/>
- <field name="act_to" ref="packinginternal_act_assigned"/>
- <field name="group" ref="group_stock"/>
+ id="shipmentinternal_trans_waiting_assigned_force">
+ <field name="act_from" ref="shipmentinternal_act_waiting"/>
+ <field name="act_to" ref="shipmentinternal_act_assigned"/>
+ <field name="group" ref="group_stock_force_assignment"/>
<field name="signal">force_assign</field>
<field name="condition">assign_force()</field>
</record>
- <record model="workflow.transition" id="packinginternal_trans_assigned_done">
- <field name="act_from" ref="packinginternal_act_assigned"/>
- <field name="act_to" ref="packinginternal_act_done"/>
+ <record model="workflow.transition" id="shipmentinternal_trans_assigned_done">
+ <field name="act_from" ref="shipmentinternal_act_assigned"/>
+ <field name="act_to" ref="shipmentinternal_act_done"/>
<field name="group" ref="group_stock"/>
<field name="signal">done</field>
</record>
- <record model="workflow.transition" id="packinginternal_trans_draft_cancel">
- <field name="act_from" ref="packinginternal_act_draft"/>
- <field name="act_to" ref="packinginternal_act_cancel"/>
+ <record model="workflow.transition" id="shipmentinternal_trans_draft_cancel">
+ <field name="act_from" ref="shipmentinternal_act_draft"/>
+ <field name="act_to" ref="shipmentinternal_act_cancel"/>
<field name="group" ref="group_stock"/>
<field name="signal">cancel</field>
</record>
<record model="workflow.transition"
- id="packinginternal_trans_waiting_cancel">
- <field name="act_from" ref="packinginternal_act_waiting"/>
- <field name="act_to" ref="packinginternal_act_cancel"/>
+ id="shipmentinternal_trans_waiting_cancel">
+ <field name="act_from" ref="shipmentinternal_act_waiting"/>
+ <field name="act_to" ref="shipmentinternal_act_cancel"/>
<field name="group" ref="group_stock"/>
<field name="signal">cancel</field>
</record>
<record model="workflow.transition"
- id="packinginternal_trans_assigned_cancel">
- <field name="act_from" ref="packinginternal_act_assigned"/>
- <field name="act_to" ref="packinginternal_act_cancel"/>
+ id="shipmentinternal_trans_assigned_cancel">
+ <field name="act_from" ref="shipmentinternal_act_assigned"/>
+ <field name="act_to" ref="shipmentinternal_act_cancel"/>
<field name="group" ref="group_stock"/>
<field name="signal">cancel</field>
</record>
- <!-- Workflow packing out return -->
- <record model="workflow" id="wkf_packing_out_return">
+ <!-- Workflow shipment out return -->
+ <record model="workflow" id="wkf_shipment_out_return">
<field name="name">Customer Return Shipment</field>
- <field name="osv">stock.packing.out.return</field>
+ <field name="model">stock.shipment.out.return</field>
<field name="on_create">True</field>
</record>
- <record model="workflow.activity" id="packing_out_return_act_draft">
- <field name="workflow" ref="wkf_packing_out_return"/>
+ <record model="workflow.activity" id="shipment_out_return_act_draft">
+ <field name="workflow" ref="wkf_shipment_out_return"/>
<field name="flow_start">True</field>
<field name="kind">function</field>
<field name="action">set_state_draft()</field>
<field name="name">Draft</field>
</record>
- <record model="workflow.activity" id="packing_out_return_act_cancel">
- <field name="workflow" ref="wkf_packing_out_return"/>
+ <record model="workflow.activity" id="shipment_out_return_act_cancel">
+ <field name="workflow" ref="wkf_shipment_out_return"/>
<field name="flow_stop">True</field>
<field name="name">Canceled</field>
<field name="kind">function</field>
<field name="action">set_state_cancel()</field>
</record>
- <record model="workflow.activity" id="packing_out_return_act_done">
- <field name="workflow" ref="wkf_packing_out_return"/>
+ <record model="workflow.activity" id="shipment_out_return_act_done">
+ <field name="workflow" ref="wkf_shipment_out_return"/>
<field name="flow_stop">True</field>
<field name="name">Done</field>
<field name="kind">function</field>
<field name="action">set_state_done()</field>
</record>
- <record model="workflow.activity" id="packing_out_return_act_received">
+ <record model="workflow.activity" id="shipment_out_return_act_received">
<field name="name">Received</field>
<field name="kind">function</field>
- <field name="workflow" ref="wkf_packing_out_return"/>
+ <field name="workflow" ref="wkf_shipment_out_return"/>
<field name="action">set_state_received()
create_inventory_moves()</field>
</record>
<record model="workflow.transition"
- id="packing_out_return_trans_draft_received">
- <field name="act_from" ref="packing_out_return_act_draft"/>
- <field name="act_to" ref="packing_out_return_act_received"/>
+ id="shipment_out_return_trans_draft_received">
+ <field name="act_from" ref="shipment_out_return_act_draft"/>
+ <field name="act_to" ref="shipment_out_return_act_received"/>
<field name="group" ref="group_stock"/>
<field name="signal">received</field>
</record>
<record model="workflow.transition"
- id="packing_out_return_trans_received_draft">
- <field name="act_from" ref="packing_out_return_act_received"/>
- <field name="act_to" ref="packing_out_return_act_draft"/>
+ id="shipment_out_return_trans_received_draft">
+ <field name="act_from" ref="shipment_out_return_act_received"/>
+ <field name="act_to" ref="shipment_out_return_act_draft"/>
<field name="group" ref="group_stock"/>
<field name="signal">draft</field>
</record>
- <record model="workflow.transition" id="packing_out_return_trans_received_done">
- <field name="act_from" ref="packing_out_return_act_received"/>
- <field name="act_to" ref="packing_out_return_act_done"/>
+ <record model="workflow.transition" id="shipment_out_return_trans_received_done">
+ <field name="act_from" ref="shipment_out_return_act_received"/>
+ <field name="act_to" ref="shipment_out_return_act_done"/>
<field name="group" ref="group_stock"/>
<field name="signal">done</field>
</record>
- <record model="workflow.transition" id="packing_out_return_trans_draft_cancel">
- <field name="act_from" ref="packing_out_return_act_draft"/>
- <field name="act_to" ref="packing_out_return_act_cancel"/>
+ <record model="workflow.transition" id="shipment_out_return_trans_draft_cancel">
+ <field name="act_from" ref="shipment_out_return_act_draft"/>
+ <field name="act_to" ref="shipment_out_return_act_cancel"/>
<field name="group" ref="group_stock"/>
<field name="signal">cancel</field>
</record>
<record model="workflow.transition"
- id="packing_out_return_trans_received_cancel">
- <field name="act_from" ref="packing_out_return_act_received"/>
- <field name="act_to" ref="packing_out_return_act_cancel"/>
+ id="shipment_out_return_trans_received_cancel">
+ <field name="act_from" ref="shipment_out_return_act_received"/>
+ <field name="act_to" ref="shipment_out_return_act_cancel"/>
<field name="group" ref="group_stock"/>
<field name="signal">cancel</field>
</record>
- <!-- Workflow purchase return packing -->
- <record model="workflow" id="wkf_packing_in_return">
+ <!-- Workflow purchase return shipment -->
+ <record model="workflow" id="wkf_shipment_in_return">
<field name="name">Supplier Return Shipment</field>
- <field name="osv">stock.packing.in.return</field>
+ <field name="model">stock.shipment.in.return</field>
<field name="on_create">True</field>
</record>
- <record model="workflow.activity" id="packing_in_return_act_draft">
- <field name="workflow" ref="wkf_packing_in_return"/>
+ <record model="workflow.activity" id="shipment_in_return_act_draft">
+ <field name="workflow" ref="wkf_shipment_in_return"/>
<field name="flow_start">True</field>
<field name="kind">function</field>
<field name="action">set_state_draft()</field>
<field name="name">Draft</field>
</record>
- <record model="workflow.activity" id="packing_in_return_act_cancel">
- <field name="workflow" ref="wkf_packing_in_return"/>
+ <record model="workflow.activity" id="shipment_in_return_act_cancel">
+ <field name="workflow" ref="wkf_shipment_in_return"/>
<field name="flow_stop">True</field>
<field name="name">Canceled</field>
<field name="kind">function</field>
<field name="action">set_state_cancel()</field>
</record>
- <record model="workflow.activity" id="packing_in_return_act_done">
- <field name="workflow" ref="wkf_packing_in_return"/>
+ <record model="workflow.activity" id="shipment_in_return_act_done">
+ <field name="workflow" ref="wkf_shipment_in_return"/>
<field name="flow_stop">True</field>
<field name="name">Done</field>
<field name="kind">function</field>
<field name="action">set_state_done()</field>
</record>
- <record model="workflow.activity" id="packing_in_return_act_waiting">
+ <record model="workflow.activity" id="shipment_in_return_act_waiting">
<field name="name">Waiting</field>
<field name="kind">function</field>
- <field name="workflow" ref="wkf_packing_in_return"/>
+ <field name="workflow" ref="wkf_shipment_in_return"/>
<field name="action">set_state_waiting()</field>
</record>
- <record model="workflow.activity" id="packing_in_return_act_assigned">
+ <record model="workflow.activity" id="shipment_in_return_act_assigned">
<field name="name">Assigned</field>
<field name="kind">function</field>
- <field name="workflow" ref="wkf_packing_in_return"/>
+ <field name="workflow" ref="wkf_shipment_in_return"/>
<field name="action">set_state_assigned()</field>
</record>
<record model="workflow.transition"
- id="packing_in_return_trans_draft_waiting">
- <field name="act_from" ref="packing_in_return_act_draft"/>
- <field name="act_to" ref="packing_in_return_act_waiting"/>
+ id="shipment_in_return_trans_draft_waiting">
+ <field name="act_from" ref="shipment_in_return_act_draft"/>
+ <field name="act_to" ref="shipment_in_return_act_waiting"/>
<field name="group" ref="group_stock"/>
<field name="signal">waiting</field>
</record>
<record model="workflow.transition"
- id="packing_in_return_trans_waiting_draft">
- <field name="act_from" ref="packing_in_return_act_waiting"/>
- <field name="act_to" ref="packing_in_return_act_draft"/>
+ id="shipment_in_return_trans_waiting_draft">
+ <field name="act_from" ref="shipment_in_return_act_waiting"/>
+ <field name="act_to" ref="shipment_in_return_act_draft"/>
<field name="group" ref="group_stock"/>
<field name="signal">draft</field>
</record>
<record model="workflow.transition"
- id="packing_in_return_trans_waiting_assigned">
- <field name="act_from" ref="packing_in_return_act_waiting"/>
- <field name="act_to" ref="packing_in_return_act_assigned"/>
+ id="shipment_in_return_trans_waiting_assigned">
+ <field name="act_from" ref="shipment_in_return_act_waiting"/>
+ <field name="act_to" ref="shipment_in_return_act_assigned"/>
<field name="group" ref="group_stock"/>
<field name="signal">assign</field>
<field name="condition">assign_try()</field>
</record>
<record model="workflow.transition"
- id="packing_in_return_trans_assigned_waiting">
- <field name="act_from" ref="packing_in_return_act_assigned"/>
- <field name="act_to" ref="packing_in_return_act_waiting"/>
+ id="shipment_in_return_trans_assigned_waiting">
+ <field name="act_from" ref="shipment_in_return_act_assigned"/>
+ <field name="act_to" ref="shipment_in_return_act_waiting"/>
<field name="group" ref="group_stock"/>
<field name="signal">waiting</field>
</record>
<record model="workflow.transition"
- id="packing_in_return_trans_waiting_assigned_force">
- <field name="act_from" ref="packing_in_return_act_waiting"/>
- <field name="act_to" ref="packing_in_return_act_assigned"/>
- <field name="group" ref="group_stock"/>
+ id="shipment_in_return_trans_waiting_assigned_force">
+ <field name="act_from" ref="shipment_in_return_act_waiting"/>
+ <field name="act_to" ref="shipment_in_return_act_assigned"/>
+ <field name="group" ref="group_stock_force_assignment"/>
<field name="signal">force_assign</field>
<field name="condition">assign_force()</field>
</record>
- <record model="workflow.transition" id="packing_in_return_trans_assigned_done">
- <field name="act_from" ref="packing_in_return_act_assigned"/>
- <field name="act_to" ref="packing_in_return_act_done"/>
+ <record model="workflow.transition" id="shipment_in_return_trans_assigned_done">
+ <field name="act_from" ref="shipment_in_return_act_assigned"/>
+ <field name="act_to" ref="shipment_in_return_act_done"/>
<field name="group" ref="group_stock"/>
<field name="signal">done</field>
</record>
- <record model="workflow.transition" id="packing_in_return_trans_draft_cancel">
- <field name="act_from" ref="packing_in_return_act_draft"/>
- <field name="act_to" ref="packing_in_return_act_cancel"/>
+ <record model="workflow.transition" id="shipment_in_return_trans_draft_cancel">
+ <field name="act_from" ref="shipment_in_return_act_draft"/>
+ <field name="act_to" ref="shipment_in_return_act_cancel"/>
<field name="group" ref="group_stock"/>
<field name="signal">cancel</field>
</record>
<record model="workflow.transition"
- id="packing_in_return_trans_waiting_cancel">
- <field name="act_from" ref="packing_in_return_act_waiting"/>
- <field name="act_to" ref="packing_in_return_act_cancel"/>
+ id="shipment_in_return_trans_waiting_cancel">
+ <field name="act_from" ref="shipment_in_return_act_waiting"/>
+ <field name="act_to" ref="shipment_in_return_act_cancel"/>
<field name="group" ref="group_stock"/>
<field name="signal">cancel</field>
</record>
<record model="workflow.transition"
- id="packing_in_return_trans_assigned_cancel">
- <field name="act_from" ref="packing_in_return_act_assigned"/>
- <field name="act_to" ref="packing_in_return_act_cancel"/>
+ id="shipment_in_return_trans_assigned_cancel">
+ <field name="act_from" ref="shipment_in_return_act_assigned"/>
+ <field name="act_to" ref="shipment_in_return_act_cancel"/>
<field name="group" ref="group_stock"/>
<field name="signal">cancel</field>
</record>
- <!-- Sequence packing out -->
- <record model="ir.sequence.type" id="sequence_type_packing_out">
+ <!-- Sequence shipment out -->
+ <record model="ir.sequence.type" id="sequence_type_shipment_out">
<field name="name">Customer Shipment</field>
- <field name="code">stock.packing.out</field>
+ <field name="code">stock.shipment.out</field>
</record>
- <record model="ir.sequence" id="sequence_packing_out">
+ <record model="ir.sequence" id="sequence_shipment_out">
<field name="name">Customer Shipment</field>
- <field name="code">stock.packing.out</field>
+ <field name="code">stock.shipment.out</field>
</record>
- <!-- Sequence packing in -->
- <record model="ir.sequence.type" id="sequence_type_packing_in">
+ <!-- Sequence shipment in -->
+ <record model="ir.sequence.type" id="sequence_type_shipment_in">
<field name="name">Supplier Shipment</field>
- <field name="code">stock.packing.in</field>
+ <field name="code">stock.shipment.in</field>
</record>
- <record model="ir.sequence" id="sequence_packing_in">
+ <record model="ir.sequence" id="sequence_shipment_in">
<field name="name">Supplier Shipment</field>
- <field name="code">stock.packing.in</field>
+ <field name="code">stock.shipment.in</field>
</record>
- <!-- Sequence packing internal -->
- <record model="ir.sequence.type" id="sequence_type_packing_internal">
+ <!-- Sequence shipment internal -->
+ <record model="ir.sequence.type" id="sequence_type_shipment_internal">
<field name="name">Internal Shipment</field>
- <field name="code">stock.packing.internal</field>
+ <field name="code">stock.shipment.internal</field>
</record>
- <record model="ir.sequence" id="sequence_packing_internal">
+ <record model="ir.sequence" id="sequence_shipment_internal">
<field name="name">Internal Shipment</field>
- <field name="code">stock.packing.internal</field>
+ <field name="code">stock.shipment.internal</field>
</record>
- <!-- Sequence packing out return-->
- <record model="ir.sequence.type" id="sequence_type_packing_out_return">
+ <!-- Sequence shipment out return-->
+ <record model="ir.sequence.type" id="sequence_type_shipment_out_return">
<field name="name">Customer Return Shipment</field>
- <field name="code">stock.packing.out.return</field>
+ <field name="code">stock.shipment.out.return</field>
</record>
- <record model="ir.sequence" id="sequence_packing_out_return">
+ <record model="ir.sequence" id="sequence_shipment_out_return">
<field name="name">Customer Return Shipment</field>
- <field name="code">stock.packing.out.return</field>
+ <field name="code">stock.shipment.out.return</field>
</record>
- <!-- Sequence packing in return -->
- <record model="ir.sequence.type" id="sequence_type_packing_in_return">
+ <!-- Sequence shipment in return -->
+ <record model="ir.sequence.type" id="sequence_type_shipment_in_return">
<field name="name">Supplier Return Shipment</field>
- <field name="code">stock.packing.in.return</field>
+ <field name="code">stock.shipment.in.return</field>
</record>
- <record model="ir.sequence" id="sequence_packing_in_return">
+ <record model="ir.sequence" id="sequence_shipment_in_return">
<field name="name">Supplier Return Shipment</field>
- <field name="code">stock.packing.in.return</field>
+ <field name="code">stock.shipment.in.return</field>
</record>
<!-- Add delivery field on address -->
@@ -1450,23 +1450,23 @@ this repository contains the full copyright notices and license terms. -->
</field>
</record>
<!-- Model Access -->
- <record model="ir.model.access" id="access_packing_in">
- <field name="model" search="[('model', '=', 'stock.packing.in')]"/>
+ <record model="ir.model.access" id="access_shipment_in">
+ <field name="model" search="[('model', '=', 'stock.shipment.in')]"/>
<field name="perm_read" eval="True"/>
<field name="perm_write" eval="False"/>
<field name="perm_create" eval="False"/>
<field name="perm_delete" eval="False"/>
</record>
- <record model="ir.model.access" id="access_packing_in_group_stock">
- <field name="model" search="[('model', '=', 'stock.packing.in')]"/>
+ <record model="ir.model.access" id="access_shipment_in_group_stock">
+ <field name="model" search="[('model', '=', 'stock.shipment.in')]"/>
<field name="group" ref="group_stock"/>
<field name="perm_read" eval="True"/>
<field name="perm_write" eval="True"/>
<field name="perm_create" eval="True"/>
<field name="perm_delete" eval="False"/>
</record>
- <record model="ir.model.access" id="access_packing_in_group_stock_admin">
- <field name="model" search="[('model', '=', 'stock.packing.in')]"/>
+ <record model="ir.model.access" id="access_shipment_in_group_stock_admin">
+ <field name="model" search="[('model', '=', 'stock.shipment.in')]"/>
<field name="group" ref="group_stock_admin"/>
<field name="perm_read" eval="True"/>
<field name="perm_write" eval="True"/>
@@ -1474,23 +1474,23 @@ this repository contains the full copyright notices and license terms. -->
<field name="perm_delete" eval="True"/>
</record>
- <record model="ir.model.access" id="access_packing_out">
- <field name="model" search="[('model', '=', 'stock.packing.out')]"/>
+ <record model="ir.model.access" id="access_shipment_out">
+ <field name="model" search="[('model', '=', 'stock.shipment.out')]"/>
<field name="perm_read" eval="True"/>
<field name="perm_write" eval="False"/>
<field name="perm_create" eval="False"/>
<field name="perm_delete" eval="False"/>
</record>
- <record model="ir.model.access" id="access_packing_out_group_stock">
- <field name="model" search="[('model', '=', 'stock.packing.out')]"/>
+ <record model="ir.model.access" id="access_shipment_out_group_stock">
+ <field name="model" search="[('model', '=', 'stock.shipment.out')]"/>
<field name="group" ref="group_stock"/>
<field name="perm_read" eval="True"/>
<field name="perm_write" eval="True"/>
<field name="perm_create" eval="True"/>
<field name="perm_delete" eval="False"/>
</record>
- <record model="ir.model.access" id="access_packing_out_group_stock_admin">
- <field name="model" search="[('model', '=', 'stock.packing.out')]"/>
+ <record model="ir.model.access" id="access_shipment_out_group_stock_admin">
+ <field name="model" search="[('model', '=', 'stock.shipment.out')]"/>
<field name="group" ref="group_stock_admin"/>
<field name="perm_read" eval="True"/>
<field name="perm_write" eval="True"/>
@@ -1498,23 +1498,23 @@ this repository contains the full copyright notices and license terms. -->
<field name="perm_delete" eval="True"/>
</record>
- <record model="ir.model.access" id="access_packing_internal">
- <field name="model" search="[('model', '=', 'stock.packing.internal')]"/>
+ <record model="ir.model.access" id="access_shipment_internal">
+ <field name="model" search="[('model', '=', 'stock.shipment.internal')]"/>
<field name="perm_read" eval="True"/>
<field name="perm_write" eval="False"/>
<field name="perm_create" eval="False"/>
<field name="perm_delete" eval="False"/>
</record>
- <record model="ir.model.access" id="access_packing_internal_group_stock">
- <field name="model" search="[('model', '=', 'stock.packing.internal')]"/>
+ <record model="ir.model.access" id="access_shipment_internal_group_stock">
+ <field name="model" search="[('model', '=', 'stock.shipment.internal')]"/>
<field name="group" ref="group_stock"/>
<field name="perm_read" eval="True"/>
<field name="perm_write" eval="True"/>
<field name="perm_create" eval="True"/>
<field name="perm_delete" eval="False"/>
</record>
- <record model="ir.model.access" id="access_packing_internal_group_stock_admin">
- <field name="model" search="[('model', '=', 'stock.packing.internal')]"/>
+ <record model="ir.model.access" id="access_shipment_internal_group_stock_admin">
+ <field name="model" search="[('model', '=', 'stock.shipment.internal')]"/>
<field name="group" ref="group_stock_admin"/>
<field name="perm_read" eval="True"/>
<field name="perm_write" eval="True"/>
@@ -1522,23 +1522,23 @@ this repository contains the full copyright notices and license terms. -->
<field name="perm_delete" eval="True"/>
</record>
- <record model="ir.model.access" id="access_packing_out_return">
- <field name="model" search="[('model', '=', 'stock.packing.out.return')]"/>
+ <record model="ir.model.access" id="access_shipment_out_return">
+ <field name="model" search="[('model', '=', 'stock.shipment.out.return')]"/>
<field name="perm_read" eval="True"/>
<field name="perm_write" eval="False"/>
<field name="perm_create" eval="False"/>
<field name="perm_delete" eval="False"/>
</record>
- <record model="ir.model.access" id="access_packing_out_return_group_stock">
- <field name="model" search="[('model', '=', 'stock.packing.out.return')]"/>
+ <record model="ir.model.access" id="access_shipment_out_return_group_stock">
+ <field name="model" search="[('model', '=', 'stock.shipment.out.return')]"/>
<field name="group" ref="group_stock"/>
<field name="perm_read" eval="True"/>
<field name="perm_write" eval="True"/>
<field name="perm_create" eval="True"/>
<field name="perm_delete" eval="False"/>
</record>
- <record model="ir.model.access" id="access_packing_out_return_group_stock_admin">
- <field name="model" search="[('model', '=', 'stock.packing.out.return')]"/>
+ <record model="ir.model.access" id="access_shipment_out_return_group_stock_admin">
+ <field name="model" search="[('model', '=', 'stock.shipment.out.return')]"/>
<field name="group" ref="group_stock_admin"/>
<field name="perm_read" eval="True"/>
<field name="perm_write" eval="True"/>
@@ -1546,23 +1546,23 @@ this repository contains the full copyright notices and license terms. -->
<field name="perm_delete" eval="True"/>
</record>
- <record model="ir.model.access" id="access_packing_in_return">
- <field name="model" search="[('model', '=', 'stock.packing.in.return')]"/>
+ <record model="ir.model.access" id="access_shipment_in_return">
+ <field name="model" search="[('model', '=', 'stock.shipment.in.return')]"/>
<field name="perm_read" eval="True"/>
<field name="perm_write" eval="False"/>
<field name="perm_create" eval="False"/>
<field name="perm_delete" eval="False"/>
</record>
- <record model="ir.model.access" id="access_packing_in_return_group_stock">
- <field name="model" search="[('model', '=', 'stock.packing.in.return')]"/>
+ <record model="ir.model.access" id="access_shipment_in_return_group_stock">
+ <field name="model" search="[('model', '=', 'stock.shipment.in.return')]"/>
<field name="group" ref="group_stock"/>
<field name="perm_read" eval="True"/>
<field name="perm_write" eval="True"/>
<field name="perm_create" eval="True"/>
<field name="perm_delete" eval="False"/>
</record>
- <record model="ir.model.access" id="access_packing_in_return_group_stock_admin">
- <field name="model" search="[('model', '=', 'stock.packing.in.return')]"/>
+ <record model="ir.model.access" id="access_shipment_in_return_group_stock_admin">
+ <field name="model" search="[('model', '=', 'stock.shipment.in.return')]"/>
<field name="group" ref="group_stock_admin"/>
<field name="perm_read" eval="True"/>
<field name="perm_write" eval="True"/>
diff --git a/stock.xml b/stock.xml
index 70fde18..dadfb11 100644
--- a/stock.xml
+++ b/stock.xml
@@ -1,5 +1,6 @@
<?xml version="1.0"?>
-<!-- This file is part of Tryton. The COPYRIGHT file at the top level of this repository contains the full copyright notices and license terms. -->
+<!-- This file is part of Tryton. The COPYRIGHT file at the top level of
+this repository contains the full copyright notices and license terms. -->
<tryton>
<data>
<record model="res.group" id="group_stock_admin">
@@ -8,8 +9,11 @@
<record model="res.group" id="group_stock">
<field name="name">Stock</field>
</record>
+ <record model="res.group" id="group_stock_force_assignment">
+ <field name="name">Stock Force Assignment</field>
+ </record>
<record model="res.user" id="res.user_admin">
- <field name="groups" eval="[('add', ref('group_stock_admin')), ('add', ref('group_stock'))]"/>
+ <field name="groups" eval="[('add', ref('group_stock_admin')), ('add', ref('group_stock')), ('add', ref('group_stock_force_assignment'))]"/>
</record>
<menuitem name="Inventory Management" sequence="3" id="menu_stock"
diff --git a/tests/__init__.py b/tests/__init__.py
index 9f5f534..6ad77e7 100644
--- a/tests/__init__.py
+++ b/tests/__init__.py
@@ -1,3 +1,4 @@
-#This file is part of Tryton. The COPYRIGHT file at the top level of this repository contains the full copyright notices and license terms.
+#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 test_stock import *
diff --git a/tests/test_stock.py b/tests/test_stock.py
index 5c3ac50..25166ae 100644
--- a/tests/test_stock.py
+++ b/tests/test_stock.py
@@ -10,7 +10,7 @@ if os.path.isdir(DIR):
import unittest
import trytond.tests.test_tryton
-from trytond.tests.test_tryton import RPCProxy, CONTEXT, SOCK
+from trytond.tests.test_tryton import RPCProxy, CONTEXT, SOCK, test_view
class StockTestCase(unittest.TestCase):
'''
@@ -21,28 +21,11 @@ class StockTestCase(unittest.TestCase):
trytond.tests.test_tryton.install_module('stock')
self.location = RPCProxy('stock.location')
- def test0990location(self):
+ def test0005views(self):
'''
- Create locations.
+ Test views.
'''
- storage_id = self.location.search([
- ('code', '=', 'STO'),
- ], CONTEXT)[0]
-
- new_locations = [storage_id]
-
- for j in range(5):
- parent_locations = new_locations
- new_locations = []
- for parent_location in parent_locations:
- for i in range(4):
- location_id = self.location.create({
- 'name': 'Test ' + str(j) + ' ' + str(i),
- 'parent': parent_location,
- 'type': 'storage',
- }, CONTEXT)
- new_locations.append(location_id)
-
+ self.assertRaises(Exception, test_view('stock'))
def suite():
return unittest.TestLoader().loadTestsFromTestCase(StockTestCase)
diff --git a/trytond_stock.egg-info/PKG-INFO b/trytond_stock.egg-info/PKG-INFO
index 2f5295e..578bad3 100644
--- a/trytond_stock.egg-info/PKG-INFO
+++ b/trytond_stock.egg-info/PKG-INFO
@@ -1,21 +1,23 @@
Metadata-Version: 1.0
Name: trytond-stock
-Version: 1.2.1
+Version: 1.4.0
Summary: Stock Management and Inventory Control with:
- Location definition
- Stock move
- - Shipment: Supplier, Customer or Internal
+ - Supplier, Customer and Internal Shipments. Customer and Supplier Return Shipments.
- Stock Inventory
And with reports:
- - Customer Shipment
+ - Delivery Note
+ - Picking List
+ - Restocking List (on Supplier Shipment and Customer Return Shipment)
- Products by Locations
Home-page: http://www.tryton.org/
Author: B2CK
Author-email: info at b2ck.com
License: GPL-3
-Download-URL: http://downloads.tryton.org/1.2/
+Download-URL: http://downloads.tryton.org/1.4/
Description: UNKNOWN
Platform: UNKNOWN
Classifier: Development Status :: 5 - Production/Stable
diff --git a/trytond_stock.egg-info/SOURCES.txt b/trytond_stock.egg-info/SOURCES.txt
index 257c9c2..1ed9b10 100644
--- a/trytond_stock.egg-info/SOURCES.txt
+++ b/trytond_stock.egg-info/SOURCES.txt
@@ -11,15 +11,15 @@ delivery_note.odt
es_CO.csv
es_ES.csv
fr_FR.csv
-internal_packing.odt
+internal_shipment.odt
inventory.xml
location.xml
move.xml
-packing.xml
party.xml
picking_list.odt
product.xml
setup.py
+shipment.xml
stock.xml
supplier_restocking_list.odt
./__init__.py
@@ -27,8 +27,8 @@ supplier_restocking_list.odt
./inventory.py
./location.py
./move.py
-./packing.py
./product.py
+./shipment.py
doc/index.rst
tests/__init__.py
tests/test_stock.py
diff --git a/trytond_stock.egg-info/requires.txt b/trytond_stock.egg-info/requires.txt
index 6e70b7e..466d703 100644
--- a/trytond_stock.egg-info/requires.txt
+++ b/trytond_stock.egg-info/requires.txt
@@ -2,5 +2,5 @@ trytond_party
trytond_product
trytond_company
trytond_currency
-trytond >= 1.2
-trytond < 1.3
\ No newline at end of file
+trytond >= 1.4
+trytond < 1.5
\ No newline at end of file
commit 262d3af2133f570f2985953950afc41088e4b1b4
Author: Daniel Baumann <daniel at debian.org>
Date: Fri Jul 10 14:20:03 2009 +0200
Adding upstream version 1.2.1.
diff --git a/CHANGELOG b/CHANGELOG
index d340420..46986a8 100644
--- a/CHANGELOG
+++ b/CHANGELOG
@@ -1,3 +1,6 @@
+Version 1.2.1 - 2009-07-07
+* Some bug fixes (see mercurial logs for details)
+
Version 1.2.0 - 2009-04-20
* Bug fixes (see mercurial logs for details)
* Added return packings and a wizard to create customer return packing.
diff --git a/PKG-INFO b/PKG-INFO
index 30d2b0f..fcdac49 100644
--- a/PKG-INFO
+++ b/PKG-INFO
@@ -1,6 +1,6 @@
Metadata-Version: 1.0
Name: trytond_stock
-Version: 1.2.0
+Version: 1.2.1
Summary: Stock Management and Inventory Control with:
- Location definition
- Stock move
diff --git a/__tryton__.py b/__tryton__.py
index f2b8f02..a9b8823 100644
--- a/__tryton__.py
+++ b/__tryton__.py
@@ -6,7 +6,7 @@
'name_es_CO': 'Inventarios',
'name_es_ES': 'Inventarios',
'name_fr_FR': 'Gestion des stocks',
- 'version': '1.2.0',
+ 'version': '1.2.1',
'author': 'B2CK',
'email': 'info at b2ck.com',
'website': 'http://www.tryton.org/',
diff --git a/doc/index.rst b/doc/index.rst
index ddb4277..5932beb 100644
--- a/doc/index.rst
+++ b/doc/index.rst
@@ -2,8 +2,8 @@ Stock Module
############
The stock module define fundamentals for all stock management
-situations: Locations where product are stored, move between these
-locations, packings for product arrivals and departures and inventory
+situations: Locations where product are stored, moves between these
+locations, shipments for product arrivals and departures and inventory
to control and update stock levels.
Location
@@ -91,17 +91,17 @@ Assigned move with a planned date greater than today and smaller than
the given date are also summed.
-Packing
-*******
+Shipment
+********
-A Packing define a group of moves happening at the same date and
+A Shipment define a group of moves happening at the same date and
around the same location.
-Supplier Packing
-++++++++++++++++
+Supplier Shipment
++++++++++++++++++
-A supplier packing is used when products are received from a
+A supplier shipment is used when products are received from a
supplier. It is mainly composed of a party (the supplier), a location
(the warehouse in which the products are coming) and two list of moves:
@@ -116,7 +116,7 @@ supplier. It is mainly composed of a party (the supplier), a location
location (or one of his child locations).
-The supplier packing can be in one of this states:
+The supplier shipment can be in one of this states:
* Draft
@@ -129,17 +129,17 @@ The supplier packing can be in one of this states:
* Done
- Inventory moves are in state Done.
+ Inventory and incoming moves are in state Done.
* Cancel
All moves are cancelled.
-Customer Packing
-++++++++++++++++
+Customer Shipment
++++++++++++++++++
-A customer packing is used for sending products to customer. It is
+A customer shipment is used for sending products to customer. It is
mainly composed of a party (the customer), a location (the warehouse
out of which the product are going) and two list of moves:
@@ -154,7 +154,7 @@ out of which the product are going) and two list of moves:
customer location.
-The customer packing can be in one of this states:
+The customer shipment can be in one of this states:
* Draft
@@ -162,9 +162,9 @@ The customer packing can be in one of this states:
* Waiting
- When a customer packing is set to waiting, the inventory moves are
+ When a customer shipment is set to waiting, the inventory moves are
created (or completed) to balance the outgoing moves. The waiting
- state also means that the packing should be processed.
+ state also means that the shipment should be processed.
* Assigned
@@ -179,19 +179,19 @@ The customer packing can be in one of this states:
* Done
- The packing is Done when the outgoing moves have been made,
+ The shipment is Done when the outgoing moves have been made,
e.g. when a truck left the warehouse.
* Cancel
- A packing which is not yet completed (not in state Done) can be
+ A shipment which is not yet completed (not in state Done) can be
cancelled at any time. This also cancel all the moves.
-Internal Packing
-++++++++++++++++
+Internal Shipment
++++++++++++++++++
-A customer packing is used for sending products across locations
+An internal shipment is used for sending products across locations
inside the company. It is mainly composed of two locations and a list
of moves. It can be in one of these states:
@@ -202,7 +202,7 @@ of moves. It can be in one of these states:
* Waiting
- The waiting state means that the packing should be processed.
+ The waiting state means that the shipment should be processed.
* Assigned
@@ -210,11 +210,11 @@ of moves. It can be in one of these states:
* Done
- The packing is Done when the moves have been made.
+ The shipment is Done when the moves have been made.
* Cancel
- A packing which is not yet completed (not in state Done) can be
+ A shipment which is not yet completed (not in state Done) can be
cancelled at any time. This also cancel all the moves.
diff --git a/inventory.py b/inventory.py
index c90188b..5b8e6e6 100644
--- a/inventory.py
+++ b/inventory.py
@@ -90,11 +90,9 @@ class Inventory(ModelWorkflow, ModelSQL, ModelView):
for line in inventory.lines:
line_obj.create_move(cursor, user, line, context=context)
- self.write(
- cursor, user, inventory_id,
- {'state': 'done',
- 'date': date_obj.today(cursor, user, context=context)},
- context=context)
+ self.write(cursor, user, inventory_id, {
+ 'state': 'done',
+ }, context=context)
def copy(self, cursor, user, ids, default=None, context=None):
date_obj = self.pool.get('ir.date')
@@ -298,6 +296,7 @@ class InventoryLine(ModelSQL, ModelView):
'uom': line.uom.id,
'company': line.inventory.company.id,
'state': 'done',
+ 'effective_date': line.inventory.date,
}, context=context)
self.write(cursor, user, line.id, {'move': move_id}, context=context)
diff --git a/location.py b/location.py
index a4c3bcd..e78de8d 100644
--- a/location.py
+++ b/location.py
@@ -224,6 +224,60 @@ class Location(ModelSQL, ModelView):
self._set_warehouse_parent(cursor, user, locations, context=context)
return res
+ def copy(self, cursor, user, ids, default=None, context=None):
+ if default is None:
+ default = {}
+ int_id = False
+ if isinstance(ids, (int, long)):
+ int_id = True
+ ids = [ids]
+
+ default['left'] = 0
+ default['right'] = 0
+
+ res = []
+ locations = self.browse(cursor, user, ids, context=context)
+ for location in locations:
+ if location.type == 'warehouse':
+
+ wh_default = default.copy()
+ wh_default['type'] = 'view'
+ wh_default['input_location'] = False
+ wh_default['output_location'] = False
+ wh_default['storage_location'] = False
+ wh_default['childs'] = False
+
+ new_id = super(Location, self).copy(
+ cursor, user, location.id, default=wh_default,
+ context=context)
+
+ child_context = context and context.copy() or {}
+ child_context['cp_warehouse_locations'] = {
+ 'input_location': location.input_location.id,
+ 'output_location': location.output_location.id,
+ 'storage_location': location.storage_location.id}
+ child_context['cp_warehouse_id'] = new_id
+
+ self.copy(
+ cursor, user, [c.id for c in location.childs],
+ default={'parent':new_id}, context=child_context)
+ self.write(
+ cursor, user, new_id, {'type': 'warehouse'}, context=context)
+ else:
+ new_id = super(Location, self).copy(
+ cursor, user, location.id, default=default, context=context)
+ warehouse_locations = context.get('cp_warehouse_locations', {})
+ if location.id in warehouse_locations.values():
+ for field, loc_id in warehouse_locations.iteritems():
+ if loc_id == location.id:
+ self.write(
+ cursor, user, context['cp_warehouse_id'],
+ {field: new_id}, context=context)
+
+ res.append(new_id)
+
+ return int_id and res[0] or res
+
Location()
diff --git a/product.py b/product.py
index 8eb3821..527f76c 100644
--- a/product.py
+++ b/product.py
@@ -23,6 +23,38 @@ class Template(ModelSQL, ModelView):
res[template.id] += product[name]
return res
+ def __init__(self):
+ super(Template, self).__init__()
+ self._error_messages.update({
+ 'change_default_uom': 'You cannot change the default uom for '\
+ 'a product which is associated to stock moves.',
+ })
+
+ def write(self, cursor, user, ids, vals, context=None):
+ move_obj = self.pool.get('stock.move')
+ if not vals.get("default_uom"):
+ return super(Template, self).write(cursor, user, ids, vals,
+ context=context)
+
+ for i in range(0, len(ids), cursor.IN_MAX):
+ sub_ids = ids[i:i + cursor.IN_MAX]
+ res = self.search(cursor, user, [
+ ('id', 'in', sub_ids),
+ ('default_uom', '!=', vals['default_uom']),
+ ], context=context)
+
+ if res:
+ res = move_obj.search(cursor, user, [
+ ('product.template', 'in', res),
+ ], limit=1, context=context)
+ if res:
+ self.raise_user_error(cursor, 'change_default_uom',
+ context=context)
+
+ return super(Template, self).write(cursor, user, ids, vals,
+ context=context)
+
+
Template()
class Product(ModelSQL, ModelView):
diff --git a/trytond_stock.egg-info/PKG-INFO b/trytond_stock.egg-info/PKG-INFO
index a2ba43a..2f5295e 100644
--- a/trytond_stock.egg-info/PKG-INFO
+++ b/trytond_stock.egg-info/PKG-INFO
@@ -1,6 +1,6 @@
Metadata-Version: 1.0
Name: trytond-stock
-Version: 1.2.0
+Version: 1.2.1
Summary: Stock Management and Inventory Control with:
- Location definition
- Stock move
commit 09b7acf4d39957512f823f0df866246b54030a07
Author: Daniel Baumann <daniel at debian.org>
Date: Tue Apr 21 10:41:42 2009 +0200
Adding upstream version 1.2.0.
diff --git a/CHANGELOG b/CHANGELOG
index 72ad7b8..d340420 100644
--- a/CHANGELOG
+++ b/CHANGELOG
@@ -1,11 +1,14 @@
-Version 1.0.3 - 2009-03-02
-* Some bug fixes (see mercurial logs for details)
-
-Version 1.0.2 - 2009-01-06
+Version 1.2.0 - 2009-04-20
+* Bug fixes (see mercurial logs for details)
+* Added return packings and a wizard to create customer return packing.
+* Make assign_try to assign as much possible
+* Move assign_try and pick_product from product.product to stock.move
+* Added stock_skip_warehouse keyword for products_by_location
+ method. The default behaviour is now to compute quantities on all
+ child locations for a warehouse.
* Handle average price for products return to supplier
-* Some bug fixes (see mercurial logs for details)
-
-Version 1.0.1 - 2008-12-01
+* Added stock_destinations keyword on products_by_location context to
+ filter moves to a set of destinations.
* Allow egg installation
Version 1.0.0 - 2008-11-17
diff --git a/INSTALL b/INSTALL
index 24b5182..92c33f6 100644
--- a/INSTALL
+++ b/INSTALL
@@ -14,7 +14,7 @@ Prerequisites
Installation
------------
-Once you've downloaded and unpacked a trytond_stock source release, enter the
+Once you've downloaded and unpacked the trytond_stock source release, enter the
directory where the archive was unpacked, and run:
python setup.py install
diff --git a/PKG-INFO b/PKG-INFO
index 83440bc..30d2b0f 100644
--- a/PKG-INFO
+++ b/PKG-INFO
@@ -1,21 +1,21 @@
Metadata-Version: 1.0
Name: trytond_stock
-Version: 1.0.3
+Version: 1.2.0
Summary: Stock Management and Inventory Control with:
- Location definition
- Stock move
- - Packing Supplier / Customer / Internal
+ - Shipment: Supplier, Customer or Internal
- Stock Inventory
And with reports:
- - Customer Packing
+ - Customer Shipment
- Products by Locations
Home-page: http://www.tryton.org/
Author: B2CK
Author-email: info at b2ck.com
License: GPL-3
-Download-URL: http://downloads.tryton.org/1.0/
+Download-URL: http://downloads.tryton.org/1.2/
Description: UNKNOWN
Platform: UNKNOWN
Classifier: Development Status :: 5 - Production/Stable
diff --git a/TODO b/TODO
index 1b49e71..50de29d 100644
--- a/TODO
+++ b/TODO
@@ -1,3 +1,4 @@
-- use a wizard for assignation on customer packing and internal packing,
- to display error message if not all lines were assigned (issue540).
-- handle withdraw packing
+- Add an indexed period on move with automatic creation and default duration
+ defined on company
+- Add check on product when changing UOM and there is stock move
+- Migrate packing* objects and tables to shipment*
diff --git a/__tryton__.py b/__tryton__.py
index c458297..f2b8f02 100644
--- a/__tryton__.py
+++ b/__tryton__.py
@@ -3,20 +3,21 @@
{
'name': 'Stock Management',
'name_de_DE': 'Lagerverwaltung',
- 'name_fr_FR': 'Gestion des stocks',
+ 'name_es_CO': 'Inventarios',
'name_es_ES': 'Inventarios',
- 'version': '1.0.3',
+ 'name_fr_FR': 'Gestion des stocks',
+ 'version': '1.2.0',
'author': 'B2CK',
'email': 'info at b2ck.com',
'website': 'http://www.tryton.org/',
'description': '''Stock Management and Inventory Control with:
- Location definition
- Stock move
- - Packing Supplier / Customer / Internal
+ - Shipment: Supplier, Customer or Internal
- Stock Inventory
And with reports:
- - Customer Packing
+ - Customer Shipment
- Products by Locations
''',
'description_de_DE': '''Lagerverwaltung und Bestandskontrolle mit:
@@ -29,15 +30,15 @@ Zugehörige Berichte:
- Lieferschein für Kunden
- Artikel nach Lagerorten
''',
- 'description_fr_FR':'''Gestion des stocks et contrôle de l'inventaire avec:
- - Emplacement
- - Mouvement de stock
- - Colisages client / fournisseur / interne
- - Inventaire
+ 'description_es_CO': '''Administración de Inventarios y bodegas:
+ - Definición de sitios
+ - Movimiento de Bodega
+ - Empaque de Proveedor / Cliente / Interno
+ - Inventario en Bodega
-Et les rapports:
- - Colisage client
- - Quantités de produit par location
+Y con los reportes:
+ - Empaques de Clientes
+ - Productos por Lugar
''',
'description_es_ES': '''Administración de Inventarios y bodegas:
- Definición de sitios
@@ -49,7 +50,16 @@ Y con los reportes:
- Empaques de Clientes
- Productos por Lugar
''',
+ 'description_fr_FR':'''Gestion des stocks et contrôle de l'inventaire avec:
+ - Emplacement
+ - Mouvement de stock
+ - Colisages client / fournisseur / interne
+ - Inventaire
+Et les rapports:
+ - Colisage client
+ - Quantités de produit par location
+''',
'depends': [
'ir',
'workflow',
@@ -65,9 +75,11 @@ Y con los reportes:
'packing.xml',
'move.xml',
'inventory.xml',
+ 'party.xml',
],
'translation': [
'de_DE.csv',
+ 'es_CO.csv',
'es_ES.csv',
'fr_FR.csv',
],
diff --git a/customer_return_restocking_list.odt b/customer_return_restocking_list.odt
new file mode 100644
index 0000000..3c76dff
Binary files /dev/null and b/customer_return_restocking_list.odt differ
diff --git a/de_DE.csv b/de_DE.csv
index bb37ff0..5b9bd9b 100644
--- a/de_DE.csv
+++ b/de_DE.csv
@@ -1,69 +1,81 @@
type,name,res_id,src,value,fuzzy
-error,stock.inventory.line,0,Line quantity must be positive!,Menge der Position muss positiv sein!,0
+error,stock.inventory.line,0,Line quantity must be positive!,Anzahl der Position muss positiv sein!,0
error,stock.inventory.line,0,Product must be unique by inventory!,Ein Artikel kann in einem Lagerbestand nicht mehrfach vergeben werden!,0
+error,stock.location,0,A location with existing moves cannot be changed to a type that does not support moves.,"Ein Lagerort mit zugordneten Bewegungen kann nicht zu einem Typ geändert werden, der keine Bewegungen unterstützt.",0
error,stock.location,0,You can not create recursive locations!,Lagerorte können nicht rekursiv angelegt werden!,0
-error,stock.move,0,Move can not be in both Supplier and Customer Packing,Eine Bewegung kann nicht in Lieferanten- und Kundenlieferung erfolgen,0
-error,stock.move,0,Move quantity must be positive,Zu bewegende Menge muss positiv sein,0
+error,stock.move,0,Move can be on only one Shipment,Eine Bewegung kann nur auf einem Lieferposten erfolgen!,0
+error,stock.move,0,Move quantity must be positive,Zu bewegende Anzahl muss positiv sein,0
error,stock.move,0,Source and destination location must be different,Herkunfts- und Bestimmungsort müssen unterschiedlich sein,0
error,stock.move,0,You can not set state to assigned!,Status kann nicht auf Zugewiesen gesetzt werden!,0
error,stock.move,0,You can not set state to done!,Status kann nicht auf Erledigt gesetzt werden!,0
error,stock.move,0,You can not set state to draft!,"Status ""Entwurf"" kann nicht gesetzt werden!",0
-error,stock.move,0,You can not use service product for a move!,Der Bestand einer Dienstleistung kann nicht geändert werden!,0
+error,stock.move,0,You can not use service products for a move!,Dienstleistungen können nicht in Warenbewegungen verwendet werden!,0
error,stock.move,0,You can only delete draft or cancelled moves!,"Nur Bewegungen mit Status ""Entwurf"" oder ""Abgebrochen"" können gelöscht werden!",0
-error,stock.packing.in,0,Incoming Moves must have input location as destination location!,Eingehende Bewegungen müssen einen Lagerort vom Typ eingehend als Bestimmung haben!,0
-error,stock.packing.in,0,Inventory Moves must have input location as source location!,Bestandsänderungen müssen einen Lagerort vom Typ eingehend als Herkunft haben!,0
-error,stock.packing.in,0,Inventory Moves must have output location as destination location!,Bestandsänderungen müssen einen Lagerort vom Typ ausgehend als Herkunft haben! ,0
-error,stock.packing.in,0,Outgoing Moves must have output location as source location!,Ausgehende Bewegungen müssen einen Lagerort vom Typ ausgehend als Herkunft haben! ,0
+error,stock.packing.in,0,Incoming Moves must have the warehouse input location as destination location!,Eingehende Bewegungen müssen den Eingangsbereich des Warenlagers als Zielort haben!,0
+error,stock.packing.in,0,Inventory Moves must have the warehouse input location as source location!,Eingehende Bewegungen müssen den Eingangsbereich des Warenlagers als Herkunftsort haben!,0
+error,stock.packing.out.return,0,Incoming Moves must have the warehouse input location as destination location!,Eingehende Bewegungen müssen den Eingangsbereich des Warenlagers als Zielort haben!,0
+error,stock.packing.out.return,0,Inventory Moves must have the warehouse input location as source location!,Eingehende Bewegungen müssen den Eingangsbereich des Warenlagers als Herkunftsort haben!,0
+error,stock.packing.out.return.create,0,The packing with code %s is not yet sent.,Der Lieferposten mit Code %s ist noch nicht erledigt.,0
+error,stock.packing.out.return.create,0,You can not create return packing,Warenrücknahme nicht möglich!,0
field,"party.address,delivery",0,Delivery,Lieferadresse,0
field,"party.party,customer_location",0,Customer Location,Lagerort Kunde,0
field,"party.party,supplier_location",0,Supplier Location,Lagerort Lieferant,0
-field,"product.product,forecast_quantity",0,Forecast Quantity,Voraussichtliche Menge,0
-field,"product.product,quantity",0,Quantity,Menge,0
-field,"product.template,forecast_quantity",0,Forecast Quantity,Voraussichtliche Menge,0
-field,"product.template,quantity",0,Quantity,Menge,0
+field,"product.product,forecast_quantity",0,Forecast Quantity,Voraussichtliche Anzahl,0
+field,"product.product,quantity",0,Quantity,Anzahl,0
+field,"product.template,forecast_quantity",0,Forecast Quantity,Voraussichtliche Anzahl,0
+field,"product.template,quantity",0,Quantity,Anzahl,0
field,"stock.inventory,company",0,Company,Unternehmen,0
+field,"stock.inventory.complete.init,categories",0,Categories,Kategorien,0
+field,"stock.inventory.complete.init,products",0,Products,Artikel,0
field,"stock.inventory,date",0,Date,Datum,0
-field,"stock.inventory.line,expected_quantity",0,Expected Quantity,Erwartete Menge,0
+field,"stock.inventory.line,expected_quantity",0,Expected Quantity,Erwartete Anzahl,0
field,"stock.inventory.line,inventory",0,Inventory,Lagerbestand,0
field,"stock.inventory.line,move",0,Move,Bewegung,0
field,"stock.inventory.line,product",0,Product,Artikel,0
-field,"stock.inventory.line,quantity",0,Quantity,Menge,0
+field,"stock.inventory.line,quantity",0,Quantity,Anzahl,0
+field,"stock.inventory.line,rec_name",0,Name,Name,0
field,"stock.inventory,lines",0,Lines,Positionen,0
field,"stock.inventory.line,unit_digits",0,Unit Digits,Anzahl Stellen,0
field,"stock.inventory.line,uom",0,UOM,MaÃeinheit,0
field,"stock.inventory,location",0,Location,Ort,0
field,"stock.inventory,lost_found",0,Lost and Found,Inventurdifferenz,0
+field,"stock.inventory,rec_name",0,Name,Name,0
field,"stock.inventory,state",0,State,Status,0
field,"stock.location,active",0,Active,Aktiv,0
field,"stock.location,address",0,Address,Adresse,0
-field,"stock.location,childs",0,Childs,Untergeordnet (Lagerorte),0
+field,"stock.location,childs",0,Children,Untergeordnet (Lagerorte),0
field,"stock.location,code",0,Code,Code,0
-field,"stock.location,forecast_quantity",0,Forecast Quantity,Voraussichtliche Menge,0
+field,"stock.location,forecast_quantity",0,Forecast Quantity,Voraussichtliche Anzahl,0
field,"stock.location,input_location",0,Input,Eingang,0
field,"stock.location,left",0,Left,Links,0
field,"stock.location,name",0,Name,Name,0
field,"stock.location,output_location",0,Output,Ausgang,0
field,"stock.location,parent",0,Parent,Ãbergeordnet (Lagerort),0
-field,"stock.location,quantity",0,Quantity,Menge,0
+field,"stock.location,quantity",0,Quantity,Anzahl,0
+field,"stock.location,rec_name",0,Name,Name,0
field,"stock.location,right",0,Right,Rechts,0
field,"stock.location_stock_date.init,forecast_date",0,At Date,Zum,0
field,"stock.location,storage_location",0,Storage,Lager,0
field,"stock.location,type",0,Location type,Lagertyp,0
field,"stock.move,company",0,Company,Unternehmen,0
+field,"stock.move,cost_price",0,Cost Price,Einkaufspreis,0
field,"stock.move,currency",0,Currency,Währung,0
field,"stock.move,effective_date",0,Effective Date,Effektives Datum,0
field,"stock.move,from_location",0,From Location,Von Lagerort,0
-field,"stock.move,packing_in",0,Supplier Packing,Lieferschein von Lieferant,0
-field,"stock.move,packing_internal",0,Internal Packing,Interner Lieferschein,0
-field,"stock.move,packing_out",0,Customer Packing,Lieferschein an Kunde,0
+field,"stock.move,packing_in",0,Supplier Shipment,Lieferposten von Lieferant,0
+field,"stock.move,packing_in_return",0,Supplier Return Shipment,Warenrückgabe,0
+field,"stock.move,packing_internal",0,Internal Shipment,Interner Lieferposten,0
+field,"stock.move,packing_out",0,Customer Shipment,Lieferposten an Kunde,0
+field,"stock.move,packing_out_return",0,Customer Return Shipment,Warenrücknahme,0
field,"stock.move,planned_date",0,Planned Date,Geplantes Datum,0
field,"stock.move,product",0,Product,Artikel,0
-field,"stock.move,quantity",0,Quantity,Menge,0
+field,"stock.move,quantity",0,Quantity,Anzahl,0
+field,"stock.move,rec_name",0,Name,Name,0
field,"stock.move,state",0,State,Status,0
field,"stock.move,to_location",0,To Location,Zu Lagerort,0
-field,"stock.move,type",0,Type,Typ,0
field,"stock.move,unit_digits",0,Unit Digits,Anzahl Stellen,0
field,"stock.move,unit_price",0,Unit Price,Einzelpreis,0
+field,"stock.move,unit_price_required",0,Unit Price Required,Einzelpreis erforderlich,0
field,"stock.move,uom",0,Uom,Einheit,0
field,"stock.packing.in,code",0,Code,Code,0
field,"stock.packing.in,contact_address",0,Contact Address,Kontaktadresse,0
@@ -72,28 +84,54 @@ field,"stock.packing.in,incoming_moves",0,Incoming Moves,Eingehende Bewegungen,0
field,"stock.packing.in,inventory_moves",0,Inventory Moves,Bestandsänderungen,0
field,"stock.packing.in,moves",0,Moves,Bewegungen,0
field,"stock.packing.in,planned_date",0,Planned Date,Geplantes Datum,0
+field,"stock.packing.in,rec_name",0,Name,Name,0
field,"stock.packing.in,reference",0,Reference,Referenz,0
+field,"stock.packing.in.return.assign.ask_force,moves",0,Moves,Bewegungen,0
+field,"stock.packing.in.return,code",0,Code,Code,0
+field,"stock.packing.in.return,effective_date",0,Effective Date,Effektives Datum,0
+field,"stock.packing.in.return,from_location",0,From Location,Von Lagerort,0
+field,"stock.packing.in.return,moves",0,Moves,Bewegungen,0
+field,"stock.packing.in.return,planned_date",0,Planned Date,Geplantes Datum,0
+field,"stock.packing.in.return,rec_name",0,Name,Name,0
+field,"stock.packing.in.return,reference",0,Reference,Referenz,0
+field,"stock.packing.in.return,state",0,State,Status,0
+field,"stock.packing.in.return,to_location",0,To Location,Zu Lagerort,0
field,"stock.packing.in,state",0,State,Status,0
field,"stock.packing.in,supplier",0,Supplier,Lieferant,0
+field,"stock.packing.internal.assign.ask_force,moves",0,Moves,Bewegungen,0
field,"stock.packing.internal,code",0,Code,Code,0
field,"stock.packing.internal,effective_date",0,Effective Date,Effektives Datum,0
field,"stock.packing.internal,from_location",0,From Location,Von Lagerort,0
field,"stock.packing.internal,moves",0,Moves,Bewegungen,0
field,"stock.packing.internal,planned_date",0,Planned Date,Geplantes Datum,0
+field,"stock.packing.internal,rec_name",0,Name,Name,0
field,"stock.packing.internal,reference",0,Reference,Referenz,0
field,"stock.packing.internal,state",0,State,Status,0
field,"stock.packing.internal,to_location",0,To Location,Zu Lagerort,0
field,"stock.packing.in,warehouse",0,Warehouse,Warenlager,0
+field,"stock.packing.out.assign.ask_force,inventory_moves",0,Inventory Moves,Bestandsänderungen,0
field,"stock.packing.out,code",0,Code,Code,0
field,"stock.packing.out,customer",0,Customer,Kunde,0
-field,"stock.packing.out,customer_location",0,Customer Location,Lagerort Kunde,0
field,"stock.packing.out,delivery_address",0,Delivery Address,Lieferadresse,0
field,"stock.packing.out,effective_date",0,Effective Date,Effektives Datum,0
field,"stock.packing.out,inventory_moves",0,Inventory Moves,Bestandsänderungen,0
field,"stock.packing.out,moves",0,Moves,Bewegungen,0
field,"stock.packing.out,outgoing_moves",0,Outgoing Moves,Ausgehende Bewegungen,0
field,"stock.packing.out,planned_date",0,Planned Date,Geplantes Datum,0
+field,"stock.packing.out,rec_name",0,Name,Name,0
field,"stock.packing.out,reference",0,Reference,Referenz,0
+field,"stock.packing.out.return,code",0,Code,Code,0
+field,"stock.packing.out.return,customer",0,Customer,Kunde,0
+field,"stock.packing.out.return,delivery_address",0,Delivery Address,Lieferadresse,0
+field,"stock.packing.out.return,effective_date",0,Effective Date,Effektives Datum,0
+field,"stock.packing.out.return,incoming_moves",0,Incoming Moves,Eingehende Bewegungen,0
+field,"stock.packing.out.return,inventory_moves",0,Inventory Moves,Bestandsänderungen,0
+field,"stock.packing.out.return,moves",0,Moves,Bewegungen,0
+field,"stock.packing.out.return,planned_date",0,Planned Date,Geplantes Datum,0
+field,"stock.packing.out.return,rec_name",0,Name,Name,0
+field,"stock.packing.out.return,reference",0,Reference,Referenz,0
+field,"stock.packing.out.return,state",0,State,Status,0
+field,"stock.packing.out.return,warehouse",0,Warehouse,Warenlager,0
field,"stock.packing.out,state",0,State,Status,0
field,"stock.packing.out,warehouse",0,Warehouse,Warenlager,0
field,"stock.product_stock_date.init,forecast_date",0,At Date,Zum,0
@@ -111,96 +149,207 @@ help,"stock.product_stock_date.init,forecast_date",0,"Allow to compute expected
* ein leerer Wert ist ein unbegrenztes Datum in der Zukunft
* ein Datum in der Vergangenheit berechnet historische Werte
",0
-model,"ir.action,name",act_packing_out_form_assigned,Assigned Customer Packings,Zugewiesene Kundenlieferscheine,0
-model,"ir.action,name",act_packing_internal_assigned_form,Assigned Internal Packings,Zugewiesene Interne Lieferscheine,0
-model,"ir.action,name",wizard_complete_inventory,Complete Inventory,Aktueller Lagerbestand,0
-model,"ir.action,name",report_packing_out,Customer Packing,Lieferschein an Kunde,0
-model,"ir.action,name",act_packing_out_form,Customer Packings,Lieferscheine an Kunden,0
-model,"ir.action,name",act_packing_out_form_ready,Customer Packings Ready for Shipping,Versandbereite Lieferscheine an Kunden,0
-model,"ir.action,name",act_packing_out_form_waiting,Customer Packings Waiting Assignation,Zuzuweisende Lieferscheine an Kunden,0
-model,"ir.action,name",act_packing_internal_draft_form,Draft Internal Packings,Entwürfe (Interne Lieferscheine),0
+model,"ir.action,name",act_packing_out_form_assigned,Assigned Customer Shipments,Zugewiesene Lieferposten an Kunden,0
+model,"ir.action,name",act_packing_internal_assigned_form,Assigned Internal Shipments,Zugewiesene Interne Lieferposten,0
+model,"ir.action,name",wizard_packing_in_return_assign,Assign Purchase Return Shipment,Zuweisung Lieferposten Warenrückgabe,0
+model,"ir.action,name",wizard_packing_internal_assign,Assign Shipment Internal,Zuweisung Lieferposten Intern,0
+model,"ir.action,name",wizard_packing_out_assign,Assign Shipment Out,Zuweisung Lieferposten Ausgehend,0
+model,"ir.action,name",wizard_complete_inventory,Complete Inventory,Lagerbestandspositionen komplettieren,0
+model,"ir.action,name",create_packing_out_return,Create Return Shipment,Warenrücknahme erstellen,0
+model,"ir.action,name",act_packing_out_return_form,Customer Return Shipments,Warenrücknahmen (von Kunden),0
+model,"ir.action,name",act_packing_out_form,Customer Shipments,Lieferposten an Kunden,0
+model,"ir.action,name",act_packing_out_form2,Customer Shipments,Lieferposten als Kunde,0
+model,"ir.action,name",act_packing_out_form_ready,Customer Shipments Ready for Shipping,Versandbereite Lieferposten an Kunden,0
+model,"ir.action,name",act_packing_out_form_waiting,Customer Shipments Waiting Assignation,Zuzuweisende Lieferposten an Kunden,0
+model,"ir.action,name",report_packing_out_delivery_note,Delivery Note,Lieferschein,0
+model,"ir.action,name",act_packing_internal_draft_form,Draft Internal Shipments,Entwürfe (Interne Lieferposten),0
model,"ir.action,name",act_location_form,Edit Locations,Lagerorte bearbeiten,0
-model,"ir.action,name",act_packing_internal_form,Internal Packings,Interne Lieferscheine,0
-model,"ir.action,name",act_packing_internal_waiting_form,Internal Packings Waiting Assignation,Zuzuweisende Interne Lieferscheine,0
-model,"ir.action,name",act_inventory_form,Inventories,Lagerbestände,0
+model,"ir.action,name",report_packing_internal,Internal Shipment,Interner Lieferposten,0
+model,"ir.action,name",act_packing_internal_form,Internal Shipments,Interne Lieferposten,0
+model,"ir.action,name",act_packing_internal_waiting_form,Internal Shipments Waiting Assignation,Zuzuweisende Interne Lieferposten,0
+model,"ir.action,name",act_inventory_form,Inventories,Bestandskorrekturen,0
model,"ir.action,name",act_location_tree,Locations,Lagerorte,0
model,"ir.action,name",act_move_form,Moves,Lagerbewegungen,0
model,"ir.action,name",act_move_form_supp,Moves from Suppliers,Bewegungen von Lieferanten,0
model,"ir.action,name",act_move_form_supp_proceed,Moves from Suppliers Waiting Arrival,Erwartete Bewegungen von Lieferanten,0
model,"ir.action,name",act_move_form_cust,Moves to Customers,Bewegungen zu Kunden,0
-model,"ir.action,name",act_packing_in_form2,New Supplier Packing,Neuer Lieferschein von Lieferant,0
+model,"ir.action,name",act_packing_out_return_form2,New Customer Return Shipment,Neue Warenrücknahme (von Kunde),0
+model,"ir.action,name",act_packing_internal_new_form,New Internal Shipment,Neuer Interner Lieferposten,0
+model,"ir.action,name",act_packing_in_return_new_form,New Supplier Return Shipment,Neue Warenrückgabe (an Lieferant),0
+model,"ir.action,name",act_packing_in_form2,New Supplier Shipment,Neuer Lieferposten von Lieferant,0
+model,"ir.action,name",report_packing_out_picking_list,Picking List,Pick Liste,0
model,"ir.action,name",wizard_location_open,Product by Location,Artikel nach Lagerort,0
model,"ir.action,name",wizard_product_open,Product Quantities,Artikelbestand,0
model,"ir.action,name",act_product_by_location,Products by Locations,Artikel nach Lagerort,0
model,"ir.action,name",act_location_quantity_tree,Product Stock,Lagerbestand,0
-model,"ir.action,name",act_packing_in_form_received,Received Supplier packings,Erhaltene Lieferscheine von Lieferanten,0
-model,"ir.action,name",act_packing_in_form,Supplier Packings,Lieferscheine von Lieferanten,0
-model,"ir.sequence,name",sequence_packing_out,Customer Packing,Lieferschein Kunde,0
-model,"ir.sequence,name",sequence_packing_in,Supplier Packing,Lieferschein Lieferant,0
-model,"ir.sequence.type,name",sequence_type_packing_out,Customer Packing,Lieferschein Kunde,0
-model,"ir.sequence.type,name",sequence_type_packing_in,Supplier Packing,Lieferschein Lieferant,0
-model,"ir.ui.menu,name",menu_packing_out_assigned,Assigned Customer Packings,Zugewiesene Kundenlieferscheine,0
-model,"ir.ui.menu,name",menu_packing_internal_assigned_form,Assigned Internal Packings,Zugewiesene Interne Lieferscheine,0
+model,"ir.action,name",act_packing_in_form_received,Received Supplier packings,Erhaltene Lieferposten von Lieferanten,0
+model,"ir.action,name",report_packing_in_restocking_list,Restocking List,Einlagerungsliste,0
+model,"ir.action,name",report_packing_out_return_restocking_list,Restocking List,Einlagerungsliste,0
+model,"ir.action,name",act_packing_in_return_form,Supplier Return Shipments,Warenrückgaben (an Lieferanten),0
+model,"ir.action,name",act_packing_in_form,Supplier Shipments,Lieferposten von Lieferanten,0
+model,"ir.action,name",act_packing_out_form3,Supplier Shipments,Lieferposten als Lieferant,0
+model,"ir.sequence,name",sequence_packing_out_return,Customer Return Shipment,Warenrücknahme Kunde,0
+model,"ir.sequence,name",sequence_packing_out,Customer Shipment,Lieferposten Kunde,0
+model,"ir.sequence,name",sequence_packing_internal,Internal Shipment,Interner Lieferposten,0
+model,"ir.sequence,name",sequence_packing_in_return,Supplier Return Shipment,Warenrückgabe Lieferant,0
+model,"ir.sequence,name",sequence_packing_in,Supplier Shipment,Lieferposten Lieferant,0
+model,"ir.sequence.type,name",sequence_type_packing_out_return,Customer Return Shipment,Warenrücknahme Kunde,0
+model,"ir.sequence.type,name",sequence_type_packing_out,Customer Shipment,Lieferposten Kunde,0
+model,"ir.sequence.type,name",sequence_type_packing_internal,Internal Shipment,Interner Lieferposten,0
+model,"ir.sequence.type,name",sequence_type_packing_in_return,Supplier Return Shipment,Warenrückgabe Lieferant,0
+model,"ir.sequence.type,name",sequence_type_packing_in,Supplier Shipment,Lieferposten Lieferant,0
+model,"ir.ui.menu,name",menu_packing_out_assigned,Assigned Customer Shipments,Zugewiesene Lieferposten an Kunden,0
+model,"ir.ui.menu,name",menu_packing_internal_assigned_form,Assigned Internal Shipments,Zugewiesene Interne Lieferposten,0
model,"ir.ui.menu,name",menu_configuration,Configuration,Einstellungen,0
-model,"ir.ui.menu,name",menu_packing_out_form,Customer Packings,Lieferscheine an Kunden,0
-model,"ir.ui.menu,name",menu_packing_out_ready,Customer Packings Ready for Shipping,Versandbereite Lieferscheine an Kunden,0
-model,"ir.ui.menu,name",menu_packing_out_waiting,Customer Packings Waiting Assignation,Zuzuweisende Lieferscheine an Kunden,0
-model,"ir.ui.menu,name",menu_packing_internal_draft_form,Draft Internal Packings,Entwürfe (Interne Lieferscheine),0
+model,"ir.ui.menu,name",menu_packing_out_return_form,Customer Return Shipments,Warenrücknahmen (von Kunden),0
+model,"ir.ui.menu,name",menu_packing_out_form,Customer Shipments,Lieferposten an Kunden,0
+model,"ir.ui.menu,name",menu_packing_out_ready,Customer Shipments Ready for Shipping,Versandbereite Lieferposten an Kunden,0
+model,"ir.ui.menu,name",menu_packing_out_waiting,Customer Shipments Waiting Assignation,Zuzuweisende Lieferposten an Kunden,0
+model,"ir.ui.menu,name",menu_packing_internal_draft_form,Draft Internal Shipments,Entwürfe (Interne Lieferposten),0
model,"ir.ui.menu,name",menu_location_form,Edit Locations,Lagerorte bearbeiten,0
-model,"ir.ui.menu,name",menu_packing_internal_form,Internal Packings,Interne Lieferscheine,0
-model,"ir.ui.menu,name",menu_packing_internal_waiting_form,Internal Packings Waiting Assignation,Zuzuweisende Interne Lieferscheine,0
-model,"ir.ui.menu,name",menu_inventory_form,Inventories,Bestandskontrolle,0
+model,"ir.ui.menu,name",menu_packing_internal_form,Internal Shipments,Interne Lieferposten,0
+model,"ir.ui.menu,name",menu_packing_internal_waiting_form,Internal Shipments Waiting Assignation,Zuzuweisende Interne Lieferposten,0
+model,"ir.ui.menu,name",menu_inventory_form,Inventories,Bestandskorrektur,0
model,"ir.ui.menu,name",menu_stock,Inventory Management,Lager,0
model,"ir.ui.menu,name",menu_location_tree,Locations,Lagerorte,0
model,"ir.ui.menu,name",menu_move_form,Moves,Bewegungen,0
model,"ir.ui.menu,name",menu_move_form_supp,Moves from Suppliers,Bewegungen von Lieferanten,0
model,"ir.ui.menu,name",menu_move_form_supp_proceed,Moves from Suppliers Waiting Arrival,Erwartete Bewegungen von Lieferanten,0
model,"ir.ui.menu,name",menu_move_form_cust,Moves to Customers,Bewegungen zu Kunden,0
-model,"ir.ui.menu,name",menu_packing_in_form2,New Supplier Packing,Neuer Lieferschein von Lieferant,0
-model,"ir.ui.menu,name",menu_packing_in_received,Received Supplier packings,Erhaltene Lieferscheine von Lieferanten,0
-model,"ir.ui.menu,name",menu_packing_in_form,Supplier Packings,Lieferscheine von Lieferanten,0
+model,"ir.ui.menu,name",menu_packing_out_return_form2,New Customer Return Shipment,Neue Warenrücknahme (von Kunde),0
+model,"ir.ui.menu,name",menu_packing_internal_new_form,New Internal Shipment,Neuer Interner Lieferposten,0
+model,"ir.ui.menu,name",menu_packing_in_return_new_form,New Supplier Return Shipment,Neue Warenrückgabe (an Lieferant),0
+model,"ir.ui.menu,name",menu_packing_in_form2,New Supplier Shipment,Neuer Lieferposten von Lieferant,0
+model,"ir.ui.menu,name",menu_packing_in_received,Received Supplier packings,Erhaltene Lieferposten von Lieferanten,0
+model,"ir.ui.menu,name",menu_reporting,Reporting,Berichte,0
+model,"ir.ui.menu,name",menu_packing_in_return_form,Supplier Return Shipments,Warenrückgaben (an Lieferanten),0
+model,"ir.ui.menu,name",menu_packing_in_form,Supplier Shipments,Lieferposten von Lieferanten,0
model,"res.group,name",group_stock,Stock,Lager,0
model,"res.group,name",group_stock_admin,Stock Administration,Administration Lagerverwaltung,0
+model,"stock.inventory.complete.init,name",0,Complete Inventory Init,Lagerbestand Komplettieren Init,0
+model,"stock.inventory.line,name",0,Stock Inventory Line,Lager Lagerbestand Position,0
+model,"stock.inventory,name",0,Stock Inventory,Lager Lagerbestand,0
model,"stock.location,name",location_customer,Customer,Kunde,0
model,"stock.location,name",location_input,Input Zone,Wareneingang,0
model,"stock.location,name",location_lost_found,Lost and Found,Inventurdifferenz,0
model,"stock.location,name",location_output,Output Zone,Warenausgang,0
+model,"stock.location,name",0,Stock Location,Lager Lagerort,0
model,"stock.location,name",location_storage,Storage Zone,Lagerzone,0
model,"stock.location,name",location_supplier,Supplier,Lieferant,0
model,"stock.location,name",location_warehouse,Warehouse,Warenlager,0
+model,"stock.location_stock_date.init,name",0,Compute stock quantities,Berechnung Lagerbestände,0
+model,"stock.move,name",0,Stock Move,Lager Bewegung,0
+model,"stock.packing.in,name",0,Supplier Shipment,Lieferant Lieferposten,0
+model,"stock.packing.in.return.assign.ask_force,name",0,Assign Supplier Return Shipment Ask Force,Zuweisung Lieferpsoten Warenrückgabe Erzwungen,0
+model,"stock.packing.in.return,name",0,Supplier Return Shipment,Warenrückgabe Lieferant,0
+model,"stock.packing.internal.assign.ask_force,name",0,Assign Shipment Internal Ask Force,Zuweisung Lieferposten Intern Erzwungen,0
+model,"stock.packing.internal,name",0,Internal Shipment,Interner Lieferposten,0
+model,"stock.packing.out.assign.ask_force,name",0,Assign Shipment Out Ask Force,Zuweisung Lieferposten Ausgehend Erzwungen,0
+model,"stock.packing.out,name",0,Customer Shipment,Lieferposten Kunde,0
+model,"stock.packing.out.return,name",0,Customer Return Shipment,Warenrücknahme Kunde,0
+model,"stock.product_stock_date.init,name",0,Compute stock quantities,Berechnung Lagerbestände,0
model,"workflow.activity,name",packingout_act_assigned,Assigned,Zugewiesen,0
model,"workflow.activity,name",packinginternal_act_assigned,Assigned,Zugewiesen,0
-model,"workflow.activity,name",packingin_act_cancel,Cancel,Abbrechen,0
-model,"workflow.activity,name",packingout_act_cancel,Cancel,Abbrechen,0
-model,"workflow.activity,name",packinginternal_act_cancel,Cancel,Abbrechen,0
-model,"workflow.activity,name",inventory_act_cancel,Cancel,Abbrechen,0
+model,"workflow.activity,name",packing_in_return_act_assigned,Assigned,Zugewiesen,0
+model,"workflow.activity,name",packingin_act_cancel,Canceled,Annulliert,0
+model,"workflow.activity,name",packingout_act_cancel,Canceled,Annulliert,0
+model,"workflow.activity,name",packinginternal_act_cancel,Canceled,Annulliert,0
+model,"workflow.activity,name",packing_out_return_act_cancel,Canceled,Annulliert,0
+model,"workflow.activity,name",packing_in_return_act_cancel,Canceled,Annulliert,0
+model,"workflow.activity,name",inventory_act_cancel,Canceled,Annulliert,0
model,"workflow.activity,name",packingin_act_done,Done,Erledigt,0
model,"workflow.activity,name",packingout_act_done,Done,Erledigt,0
model,"workflow.activity,name",packinginternal_act_done,Done,Erledigt,0
+model,"workflow.activity,name",packing_out_return_act_done,Done,Erledigt,0
+model,"workflow.activity,name",packing_in_return_act_done,Done,Erledigt,0
model,"workflow.activity,name",inventory_act_done,Done,Erledigt,0
model,"workflow.activity,name",packingin_act_draft,Draft,Entwurf,0
model,"workflow.activity,name",packingout_act_draft,Draft,Entwurf,0
model,"workflow.activity,name",packinginternal_act_draft,Draft,Entwurf,0
+model,"workflow.activity,name",packing_out_return_act_draft,Draft,Entwurf,0
+model,"workflow.activity,name",packing_in_return_act_draft,Draft,Entwurf,0
model,"workflow.activity,name",inventory_act_draft,Draft,Entwurf,0
model,"workflow.activity,name",packingout_act_packed,Packed,Gepackt,0
model,"workflow.activity,name",packingin_act_received,Received,Erhalten,0
+model,"workflow.activity,name",packing_out_return_act_received,Received,Erhalten,0
model,"workflow.activity,name",packingout_act_waiting,Waiting,Wartend,0
model,"workflow.activity,name",packinginternal_act_waiting,Waiting,Wartend,0
-model,"workflow,name",wkf_packingout,Customer Packing,Lieferschein Kunde,0
-model,"workflow,name",wkf_packinginternal,Internal Packing,Interner Lieferschein,0
+model,"workflow.activity,name",packing_in_return_act_waiting,Waiting,Wartend,0
+model,"workflow,name",wkf_packing_out_return,Customer Return Shipment,Warenrücknahme Kunde,0
+model,"workflow,name",wkf_packingout,Customer Shipment,Lieferposten Kunde,0
+model,"workflow,name",wkf_packinginternal,Internal Shipment,Interner Lieferposten,0
model,"workflow,name",wkf_inventory,Inventory,Lagerbestand,0
-model,"workflow,name",wkf_packingin,Supplier Packing,Lieferschein Lieferant,0
-odt,stock.packing.out,0,Customer Code:,Kundennummer:,0
-odt,stock.packing.out,0,Date:,Datum:,0
-odt,stock.packing.out,0,E-Mail:,E-Mail:,0
-odt,stock.packing.out,0,List,Liste,0
-odt,stock.packing.out,0,Packing,Lieferschein,0
-odt,stock.packing.out,0,Packing Number:,Lieferscheinnummer:,0
-odt,stock.packing.out,0,Phone:,Telefon:,0
-odt,stock.packing.out,0,Product,Artikel,0
-odt,stock.packing.out,0,Quantity,Menge,0
-odt,stock.packing.out,0,Reference:,Referenz,0
-selection,"stock.inventory,state",0,Cancel,Abbrechen,0
+model,"workflow,name",wkf_packing_in_return,Supplier Return Shipment,Warenrückgabe Lieferant,0
+model,"workflow,name",wkf_packingin,Supplier Shipment,Lieferposten Lieferant,0
+odt,stock.packing.in.restocking_list,0,/,/,0
+odt,stock.packing.in.restocking_list,0,2,2,0
+odt,stock.packing.in.restocking_list,0,Code:,Code:,0
+odt,stock.packing.in.restocking_list,0,E-Mail:,E-Mail:,0
+odt,stock.packing.in.restocking_list,0,From Location,Von Lagerort,0
+odt,stock.packing.in.restocking_list,0,Phone:,Telefon:,0
+odt,stock.packing.in.restocking_list,0,Planned Date:,Geplantes Datum:,0
+odt,stock.packing.in.restocking_list,0,Product,Artikel,0
+odt,stock.packing.in.restocking_list,0,Quantity,Anzahl,0
+odt,stock.packing.in.restocking_list,0,Reference:,Referenz:,0
+odt,stock.packing.in.restocking_list,0,Restocking List,Einlagerungsliste,0
+odt,stock.packing.in.restocking_list,0,Supplier:,Lieferant:,0
+odt,stock.packing.in.restocking_list,0,To Location,Zu Lagerort,0
+odt,stock.packing.in.restocking_list,0,Warehouse:,Warenlager:,0
+odt,stock.packing.internal.report,0,/,/,0
+odt,stock.packing.internal.report,0,2,2,0
+odt,stock.packing.internal.report,0,Code:,Code:,0
+odt,stock.packing.internal.report,0,E-Mail:,E-Mail:,0
+odt,stock.packing.internal.report,0,From Location,Von Lagerort,0
+odt,stock.packing.internal.report,0,From Location:,Von Lagerort:,0
+odt,stock.packing.internal.report,0,Internal Shipment,Interner Lieferposten,0
+odt,stock.packing.internal.report,0,Phone:,Telefon:,0
+odt,stock.packing.internal.report,0,Planned Date:,Geplantes Datum:,0
+odt,stock.packing.internal.report,0,Product,Artikel,0
+odt,stock.packing.internal.report,0,Quantity,Anzahl,0
+odt,stock.packing.internal.report,0,Reference:,Referenz:,0
+odt,stock.packing.internal.report,0,To Location,Zu Lagerort,0
+odt,stock.packing.internal.report,0,To Location:,Zu Lagerort:,0
+odt,stock.packing.out.delivery_note,0,/,/,0
+odt,stock.packing.out.delivery_note,0,1,1,0
+odt,stock.packing.out.delivery_note,0,2,2,0
+odt,stock.packing.out.delivery_note,0,Customer Code:,Kundennr:,0
+odt,stock.packing.out.delivery_note,0,Date:,Datum:,0
+odt,stock.packing.out.delivery_note,0,Delivery Note,Lieferschein,0
+odt,stock.packing.out.delivery_note,0,E-Mail:,E-Mail:,0
+odt,stock.packing.out.delivery_note,0,Phone:,Telefon:,0
+odt,stock.packing.out.delivery_note,0,Product,Artikel,0
+odt,stock.packing.out.delivery_note,0,Quantity,Anzahl,0
+odt,stock.packing.out.delivery_note,0,Reference:,Referenz:,0
+odt,stock.packing.out.delivery_note,0,Shipment Number:,Lieferposten Nr.:,0
+odt,stock.packing.out.picking_list,0,/,/,0
+odt,stock.packing.out.picking_list,0,2,2,0
+odt,stock.packing.out.picking_list,0,Code:,Code:,0
+odt,stock.packing.out.picking_list,0,Customer:,Kunde:,0
+odt,stock.packing.out.picking_list,0,E-Mail:,E-Mail:,0
+odt,stock.packing.out.picking_list,0,From Location,Von Lagerort,0
+odt,stock.packing.out.picking_list,0,Phone:,Telefon:,0
+odt,stock.packing.out.picking_list,0,Picking List,Pick Liste,0
+odt,stock.packing.out.picking_list,0,Planned Date:,Geplantes Datum:,0
+odt,stock.packing.out.picking_list,0,Product,Artikel,0
+odt,stock.packing.out.picking_list,0,Quantity,Anzahl,0
+odt,stock.packing.out.picking_list,0,Reference:,Referenz:,0
+odt,stock.packing.out.picking_list,0,To Location,Zu Lagerort,0
+odt,stock.packing.out.picking_list,0,Warehouse:,Warenlager:,0
+odt,stock.packing.out.return.restocking_list,0,/,/,0
+odt,stock.packing.out.return.restocking_list,0,2,2,0
+odt,stock.packing.out.return.restocking_list,0,Code:,Code:,0
+odt,stock.packing.out.return.restocking_list,0,E-Mail:,E-Mail:,0
+odt,stock.packing.out.return.restocking_list,0,From Location,Von Lagerort,0
+odt,stock.packing.out.return.restocking_list,0,Phone:,Telefon:,0
+odt,stock.packing.out.return.restocking_list,0,Planned Date:,Geplantes Datum:,0
+odt,stock.packing.out.return.restocking_list,0,Product,Artikel,0
+odt,stock.packing.out.return.restocking_list,0,Quantity,Anzahl,0
+odt,stock.packing.out.return.restocking_list,0,Reference:,Referenz:,0
+odt,stock.packing.out.return.restocking_list,0,Restocking List,Einlagerungsliste,0
+odt,stock.packing.out.return.restocking_list,0,Supplier:,Lieferant:,0
+odt,stock.packing.out.return.restocking_list,0,To Location,Zu Lagerort,0
+odt,stock.packing.out.return.restocking_list,0,Warehouse:,Warenlager:,0
+selection,"stock.inventory,state",0,Canceled,Annulliert,0
selection,"stock.inventory,state",0,Done,Erledigt,0
selection,"stock.inventory,state",0,Draft,Entwurf,0
selection,"stock.location,type",0,Customer,Kunde,0
@@ -208,51 +357,62 @@ selection,"stock.location,type",0,Lost and Found,Differenzen allgemein,0
selection,"stock.location,type",0,Production,Produktion,0
selection,"stock.location,type",0,Storage,Lager,0
selection,"stock.location,type",0,Supplier,Lieferant,0
+selection,"stock.location,type",0,View,Sicht,0
selection,"stock.location,type",0,Warehouse,Warenlager,0
selection,"stock.move,state",0,Assigned,Zugewiesen,0
-selection,"stock.move,state",0,Cancel,Abbrechen,0
+selection,"stock.move,state",0,Canceled,Annulliert,0
selection,"stock.move,state",0,Done,Erledigt,0
selection,"stock.move,state",0,Draft,Entwurf,0
-selection,"stock.move,type",0,Input,Eingang,0
-selection,"stock.move,type",0,Internal,Intern,0
-selection,"stock.move,type",0,Output,Ausgang,0
-selection,"stock.packing.in,state",0,Cancel,Abbrechen,0
+selection,"stock.packing.in.return,state",0,Assigned,Zugewiesen,0
+selection,"stock.packing.in.return,state",0,Canceled,Annulliert,0
+selection,"stock.packing.in.return,state",0,Done,Erledigt,0
+selection,"stock.packing.in.return,state",0,Draft,Entwurf,0
+selection,"stock.packing.in.return,state",0,Waiting,Wartend,0
+selection,"stock.packing.in,state",0,Canceled,Annulliert,0
selection,"stock.packing.in,state",0,Done,Erledigt,0
selection,"stock.packing.in,state",0,Draft,Entwurf,0
selection,"stock.packing.in,state",0,Received,Erhalten,0
selection,"stock.packing.internal,state",0,Assigned,Zugewiesen,0
-selection,"stock.packing.internal,state",0,Cancel,Abbrechen,0
+selection,"stock.packing.internal,state",0,Canceled,Annulliert,0
selection,"stock.packing.internal,state",0,Done,Erledigt,0
selection,"stock.packing.internal,state",0,Draft,Entwurf,0
selection,"stock.packing.internal,state",0,Waiting,Wartend,0
+selection,"stock.packing.out.return,state",0,Canceled,Annulliert,0
+selection,"stock.packing.out.return,state",0,Done,Erledigt,0
+selection,"stock.packing.out.return,state",0,Draft,Entwurf,0
+selection,"stock.packing.out.return,state",0,Received,Erhalten,0
selection,"stock.packing.out,state",0,Assigned,Zugewiesen,0
-selection,"stock.packing.out,state",0,Cancel,Abbrechen,0
+selection,"stock.packing.out,state",0,Canceled,Annulliert,0
selection,"stock.packing.out,state",0,Done,Erledigt,0
selection,"stock.packing.out,state",0,Draft,Entwurf,0
selection,"stock.packing.out,state",0,Packed,Gepackt,0
selection,"stock.packing.out,state",0,Waiting,Wartend,0
+view,party.party,0,Stock,Lager,0
view,party.party,0,_Stock,_Lager,0
view,product.product,0,Products,Artikel,0
-view,stock.product_stock_date.init,0,Product Quantity.,Artikel Mengen,0
+view,stock.inventory,0,Add an inventory line for each missing products,Positionen für Bestandskorrektur um fehlende Artikel ergänzen,0
view,stock.inventory,0,All generated moves will be cancelled!,Sämtliche erzeugten Bewegungen werden rückgängig gemacht!,0
-view,stock.inventory,0,Cancel,Abbrechen,0
-view,stock.inventory,0,Complete Inventory,Aktueller Lagerbestand,0
-view,stock.inventory,0,Confirm,Beauftragen,0
-view,stock.inventory,0,Inventories,Lagerbestände,0
+view,stock.inventory,0,Cancel,Annullieren,0
+view,stock.inventory,0,Complete Inventory,Lagerbestandspositionen komplettieren,0
+view,stock.inventory,0,Confirm,Bestätigen,0
+view,stock.inventory,0,Inventories,Bestandskorrekturen,0
view,stock.inventory,0,Inventory,Lagerbestand,0
view,stock.inventory,0,Re-Open,Wiedereröffnen,0
+view,stock.inventory.complete.init,0,Categories,Kategorien,0
+view,stock.inventory.complete.init,0,Complete Inventory,Lagerbestandspositionen komplettieren,0
+view,stock.inventory.complete.init,0,Products,Artikel,0
view,stock.inventory.line,0,Inventory Line,Position Bestand,0
view,stock.inventory.line,0,Inventory Lines,Positionen Bestand,0
view,stock.location,0,Location,Lagerort,0
view,stock.location,0,Locations,Lagerorte,0
view,stock.location,0,Product Stock,Lagerbestand,0
view,stock.location_stock_date.init,0,Product Quantity.,Artikel Mengen,0
-view,stock.move,0,Cancel,Abbrechen,0
+view,stock.move,0,Cancel,Annullieren,0
view,stock.move,0,Move,Bewegung,0
view,stock.move,0,Moves,Bewegungen,0
view,stock.move,0,Set Done,Auf Erledigt setzen,0
view,stock.move,0,Set Draft,Auf Entwurf setzen,0
-view,stock.packing.in,0,Cancel,Abbrechen,0
+view,stock.packing.in,0,Cancel,Annullieren,0
view,stock.packing.in,0,Done,Erledigt,0
view,stock.packing.in,0,Draft,Entwurf,0
view,stock.packing.in,0,Incoming Moves,Eingehende Bewegungen,0
@@ -260,36 +420,81 @@ view,stock.packing.in,0,Inventory Moves,Bestandsänderungen,0
view,stock.packing.in,0,Moves,Bewegungen,0
view,stock.packing.in,0,Received,Erhalten,0
view,stock.packing.in,0,Reset to Draft,Auf Entwurf zurücksetzen,0
-view,stock.packing.in,0,Supplier Packing,Lieferschein von Lieferant,0
-view,stock.packing.in,0,Supplier Packings,Lieferscheine von Lieferanten,0
+view,stock.packing.in,0,Supplier Packing,Lieferposten von Lieferant,0
+view,stock.packing.in,0,Supplier Packings,Lieferposten von Lieferanten,0
+view,stock.packing.in,0,Supplier Shipment,Lieferposten von Lieferant,0
+view,stock.packing.in,0,Supplier Shipments,Lieferposten von Lieferanten,0
+view,stock.packing.in.return,0,Assign,Zuweisen,0
+view,stock.packing.in.return,0,Cancel,Annullieren,0
+view,stock.packing.in.return,0,Done,Erledigt,0
+view,stock.packing.in.return,0,Draft,Entwurf,0
+view,stock.packing.in.return,0,Reset to Draft,Auf Entwurf zurücksetzen,0
+view,stock.packing.in.return,0,Supplier Return Packing,Warenrückgabe,0
+view,stock.packing.in.return,0,Supplier Return Packings,Warenrückgaben,0
+view,stock.packing.in.return,0,Supplier Return Shipment,Warenrückgabe Lieferant,0
+view,stock.packing.in.return,0,Supplier Return Shipments,Warenrückgaben (an Lieferanten),0
+view,stock.packing.in.return,0,Waiting,Wartend,0
+view,stock.packing.in.return.assign.ask_force,0,Moves,Bewegungen,0
+view,stock.packing.in.return.assign.ask_force,0,Unable to Assign,Fehlmenge Zuweisung,0
+view,stock.packing.in.return.assign.ask_force,0,Unable to assign those products:,Folgende Artikel können nicht zugewiesen werden:,0
view,stock.packing.internal,0,Assign,Zuweisen,0
-view,stock.packing.internal,0,Cancel,Abbrechen,0
+view,stock.packing.internal,0,Cancel,Annullieren,0
view,stock.packing.internal,0,Done,Erledigt,0
view,stock.packing.internal,0,Draft,Entwurf,0
view,stock.packing.internal,0,Force Assign,Zuweisung erzwingen,0
-view,stock.packing.internal,0,Internal Packing,Interner Lieferschein,0
-view,stock.packing.internal,0,Internal Packings,Interne Lieferscheine,0
+view,stock.packing.internal,0,Internal Packing,Interner Lieferposten,0
+view,stock.packing.internal,0,Internal Packings,Interne Lieferposten,0
+view,stock.packing.internal,0,Internal Shipment,Interner Lieferposten,0
+view,stock.packing.internal,0,Internal Shipments,Interne Lieferposten,0
view,stock.packing.internal,0,Reset to Draft,Auf Entwurf zurücksetzen,0
view,stock.packing.internal,0,Set Done,Auf Erledigt setzen,0
view,stock.packing.internal,0,Set Waiting,Auf Wartend setzen,0
view,stock.packing.internal,0,Waiting,Wartend,0
+view,stock.packing.internal.assign.ask_force,0,Moves,Bewegungen,0
+view,stock.packing.internal.assign.ask_force,0,Unable to Assign,Fehlmenge Zuweisung,0
+view,stock.packing.internal.assign.ask_force,0,Unable to assign those products:,Folgende Artikel können nicht zugewiesen werden:,0
view,stock.packing.out,0,Are you sure to force assignation?,Zuweisung wirklich erzwingen?,0
view,stock.packing.out,0,Assign,Zuweisen,0
-view,stock.packing.out,0,Cancel,Abbrechen,0
-view,stock.packing.out,0,Customer Packing,Lieferschein an Kunde,0
-view,stock.packing.out,0,Customer Packings,Lieferscheine an Kunden,0
+view,stock.packing.out,0,Cancel,Annullieren,0
+view,stock.packing.out,0,Customer Packing,Lieferposten an Kunde,0
+view,stock.packing.out,0,Customer Packings,Lieferposten an Kunden,0
+view,stock.packing.out,0,Customer Shipment,Lieferposten Kunde,0
+view,stock.packing.out,0,Customer Shipments,Lieferposten an Kunden,0
view,stock.packing.out,0,Done,Erledigt,0
view,stock.packing.out,0,Draft,Entwurf,0
view,stock.packing.out,0,Force Assign,Zuweisung erzwingen,0
view,stock.packing.out,0,Inventory Moves,Bestandsänderungen,0
-view,stock.packing.out,0,Make packing,Lieferung fertigstellen,0
+view,stock.packing.out,0,Make packing,Packen,0
view,stock.packing.out,0,Outgoing Moves,Ausgehende Bewegungen,0
view,stock.packing.out,0,Reset to Draft,Auf Entwurf zurücksetzen,0
view,stock.packing.out,0,Set Done,Auf Erledigt setzen,0
view,stock.packing.out,0,Set Waiting,Auf Wartend setzen,0
view,stock.packing.out,0,Unpack,Entpackt,0
view,stock.packing.out,0,Waiting,Wartend,0
+view,stock.packing.out.assign.ask_force,0,Inventory Moves,Bestandsänderungen,0
+view,stock.packing.out.assign.ask_force,0,Unable to Assign,Fehlmenge Zuweisung,0
+view,stock.packing.out.assign.ask_force,0,Unable to assign those products:,Folgende Artikel können nicht zugewiesen werden:,0
+view,stock.packing.out.return,0,Cancel,Annullieren,0
+view,stock.packing.out.return,0,Customer Return Packing,Warenrücknahme,0
+view,stock.packing.out.return,0,Customer Return Packings,Warenrücknahmen,0
+view,stock.packing.out.return,0,Customer Return Shipment,Warenrücknahme Kunde,0
+view,stock.packing.out.return,0,Customer Return Shipments,Warenrücknahmen (von Kunden),0
+view,stock.packing.out.return,0,Done,Erledigt,0
+view,stock.packing.out.return,0,Incoming Moves,Eingehende Bewegungen,0
+view,stock.packing.out.return,0,Inventory Moves,Bestandsänderungen,0
+view,stock.packing.out.return,0,Moves,Bewegungen,0
+view,stock.packing.out.return,0,Received,Erhalten,0
+view,stock.packing.out.return,0,Reset to Draft,Auf Entwurf zurücksetzen,0
+view,stock.product_stock_date.init,0,Product Quantity.,Artikel Mengen,0
+wizard_button,"stock.inventory.complete,init,complete",0,Complete,Komplettieren,0
+wizard_button,"stock.inventory.complete,init,end",0,Cancel,Abbrechen,0
wizard_button,"stock.location.open,init,end",0,Cancel,Abbrechen,0
wizard_button,"stock.location.open,init,open",0,Open,Ãffnen,0
+wizard_button,"stock.packing.in.return.assign,ask_force,end",0,Ok,OK,0
+wizard_button,"stock.packing.in.return.assign,ask_force,force",0,Force Assign,Zuweisung erzwingen,0
+wizard_button,"stock.packing.internal.assign,ask_force,end",0,Ok,OK,0
+wizard_button,"stock.packing.internal.assign,ask_force,force",0,Force Assign,Zuweisung erzwingen,0
+wizard_button,"stock.packing.out.assign,ask_force,end",0,Ok,OK,0
+wizard_button,"stock.packing.out.assign,ask_force,force",0,Force Assign,Zuweisung erzwingen,0
wizard_button,"stock.product.open,init,end",0,Cancel,Abbrechen,0
wizard_button,"stock.product.open,init,open",0,Open,Ãffnen,0
diff --git a/delivery_note.odt b/delivery_note.odt
new file mode 100644
index 0000000..0c5dbff
Binary files /dev/null and b/delivery_note.odt differ
diff --git a/doc/index.rst b/doc/index.rst
index 1bf1982..ddb4277 100644
--- a/doc/index.rst
+++ b/doc/index.rst
@@ -1,10 +1,10 @@
Stock Module
############
-The stock module define fundamental for all stock management
-stations: Locations where product are stored, move between these
-locations, packings for product arrivals and departures and inventory to
-control and update stock levels.
+The stock module define fundamentals for all stock management
+situations: Locations where product are stored, move between these
+locations, packings for product arrivals and departures and inventory
+to control and update stock levels.
Location
********
@@ -223,7 +223,7 @@ Inventory
*********
Inventories allow to control and update stock levels. They are mainly
-composed of two locations ( a Storage location and a Lost And Found
+composed of two locations (a Storage location and a Lost And Found
location), and a list of inventory lines. A button allow to
auto-complete inventory lines with respect to the expected quantities
for each product in the location. Inventory lines consist of: a
diff --git a/es_CO.csv b/es_CO.csv
new file mode 100644
index 0000000..6cf7d85
--- /dev/null
+++ b/es_CO.csv
@@ -0,0 +1,493 @@
+type,name,res_id,src,value,fuzzy
+error,stock.inventory.line,0,Line quantity must be positive!,La lÃnea de cantidad debe ser positiva!,0
+error,stock.inventory.line,0,Product must be unique by inventory!,El producto debe ser único por inventario!,0
+error,stock.location,0,A location with existing moves cannot be changed to a type that does not support moves.,Un lugar con movimientos existentes no puede ser cambiado a un tipo que no soporte movimientos.,0
+error,stock.location,0,You can not create recursive locations!,No puede crear lugares recursivamente!,0
+error,stock.move,0,Move can be on only one Shipment,Solamente se puede hacer movimiento sobre un EnvÃo.,0
+error,stock.move,0,Move quantity must be positive,El valor del movimiento debe ser positivo,0
+error,stock.move,0,Source and destination location must be different,Los lugares fuente y destino deben diferir,0
+error,stock.move,0,You can not set state to assigned!,No puede establecer el estado como asignado!,0
+error,stock.move,0,You can not set state to done!,No puede establecer el estado como hecho!,0
+error,stock.move,0,You can not set state to draft!,No puede establecer el estado como borrador!,0
+error,stock.move,0,You can not use service products for a move!,No puede usar productos de servicio para un movimiento!,0
+error,stock.move,0,You can only delete draft or cancelled moves!,Solamente puede eliminar movimientos en borrador o cancelados!,0
+error,stock.packing.in,0,Incoming Moves must have the warehouse input location as destination location!,Movimientos de ingreso debe tener un lugar de entrada de bodega como lugar destino!,0
+error,stock.packing.in,0,Inventory Moves must have the warehouse input location as source location!,Movimientos de inventario deben tener lugar de entrada a bodega como lugar fuente!,0
+error,stock.packing.out.return,0,Incoming Moves must have the warehouse input location as destination location!,Ingreso deben tener lugar de entrada en bodega como lugar destino!,0
+error,stock.packing.out.return,0,Inventory Moves must have the warehouse input location as source location!,Movimientos de inventario deben tener lugar de entrada en bodega como lugar fuente!,0
+error,stock.packing.out.return.create,0,The packing with code %s is not yet sent.,El empaque con código %s no ha sido enviado aún.,0
+error,stock.packing.out.return.create,0,You can not create return packing,No puede crear empaques de retorno,0
+field,"party.address,delivery",0,Delivery,EnvÃo,0
+field,"party.party,customer_location",0,Customer Location,Lugar del Cliente,0
+field,"party.party,supplier_location",0,Supplier Location,Lugar del Proveedor,0
+field,"product.product,forecast_quantity",0,Forecast Quantity,Cantidad Proyectada,0
+field,"product.product,quantity",0,Quantity,Cantidad,0
+field,"product.template,forecast_quantity",0,Forecast Quantity,Cantidad Proyectada,0
+field,"product.template,quantity",0,Quantity,Cantidad,0
+field,"stock.inventory,company",0,Company,CompañÃa,0
+field,"stock.inventory.complete.init,categories",0,Categories,CategorÃas,0
+field,"stock.inventory.complete.init,products",0,Products,Productos,0
+field,"stock.inventory,date",0,Date,Fecha,0
+field,"stock.inventory.line,expected_quantity",0,Expected Quantity,Cantidad Esperada,0
+field,"stock.inventory.line,inventory",0,Inventory,Inventario,0
+field,"stock.inventory.line,move",0,Move,Movimiento,0
+field,"stock.inventory.line,product",0,Product,Producto,0
+field,"stock.inventory.line,quantity",0,Quantity,Cantidad,0
+field,"stock.inventory.line,rec_name",0,Name,Nombre,0
+field,"stock.inventory,lines",0,Lines,LÃneas de Inventario,0
+field,"stock.inventory.line,unit_digits",0,Unit Digits,DÃgitos Unitarios,0
+field,"stock.inventory.line,uom",0,UOM,UDM,0
+field,"stock.inventory,location",0,Location,Lugar,0
+field,"stock.inventory,lost_found",0,Lost and Found,Perdido y Encontrado,0
+field,"stock.inventory,rec_name",0,Name,Nombre,0
+field,"stock.inventory,state",0,State,Estado,0
+field,"stock.location,active",0,Active,Activo,0
+field,"stock.location,address",0,Address,Direcciones,0
+field,"stock.location,childs",0,Children,Hij at s,0
+field,"stock.location,code",0,Code,Código,0
+field,"stock.location,forecast_quantity",0,Forecast Quantity,Cantidad Proyectada,0
+field,"stock.location,input_location",0,Input,Entrada,0
+field,"stock.location,left",0,Left,Izquierda,0
+field,"stock.location,name",0,Name,Nombre,0
+field,"stock.location,output_location",0,Output,Salida,0
+field,"stock.location,parent",0,Parent,Padre,0
+field,"stock.location,quantity",0,Quantity,Cantidad,0
+field,"stock.location,rec_name",0,Name,Nombre,0
+field,"stock.location,right",0,Right,Derecha,0
+field,"stock.location_stock_date.init,forecast_date",0,At Date,En la fecha,0
+field,"stock.location,storage_location",0,Storage,Almacén,0
+field,"stock.location,type",0,Location type,Tipo de Lugar,0
+field,"stock.move,company",0,Company,CompañÃa,0
+field,"stock.move,cost_price",0,Cost Price,Método de Precio,0
+field,"stock.move,currency",0,Currency,Moneda,0
+field,"stock.move,effective_date",0,Effective Date,Fecha Efectiva,0
+field,"stock.move,from_location",0,From Location,Lugar Inicial,0
+field,"stock.move,packing_in",0,Supplier Shipment,EnvÃo del Proveedor,0
+field,"stock.move,packing_in_return",0,Supplier Return Shipment,Devolución de Proveedor,0
+field,"stock.move,packing_internal",0,Internal Shipment,EnvÃo Interno,0
+field,"stock.move,packing_out",0,Customer Shipment,EnvÃo de Cliente,0
+field,"stock.move,packing_out_return",0,Customer Return Shipment,Devolución a Cliente,0
+field,"stock.move,planned_date",0,Planned Date,Fecha Planeada,0
+field,"stock.move,product",0,Product,Producto,0
+field,"stock.move,quantity",0,Quantity,Cantidad,0
+field,"stock.move,rec_name",0,Name,Nombre,0
+field,"stock.move,state",0,State,Estado,0
+field,"stock.move,to_location",0,To Location,Al Lugar:,0
+field,"stock.move,unit_digits",0,Unit Digits,DÃgitos de Unidad,0
+field,"stock.move,unit_price",0,Unit Price,Precio Unitario,0
+field,"stock.move,unit_price_required",0,Unit Price Required,Requiere Precio Unitario,0
+field,"stock.move,uom",0,Uom,Udm,0
+field,"stock.packing.in,code",0,Code,Código,0
+field,"stock.packing.in,contact_address",0,Contact Address,Dirección de Contacto,0
+field,"stock.packing.in,effective_date",0,Effective Date,Fecha Efectiva,0
+field,"stock.packing.in,incoming_moves",0,Incoming Moves,Movimientos de Entrada,0
+field,"stock.packing.in,inventory_moves",0,Inventory Moves,Movimientos de Inventario,0
+field,"stock.packing.in,moves",0,Moves,Movimientos,0
+field,"stock.packing.in,planned_date",0,Planned Date,Fecha Planeada,0
+field,"stock.packing.in,rec_name",0,Name,Nombre,0
+field,"stock.packing.in,reference",0,Reference,Referencia,0
+field,"stock.packing.in.return.assign.ask_force,moves",0,Moves,Movimientos,0
+field,"stock.packing.in.return,code",0,Code,Código,0
+field,"stock.packing.in.return,effective_date",0,Effective Date,Fecha Efectiva,0
+field,"stock.packing.in.return,from_location",0,From Location,Lugar Inicial,0
+field,"stock.packing.in.return,moves",0,Moves,Movimientos,0
+field,"stock.packing.in.return,planned_date",0,Planned Date,Fecha Planeada,0
+field,"stock.packing.in.return,rec_name",0,Name,Nombre,0
+field,"stock.packing.in.return,reference",0,Reference,Referencia,0
+field,"stock.packing.in.return,state",0,State,Estado,0
+field,"stock.packing.in.return,to_location",0,To Location,Al Lugar:,0
+field,"stock.packing.in,state",0,State,Estado,0
+field,"stock.packing.in,supplier",0,Supplier,Proveedor,0
+field,"stock.packing.internal.assign.ask_force,moves",0,Moves,Movimientos,0
+field,"stock.packing.internal,code",0,Code,Código,0
+field,"stock.packing.internal,effective_date",0,Effective Date,Fecha Efectiva,0
+field,"stock.packing.internal,from_location",0,From Location,Lugar Inicial,0
+field,"stock.packing.internal,moves",0,Moves,Movimientos,0
+field,"stock.packing.internal,planned_date",0,Planned Date,Fecha Planeada,0
+field,"stock.packing.internal,rec_name",0,Name,Nombre,0
+field,"stock.packing.internal,reference",0,Reference,Referencia,0
+field,"stock.packing.internal,state",0,State,Estado,0
+field,"stock.packing.internal,to_location",0,To Location,Al Lugar:,0
+field,"stock.packing.in,warehouse",0,Warehouse,Depósito,0
+field,"stock.packing.out.assign.ask_force,inventory_moves",0,Inventory Moves,Movimientos de Inventario,0
+field,"stock.packing.out,code",0,Code,Código,0
+field,"stock.packing.out,customer",0,Customer,Cliente,0
+field,"stock.packing.out,delivery_address",0,Delivery Address,Dirección de EnvÃo,0
+field,"stock.packing.out,effective_date",0,Effective Date,Fecha Efectiva,0
+field,"stock.packing.out,inventory_moves",0,Inventory Moves,Movimientos de Inventario,0
+field,"stock.packing.out,moves",0,Moves,Movimientos,0
+field,"stock.packing.out,outgoing_moves",0,Outgoing Moves,Movimientos de Salida,0
+field,"stock.packing.out,planned_date",0,Planned Date,Fecha Planeada,0
+field,"stock.packing.out,rec_name",0,Name,Nombre,0
+field,"stock.packing.out,reference",0,Reference,Referencia,0
+field,"stock.packing.out.return,code",0,Code,Código,0
+field,"stock.packing.out.return,customer",0,Customer,Cliente,0
+field,"stock.packing.out.return,delivery_address",0,Delivery Address,Dirección de EnvÃo,0
+field,"stock.packing.out.return,effective_date",0,Effective Date,Fecha Efectiva,0
+field,"stock.packing.out.return,incoming_moves",0,Incoming Moves,Movimientos de Entrada,0
+field,"stock.packing.out.return,inventory_moves",0,Inventory Moves,Movimientos de Inventario,0
+field,"stock.packing.out.return,moves",0,Moves,Movimientos,0
+field,"stock.packing.out.return,planned_date",0,Planned Date,Fecha Planeada,0
+field,"stock.packing.out.return,rec_name",0,Name,Nombre,0
+field,"stock.packing.out.return,reference",0,Reference,Referencia,0
+field,"stock.packing.out.return,state",0,State,Estado,0
+field,"stock.packing.out.return,warehouse",0,Warehouse,Depósito,0
+field,"stock.packing.out,state",0,State,Estado,0
+field,"stock.packing.out,warehouse",0,Warehouse,Depósito,0
+field,"stock.product_stock_date.init,forecast_date",0,At Date,En la fecha,0
+help,"party.party,customer_location",0,The default destination location when sending products to the party.,El lugar predeterminado destino cuando se envian productos al tercero.,0
+help,"party.party,supplier_location",0,The default source location when receiving products from the party.,El lugar origen predeterminado cuando se reciben productos del tercero.,0
+help,"stock.location_stock_date.init,forecast_date",0,"Allow to compute expected stock quantities for this date.
+* An empty value is an infinite date in the future.
+* A date in the past will provide historical values.","Permitir calcular el inventario esperado para esta fecha.
+* Un valor vacÃoes una fecha infinita en el futuro.
+* Una fecha en el pasado indicará usar datos históricos.",0
+help,"stock.product_stock_date.init,forecast_date",0,"Allow to compute expected stock quantities for this date.
+* An empty value is an infinite date in the future.
+* A date in the past will provide historical values.","Permitir calcular el inventario esperado para esta fecha.
+* Un valor vacÃoes una fecha infinita en el futuro.
+* Una fecha en el pasado indicará usar datos históricos.",0
+model,"ir.action,name",act_packing_out_form_assigned,Assigned Customer Shipments,EnvÃos a Clientes asignados,0
+model,"ir.action,name",act_packing_internal_assigned_form,Assigned Internal Shipments,EnvÃos internos asignados,0
+model,"ir.action,name",wizard_packing_in_return_assign,Assign Purchase Return Shipment,Asigne Devolución de Compra,0
+model,"ir.action,name",wizard_packing_internal_assign,Assign Shipment Internal,Asigne EnvÃo Interno,0
+model,"ir.action,name",wizard_packing_out_assign,Assign Shipment Out,Asignación de EnvÃo,0
+model,"ir.action,name",wizard_complete_inventory,Complete Inventory,Inventario Completo,0
+model,"ir.action,name",create_packing_out_return,Create Return Shipment,Crear Devolución,0
+model,"ir.action,name",act_packing_out_return_form,Customer Return Shipments,Devolución al Cliente,0
+model,"ir.action,name",act_packing_out_form,Customer Shipments,EnvÃos a Cliente,0
+model,"ir.action,name",act_packing_out_form2,Customer Shipments,EnvÃos a Cliente,0
+model,"ir.action,name",act_packing_out_form_ready,Customer Shipments Ready for Shipping,EnvÃos de Cliente listos para Enviar,0
+model,"ir.action,name",act_packing_out_form_waiting,Customer Shipments Waiting Assignation,EnvÃos de Cliente esperando Asignación,0
+model,"ir.action,name",report_packing_out_delivery_note,Delivery Note,Nota de EnvÃo,0
+model,"ir.action,name",act_packing_internal_draft_form,Draft Internal Shipments,EnvÃos Internos en Borrador,0
+model,"ir.action,name",act_location_form,Edit Locations,Editar Lugares,0
+model,"ir.action,name",report_packing_internal,Internal Shipment,EnvÃo Interno,0
+model,"ir.action,name",act_packing_internal_form,Internal Shipments,EnvÃos Internos,0
+model,"ir.action,name",act_packing_internal_waiting_form,Internal Shipments Waiting Assignation,EnvÃos Internos esperando Asignación,0
+model,"ir.action,name",act_inventory_form,Inventories,Inventarios,0
+model,"ir.action,name",act_location_tree,Locations,Lugares,0
+model,"ir.action,name",act_move_form,Moves,Movimientos,0
+model,"ir.action,name",act_move_form_supp,Moves from Suppliers,Movimientos de Proveedores,0
+model,"ir.action,name",act_move_form_supp_proceed,Moves from Suppliers Waiting Arrival,Movimientos de Proveedores en espera de Arrivo,0
+model,"ir.action,name",act_move_form_cust,Moves to Customers,Movimientos hacia Clientes,0
+model,"ir.action,name",act_packing_out_return_form2,New Customer Return Shipment,Nueva Devolución al Cliente,0
+model,"ir.action,name",act_packing_internal_new_form,New Internal Shipment,Nuevo EnvÃo Interno,0
+model,"ir.action,name",act_packing_in_return_new_form,New Supplier Return Shipment,Nuevo Devolución al Proveedor,0
+model,"ir.action,name",act_packing_in_form2,New Supplier Shipment,Nuevo EnvÃo de Proveedor,0
+model,"ir.action,name",report_packing_out_picking_list,Picking List,Lista de Recogida,0
+model,"ir.action,name",wizard_location_open,Product by Location,Producto por Lugar,0
+model,"ir.action,name",wizard_product_open,Product Quantities,Cantidades de Producto,0
+model,"ir.action,name",act_product_by_location,Products by Locations,Productos por Lugares,0
+model,"ir.action,name",act_location_quantity_tree,Product Stock,Inventario de Producto,0
+model,"ir.action,name",act_packing_in_form_received,Received Supplier packings,Empaques de Proveedores recibidos,0
+model,"ir.action,name",report_packing_in_restocking_list,Restocking List,Lista de Renovación de Inventario,0
+model,"ir.action,name",report_packing_out_return_restocking_list,Restocking List,Lista de Renovación de Inventario,0
+model,"ir.action,name",act_packing_in_return_form,Supplier Return Shipments,Devolución al Proveedor,0
+model,"ir.action,name",act_packing_in_form,Supplier Shipments,EnvÃos del Proveedor,0
+model,"ir.action,name",act_packing_out_form3,Supplier Shipments,EnvÃos del Proveedor,0
+model,"ir.sequence,name",sequence_packing_out_return,Customer Return Shipment,Devolución al Cliente,0
+model,"ir.sequence,name",sequence_packing_out,Customer Shipment,EnvÃo a Cliente,0
+model,"ir.sequence,name",sequence_packing_internal,Internal Shipment,EnvÃo Interno,0
+model,"ir.sequence,name",sequence_packing_in_return,Supplier Return Shipment,Devolución al Proveedor,0
+model,"ir.sequence,name",sequence_packing_in,Supplier Shipment,EnvÃo del Proveedor,0
+model,"ir.sequence.type,name",sequence_type_packing_out_return,Customer Return Shipment,Devolución al Cliente,0
+model,"ir.sequence.type,name",sequence_type_packing_out,Customer Shipment,EnvÃo a Cliente,0
+model,"ir.sequence.type,name",sequence_type_packing_internal,Internal Shipment,EnvÃo Interno,0
+model,"ir.sequence.type,name",sequence_type_packing_in_return,Supplier Return Shipment,Devolución al Proveedor,0
+model,"ir.sequence.type,name",sequence_type_packing_in,Supplier Shipment,EnvÃo del Proveedor,0
+model,"ir.ui.menu,name",menu_packing_out_assigned,Assigned Customer Shipments,EnvÃos asignados a Clientes,0
+model,"ir.ui.menu,name",menu_packing_internal_assigned_form,Assigned Internal Shipments,EnvÃos asignados internamente,0
+model,"ir.ui.menu,name",menu_configuration,Configuration,Configuración,0
+model,"ir.ui.menu,name",menu_packing_out_return_form,Customer Return Shipments,Devolución al Cliente,0
+model,"ir.ui.menu,name",menu_packing_out_form,Customer Shipments,EnvÃos al Cliente,0
+model,"ir.ui.menu,name",menu_packing_out_ready,Customer Shipments Ready for Shipping,EnvÃos de Cliente listos para EnvÃo,0
+model,"ir.ui.menu,name",menu_packing_out_waiting,Customer Shipments Waiting Assignation,EnvÃos de Cliente listos esperando Asignación,0
+model,"ir.ui.menu,name",menu_packing_internal_draft_form,Draft Internal Shipments,EnvÃos Internos en Borrador,0
+model,"ir.ui.menu,name",menu_location_form,Edit Locations,Editar Lugares,0
+model,"ir.ui.menu,name",menu_packing_internal_form,Internal Shipments,EnvÃo Internos,0
+model,"ir.ui.menu,name",menu_packing_internal_waiting_form,Internal Shipments Waiting Assignation,EnvÃo Internos esperando Asignación,0
+model,"ir.ui.menu,name",menu_inventory_form,Inventories,Inventarios,0
+model,"ir.ui.menu,name",menu_stock,Inventory Management,Manejo de Inventarios,0
+model,"ir.ui.menu,name",menu_location_tree,Locations,Lugares,0
+model,"ir.ui.menu,name",menu_move_form,Moves,Movimientos,0
+model,"ir.ui.menu,name",menu_move_form_supp,Moves from Suppliers,Movimientos de Proveedores,0
+model,"ir.ui.menu,name",menu_move_form_supp_proceed,Moves from Suppliers Waiting Arrival,Movimientos de Proveedores en espera de Arrivo,0
+model,"ir.ui.menu,name",menu_move_form_cust,Moves to Customers,Movimientos hacia Clientes,0
+model,"ir.ui.menu,name",menu_packing_out_return_form2,New Customer Return Shipment,Nueva Devolución al Cliente,0
+model,"ir.ui.menu,name",menu_packing_internal_new_form,New Internal Shipment,Nuevo EnvÃo Interno,0
+model,"ir.ui.menu,name",menu_packing_in_return_new_form,New Supplier Return Shipment,Nueva Devolución al Proveedor,0
+model,"ir.ui.menu,name",menu_packing_in_form2,New Supplier Shipment,Nuevo EnvÃo de Proveedor,0
+model,"ir.ui.menu,name",menu_packing_in_received,Received Supplier packings,Empaques de Proveedores recibidos,0
+model,"ir.ui.menu,name",menu_reporting,Reporting,Reportes,0
+model,"ir.ui.menu,name",menu_packing_in_return_form,Supplier Return Shipments,Devolución al Proveedor,0
+model,"ir.ui.menu,name",menu_packing_in_form,Supplier Shipments,EnvÃo del Proveedor,0
+model,"res.group,name",group_stock,Stock,Stock,0
+model,"res.group,name",group_stock_admin,Stock Administration,Administración de existencia,0
+model,"stock.inventory.complete.init,name",0,Complete Inventory Init,Inicio de Inventario Completo,0
+model,"stock.inventory.line,name",0,Stock Inventory Line,LÃnea de existencia en Inventario ,0
+model,"stock.inventory,name",0,Stock Inventory,Inventario de Existencia,0
+model,"stock.location,name",location_customer,Customer,Cliente,0
+model,"stock.location,name",location_input,Input Zone,Zona de Entrada,0
+model,"stock.location,name",location_lost_found,Lost and Found,Perdido y Encontrado,0
+model,"stock.location,name",location_output,Output Zone,Zona de Salida,0
+model,"stock.location,name",0,Stock Location,Lugar de Existencia,0
+model,"stock.location,name",location_storage,Storage Zone,Zona de Almacén,0
+model,"stock.location,name",location_supplier,Supplier,Proveedor,0
+model,"stock.location,name",location_warehouse,Warehouse,Depósito,0
+model,"stock.location_stock_date.init,name",0,Compute stock quantities,Calcule cantidad existencia,0
+model,"stock.move,name",0,Stock Move,Movimiento de Existencias,0
+model,"stock.packing.in,name",0,Supplier Shipment,EnvÃo del Proveedor,0
+model,"stock.packing.in.return.assign.ask_force,name",0,Assign Supplier Return Shipment Ask Force,Fuerce Pregunta de Asigne Devolución a Proveedor,0
+model,"stock.packing.in.return,name",0,Supplier Return Shipment,Devolución a Proveedor,0
+model,"stock.packing.internal.assign.ask_force,name",0,Assign Shipment Internal Ask Force,Fuerce Pregunta de Asigne EnvÃo Interno,0
+model,"stock.packing.internal,name",0,Internal Shipment,EnvÃo Interno,0
+model,"stock.packing.out.assign.ask_force,name",0,Assign Shipment Out Ask Force,Fuerce Pregunta de Asigne EnvÃo,0
+model,"stock.packing.out,name",0,Customer Shipment,EnvÃo de Cliente,0
+model,"stock.packing.out.return,name",0,Customer Return Shipment,Devolución a Cliente,0
+model,"stock.product_stock_date.init,name",0,Compute stock quantities,Calcule cantidad de existencia,0
+model,"workflow.activity,name",packingout_act_assigned,Assigned,Asignado,0
+model,"workflow.activity,name",packinginternal_act_assigned,Assigned,Asignado,0
+model,"workflow.activity,name",packing_in_return_act_assigned,Assigned,Asignado,0
+model,"workflow.activity,name",packingin_act_cancel,Canceled,Cancelado,0
+model,"workflow.activity,name",packingout_act_cancel,Canceled,Cancelado,0
+model,"workflow.activity,name",packinginternal_act_cancel,Canceled,Cancelado,0
+model,"workflow.activity,name",packing_out_return_act_cancel,Canceled,Cancelado,0
+model,"workflow.activity,name",packing_in_return_act_cancel,Canceled,Cancelado,0
+model,"workflow.activity,name",inventory_act_cancel,Canceled,Cancelado,0
+model,"workflow.activity,name",packingin_act_done,Done,Hecho,0
+model,"workflow.activity,name",packingout_act_done,Done,Hecho,0
+model,"workflow.activity,name",packinginternal_act_done,Done,Hecho,0
+model,"workflow.activity,name",packing_out_return_act_done,Done,Hecho,0
+model,"workflow.activity,name",packing_in_return_act_done,Done,Hecho,0
+model,"workflow.activity,name",inventory_act_done,Done,Hecho,0
+model,"workflow.activity,name",packingin_act_draft,Draft,Borrador,0
+model,"workflow.activity,name",packingout_act_draft,Draft,Borrador,0
+model,"workflow.activity,name",packinginternal_act_draft,Draft,Borrador,0
+model,"workflow.activity,name",packing_out_return_act_draft,Draft,Borrador,0
+model,"workflow.activity,name",packing_in_return_act_draft,Draft,Borrador,0
+model,"workflow.activity,name",inventory_act_draft,Draft,Borrador,0
+model,"workflow.activity,name",packingout_act_packed,Packed,Empacado,0
+model,"workflow.activity,name",packingin_act_received,Received,Recibido,0
+model,"workflow.activity,name",packing_out_return_act_received,Received,Recibido,0
+model,"workflow.activity,name",packingout_act_waiting,Waiting,En Espera,0
+model,"workflow.activity,name",packinginternal_act_waiting,Waiting,En Espera,0
+model,"workflow.activity,name",packing_in_return_act_waiting,Waiting,En Espera,0
+model,"workflow,name",wkf_packing_out_return,Customer Return Shipment,Devolución a Cliente,0
+model,"workflow,name",wkf_packingout,Customer Shipment,EnvÃo de Cliente,0
+model,"workflow,name",wkf_packinginternal,Internal Shipment,EnvÃo Interno,0
+model,"workflow,name",wkf_inventory,Inventory,Inventario,0
+model,"workflow,name",wkf_packing_in_return,Supplier Return Shipment,Devolución a Proveedor,0
+model,"workflow,name",wkf_packingin,Supplier Shipment,EnvÃo del Proveedor,0
+odt,stock.packing.in.restocking_list,0,/,/,0
+odt,stock.packing.in.restocking_list,0,2,2,0
+odt,stock.packing.in.restocking_list,0,Code:,Código:,0
+odt,stock.packing.in.restocking_list,0,E-Mail:,Correo electrónico:,0
+odt,stock.packing.in.restocking_list,0,From Location,Lugar Inicial,0
+odt,stock.packing.in.restocking_list,0,Phone:,Teléfono:,0
+odt,stock.packing.in.restocking_list,0,Planned Date:,Fecha Planeada:,0
+odt,stock.packing.in.restocking_list,0,Product,Producto,0
+odt,stock.packing.in.restocking_list,0,Quantity,Cantidad,0
+odt,stock.packing.in.restocking_list,0,Reference:,Referencia:,0
+odt,stock.packing.in.restocking_list,0,Restocking List,Lista de Renovación de Inventario,0
+odt,stock.packing.in.restocking_list,0,Supplier:,Proveedor:,0
+odt,stock.packing.in.restocking_list,0,To Location,Al Lugar:,0
+odt,stock.packing.in.restocking_list,0,Warehouse:,Bodega:,0
+odt,stock.packing.internal.report,0,/,/,0
+odt,stock.packing.internal.report,0,2,2,0
+odt,stock.packing.internal.report,0,Code:,Código:,0
+odt,stock.packing.internal.report,0,E-Mail:,Correo electrónico:,0
+odt,stock.packing.internal.report,0,From Location,Lugar Inicial,0
+odt,stock.packing.internal.report,0,From Location:,Origen:,0
+odt,stock.packing.internal.report,0,Internal Shipment,EnvÃo Interno,0
+odt,stock.packing.internal.report,0,Phone:,Teléfono:,0
+odt,stock.packing.internal.report,0,Planned Date:,Fecha Planeada:,0
+odt,stock.packing.internal.report,0,Product,Producto,0
+odt,stock.packing.internal.report,0,Quantity,Cantidad,0
+odt,stock.packing.internal.report,0,Reference:,Referencia:,0
+odt,stock.packing.internal.report,0,To Location,Al Lugar:,0
+odt,stock.packing.internal.report,0,To Location:,Destino:,0
+odt,stock.packing.out.delivery_note,0,/,/,0
+odt,stock.packing.out.delivery_note,0,1,1,0
+odt,stock.packing.out.delivery_note,0,2,2,0
+odt,stock.packing.out.delivery_note,0,Customer Code:,Código de Cliente:,0
+odt,stock.packing.out.delivery_note,0,Date:,Fecha:,0
+odt,stock.packing.out.delivery_note,0,Delivery Note,Nota de EnvÃo,0
+odt,stock.packing.out.delivery_note,0,E-Mail:,Correo electrónico:,0
+odt,stock.packing.out.delivery_note,0,Phone:,Teléfono:,0
+odt,stock.packing.out.delivery_note,0,Product,Producto,0
+odt,stock.packing.out.delivery_note,0,Quantity,Cantidad,0
+odt,stock.packing.out.delivery_note,0,Reference:,Referencia:,0
+odt,stock.packing.out.delivery_note,0,Shipment Number:,Número de EnvÃo,0
+odt,stock.packing.out.picking_list,0,/,/,0
+odt,stock.packing.out.picking_list,0,2,2,0
+odt,stock.packing.out.picking_list,0,Code:,Código:,0
+odt,stock.packing.out.picking_list,0,Customer:,Cliente:,0
+odt,stock.packing.out.picking_list,0,E-Mail:,Correo electrónico:,0
+odt,stock.packing.out.picking_list,0,From Location,Lugar Inicial,0
+odt,stock.packing.out.picking_list,0,Phone:,Teléfono:,0
+odt,stock.packing.out.picking_list,0,Picking List,Lista de Elección,0
+odt,stock.packing.out.picking_list,0,Planned Date:,Fecha Planeada:,0
+odt,stock.packing.out.picking_list,0,Product,Producto,0
+odt,stock.packing.out.picking_list,0,Quantity,Cantidad,0
+odt,stock.packing.out.picking_list,0,Reference:,Referencia:,0
+odt,stock.packing.out.picking_list,0,To Location,Al Lugar:,0
+odt,stock.packing.out.picking_list,0,Warehouse:,Bodega:,0
+odt,stock.packing.out.return.restocking_list,0,/,/,0
+odt,stock.packing.out.return.restocking_list,0,2,2,0
+odt,stock.packing.out.return.restocking_list,0,Code:,Código:,0
+odt,stock.packing.out.return.restocking_list,0,E-Mail:,Correo electrónico:,0
+odt,stock.packing.out.return.restocking_list,0,From Location,Lugar Inicial,0
+odt,stock.packing.out.return.restocking_list,0,Phone:,Teléfono:,0
+odt,stock.packing.out.return.restocking_list,0,Planned Date:,Fecha Planeada:,0
+odt,stock.packing.out.return.restocking_list,0,Product,Producto,0
+odt,stock.packing.out.return.restocking_list,0,Quantity,Cantidad,0
+odt,stock.packing.out.return.restocking_list,0,Reference:,Referencia:,0
+odt,stock.packing.out.return.restocking_list,0,Restocking List,Lista de reposición de existencias,0
+odt,stock.packing.out.return.restocking_list,0,Supplier:,Proveedor:,0
+odt,stock.packing.out.return.restocking_list,0,To Location,Al Lugar:,0
+odt,stock.packing.out.return.restocking_list,0,Warehouse:,Bodega:,0
+selection,"stock.inventory,state",0,Canceled,Cancelado,0
+selection,"stock.inventory,state",0,Done,Hecho,0
+selection,"stock.inventory,state",0,Draft,Borrador,0
+selection,"stock.location,type",0,Customer,Cliente,0
+selection,"stock.location,type",0,Lost and Found,Perdido y Encontrado,0
+selection,"stock.location,type",0,Production,Producción,0
+selection,"stock.location,type",0,Storage,Almacén,0
+selection,"stock.location,type",0,Supplier,Proveedor,0
+selection,"stock.location,type",0,View,Vista,0
+selection,"stock.location,type",0,Warehouse,Depósito,0
+selection,"stock.move,state",0,Assigned,Asignado,0
+selection,"stock.move,state",0,Canceled,Cancelado,0
+selection,"stock.move,state",0,Done,Hecho,0
+selection,"stock.move,state",0,Draft,Borrador,0
+selection,"stock.packing.in.return,state",0,Assigned,Asignado,0
+selection,"stock.packing.in.return,state",0,Canceled,Cancelado,0
+selection,"stock.packing.in.return,state",0,Done,Hecho,0
+selection,"stock.packing.in.return,state",0,Draft,Borrador,0
+selection,"stock.packing.in.return,state",0,Waiting,En Espera,0
+selection,"stock.packing.in,state",0,Canceled,Cancelado,0
+selection,"stock.packing.in,state",0,Done,Hecho,0
+selection,"stock.packing.in,state",0,Draft,Borrador,0
+selection,"stock.packing.in,state",0,Received,Recibido,0
+selection,"stock.packing.internal,state",0,Assigned,Asignado,0
+selection,"stock.packing.internal,state",0,Canceled,Cancelado,0
+selection,"stock.packing.internal,state",0,Done,Hecho,0
+selection,"stock.packing.internal,state",0,Draft,Borrador,0
+selection,"stock.packing.internal,state",0,Waiting,En Espera,0
+selection,"stock.packing.out.return,state",0,Canceled,Cancelado,0
+selection,"stock.packing.out.return,state",0,Done,Hecho,0
+selection,"stock.packing.out.return,state",0,Draft,Borrador,0
+selection,"stock.packing.out.return,state",0,Received,Recibido,0
+selection,"stock.packing.out,state",0,Assigned,Asignado,0
+selection,"stock.packing.out,state",0,Canceled,Cancelado,0
+selection,"stock.packing.out,state",0,Done,Hecho,0
+selection,"stock.packing.out,state",0,Draft,Borrador,0
+selection,"stock.packing.out,state",0,Packed,Empacado,0
+selection,"stock.packing.out,state",0,Waiting,En Espera,0
+view,party.party,0,Stock,Stock,0
+view,party.party,0,_Stock,_Existencias,0
+view,product.product,0,Products,Productos,0
+view,stock.inventory,0,Add an inventory line for each missing products,Adicione una lÃnea de inventario para cada producto faltante,0
+view,stock.inventory,0,All generated moves will be cancelled!,Se cancelarán todos los movimientos generados!,0
+view,stock.inventory,0,Cancel,Cancelar,0
+view,stock.inventory,0,Complete Inventory,Inventario Completo,0
+view,stock.inventory,0,Confirm,Confirmar,0
+view,stock.inventory,0,Inventories,Inventarios,0
+view,stock.inventory,0,Inventory,Inventario,0
+view,stock.inventory,0,Re-Open,Re-abrir,0
+view,stock.inventory.complete.init,0,Categories,CategorÃas,0
+view,stock.inventory.complete.init,0,Complete Inventory,Inventario Completo,0
+view,stock.inventory.complete.init,0,Products,Productos,0
+view,stock.inventory.line,0,Inventory Line,LÃnea de Inventario,0
+view,stock.inventory.line,0,Inventory Lines,LÃneas de Inventario,0
+view,stock.location,0,Location,Lugar,0
+view,stock.location,0,Locations,Lugares,0
+view,stock.location,0,Product Stock,Inventario de Producto,0
+view,stock.location_stock_date.init,0,Product Quantity.,Cantidad de Producto.,0
+view,stock.move,0,Cancel,Cancelar,0
+view,stock.move,0,Move,Movimiento,0
+view,stock.move,0,Moves,Movimientos,0
+view,stock.move,0,Set Done,Marcar como Hecho,0
+view,stock.move,0,Set Draft,Marcar como Borrador,0
+view,stock.packing.in,0,Cancel,Cancelar,0
+view,stock.packing.in,0,Done,Hecho,0
+view,stock.packing.in,0,Draft,Borrador,0
+view,stock.packing.in,0,Incoming Moves,Movimientos de Entrada,0
+view,stock.packing.in,0,Inventory Moves,Movimientos de Inventario,0
+view,stock.packing.in,0,Moves,Movimientos,0
+view,stock.packing.in,0,Received,Recibido,0
+view,stock.packing.in,0,Reset to Draft,Revertir a Borrador,0
+view,stock.packing.in,0,Supplier Packing,Empaque del Proveedor,0
+view,stock.packing.in,0,Supplier Packings,Empaques del Proveedor,0
+view,stock.packing.in,0,Supplier Shipment,EnvÃo del Proveedor,0
+view,stock.packing.in,0,Supplier Shipments,EnvÃos del Proveedor,0
+view,stock.packing.in.return,0,Assign,Asignar,0
+view,stock.packing.in.return,0,Cancel,Cancelar,0
+view,stock.packing.in.return,0,Done,Hecho,0
+view,stock.packing.in.return,0,Draft,Borrador,0
+view,stock.packing.in.return,0,Reset to Draft,Revertir a Borrador,0
+view,stock.packing.in.return,0,Supplier Return Shipment,Devolución de Proveedor,0
+view,stock.packing.in.return,0,Supplier Return Shipments,Devoluciones de Proveedor,0
+view,stock.packing.in.return,0,Waiting,En Espera,0
+view,stock.packing.in.return.assign.ask_force,0,Moves,Movimientos,0
+view,stock.packing.in.return.assign.ask_force,0,Unable to Assign,No es posible asignar,0
+view,stock.packing.in.return.assign.ask_force,0,Unable to assign those products:,No es posible asignar esos productos:,0
+view,stock.packing.internal,0,Assign,Asignar,0
+view,stock.packing.internal,0,Cancel,Cancelar,0
+view,stock.packing.internal,0,Done,Hecho,0
+view,stock.packing.internal,0,Draft,Borrador,0
+view,stock.packing.internal,0,Force Assign,Forzar Asignación,0
+view,stock.packing.internal,0,Internal Packing,Empaque Interno,0
+view,stock.packing.internal,0,Internal Packings,Empaques Internos,0
+view,stock.packing.internal,0,Internal Shipment,EnvÃo Interno,0
+view,stock.packing.internal,0,Internal Shipments,EnvÃos Internos,0
+view,stock.packing.internal,0,Reset to Draft,Revertir a Borrador,0
+view,stock.packing.internal,0,Set Done,Marcar como Hecho,0
+view,stock.packing.internal,0,Set Waiting,Colocar en Espera,0
+view,stock.packing.internal,0,Waiting,En espera,0
+view,stock.packing.internal.assign.ask_force,0,Moves,Movimientos,0
+view,stock.packing.internal.assign.ask_force,0,Unable to Assign,No es posible asignar,0
+view,stock.packing.internal.assign.ask_force,0,Unable to assign those products:,No es posible asignar esos productos:,0
+view,stock.packing.out,0,Assign,Asignar,0
+view,stock.packing.out,0,Cancel,Cancelar,0
+view,stock.packing.out,0,Customer Packing,Empaque de Cliente,0
+view,stock.packing.out,0,Customer Packings,Empaques de Cliente,0
+view,stock.packing.out,0,Customer Shipment,EnvÃo de Cliente,0
+view,stock.packing.out,0,Customer Shipments,EnvÃos de Cliente,0
+view,stock.packing.out,0,Done,Hecho,0
+view,stock.packing.out,0,Draft,Borrador,0
+view,stock.packing.out,0,Force Assign,Forzar Asignación,0
+view,stock.packing.out,0,Inventory Moves,Movimientos de Inventario,0
+view,stock.packing.out,0,Make packing,Hacer Empaque,0
+view,stock.packing.out,0,Outgoing Moves,Movimientos de Salida,0
+view,stock.packing.out,0,Reset to Draft,Revertir a Borrador,0
+view,stock.packing.out,0,Set Done,Marcar como Hecho,0
+view,stock.packing.out,0,Set Waiting,Colocar en Espera,0
+view,stock.packing.out,0,Unpack,Sin empaque,0
+view,stock.packing.out,0,Waiting,En espera,0
+view,stock.packing.out.assign.ask_force,0,Inventory Moves,Movimientos de Inventario,0
+view,stock.packing.out.assign.ask_force,0,Unable to Assign,No es posible asignar,0
+view,stock.packing.out.assign.ask_force,0,Unable to assign those products:,No es posible asignar esos productos:,0
+view,stock.packing.out.return,0,Cancel,Cancelar,0
+view,stock.packing.out.return,0,Customer Return Shipment,Devolución a Cliente,0
+view,stock.packing.out.return,0,Customer Return Shipments,Devolución a Cliente,0
+view,stock.packing.out.return,0,Done,Hecho,0
+view,stock.packing.out.return,0,Incoming Moves,Movimientos de Entrada,0
+view,stock.packing.out.return,0,Inventory Moves,Movimientos de Inventario,0
+view,stock.packing.out.return,0,Moves,Movimientos,0
+view,stock.packing.out.return,0,Received,Recibido,0
+view,stock.packing.out.return,0,Reset to Draft,Revertir a Borrador,0
+view,stock.product_stock_date.init,0,Product Quantity.,Cantidad de Producto.,0
+wizard_button,"stock.inventory.complete,init,complete",0,Complete,Completo,0
+wizard_button,"stock.inventory.complete,init,end",0,Cancel,Cancelar,0
+wizard_button,"stock.location.open,init,end",0,Cancel,Cancelar,0
+wizard_button,"stock.location.open,init,open",0,Open,Abrir,0
+wizard_button,"stock.packing.in.return.assign,ask_force,end",0,Ok,Aceptar,0
+wizard_button,"stock.packing.in.return.assign,ask_force,force",0,Force Assign,Forzar Asignación,0
+wizard_button,"stock.packing.internal.assign,ask_force,end",0,Ok,Aceptar,0
+wizard_button,"stock.packing.internal.assign,ask_force,force",0,Force Assign,Forzar Asignación,0
+wizard_button,"stock.packing.out.assign,ask_force,end",0,Ok,Aceptar,0
+wizard_button,"stock.packing.out.assign,ask_force,force",0,Force Assign,Forzar Asignación,0
+wizard_button,"stock.product.open,init,end",0,Cancel,Cancelar,0
+wizard_button,"stock.product.open,init,open",0,Open,Abrir,0
diff --git a/es_ES.csv b/es_ES.csv
index c9054ae..cefb6ad 100644
--- a/es_ES.csv
+++ b/es_ES.csv
@@ -1,255 +1,488 @@
type,name,res_id,src,value,fuzzy
-error,stock.inventory.line,0,Line quantity must be positive!,La lÃnea de cantidad debe ser positiva!,0
-error,stock.inventory.line,0,Product must be unique by inventory!,El producto debe ser único por inventario!,0
-error,stock.move,0,Move can not be in both Supplier and Customer Packing,El Movimiento no puede estar en el empaque del Proveedor y del Cliente,0
-error,stock.move,0,Move quantity must be positive,El valor del movimiento debe ser positivo,0
-error,stock.move,0,Source and destination location must be different,Los lugares fuente y destino deben diferir,0
-error,stock.move,0,You can not set state to assigned!,No puede establecer el estado como asignado!,0
-error,stock.move,0,You can not set state to done!,No puede establecer el estado como hecho!,0
-error,stock.move,0,You can not set state to draft!,No puede establecer el estado como borrador!,0
-error,stock.move,0,You can not use service product for a move!,No puede usar un producto de servicio para un movimiento!,0
-error,stock.move,0,You can only delete draft or cancelled moves!,Solamente puede eliminar movimientos en borrador o cancelados!,0
-error,stock.packing.in,0,Incoming Moves must have input location as destination location!,Los movimientos de Entrada deben tener lugar destino y de inicio!,0
-error,stock.packing.in,0,Inventory Moves must have input location as source location!,Los movimientos de Inventario deben tener un lugar de entrada como lugar de origen!,0
-error,stock.packing.in,0,Inventory Moves must have output location as destination location!,Los movimientos de Inventario deben tener un lugar de salida como lugar de destino!,0
-error,stock.packing.in,0,Outgoing Moves must have output location as source location!,Los Movimientos de Salida deben tener tanto lugar de salida como origen!,0
+error,stock.inventory.line,0,Line quantity must be positive!,La cantidad de la lÃnea debe ser positiva,0
+error,stock.inventory.line,0,Product must be unique by inventory!,El producto debe ser único por inventario,0
+error,stock.location,0,A location with existing moves cannot be changed to a type that does not support moves.,Una ubicación con movimientos no puede ser cambiado a un tipo que no soporte movimientos.,0
+error,stock.location,0,You can not create recursive locations!,No puede crear ubicaciones recursivas,0
+error,stock.move,0,Move can be on only one Shipment,Un movimiento solo puede hacerse con un envio.,0
+error,stock.move,0,Move quantity must be positive,La cantidad a mover tiene que ser positivo,0
+error,stock.move,0,Source and destination location must be different,Los lugares origen y destino deben ser distintos,0
+error,stock.move,0,You can not set state to assigned!,No puede establecer el estado como asignado,0
+error,stock.move,0,You can not set state to done!,No puede establecer el estado como hecho,0
+error,stock.move,0,You can not set state to draft!,No puede establecer el estado como borrador,0
+error,stock.move,0,You can not use service products for a move!,No puede usar productos de servicio para un movimiento,0
+error,stock.move,0,You can only delete draft or cancelled moves!,Solamente puede eliminar movimientos en borrador o cancelados,0
+error,stock.packing.in,0,Incoming Moves must have the warehouse input location as destination location!,Los movimientos de entrada deben tener la ubicación del almacén de entrada como la ubicación de destino,0
+error,stock.packing.in,0,Inventory Moves must have the warehouse input location as source location!,Los movimientos de inventario deben tener la ubicación del almacén de entrada como la ubicación de origen,0
+error,stock.packing.out.return,0,Incoming Moves must have the warehouse input location as destination location!,Los movimientos de entrada deben tener la ubicación del almacén de entrada como la ubicación de destino,0
+error,stock.packing.out.return,0,Inventory Moves must have the warehouse input location as source location!,Los movimientos de inventario deben tener la ubicación del almacén de entrada como la ubicación de origen,0
+error,stock.packing.out.return.create,0,The packing with code %s is not yet sent.,El paquete con código %s no ha sido enviado aún.,0
+error,stock.packing.out.return.create,0,You can not create return packing,No puede crear paquetes de retorno,0
field,"party.address,delivery",0,Delivery,EnvÃo,0
-field,"party.party,customer_location",0,Customer Location,Lugar del Cliente,0
-field,"party.party,supplier_location",0,Supplier Location,Lugar del Proveedor,0
-field,"product.product,forecast_quantity",0,Forecast Quantity,Cantidad Proyectada,0
+field,"party.party,customer_location",0,Customer Location,Ubicación del cliente,0
+field,"party.party,supplier_location",0,Supplier Location,Ubicación del proveedor,0
+field,"product.product,forecast_quantity",0,Forecast Quantity,Cantidad prevista,0
field,"product.product,quantity",0,Quantity,Cantidad,0
-field,"product.template,forecast_quantity",0,Forecast Quantity,Cantidad Proyectada,0
+field,"product.template,forecast_quantity",0,Forecast Quantity,Cantidad prevista,0
field,"product.template,quantity",0,Quantity,Cantidad,0
-field,"stock.inventory,company",0,Company,CompañÃa,0
+field,"stock.inventory,company",0,Company,Empresa,0
+field,"stock.inventory.complete.init,categories",0,Categories,CategorÃas,0
+field,"stock.inventory.complete.init,products",0,Products,Productos,0
field,"stock.inventory,date",0,Date,Fecha,0
-field,"stock.inventory.line,expected_quantity",0,Expected Quantity,Cantidad Esperada,0
+field,"stock.inventory.line,expected_quantity",0,Expected Quantity,Cantidad esperada,0
field,"stock.inventory.line,inventory",0,Inventory,Inventario,0
+field,"stock.inventory.line,move",0,Move,Movimiento,0
field,"stock.inventory.line,product",0,Product,Producto,0
field,"stock.inventory.line,quantity",0,Quantity,Cantidad,0
-field,"stock.inventory,lines",0,Lines,LÃneas de Inventario,0
-field,"stock.inventory.line,unit_digits",0,Unit Digits,DÃgitos Unitarios,0
-field,"stock.inventory.line,uom",0,UOM,UDM,0
-field,"stock.inventory,location",0,Location,Lugar,0
-field,"stock.inventory,lost_found",0,Lost and Found,Perdido y Encontrado,0
-field,"stock.inventory,moves",0,Moves,Movimientos Generados,0
+field,"stock.inventory.line,rec_name",0,Name,Nombre,0
+field,"stock.inventory,lines",0,Lines,LÃneas,0
+field,"stock.inventory.line,unit_digits",0,Unit Digits,DÃgitos de la unidad,0
+field,"stock.inventory.line,uom",0,UOM,UdM,0
+field,"stock.inventory,location",0,Location,Ubicación,0
+field,"stock.inventory,lost_found",0,Lost and Found,Perdido y encontrado,0
+field,"stock.inventory,rec_name",0,Name,Nombre,0
field,"stock.inventory,state",0,State,Estado,0
field,"stock.location,active",0,Active,Activo,0
field,"stock.location,address",0,Address,Direcciones,0
-field,"stock.location,childs",0,Childs,Hij at s,0
+field,"stock.location,childs",0,Children,Hijos,0
field,"stock.location,code",0,Code,Código,0
-field,"stock.location,forecast_quantity",0,Forecast Quantity,Cantidad Proyectada,0
+field,"stock.location,forecast_quantity",0,Forecast Quantity,Cantidad prevista,0
field,"stock.location,input_location",0,Input,Entrada,0
field,"stock.location,left",0,Left,Izquierda,0
field,"stock.location,name",0,Name,Nombre,0
field,"stock.location,output_location",0,Output,Salida,0
field,"stock.location,parent",0,Parent,Padre,0
field,"stock.location,quantity",0,Quantity,Cantidad,0
+field,"stock.location,rec_name",0,Name,Nombre,0
field,"stock.location,right",0,Right,Derecha,0
field,"stock.location_stock_date.init,forecast_date",0,At Date,En la fecha,0
field,"stock.location,storage_location",0,Storage,Almacén,0
-field,"stock.location,type",0,Location type,Tipo de Lugar,0
-field,"stock.move,company",0,Company,CompañÃa,0
-field,"stock.move,currency",0,Currency,Moneda,0
-field,"stock.move,effective_date",0,Effective Date,Fecha Efectiva,0
-field,"stock.move,from_location",0,From Location,Lugar Inicial,0
-field,"stock.move,packing_in",0,Supplier Packing,Empaque del Proveedor,0
-field,"stock.move,packing_internal",0,Internal Packing,Empaque Interno,0
-field,"stock.move,packing_out",0,Customer Packing,Empaque de Cliente,0
-field,"stock.move,planned_date",0,Planned Date,Fecha Planeada,0
+field,"stock.location,type",0,Location type,Tipo de ubicación,0
+field,"stock.move,company",0,Company,Empresa,0
+field,"stock.move,cost_price",0,Cost Price,Precio de coste,0
+field,"stock.move,currency",0,Currency,Divisa,0
+field,"stock.move,effective_date",0,Effective Date,Fecha efectiva,0
+field,"stock.move,from_location",0,From Location,Desde ubicación,0
+field,"stock.move,packing_in",0,Supplier Shipment,EnvÃo del proveedor,0
+field,"stock.move,packing_in_return",0,Supplier Return Shipment,Envio de devolución a proveedor,0
+field,"stock.move,packing_internal",0,Internal Shipment,EnvÃo interno,0
+field,"stock.move,packing_out",0,Customer Shipment,EnvÃo a cliente,0
+field,"stock.move,packing_out_return",0,Customer Return Shipment,Envio de devolución de cliente,0
+field,"stock.move,planned_date",0,Planned Date,Fecha estimada,0
field,"stock.move,product",0,Product,Producto,0
field,"stock.move,quantity",0,Quantity,Cantidad,0
+field,"stock.move,rec_name",0,Name,Nombre,0
field,"stock.move,state",0,State,Estado,0
-field,"stock.move,to_location",0,To Location,Al Lugar:,0
-field,"stock.move,type",0,Type,Tipo,0
-field,"stock.move,unit_digits",0,Unit Digits,DÃgitos de Unidad,0
-field,"stock.move,unit_price",0,Unit Price,Precio Unitario,0
-field,"stock.move,uom",0,Uom,Udm,0
+field,"stock.move,to_location",0,To Location,A ubicación,0
+field,"stock.move,unit_digits",0,Unit Digits,DÃgitos de unidad,0
+field,"stock.move,unit_price",0,Unit Price,Precio unitario,0
+field,"stock.move,unit_price_required",0,Unit Price Required,Requiere precio unitario,0
+field,"stock.move,uom",0,Uom,UdM,0
field,"stock.packing.in,code",0,Code,Código,0
-field,"stock.packing.in,contact_address",0,Contact Address,Dirección de Contacto,0
-field,"stock.packing.in,effective_date",0,Effective Date,Fecha Efectiva,0
-field,"stock.packing.in,incoming_moves",0,Incoming Moves,Movimientos de Entrada,0
-field,"stock.packing.in,inventory_moves",0,Inventory Moves,Movimientos de Inventario,0
+field,"stock.packing.in,contact_address",0,Contact Address,Dirección de contacto,0
+field,"stock.packing.in,effective_date",0,Effective Date,Fecha efectiva,0
+field,"stock.packing.in,incoming_moves",0,Incoming Moves,Movimientos de entrada,0
+field,"stock.packing.in,inventory_moves",0,Inventory Moves,Movimientos de inventario,0
field,"stock.packing.in,moves",0,Moves,Movimientos,0
-field,"stock.packing.in,planned_date",0,Planned Date,Fecha Planeada,0
+field,"stock.packing.in,planned_date",0,Planned Date,Fecha estimada,0
+field,"stock.packing.in,rec_name",0,Name,Nombre,0
field,"stock.packing.in,reference",0,Reference,Referencia,0
+field,"stock.packing.in.return.assign.ask_force,moves",0,Moves,Movimientos,0
+field,"stock.packing.in.return,code",0,Code,Código,0
+field,"stock.packing.in.return,effective_date",0,Effective Date,Fecha efectiva,0
+field,"stock.packing.in.return,from_location",0,From Location,Desde ubicación,0
+field,"stock.packing.in.return,moves",0,Moves,Movimientos,0
+field,"stock.packing.in.return,planned_date",0,Planned Date,Fecha estimada,0
+field,"stock.packing.in.return,rec_name",0,Name,Nombre,0
+field,"stock.packing.in.return,reference",0,Reference,Referencia,0
+field,"stock.packing.in.return,state",0,State,Estado,0
+field,"stock.packing.in.return,to_location",0,To Location,A ubicación,0
field,"stock.packing.in,state",0,State,Estado,0
field,"stock.packing.in,supplier",0,Supplier,Proveedor,0
+field,"stock.packing.internal.assign.ask_force,moves",0,Moves,Movimientos,0
field,"stock.packing.internal,code",0,Code,Código,0
-field,"stock.packing.internal,effective_date",0,Effective Date,Fecha Efectiva,0
-field,"stock.packing.internal,from_location",0,From Location,Lugar Inicial,0
+field,"stock.packing.internal,effective_date",0,Effective Date,Fecha efectiva,0
+field,"stock.packing.internal,from_location",0,From Location,Desde ubicación,0
field,"stock.packing.internal,moves",0,Moves,Movimientos,0
-field,"stock.packing.internal,planned_date",0,Planned Date,Fecha Planeada,0
+field,"stock.packing.internal,planned_date",0,Planned Date,Fecha estimada,0
+field,"stock.packing.internal,rec_name",0,Name,Nombre,0
field,"stock.packing.internal,reference",0,Reference,Referencia,0
field,"stock.packing.internal,state",0,State,Estado,0
-field,"stock.packing.internal,to_location",0,To Location,Al Lugar:,0
-field,"stock.packing.in,warehouse",0,Warehouse,Depósito,0
+field,"stock.packing.internal,to_location",0,To Location,A ubicación,0
+field,"stock.packing.in,warehouse",0,Warehouse,Almacén,0
+field,"stock.packing.out.assign.ask_force,inventory_moves",0,Inventory Moves,Movimientos de inventario,0
field,"stock.packing.out,code",0,Code,Código,0
field,"stock.packing.out,customer",0,Customer,Cliente,0
-field,"stock.packing.out,customer_location",0,Customer Location,Lugar del Cliente,0
-field,"stock.packing.out,delivery_address",0,Delivery Address,Dirección de EnvÃo,0
-field,"stock.packing.out,effective_date",0,Effective Date,Fecha Efectiva,0
-field,"stock.packing.out,inventory_moves",0,Inventory Moves,Movimientos de Inventario,0
+field,"stock.packing.out,delivery_address",0,Delivery Address,Dirección de envÃo,0
+field,"stock.packing.out,effective_date",0,Effective Date,Fecha efectiva,0
+field,"stock.packing.out,inventory_moves",0,Inventory Moves,Movimientos de inventario,0
field,"stock.packing.out,moves",0,Moves,Movimientos,0
-field,"stock.packing.out,outgoing_moves",0,Outgoing Moves,Movimientos de Salida,0
-field,"stock.packing.out,planned_date",0,Planned Date,Fecha Planeada,0
+field,"stock.packing.out,outgoing_moves",0,Outgoing Moves,Movimientos de salida,0
+field,"stock.packing.out,planned_date",0,Planned Date,Fecha estimada,0
+field,"stock.packing.out,rec_name",0,Name,Nombre,0
field,"stock.packing.out,reference",0,Reference,Referencia,0
+field,"stock.packing.out.return,code",0,Code,Código,0
+field,"stock.packing.out.return,customer",0,Customer,Cliente,0
+field,"stock.packing.out.return,delivery_address",0,Delivery Address,Dirección de envÃo,0
+field,"stock.packing.out.return,effective_date",0,Effective Date,Fecha efectiva,0
+field,"stock.packing.out.return,incoming_moves",0,Incoming Moves,Movimientos de entrada,0
+field,"stock.packing.out.return,inventory_moves",0,Inventory Moves,Movimientos de inventario,0
+field,"stock.packing.out.return,moves",0,Moves,Movimientos,0
+field,"stock.packing.out.return,planned_date",0,Planned Date,Fecha estimada,0
+field,"stock.packing.out.return,rec_name",0,Name,Nombre,0
+field,"stock.packing.out.return,reference",0,Reference,Referencia,0
+field,"stock.packing.out.return,state",0,State,Estado,0
+field,"stock.packing.out.return,warehouse",0,Warehouse,Almacén,0
field,"stock.packing.out,state",0,State,Estado,0
-field,"stock.packing.out,warehouse",0,Warehouse,Depósito,0
+field,"stock.packing.out,warehouse",0,Warehouse,Almacén,0
field,"stock.product_stock_date.init,forecast_date",0,At Date,En la fecha,0
-help,"party.party,customer_location",0,The default destination location when sending products to the party.,El lugar predeterminado destino cuando se envian productos al tercero.,0
-help,"party.party,supplier_location",0,The default source location when receiving products from the party.,El lugar origen predeterminado cuando se reciben productos del tercero.,0
+help,"party.party,customer_location",0,The default destination location when sending products to the party.,El lugar de destino predeterminado cuando se envian productos al tercero.,0
+help,"party.party,supplier_location",0,The default source location when receiving products from the party.,La ubicación de origen predeterminado cuando se reciben productos del tercero.,0
help,"stock.location_stock_date.init,forecast_date",0,"Allow to compute expected stock quantities for this date.
* An empty value is an infinite date in the future.
-* A date in the past will provide historical values.","Permitir calcular el inventario esperado para esta fecha.
-* Un valor vacÃoes una fecha infinita en el futuro.
-* Una fecha en el pasado indicará usar datos históricos.",0
+* A date in the past will provide historical values.","Permite calcular las existencias esperadas para esta fecha.
+* Un valor vacÃo es una fecha infinita en el futuro.
+* Una fecha pasada proveerá de datos históricos.",0
help,"stock.product_stock_date.init,forecast_date",0,"Allow to compute expected stock quantities for this date.
* An empty value is an infinite date in the future.
-* A date in the past will provide historical values.","Permitir calcular el inventario esperado para esta fecha.
-* Un valor vacÃoes una fecha infinita en el futuro.
-* Una fecha en el pasado indicará usar datos históricos.",0
-model,"ir.action,name",act_packing_out_form_assigned,Assigned Customer Packings,Empaques asignados a Clientes,0
-model,"ir.action,name",act_packing_internal_assigned_form,Assigned Internal Packings,Empaques asignados internamente,0
-model,"ir.action,name",wizard_complete_inventory,Complete Inventory,Inventario Completo,0
-model,"ir.action,name",report_packing_out,Customer Packing,Empaque de Cliente,0
-model,"ir.action,name",act_packing_out_form,Customer Packings,Empaques de Cliente,0
-model,"ir.action,name",act_packing_out_form_ready,Customer Packings Ready for Shipping,Empaques de Cliente listos para EnvÃo,0
-model,"ir.action,name",act_packing_out_form_waiting,Customer Packings Waiting Assignation,Empaques de Cliente listos esperando Asignación,0
-model,"ir.action,name",act_packing_internal_draft_form,Draft Internal Packings,Empaques Internos en Borrador,0
-model,"ir.action,name",act_location_form,Edit Locations,Editar Lugares,0
-model,"ir.action,name",act_packing_internal_form,Internal Packings,Empaques Internos,0
-model,"ir.action,name",act_packing_internal_waiting_form,Internal Packings Waiting Assignation,Empaques Internos esperando Asignación,0
+* A date in the past will provide historical values.","Permite calcular las existencias esperadas para esta fecha.
+* Un valor vacÃo es una fecha infinita en el futuro.
+* Una fecha pasada proveerá de datos históricos.",0
+model,"ir.action,name",act_packing_out_form_assigned,Assigned Customer Shipments,EnvÃos a clientes asignados,0
+model,"ir.action,name",act_packing_internal_assigned_form,Assigned Internal Shipments,EnvÃos internos asignados,0
+model,"ir.action,name",wizard_packing_in_return_assign,Assign Purchase Return Shipment,Asignar envio de devolución de compra,0
+model,"ir.action,name",wizard_packing_internal_assign,Assign Shipment Internal,Asignar envÃo interno,0
+model,"ir.action,name",wizard_packing_out_assign,Assign Shipment Out,Asignación de salida de envÃo,0
+model,"ir.action,name",wizard_complete_inventory,Complete Inventory,Inventario completo,0
+model,"ir.action,name",create_packing_out_return,Create Return Shipment,Crear envio de devolución,0
+model,"ir.action,name",act_packing_out_return_form,Customer Return Shipments,Envios de devoluciones de cliente,0
+model,"ir.action,name",,Customer Shipment,EnvÃo de Cliente,1
+model,"ir.action,name",act_packing_out_form,Customer Shipments,EnvÃos a cliente,0
+model,"ir.action,name",act_packing_out_form2,Customer Shipments,EnvÃos de cliente,0
+model,"ir.action,name",act_packing_out_form_ready,Customer Shipments Ready for Shipping,EnvÃos a cliente listos para ser enviados,0
+model,"ir.action,name",act_packing_out_form_waiting,Customer Shipments Waiting Assignation,EnvÃos a cliente esperando asignación,0
+model,"ir.action,name",report_packing_out_delivery_note,Delivery Note,Albarán de envÃo,0
+model,"ir.action,name",act_packing_internal_draft_form,Draft Internal Shipments,EnvÃos internos en borrador,0
+model,"ir.action,name",act_location_form,Edit Locations,Editar ubicaciones,0
+model,"ir.action,name",report_packing_internal,Internal Shipment,EnvÃo interno,0
+model,"ir.action,name",act_packing_internal_form,Internal Shipments,EnvÃos internos,0
+model,"ir.action,name",act_packing_internal_waiting_form,Internal Shipments Waiting Assignation,EnvÃos internos esperando asignación,0
model,"ir.action,name",act_inventory_form,Inventories,Inventarios,0
-model,"ir.action,name",act_location_tree,Locations,Lugares,0
+model,"ir.action,name",act_location_tree,Locations,Ubicaciones,0
model,"ir.action,name",act_move_form,Moves,Movimientos,0
-model,"ir.action,name",act_move_form_supp,Moves from Suppliers,Movimientos de Proveedores,0
-model,"ir.action,name",act_move_form_supp_proceed,Moves from Suppliers Waiting Arrival,Movimientos de Proveedores en espera de Arrivo,0
-model,"ir.action,name",act_move_form_cust,Moves to Customers,Movimientos hacia Clientes,0
-model,"ir.action,name",act_packing_in_form2,New Supplier Packing,Nuevo Empaque de Proveedor,0
-model,"ir.action,name",wizard_location_open,Product by Location,Producto por Lugar,0
-model,"ir.action,name",wizard_product_open,Product Quantities,Cantidades de Producto,0
-model,"ir.action,name",act_product_by_location,Products by Locations,Productos por Lugares,0
-model,"ir.action,name",act_location_quantity_tree,Product Stock,Inventario de Producto,0
-model,"ir.action,name",act_packing_in_form_received,Received Supplier packings,Empaques de Proveedores recibidos,0
-model,"ir.action,name",act_packing_in_form,Supplier Packings,Empaques del Proveedor,0
-model,"ir.ui.menu,name",menu_packing_out_assigned,Assigned Customer Packings,Empaques asignados a Clientes,0
-model,"ir.ui.menu,name",menu_packing_internal_assigned_form,Assigned Internal Packings,Empaques asignados internamente,0
+model,"ir.action,name",act_move_form_supp,Moves from Suppliers,Movimientos de proveedores,0
+model,"ir.action,name",act_move_form_supp_proceed,Moves from Suppliers Waiting Arrival,Movimientos de proveedores en espera de llegada,0
+model,"ir.action,name",act_move_form_cust,Moves to Customers,Movimientos hacia clientes,0
+model,"ir.action,name",act_packing_out_return_form2,New Customer Return Shipment,Nuevo envio de devolución de cliente,0
+model,"ir.action,name",act_packing_internal_new_form,New Internal Shipment,Nuevo envÃo interno,0
+model,"ir.action,name",act_packing_in_return_new_form,New Supplier Return Shipment,Nuevo envio de devolución a proveedor,0
+model,"ir.action,name",act_packing_in_form2,New Supplier Shipment,Nuevo envÃo de proveedor,0
+model,"ir.action,name",report_packing_out_picking_list,Picking List,Lista de recogida,0
+model,"ir.action,name",wizard_location_open,Product by Location,Producto por ubicación,0
+model,"ir.action,name",wizard_product_open,Product Quantities,Cantidades de producto,0
+model,"ir.action,name",act_product_by_location,Products by Locations,Productos por Ubicaciones,0
+model,"ir.action,name",act_location_quantity_tree,Product Stock,Existencias de producto,0
+model,"ir.action,name",act_packing_in_form_received,Received Supplier packings,Paquetes recibidos de proveedores,0
+model,"ir.action,name",report_packing_in_restocking_list,Restocking List,Lista de renovación de inventario,0
+model,"ir.action,name",report_packing_out_return_restocking_list,Restocking List,Lista de renovación de inventario,0
+model,"ir.action,name",act_packing_in_return_form,Supplier Return Shipments,Envios de devolución a proveedor,0
+model,"ir.action,name",act_packing_in_form,Supplier Shipments,EnvÃos del proveedor,0
+model,"ir.action,name",act_packing_out_form3,Supplier Shipments,Envios a proveedor,0
+model,"ir.sequence,name",sequence_packing_out_return,Customer Return Shipment,Envio de devolución de cliente,0
+model,"ir.sequence,name",sequence_packing_out,Customer Shipment,EnvÃo a cliente,0
+model,"ir.sequence,name",sequence_packing_internal,Internal Shipment,EnvÃo interno,0
+model,"ir.sequence,name",sequence_packing_in_return,Supplier Return Shipment,Envio de devolución a proveedor,0
+model,"ir.sequence,name",sequence_packing_in,Supplier Shipment,EnvÃo de proveedor,0
+model,"ir.sequence.type,name",sequence_type_packing_out_return,Customer Return Shipment,Envio de devolución de cliente,0
+model,"ir.sequence.type,name",sequence_type_packing_out,Customer Shipment,EnvÃo a cliente,0
+model,"ir.sequence.type,name",sequence_type_packing_internal,Internal Shipment,EnvÃo interno,0
+model,"ir.sequence.type,name",sequence_type_packing_in_return,Supplier Return Shipment,Envio de devolución a proveedor,0
+model,"ir.sequence.type,name",sequence_type_packing_in,Supplier Shipment,EnvÃo de proveedor,0
+model,"ir.ui.menu,name",menu_packing_out_assigned,Assigned Customer Shipments,EnvÃos a clientes asignados,0
+model,"ir.ui.menu,name",menu_packing_internal_assigned_form,Assigned Internal Shipments,EnvÃos internos asignados,0
model,"ir.ui.menu,name",menu_configuration,Configuration,Configuración,0
-model,"ir.ui.menu,name",menu_packing_out_form,Customer Packings,Empaques de Cliente,0
-model,"ir.ui.menu,name",menu_packing_out_ready,Customer Packings Ready for Shipping,Empaques de Cliente listos para EnvÃo,0
-model,"ir.ui.menu,name",menu_packing_out_waiting,Customer Packings Waiting Assignation,Empaques de Cliente listos esperando Asignación,0
-model,"ir.ui.menu,name",menu_packing_internal_draft_form,Draft Internal Packings,Empaques Internos en Borrador,0
-model,"ir.ui.menu,name",menu_location_form,Edit Locations,Editar Lugares,0
-model,"ir.ui.menu,name",menu_packing_internal_form,Internal Packings,Empaques Internos,0
-model,"ir.ui.menu,name",menu_packing_internal_waiting_form,Internal Packings Waiting Assignation,Empaques Internos esperando Asignación,0
+model,"ir.ui.menu,name",menu_packing_out_return_form,Customer Return Shipments,Envio de devolución de cliente,0
+model,"ir.ui.menu,name",menu_packing_out_form,Customer Shipments,EnvÃos al cliente,0
+model,"ir.ui.menu,name",menu_packing_out_ready,Customer Shipments Ready for Shipping,EnvÃos al cliente listos para su envio,0
+model,"ir.ui.menu,name",menu_packing_out_waiting,Customer Shipments Waiting Assignation,EnvÃos a cliente esperando asignación,0
+model,"ir.ui.menu,name",menu_packing_internal_draft_form,Draft Internal Shipments,EnvÃos Internos en borrador,0
+model,"ir.ui.menu,name",menu_location_form,Edit Locations,Editar ubicaciones,0
+model,"ir.ui.menu,name",menu_packing_internal_form,Internal Shipments,EnvÃos internos,0
+model,"ir.ui.menu,name",menu_packing_internal_waiting_form,Internal Shipments Waiting Assignation,EnvÃo internos esperando asignación,0
model,"ir.ui.menu,name",menu_inventory_form,Inventories,Inventarios,0
-model,"ir.ui.menu,name",menu_stock,Inventory Management,Manejo de Inventarios,0
-model,"ir.ui.menu,name",menu_location_tree,Locations,Lugares,0
+model,"ir.ui.menu,name",menu_stock,Inventory Management,Gestión de Inventarios,0
+model,"ir.ui.menu,name",menu_location_tree,Locations,Ubicaciones,0
model,"ir.ui.menu,name",menu_move_form,Moves,Movimientos,0
-model,"ir.ui.menu,name",menu_move_form_supp,Moves from Suppliers,Movimientos de Proveedores,0
-model,"ir.ui.menu,name",menu_move_form_supp_proceed,Moves from Suppliers Waiting Arrival,Movimientos de Proveedores en espera de Arrivo,0
-model,"ir.ui.menu,name",menu_move_form_cust,Moves to Customers,Movimientos hacia Clientes,0
-model,"ir.ui.menu,name",menu_packing_in_form2,New Supplier Packing,Nuevo Empaque de Proveedor,0
-model,"ir.ui.menu,name",menu_packing_in_received,Received Supplier packings,Empaques de Proveedores recibidos,0
-model,"ir.ui.menu,name",menu_packing_in_form,Supplier Packings,Empaques del Proveedor,0
-odt,stock.packing.out,0,Customer Code:,Código de Cliente:,0
-odt,stock.packing.out,0,Date:,Fecha:,0
-odt,stock.packing.out,0,E-Mail:,Correo electrónico:,0
-odt,stock.packing.out,0,List,Lista,0
-odt,stock.packing.out,0,Packing,En empaque,0
-odt,stock.packing.out,0,Packing Number:,Número de Empaque:,0
-odt,stock.packing.out,0,Phone:,Teléfono:,0
-odt,stock.packing.out,0,Product,Producto,0
-odt,stock.packing.out,0,Quantity,Cantidad,0
-odt,stock.packing.out,0,Reference:,Referencia:,0
-selection,"stock.inventory,state",0,Cancel,Cancelar,0
+model,"ir.ui.menu,name",menu_move_form_supp,Moves from Suppliers,Movimientos de proveedores,0
+model,"ir.ui.menu,name",menu_move_form_supp_proceed,Moves from Suppliers Waiting Arrival,Movimientos de proveedores en espera de llegada,0
+model,"ir.ui.menu,name",menu_move_form_cust,Moves to Customers,Movimientos hacia clientes,0
+model,"ir.ui.menu,name",menu_packing_out_return_form2,New Customer Return Shipment,Nuevo envio de devolución de cliente,0
+model,"ir.ui.menu,name",menu_packing_internal_new_form,New Internal Shipment,Nuevo envÃo interno,0
+model,"ir.ui.menu,name",menu_packing_in_return_new_form,New Supplier Return Shipment,Nuevo envio de devolución a proveedor,0
+model,"ir.ui.menu,name",menu_packing_in_form2,New Supplier Shipment,Nuevo envÃo de proveedor,0
+model,"ir.ui.menu,name",menu_packing_in_received,Received Supplier packings,Paquetes de proveedores recibidos,0
+model,"ir.ui.menu,name",menu_reporting,Reporting,Informes,0
+model,"ir.ui.menu,name",menu_packing_in_return_form,Supplier Return Shipments,Envios de devolución a proveedor,0
+model,"ir.ui.menu,name",menu_packing_in_form,Supplier Shipments,EnvÃos del proveedor,0
+model,"res.group,name",group_stock,Stock,Existencias,0
+model,"res.group,name",group_stock_admin,Stock Administration,Administración de existencias,0
+model,"stock.inventory.complete.init,name",0,Complete Inventory Init,Iniciar inventario completo,0
+model,"stock.inventory.line,name",0,Stock Inventory Line,LÃnea de existencia en Inventario ,0
+model,"stock.inventory,name",0,Stock Inventory,Inventario de existencia,0
+model,"stock.location,name",location_customer,Customer,Cliente,0
+model,"stock.location,name",location_input,Input Zone,Zona de entrada,0
+model,"stock.location,name",location_lost_found,Lost and Found,Perdido y encontrado,0
+model,"stock.location,name",location_output,Output Zone,Zona de salida,0
+model,"stock.location,name",0,Stock Location,Ubicación de existencia,0
+model,"stock.location,name",location_storage,Storage Zone,Zona de almacenamiento,0
+model,"stock.location,name",location_supplier,Supplier,Proveedor,0
+model,"stock.location,name",location_warehouse,Warehouse,Almacén,0
+model,"stock.location_stock_date.init,name",0,Compute stock quantities,Calcular cantidades de existencias,0
+model,"stock.move,name",0,Stock Move,Movimiento de existencias,0
+model,"stock.packing.in,name",0,Supplier Shipment,EnvÃo de proveedor,0
+model,"stock.packing.in.return.assign.ask_force,name",0,Assign Supplier Return Shipment Ask Force,,0
+model,"stock.packing.in.return,name",0,Supplier Return Shipment,Envio de devolución a proveedor,0
+model,"stock.packing.internal.assign.ask_force,name",0,Assign Shipment Internal Ask Force,,0
+model,"stock.packing.internal,name",0,Internal Shipment,EnvÃo interno,0
+model,"stock.packing.out.assign.ask_force,name",0,Assign Shipment Out Ask Force,,0
+model,"stock.packing.out,name",0,Customer Shipment,EnvÃo a cliente,0
+model,"stock.packing.out.return,name",0,Customer Return Shipment,Envio de devolución de cliente,0
+model,"stock.product_stock_date.init,name",0,Compute stock quantities,Calcular cantidades de existencias,0
+model,"workflow.activity,name",packingout_act_assigned,Assigned,Asignado,0
+model,"workflow.activity,name",packinginternal_act_assigned,Assigned,Asignado,0
+model,"workflow.activity,name",packing_in_return_act_assigned,Assigned,Asignado,0
+model,"workflow.activity,name",packingin_act_cancel,Canceled,Cancelado,0
+model,"workflow.activity,name",packingout_act_cancel,Canceled,Cancelado,0
+model,"workflow.activity,name",packinginternal_act_cancel,Canceled,Cancelado,0
+model,"workflow.activity,name",packing_out_return_act_cancel,Canceled,Cancelado,0
+model,"workflow.activity,name",packing_in_return_act_cancel,Canceled,Cancelado,0
+model,"workflow.activity,name",inventory_act_cancel,Canceled,Cancelado,0
+model,"workflow.activity,name",packingin_act_done,Done,Hecho,0
+model,"workflow.activity,name",packingout_act_done,Done,Hecho,0
+model,"workflow.activity,name",packinginternal_act_done,Done,Hecho,0
+model,"workflow.activity,name",packing_out_return_act_done,Done,Hecho,0
+model,"workflow.activity,name",packing_in_return_act_done,Done,Hecho,0
+model,"workflow.activity,name",inventory_act_done,Done,Hecho,0
+model,"workflow.activity,name",packingin_act_draft,Draft,Borrador,0
+model,"workflow.activity,name",packingout_act_draft,Draft,Borrador,0
+model,"workflow.activity,name",packinginternal_act_draft,Draft,Borrador,0
+model,"workflow.activity,name",packing_out_return_act_draft,Draft,Borrador,0
+model,"workflow.activity,name",packing_in_return_act_draft,Draft,Borrador,0
+model,"workflow.activity,name",inventory_act_draft,Draft,Borrador,0
+model,"workflow.activity,name",packingout_act_packed,Packed,Empaquetado,0
+model,"workflow.activity,name",packingin_act_received,Received,Recibido,0
+model,"workflow.activity,name",packing_out_return_act_received,Received,Recibido,0
+model,"workflow.activity,name",packingout_act_waiting,Waiting,En espera,0
+model,"workflow.activity,name",packinginternal_act_waiting,Waiting,En espera,0
+model,"workflow.activity,name",packing_in_return_act_waiting,Waiting,En espera,0
+model,"workflow,name",wkf_packing_out_return,Customer Return Shipment,Envio de devolución de Cliente,0
+model,"workflow,name",wkf_packingout,Customer Shipment,EnvÃo a cliente,0
+model,"workflow,name",wkf_packinginternal,Internal Shipment,EnvÃo interno,0
+model,"workflow,name",wkf_inventory,Inventory,Inventario,0
+model,"workflow,name",wkf_packing_in_return,Supplier Return Shipment,Envio de devolución a proveedor,0
+model,"workflow,name",wkf_packingin,Supplier Shipment,EnvÃo de proveedor,0
+odt,stock.packing.in.restocking_list,0,/,/,0
+odt,stock.packing.in.restocking_list,0,Code:,Código:,0
+odt,stock.packing.in.restocking_list,0,E-Mail:,Correo electrónico:,0
+odt,stock.packing.in.restocking_list,0,From Location,Desde ubicación,0
+odt,stock.packing.in.restocking_list,0,Phone:,Teléfono:,0
+odt,stock.packing.in.restocking_list,0,Planned Date:,Fecha planeada:,0
+odt,stock.packing.in.restocking_list,0,Product,Producto,0
+odt,stock.packing.in.restocking_list,0,Quantity,Cantidad,0
+odt,stock.packing.in.restocking_list,0,Reference:,Referencia:,0
+odt,stock.packing.in.restocking_list,0,Restocking List,Lista de renovación de existencias,0
+odt,stock.packing.in.restocking_list,0,Supplier:,Proveedor:,0
+odt,stock.packing.in.restocking_list,0,To Location,A ubicación,0
+odt,stock.packing.in.restocking_list,0,Warehouse:,Almacén:,0
+odt,stock.packing.internal.report,0,/,/,0
+odt,stock.packing.internal.report,0,Code:,Código:,0
+odt,stock.packing.internal.report,0,E-Mail:,Correo electrónico:,0
+odt,stock.packing.internal.report,0,From Location,Desde ubicación,0
+odt,stock.packing.internal.report,0,From Location:,Desde ubicación:,0
+odt,stock.packing.internal.report,0,Internal Shipment,EnvÃo interno,0
+odt,stock.packing.internal.report,0,Phone:,Teléfono:,0
+odt,stock.packing.internal.report,0,Planned Date:,Fecha estimada:,0
+odt,stock.packing.internal.report,0,Product,Producto,0
+odt,stock.packing.internal.report,0,Quantity,Cantidad,0
+odt,stock.packing.internal.report,0,Reference:,Referencia:,0
+odt,stock.packing.internal.report,0,To Location,A ubicación,0
+odt,stock.packing.internal.report,0,To Location:,A ubicación:,0
+odt,stock.packing.out.delivery_note,0,/,/,0
+odt,stock.packing.out.delivery_note,0,Customer Code:,Código de cliente:,0
+odt,stock.packing.out.delivery_note,0,Date:,Fecha:,0
+odt,stock.packing.out.delivery_note,0,Delivery Note,Albarán de envio,0
+odt,stock.packing.out.delivery_note,0,E-Mail:,Correo electrónico:,0
+odt,stock.packing.out.delivery_note,0,Phone:,Teléfono:,0
+odt,stock.packing.out.delivery_note,0,Product,Producto,0
+odt,stock.packing.out.delivery_note,0,Quantity,Cantidad,0
+odt,stock.packing.out.delivery_note,0,Reference:,Referencia:,0
+odt,stock.packing.out.delivery_note,0,Shipment Number:,Número de envÃo:,0
+odt,stock.packing.out.picking_list,0,/,/,0
+odt,stock.packing.out.picking_list,0,Code:,Código:,0
+odt,stock.packing.out.picking_list,0,Customer:,Cliente:,0
+odt,stock.packing.out.picking_list,0,E-Mail:,Correo electrónico:,0
+odt,stock.packing.out.picking_list,0,From Location,Desde ubicación,0
+odt,stock.packing.out.picking_list,0,Phone:,Teléfono:,0
+odt,stock.packing.out.picking_list,0,Picking List,Lista de recogida,1
+odt,stock.packing.out.picking_list,0,Planned Date:,Fecha estimada:,0
+odt,stock.packing.out.picking_list,0,Product,Producto,0
+odt,stock.packing.out.picking_list,0,Quantity,Cantidad,0
+odt,stock.packing.out.picking_list,0,Reference:,Referencia:,0
+odt,stock.packing.out.picking_list,0,To Location,A ubicación,0
+odt,stock.packing.out.picking_list,0,Warehouse:,Almacén:,0
+odt,stock.packing.out.return.restocking_list,0,/,/,0
+odt,stock.packing.out.return.restocking_list,0,Code:,Código:,0
+odt,stock.packing.out.return.restocking_list,0,E-Mail:,Correo electrónico:,0
+odt,stock.packing.out.return.restocking_list,0,From Location,De ubicación,0
+odt,stock.packing.out.return.restocking_list,0,Phone:,Teléfono:,0
+odt,stock.packing.out.return.restocking_list,0,Planned Date:,Fecha estimada:,0
+odt,stock.packing.out.return.restocking_list,0,Product,Producto,0
+odt,stock.packing.out.return.restocking_list,0,Quantity,Cantidad,0
+odt,stock.packing.out.return.restocking_list,0,Reference:,Referencia:,0
+odt,stock.packing.out.return.restocking_list,0,Restocking List,Lista de renovación de existencias,0
+odt,stock.packing.out.return.restocking_list,0,Supplier:,Proveedor:,0
+odt,stock.packing.out.return.restocking_list,0,To Location,A ubicación,0
+odt,stock.packing.out.return.restocking_list,0,Warehouse:,Almacén:,0
+selection,"stock.inventory,state",0,Canceled,Cancelado,0
selection,"stock.inventory,state",0,Done,Hecho,0
-selection,"stock.inventory,state",0,Open,Abrir,0
+selection,"stock.inventory,state",0,Draft,Borrador,0
selection,"stock.location,type",0,Customer,Cliente,0
-selection,"stock.location,type",0,Lost and Found,Perdido y Encontrado,0
+selection,"stock.location,type",0,Lost and Found,Perdido y encontrado,0
selection,"stock.location,type",0,Production,Producción,0
selection,"stock.location,type",0,Storage,Almacén,0
selection,"stock.location,type",0,Supplier,Proveedor,0
-selection,"stock.location,type",0,Warehouse,Depósito,0
+selection,"stock.location,type",0,View,Vista,0
+selection,"stock.location,type",0,Warehouse,Almacén,0
selection,"stock.move,state",0,Assigned,Asignado,0
-selection,"stock.move,state",0,Cancel,Cancelar,0
+selection,"stock.move,state",0,Canceled,Cancelado,0
selection,"stock.move,state",0,Done,Hecho,0
selection,"stock.move,state",0,Draft,Borrador,0
-selection,"stock.move,type",0,Input,Entrada,0
-selection,"stock.move,type",0,Internal,Interna,0
-selection,"stock.move,type",0,Output,Salida,0
-selection,"stock.packing.in,state",0,Cancel,Cancelar,0
+selection,"stock.packing.in.return,state",0,Assigned,Asignado,0
+selection,"stock.packing.in.return,state",0,Canceled,Cancelado,0
+selection,"stock.packing.in.return,state",0,Done,Hecho,0
+selection,"stock.packing.in.return,state",0,Draft,Borrador,0
+selection,"stock.packing.in.return,state",0,Waiting,En espera,0
+selection,"stock.packing.in,state",0,Canceled,Cancelado,0
selection,"stock.packing.in,state",0,Done,Hecho,0
selection,"stock.packing.in,state",0,Draft,Borrador,0
selection,"stock.packing.in,state",0,Received,Recibido,0
selection,"stock.packing.internal,state",0,Assigned,Asignado,0
-selection,"stock.packing.internal,state",0,Cancel,Cancelar,0
+selection,"stock.packing.internal,state",0,Canceled,Cancelado,0
selection,"stock.packing.internal,state",0,Done,Hecho,0
selection,"stock.packing.internal,state",0,Draft,Borrador,0
-selection,"stock.packing.internal,state",0,Waiting,En Espera,0
+selection,"stock.packing.internal,state",0,Waiting,En espera,0
+selection,"stock.packing.out.return,state",0,Canceled,Cancelado,0
+selection,"stock.packing.out.return,state",0,Done,Hecho,0
+selection,"stock.packing.out.return,state",0,Draft,Borrador,0
+selection,"stock.packing.out.return,state",0,Received,Recibido,0
selection,"stock.packing.out,state",0,Assigned,Asignado,0
-selection,"stock.packing.out,state",0,Cancel,Cancelar,0
+selection,"stock.packing.out,state",0,Canceled,Cancelado,0
selection,"stock.packing.out,state",0,Done,Hecho,0
selection,"stock.packing.out,state",0,Draft,Borrador,0
-selection,"stock.packing.out,state",0,Packed,Empacado,0
-selection,"stock.packing.out,state",0,Waiting,En Espera,0
+selection,"stock.packing.out,state",0,Packed,Empaquetado,0
+selection,"stock.packing.out,state",0,Waiting,En espera,0
+view,party.party,0,Stock,Existencias,0
view,party.party,0,_Stock,_Existencias,0
-view,stock.product_stock_date.init,0,Product Quantity.,Cantidad de Producto.,0
-view,stock.inventory,0,All generated moves will be cancelled!,Se cancelarán todos los movimientos generados!,0
+view,product.product,0,Products,Productos,0
+view,stock.inventory,0,Add an inventory line for each missing products,Añadir una lÃnea de inventario por cada producto que falta,0
+view,stock.inventory,0,All generated moves will be cancelled!,Se cancelarán todos los movimientos generados,0
view,stock.inventory,0,Cancel,Cancelar,0
-view,stock.inventory,0,Complete Inventory,Inventario Completo,0
+view,stock.inventory,0,Complete Inventory,Inventario completo,0
view,stock.inventory,0,Confirm,Confirmar,0
view,stock.inventory,0,Inventories,Inventarios,0
view,stock.inventory,0,Inventory,Inventario,0
-view,stock.inventory,0,Re-Open,Re-abrir,0
-view,stock.inventory.line,0,Inventory Line,LÃnea de Inventario,0
-view,stock.inventory.line,0,Inventory Lines,LÃneas de Inventario,0
-view,stock.location,0,Location,Lugar,0
-view,stock.location,0,Locations,Lugares,0
-view,stock.location,0,Product Stock,Inventario de Producto,0
-view,stock.location_stock_date.init,0,Product Quantity.,Cantidad de Producto.,0
+view,stock.inventory,0,Re-Open,Reabrir,0
+view,stock.inventory.complete.init,0,Categories,CategorÃas,0
+view,stock.inventory.complete.init,0,Complete Inventory,Inventario completo,0
+view,stock.inventory.complete.init,0,Products,Productos,0
+view,stock.inventory.line,0,Inventory Line,LÃnea de inventario,0
+view,stock.inventory.line,0,Inventory Lines,LÃneas de inventario,0
+view,stock.location,0,Location,Ubicación,0
+view,stock.location,0,Locations,Ubicaciones,0
+view,stock.location,0,Product Stock,Existencias del producto,0
+view,stock.location_stock_date.init,0,Product Quantity.,Cantidad de producto.,0
view,stock.move,0,Cancel,Cancelar,0
view,stock.move,0,Move,Movimiento,0
view,stock.move,0,Moves,Movimientos,0
-view,stock.move,0,Set Done,Marcar como Hecho,0
-view,stock.move,0,Set Draft,Marcar como Borrador,0
+view,stock.move,0,Set Done,Marcar como hecho,0
+view,stock.move,0,Set Draft,Marcar como borrador,0
view,stock.packing.in,0,Cancel,Cancelar,0
view,stock.packing.in,0,Done,Hecho,0
view,stock.packing.in,0,Draft,Borrador,0
-view,stock.packing.in,0,Incoming Moves,Movimientos de Entrada,0
-view,stock.packing.in,0,Inventory Moves,Movimientos de Inventario,0
+view,stock.packing.in,0,Incoming Moves,Movimientos de entrada,0
+view,stock.packing.in,0,Inventory Moves,Movimientos de inventario,0
view,stock.packing.in,0,Moves,Movimientos,0
view,stock.packing.in,0,Received,Recibido,0
-view,stock.packing.in,0,Reset to Draft,Revertir a Borrador,0
-view,stock.packing.in,0,Supplier Packing,Empaque del Proveedor,0
-view,stock.packing.in,0,Supplier Packings,Empaques del Proveedor,0
+view,stock.packing.in,0,Reset to Draft,Restablecer a borrador,0
+view,stock.packing.in,0,Supplier Packing,Empaquetado del proveedor,0
+view,stock.packing.in,0,Supplier Packings,Empaquetados del proveedor,0
+view,stock.packing.in,0,Supplier Shipment,EnvÃo de proveedor,0
+view,stock.packing.in,0,Supplier Shipments,EnvÃos de proveedor,0
+view,stock.packing.in.return,0,Assign,Asignar,0
+view,stock.packing.in.return,0,Cancel,Cancelar,0
+view,stock.packing.in.return,0,Done,Hecho,0
+view,stock.packing.in.return,0,Draft,Borrador,0
+view,stock.packing.in.return,0,Reset to Draft,Restablecer a borrador,0
+view,stock.packing.in.return,0,Supplier Return Shipment,Envio de devolución a proveedor,0
+view,stock.packing.in.return,0,Supplier Return Shipments,Envios de devolución a proveedor,0
+view,stock.packing.in.return,0,Waiting,En espera,0
+view,stock.packing.in.return.assign.ask_force,0,Moves,Movimientos,0
+view,stock.packing.in.return.assign.ask_force,0,Unable to Assign,No es posible asignar,0
+view,stock.packing.in.return.assign.ask_force,0,Unable to assign those products:,No es posible asignar esos productos:,0
view,stock.packing.internal,0,Assign,Asignar,0
view,stock.packing.internal,0,Cancel,Cancelar,0
view,stock.packing.internal,0,Done,Hecho,0
view,stock.packing.internal,0,Draft,Borrador,0
-view,stock.packing.internal,0,Force Assign,Forzar Asignación,0
-view,stock.packing.internal,0,Internal Packing,Empaque Interno,0
-view,stock.packing.internal,0,Internal Packings,Empaques Internos,0
-view,stock.packing.internal,0,Reset to Draft,Revertir a Borrador,0
-view,stock.packing.internal,0,Set Done,Marcar como Hecho,0
-view,stock.packing.internal,0,Set Waiting,Colocar en Espera,0
+view,stock.packing.internal,0,Force Assign,Forzar asignación,0
+view,stock.packing.internal,0,Internal Packing,Empaquetado interno,0
+view,stock.packing.internal,0,Internal Packings,Empaquetados internos,0
+view,stock.packing.internal,0,Internal Shipment,EnvÃo interno,0
+view,stock.packing.internal,0,Internal Shipments,EnvÃos internos,0
+view,stock.packing.internal,0,Reset to Draft,Restablecer a borrador,0
+view,stock.packing.internal,0,Set Done,Marcar como hecho,0
+view,stock.packing.internal,0,Set Waiting,Colocar en espera,0
view,stock.packing.internal,0,Waiting,En espera,0
+view,stock.packing.internal.assign.ask_force,0,Moves,Movimientos,0
+view,stock.packing.internal.assign.ask_force,0,Unable to Assign,No es posible asignar,0
+view,stock.packing.internal.assign.ask_force,0,Unable to assign those products:,No es posible asignar esos productos:,0
view,stock.packing.out,0,Assign,Asignar,0
view,stock.packing.out,0,Cancel,Cancelar,0
-view,stock.packing.out,0,Customer Packing,Empaque de Cliente,0
-view,stock.packing.out,0,Customer Packings,Empaques de Cliente,0
+view,stock.packing.out,0,Customer Packing,Empaquetado de cliente,0
+view,stock.packing.out,0,Customer Packings,Empaquetados de cliente,0
+view,stock.packing.out,0,Customer Shipment,EnvÃo a cliente,0
+view,stock.packing.out,0,Customer Shipments,EnvÃos a clientes,0
view,stock.packing.out,0,Done,Hecho,0
view,stock.packing.out,0,Draft,Borrador,0
-view,stock.packing.out,0,Force Assign,Forzar Asignación,0
-view,stock.packing.out,0,Inventory Moves,Movimientos de Inventario,0
-view,stock.packing.out,0,Make packing,Hacer Empaque,0
-view,stock.packing.out,0,Outgoing Moves,Movimientos de Salida,0
-view,stock.packing.out,0,Reset to Draft,Revertir a Borrador,0
-view,stock.packing.out,0,Set Done,Marcar como Hecho,0
-view,stock.packing.out,0,Set Waiting,Colocar en Espera,0
-view,stock.packing.out,0,Unpack,Sin empaque,0
+view,stock.packing.out,0,Force Assign,Forzar asignación,0
+view,stock.packing.out,0,Inventory Moves,Movimientos de inventario,0
+view,stock.packing.out,0,Make packing,Hacer empaquetado,0
+view,stock.packing.out,0,Outgoing Moves,Movimientos de salida,0
+view,stock.packing.out,0,Reset to Draft,Restablecer a borrador,0
+view,stock.packing.out,0,Set Done,Marcar como hecho,0
+view,stock.packing.out,0,Set Waiting,Colocar en espera,0
+view,stock.packing.out,0,Unpack,Desempaquetar,0
view,stock.packing.out,0,Waiting,En espera,0
+view,stock.packing.out.assign.ask_force,0,Inventory Moves,Movimientos de inventario,0
+view,stock.packing.out.assign.ask_force,0,Unable to Assign,No es posible asignar,0
+view,stock.packing.out.assign.ask_force,0,Unable to assign those products:,No es posible asignar esos productos:,0
+view,stock.packing.out.return,0,Cancel,Cancelar,0
+view,stock.packing.out.return,0,Customer Return Shipment,Envio de devolución de cliente,0
+view,stock.packing.out.return,0,Customer Return Shipments,Envios de devolución de cliente,0
+view,stock.packing.out.return,0,Done,Hecho,0
+view,stock.packing.out.return,0,Incoming Moves,Movimientos de entrada,0
+view,stock.packing.out.return,0,Inventory Moves,Movimientos de inventario,0
+view,stock.packing.out.return,0,Moves,Movimientos,0
+view,stock.packing.out.return,0,Received,Recibido,0
+view,stock.packing.out.return,0,Reset to Draft,Restablecer a borrador,0
+view,stock.product_stock_date.init,0,Product Quantity.,Cantidad de producto.,0
+wizard_button,"stock.inventory.complete,init,complete",0,Complete,Completo,0
+wizard_button,"stock.inventory.complete,init,end",0,Cancel,Cancelar,0
wizard_button,"stock.location.open,init,end",0,Cancel,Cancelar,0
wizard_button,"stock.location.open,init,open",0,Open,Abrir,0
+wizard_button,"stock.packing.in.return.assign,ask_force,end",0,Ok,Aceptar,0
+wizard_button,"stock.packing.in.return.assign,ask_force,force",0,Force Assign,Forzar asignación,0
+wizard_button,"stock.packing.internal.assign,ask_force,end",0,Ok,Aceptar,0
+wizard_button,"stock.packing.internal.assign,ask_force,force",0,Force Assign,Forzar asignación,0
+wizard_button,"stock.packing.out.assign,ask_force,end",0,Ok,Aceptar,0
+wizard_button,"stock.packing.out.assign,ask_force,force",0,Force Assign,Forzar asignación,0
wizard_button,"stock.product.open,init,end",0,Cancel,Cancelar,0
wizard_button,"stock.product.open,init,open",0,Open,Abrir,0
diff --git a/fr_FR.csv b/fr_FR.csv
index 45c07a6..9422a15 100644
--- a/fr_FR.csv
+++ b/fr_FR.csv
@@ -1,19 +1,22 @@
type,name,res_id,src,value,fuzzy
error,stock.inventory.line,0,Line quantity must be positive!,Les quantités sur les lignes doivent être positives!,0
error,stock.inventory.line,0,Product must be unique by inventory!,Chaque produit ne peut apparaître qu'une seule fois par inventaire,0
-error,stock.location,0,You can not create recursive locations!,Vous ne pouvez pas créer des emplacements récursifs,0
-error,stock.move,0,Move can not be in both Supplier and Customer Packing,Un mouvement ne peut pas être en même temps dans un packing founisseur et un packing client.,0
+error,stock.location,0,A location with existing moves cannot be changed to a type that does not support moves.,Un emplacement avec des mouvements ne peut pas être changé en un type qui ne supporte pas les mouvements.,0
+error,stock.location,0,You can not create recursive locations!,Vous ne pouvez pas créer des emplacements récursifs !,0
+error,stock.move,0,Move can be on only one Shipment,Un mouvement ne peut être que sur une seule expédition,0
error,stock.move,0,Move quantity must be positive,La quantité sur le mouvement doit être positive.,0
-error,stock.move,0,Source and destination location must be different,Les emplacements d'origine et de destination doivent être distinctes,0
+error,stock.move,0,Source and destination location must be different,Les emplacements d'origine et de destination doivent être distincts,0
error,stock.move,0,You can not set state to assigned!,Vous ne pouvez pas mettre l'état à assigné !,0
error,stock.move,0,You can not set state to done!,Vous ne pouvez pas mettre l'état à fait !,0
-error,stock.move,0,You can not set state to draft!,Vous ne pouvez pas mettre l'état à brouillon!,0
-error,stock.move,0,You can not use service product for a move!,Vous ne pouvez pas utiliser un produit de type service sur un mouvement !,0
-error,stock.move,0,You can only delete draft or cancelled moves!,Vous pouvez supprimer que des mouvement qui sont annulé ou dans l'état brouillon !,0
-error,stock.packing.in,0,Incoming Moves must have input location as destination location!,Les mouvement entrants doivent avoir un emplacement de type réception comme destination,0
-error,stock.packing.in,0,Inventory Moves must have input location as source location!,Les mouvement internes doivent avoir un emplacement de type réception comme origine,0
-error,stock.packing.in,0,Inventory Moves must have output location as destination location!,Les mouvement internes doivent avoir un emplacement de type expédition comme destination,0
-error,stock.packing.in,0,Outgoing Moves must have output location as source location!,Les mouvement sortants doivent avoir un emplacement de type expédition comme origine,0
+error,stock.move,0,You can not set state to draft!,Vous ne pouvez pas mettre l'état à brouillon !,0
+error,stock.move,0,You can not use service products for a move!,Vous ne pouvez pas utiliser un produit de type service sur un mouvement !,0
+error,stock.move,0,You can only delete draft or cancelled moves!,Vous pouvez supprimer que des mouvements qui sont annulés ou a l'état de brouillon !,0
+error,stock.packing.in,0,Incoming Moves must have the warehouse input location as destination location!,Les mouvements d'entrée doivent avoir l'emplacement d'entrée de l'entrepôt comme destination !,0
+error,stock.packing.in,0,Inventory Moves must have the warehouse input location as source location!,Les mouvements d'inventaire doivent avoir l'emplacement d'entrée de l'entrepôt comme source !,0
+error,stock.packing.out.return,0,Incoming Moves must have the warehouse input location as destination location!,Les mouvements d'entrée doivent avoir l'emplacement d'entrée de l'entrepôt comme destination !,0
+error,stock.packing.out.return,0,Inventory Moves must have the warehouse input location as source location!,Les mouvements d'inventaire doivent avoir l'emplacement d'entrée de l'entrepôt comme source!,0
+error,stock.packing.out.return.create,0,The packing with code %s is not yet sent.,L'emballage avec le code %s n'est pas encore envoyé.,0
+error,stock.packing.out.return.create,0,You can not create return packing,Vous ne pouvez pas créer d'expédition retour,0
field,"party.address,delivery",0,Delivery,Livraison,0
field,"party.party,customer_location",0,Customer Location,Emplacement client,0
field,"party.party,supplier_location",0,Supplier Location,Emplacement fournisseur,0
@@ -21,22 +24,26 @@ field,"product.product,forecast_quantity",0,Forecast Quantity,Quantités prévis
field,"product.product,quantity",0,Quantity,Quantité,0
field,"product.template,forecast_quantity",0,Forecast Quantity,Quantité prévue,0
field,"product.template,quantity",0,Quantity,Quantité,0
-field,"stock.inventory,company",0,Company,Companie,0
+field,"stock.inventory,company",0,Company,Société,0
+field,"stock.inventory.complete.init,categories",0,Categories,Catégories,0
+field,"stock.inventory.complete.init,products",0,Products,Produits,0
field,"stock.inventory,date",0,Date,Date,0
field,"stock.inventory.line,expected_quantity",0,Expected Quantity,Quantité attendue,0
field,"stock.inventory.line,inventory",0,Inventory,Inventaire,0
field,"stock.inventory.line,move",0,Move,Mouvement,0
field,"stock.inventory.line,product",0,Product,Produit,0
field,"stock.inventory.line,quantity",0,Quantity,Quantité,0
+field,"stock.inventory.line,rec_name",0,Name,Nom,0
field,"stock.inventory,lines",0,Lines,Lignes,0
field,"stock.inventory.line,unit_digits",0,Unit Digits,Décimales de l'unité,0
field,"stock.inventory.line,uom",0,UOM,UDM,0
field,"stock.inventory,location",0,Location,Emplacement,0
field,"stock.inventory,lost_found",0,Lost and Found,Pertes et surplus,0
+field,"stock.inventory,rec_name",0,Name,Nom,0
field,"stock.inventory,state",0,State,Ãtat,0
field,"stock.location,active",0,Active,Actif,0
field,"stock.location,address",0,Address,Adresse,0
-field,"stock.location,childs",0,Childs,Enfants,0
+field,"stock.location,childs",0,Children,Enfants,0
field,"stock.location,code",0,Code,Code,0
field,"stock.location,forecast_quantity",0,Forecast Quantity,Quantité prévisionnelle,0
field,"stock.location,input_location",0,Input,Réception,0
@@ -45,25 +52,30 @@ field,"stock.location,name",0,Name,Nom,0
field,"stock.location,output_location",0,Output,Expédition,0
field,"stock.location,parent",0,Parent,Parent,0
field,"stock.location,quantity",0,Quantity,Quantité,0
+field,"stock.location,rec_name",0,Name,Nom,0
field,"stock.location,right",0,Right,Droit,0
field,"stock.location_stock_date.init,forecast_date",0,At Date,Ã la date,0
field,"stock.location,storage_location",0,Storage,Magasin,0
field,"stock.location,type",0,Location type,Type d'emplacement,0
-field,"stock.move,company",0,Company,Companie,0
+field,"stock.move,company",0,Company,Société,0
+field,"stock.move,cost_price",0,Cost Price,Prix de revient,0
field,"stock.move,currency",0,Currency,Devise,0
field,"stock.move,effective_date",0,Effective Date,Date effective,0
-field,"stock.move,from_location",0,From Location,Origine,0
-field,"stock.move,packing_in",0,Supplier Packing,Colisage fournisseur,0
-field,"stock.move,packing_internal",0,Internal Packing,Colisage interne,0
-field,"stock.move,packing_out",0,Customer Packing,Colisage client,0
+field,"stock.move,from_location",0,From Location,Emplacement d'origine,0
+field,"stock.move,packing_in",0,Supplier Shipment,Expédition fournisseur,0
+field,"stock.move,packing_in_return",0,Supplier Return Shipment,Expédition de retour fournisseur,0
+field,"stock.move,packing_internal",0,Internal Shipment,Expédition interne,0
+field,"stock.move,packing_out",0,Customer Shipment,Expédition client,0
+field,"stock.move,packing_out_return",0,Customer Return Shipment,Retour d'expédition client,0
field,"stock.move,planned_date",0,Planned Date,Date planifiée,0
field,"stock.move,product",0,Product,Produit,0
field,"stock.move,quantity",0,Quantity,Quantité,0
+field,"stock.move,rec_name",0,Name,Nom,0
field,"stock.move,state",0,State,Etat,0
-field,"stock.move,to_location",0,To Location,Destination,0
-field,"stock.move,type",0,Type,Type,0
+field,"stock.move,to_location",0,To Location,Emplacement de destination,0
field,"stock.move,unit_digits",0,Unit Digits,Décimales de l'unité,0
field,"stock.move,unit_price",0,Unit Price,Prix unitaire,0
+field,"stock.move,unit_price_required",0,Unit Price Required,Prix unitaire requis,0
field,"stock.move,uom",0,Uom,UDM,0
field,"stock.packing.in,code",0,Code,Code,0
field,"stock.packing.in,contact_address",0,Contact Address,Adresse de contact,0
@@ -72,33 +84,59 @@ field,"stock.packing.in,incoming_moves",0,Incoming Moves,Mouvements entrants,0
field,"stock.packing.in,inventory_moves",0,Inventory Moves,Mouvement internes,0
field,"stock.packing.in,moves",0,Moves,Mouvements,0
field,"stock.packing.in,planned_date",0,Planned Date,Date planifiée,0
+field,"stock.packing.in,rec_name",0,Name,Nom,0
field,"stock.packing.in,reference",0,Reference,Référence,0
+field,"stock.packing.in.return.assign.ask_force,moves",0,Moves,Mouvements,0
+field,"stock.packing.in.return,code",0,Code,Code,0
+field,"stock.packing.in.return,effective_date",0,Effective Date,Date effective,0
+field,"stock.packing.in.return,from_location",0,From Location,Emplacement d'origine,0
+field,"stock.packing.in.return,moves",0,Moves,Mouvements,0
+field,"stock.packing.in.return,planned_date",0,Planned Date,Date planifiée,0
+field,"stock.packing.in.return,rec_name",0,Name,Nom,0
+field,"stock.packing.in.return,reference",0,Reference,Référence,0
+field,"stock.packing.in.return,state",0,State,Ãtat,0
+field,"stock.packing.in.return,to_location",0,To Location,Emplacement de destination,0
field,"stock.packing.in,state",0,State,Ãtat,0
field,"stock.packing.in,supplier",0,Supplier,Fournisseur,0
+field,"stock.packing.internal.assign.ask_force,moves",0,Moves,Mouvements,0
field,"stock.packing.internal,code",0,Code,Code,0
field,"stock.packing.internal,effective_date",0,Effective Date,Date effective,0
-field,"stock.packing.internal,from_location",0,From Location,Origine,0
+field,"stock.packing.internal,from_location",0,From Location,Emplacement d'origine,0
field,"stock.packing.internal,moves",0,Moves,Mouvements,0
field,"stock.packing.internal,planned_date",0,Planned Date,Date planifiée,0
+field,"stock.packing.internal,rec_name",0,Name,Nom,0
field,"stock.packing.internal,reference",0,Reference,Référence,0
field,"stock.packing.internal,state",0,State,Ãtat,0
-field,"stock.packing.internal,to_location",0,To Location,Destination,0
+field,"stock.packing.internal,to_location",0,To Location,Emplacement de destination,0
field,"stock.packing.in,warehouse",0,Warehouse,Entrepôt,0
+field,"stock.packing.out.assign.ask_force,inventory_moves",0,Inventory Moves,Mouvements internes,0
field,"stock.packing.out,code",0,Code,Code,0
field,"stock.packing.out,customer",0,Customer,Client,0
-field,"stock.packing.out,customer_location",0,Customer Location,Emplacement client,0
field,"stock.packing.out,delivery_address",0,Delivery Address,Adresse de livraison,0
field,"stock.packing.out,effective_date",0,Effective Date,Date effective,0
field,"stock.packing.out,inventory_moves",0,Inventory Moves,Mouvements internes,0
field,"stock.packing.out,moves",0,Moves,Mouvements,0
field,"stock.packing.out,outgoing_moves",0,Outgoing Moves,Mouvements de sortie,0
field,"stock.packing.out,planned_date",0,Planned Date,Date planifiée,0
+field,"stock.packing.out,rec_name",0,Name,Nom,0
field,"stock.packing.out,reference",0,Reference,Référence,0
+field,"stock.packing.out.return,code",0,Code,Code,0
+field,"stock.packing.out.return,customer",0,Customer,Client,0
+field,"stock.packing.out.return,delivery_address",0,Delivery Address,Adresse de livraison,0
+field,"stock.packing.out.return,effective_date",0,Effective Date,Date effective,0
+field,"stock.packing.out.return,incoming_moves",0,Incoming Moves,Mouvements entrants,0
+field,"stock.packing.out.return,inventory_moves",0,Inventory Moves,Mouvements internes,0
+field,"stock.packing.out.return,moves",0,Moves,Mouvements,0
+field,"stock.packing.out.return,planned_date",0,Planned Date,Date planifiée,0
+field,"stock.packing.out.return,rec_name",0,Name,Nom,0
+field,"stock.packing.out.return,reference",0,Reference,Référence,0
+field,"stock.packing.out.return,state",0,State,Ãtat,0
+field,"stock.packing.out.return,warehouse",0,Warehouse,Entrepôt,0
field,"stock.packing.out,state",0,State,Ãtat,0
field,"stock.packing.out,warehouse",0,Warehouse,Entrepôt,0
field,"stock.product_stock_date.init,forecast_date",0,At Date,Ã la date,0
-help,"party.party,customer_location",0,The default destination location when sending products to the party.,L'emplacement de destination par défaut quand des produits sont envoyé vers ce tiers.,0
-help,"party.party,supplier_location",0,The default source location when receiving products from the party.,L'emplacement d'origine par défaut quand des produits sont reçu depuis ce tiers.,0
+help,"party.party,customer_location",0,The default destination location when sending products to the party.,L'emplacement de destination par défaut quand des produits sont envoyés vers ce tiers.,0
+help,"party.party,supplier_location",0,The default source location when receiving products from the party.,L'emplacement d'origine par défaut quand des produits sont reçus depuis ce tiers.,0
help,"stock.location_stock_date.init,forecast_date",0,"Allow to compute expected stock quantities for this date.
* An empty value is an infinite date in the future.
* A date in the past will provide historical values.","Permet de calculer les quantités en stock attendues pour cette date.
@@ -109,44 +147,66 @@ help,"stock.product_stock_date.init,forecast_date",0,"Allow to compute expected
* A date in the past will provide historical values.","Permet de calculer les quantités en stock attendues pour cette date.
* Une valeur vide correspond à une date infinie dans le futur.
* Une date dans le passé retournera des données historiques.",0
-model,"ir.action,name",act_packing_out_form_assigned,Assigned Customer Packings,Colisages clients assignés,0
-model,"ir.action,name",act_packing_internal_assigned_form,Assigned Internal Packings,Colisages internes assignés,0
+model,"ir.action,name",act_packing_out_form_assigned,Assigned Customer Shipments,Expéditions client assignées,0
+model,"ir.action,name",act_packing_internal_assigned_form,Assigned Internal Shipments,Expédition internes assignées,0
+model,"ir.action,name",wizard_packing_in_return_assign,Assign Purchase Return Shipment,Assigner le retour d'expédition fournisseur,0
+model,"ir.action,name",wizard_packing_internal_assign,Assign Shipment Internal,Assigner l'expédition interne,0
+model,"ir.action,name",wizard_packing_out_assign,Assign Shipment Out,Assigner l'expédition de sortie,0
model,"ir.action,name",wizard_complete_inventory,Complete Inventory,Compléter l'inventaire,0
-model,"ir.action,name",report_packing_out,Customer Packing,Colisage client,0
-model,"ir.action,name",act_packing_out_form,Customer Packings,Colisages clients,0
-model,"ir.action,name",act_packing_out_form_ready,Customer Packings Ready for Shipping,Colisages clients prêt à livrer,0
-model,"ir.action,name",act_packing_out_form_waiting,Customer Packings Waiting Assignation,Colisages clients en attente d'assignation,0
-model,"ir.action,name",act_packing_internal_draft_form,Draft Internal Packings,Colisages internes brouillon,0
+model,"ir.action,name",create_packing_out_return,Create Return Shipment,Créer l'expédition de retour,0
+model,"ir.action,name",act_packing_out_return_form,Customer Return Shipments,Retour d'expéditions client,0
+model,"ir.action,name",act_packing_out_form,Customer Shipments,Expéditions client,0
+model,"ir.action,name",act_packing_out_form2,Customer Shipments,Expéditions client,0
+model,"ir.action,name",act_packing_out_form_ready,Customer Shipments Ready for Shipping,Expéditions client prêtes à livrer,0
+model,"ir.action,name",act_packing_out_form_waiting,Customer Shipments Waiting Assignation,Expéditions client en attente d'assignation,0
+model,"ir.action,name",report_packing_out_delivery_note,Delivery Note,Bon de livraison,0
+model,"ir.action,name",act_packing_internal_draft_form,Draft Internal Shipments,Expéditions internes brouillon,0
model,"ir.action,name",act_location_form,Edit Locations,Ãditer les emplacements,0
-model,"ir.action,name",act_packing_internal_form,Internal Packings,Colisage interne,0
-model,"ir.action,name",act_packing_internal_waiting_form,Internal Packings Waiting Assignation,Colisages internes en attente d'assignation,0
+model,"ir.action,name",report_packing_internal,Internal Shipment,Expédition interne,0
+model,"ir.action,name",act_packing_internal_form,Internal Shipments,Expédition interne,0
+model,"ir.action,name",act_packing_internal_waiting_form,Internal Shipments Waiting Assignation,Expéditions internes en attente d'assignation,0
model,"ir.action,name",act_inventory_form,Inventories,Inventaires,0
model,"ir.action,name",act_location_tree,Locations,Emplacements,0
model,"ir.action,name",act_move_form,Moves,Mouvements,0
model,"ir.action,name",act_move_form_supp,Moves from Suppliers,Mouvements fournisseurs,0
model,"ir.action,name",act_move_form_supp_proceed,Moves from Suppliers Waiting Arrival,Mouvement fournisseur en attente de réception,0
model,"ir.action,name",act_move_form_cust,Moves to Customers,Mouvements clients,0
-model,"ir.action,name",act_packing_in_form2,New Supplier Packing,Nouveau colisage fournisseur,0
+model,"ir.action,name",act_packing_out_return_form2,New Customer Return Shipment,Nouveau retour d'expédition client,0
+model,"ir.action,name",act_packing_internal_new_form,New Internal Shipment,Nouvelle expédition Interne,0
+model,"ir.action,name",act_packing_in_return_new_form,New Supplier Return Shipment,Nouveau retour d'expédition fournisseur,0
+model,"ir.action,name",act_packing_in_form2,New Supplier Shipment,Nouvelle expédition fournisseur,0
+model,"ir.action,name",report_packing_out_picking_list,Picking List,Liste de prélèvement,0
model,"ir.action,name",wizard_location_open,Product by Location,Produits par emplacement,0
model,"ir.action,name",wizard_product_open,Product Quantities,Quantités de produit,0
model,"ir.action,name",act_product_by_location,Products by Locations,Produits par emplacements,0
model,"ir.action,name",act_location_quantity_tree,Product Stock,Quantités en stock,0
-model,"ir.action,name",act_packing_in_form_received,Received Supplier packings,Colisages fournisseurs reçus,0
-model,"ir.action,name",act_packing_in_form,Supplier Packings,Colisages fournisseurs,0
-model,"ir.sequence,name",sequence_packing_out,Customer Packing,Colisage client,0
-model,"ir.sequence,name",sequence_packing_in,Supplier Packing,Colisage fournisseur,0
-model,"ir.sequence.type,name",sequence_type_packing_out,Customer Packing,Colisage client,0
-model,"ir.sequence.type,name",sequence_type_packing_in,Supplier Packing,Colisage fournisseur,0
-model,"ir.ui.menu,name",menu_packing_out_assigned,Assigned Customer Packings,Colisages clients assignés,0
-model,"ir.ui.menu,name",menu_packing_internal_assigned_form,Assigned Internal Packings,Colisages internes assignés,0
+model,"ir.action,name",act_packing_in_form_received,Received Supplier packings,Expéditions fournisseur reçues,0
+model,"ir.action,name",report_packing_in_restocking_list,Restocking List,Liste de restockage,0
+model,"ir.action,name",report_packing_out_return_restocking_list,Restocking List,Liste de restockage,0
+model,"ir.action,name",act_packing_in_return_form,Supplier Return Shipments,Retour d'expéditions fournisseur,0
+model,"ir.action,name",act_packing_in_form,Supplier Shipments,Expéditions fournisseur,0
+model,"ir.action,name",act_packing_out_form3,Supplier Shipments,Expéditions fournisseur,0
+model,"ir.sequence,name",sequence_packing_out_return,Customer Return Shipment,Retour d'expédition client,0
+model,"ir.sequence,name",sequence_packing_out,Customer Shipment,Expédition client,0
+model,"ir.sequence,name",sequence_packing_internal,Internal Shipment,Expédition Interne,0
+model,"ir.sequence,name",sequence_packing_in_return,Supplier Return Shipment,Retour d'expédition fournisseur,0
+model,"ir.sequence,name",sequence_packing_in,Supplier Shipment,Expédition fournisseur,0
+model,"ir.sequence.type,name",sequence_type_packing_out_return,Customer Return Shipment,Retour d'expédition client,0
+model,"ir.sequence.type,name",sequence_type_packing_out,Customer Shipment,Expédition client,0
+model,"ir.sequence.type,name",sequence_type_packing_internal,Internal Shipment,Expédition interne,0
+model,"ir.sequence.type,name",sequence_type_packing_in_return,Supplier Return Shipment,Retour d'expédition fournisseur,0
+model,"ir.sequence.type,name",sequence_type_packing_in,Supplier Shipment,Expédition fournisseur,0
+model,"ir.ui.menu,name",menu_packing_out_assigned,Assigned Customer Shipments,Expéditions client assignées,0
+model,"ir.ui.menu,name",menu_packing_internal_assigned_form,Assigned Internal Shipments,Expéditions internes assignées,0
model,"ir.ui.menu,name",menu_configuration,Configuration,Configuration,0
-model,"ir.ui.menu,name",menu_packing_out_form,Customer Packings,Colisages clients,0
-model,"ir.ui.menu,name",menu_packing_out_ready,Customer Packings Ready for Shipping,Colisages clients prêts pour la livraison,0
-model,"ir.ui.menu,name",menu_packing_out_waiting,Customer Packings Waiting Assignation,Colisages clients en attente d'assignation,0
-model,"ir.ui.menu,name",menu_packing_internal_draft_form,Draft Internal Packings,Colisages internes brouillons,0
+model,"ir.ui.menu,name",menu_packing_out_return_form,Customer Return Shipments,Retour d'expédition client,0
+model,"ir.ui.menu,name",menu_packing_out_form,Customer Shipments,Expéditions client,0
+model,"ir.ui.menu,name",menu_packing_out_ready,Customer Shipments Ready for Shipping,Expéditions client prêtes pour la livraison,0
+model,"ir.ui.menu,name",menu_packing_out_waiting,Customer Shipments Waiting Assignation,Expéditions client en attente d'assignation,0
+model,"ir.ui.menu,name",menu_packing_internal_draft_form,Draft Internal Shipments,Expéditions internes brouillons,0
model,"ir.ui.menu,name",menu_location_form,Edit Locations,Ãditer les emplacements,0
-model,"ir.ui.menu,name",menu_packing_internal_form,Internal Packings,Colisages internes,0
-model,"ir.ui.menu,name",menu_packing_internal_waiting_form,Internal Packings Waiting Assignation,Colisages internes en attente d'assignation,0
+model,"ir.ui.menu,name",menu_packing_internal_form,Internal Shipments,Expéditions internes,0
+model,"ir.ui.menu,name",menu_packing_internal_waiting_form,Internal Shipments Waiting Assignation,Expéditions internes en attente d'assignation,0
model,"ir.ui.menu,name",menu_inventory_form,Inventories,Inventaires,0
model,"ir.ui.menu,name",menu_stock,Inventory Management,Gestion des stocks,0
model,"ir.ui.menu,name",menu_location_tree,Locations,Emplacements,0
@@ -154,41 +214,129 @@ model,"ir.ui.menu,name",menu_move_form,Moves,Mouvements,0
model,"ir.ui.menu,name",menu_move_form_supp,Moves from Suppliers,Mouvements fournisseurs,0
model,"ir.ui.menu,name",menu_move_form_supp_proceed,Moves from Suppliers Waiting Arrival,Mouvements fournisseur en attente de réception,0
model,"ir.ui.menu,name",menu_move_form_cust,Moves to Customers,Mouvements clients,0
-model,"ir.ui.menu,name",menu_packing_in_form2,New Supplier Packing,Nouveau colisage fournisseur,0
-model,"ir.ui.menu,name",menu_packing_in_received,Received Supplier packings,Colisages fournisseur reçus,0
-model,"ir.ui.menu,name",menu_packing_in_form,Supplier Packings,Colisages fournisseurs,0
+model,"ir.ui.menu,name",menu_packing_out_return_form2,New Customer Return Shipment,Nouveau retour d'expédition client,0
+model,"ir.ui.menu,name",menu_packing_internal_new_form,New Internal Shipment,Nouvelle expédition Interne,0
+model,"ir.ui.menu,name",menu_packing_in_return_new_form,New Supplier Return Shipment,Nouveau retour d'expédition fournisseur,0
+model,"ir.ui.menu,name",menu_packing_in_form2,New Supplier Shipment,Nouvelle expédition fournisseur,0
+model,"ir.ui.menu,name",menu_packing_in_received,Received Supplier packings,Expéditions fournisseur reçues,0
+model,"ir.ui.menu,name",menu_reporting,Reporting,Rapports,0
+model,"ir.ui.menu,name",menu_packing_in_return_form,Supplier Return Shipments,Retour d'expédition fournisseur,0
+model,"ir.ui.menu,name",menu_packing_in_form,Supplier Shipments,Expéditions fournisseur,0
model,"res.group,name",group_stock,Stock,Stock,0
model,"res.group,name",group_stock_admin,Stock Administration,Administration des stocks,0
+model,"stock.inventory.complete.init,name",0,Complete Inventory Init,Compléter l'inventaire - Init,0
+model,"stock.inventory.line,name",0,Stock Inventory Line,Ligne d'inventaire de stock,0
+model,"stock.inventory,name",0,Stock Inventory,Inventaire du stock,0
model,"stock.location,name",location_customer,Customer,Client,0
model,"stock.location,name",location_input,Input Zone,Zone d'entrée,0
model,"stock.location,name",location_lost_found,Lost and Found,Pertes et surplus,0
model,"stock.location,name",location_output,Output Zone,Zone de sortie,0
+model,"stock.location,name",0,Stock Location,Lieu de Stockage,0
model,"stock.location,name",location_storage,Storage Zone,Zone rangement,0
model,"stock.location,name",location_supplier,Supplier,Fournisseur,0
model,"stock.location,name",location_warehouse,Warehouse,Entrepôt,0
+model,"stock.location_stock_date.init,name",0,Compute stock quantities,Quantité de stock calculées,0
+model,"stock.move,name",0,Stock Move,Mouvement de stock,0
+model,"stock.packing.in,name",0,Supplier Shipment,Expédition fournisseur,0
+model,"stock.packing.in.return.assign.ask_force,name",0,Assign Supplier Return Shipment Ask Force,Assigner le retour d'expédition fournisseur - Demande forcée,0
+model,"stock.packing.in.return,name",0,Supplier Return Shipment,Retour d'expédition fournisseur,0
+model,"stock.packing.internal.assign.ask_force,name",0,Assign Shipment Internal Ask Force,Assigner l'expédition interne - Demande forcée,0
+model,"stock.packing.internal,name",0,Internal Shipment,Expédition interne,0
+model,"stock.packing.out.assign.ask_force,name",0,Assign Shipment Out Ask Force,Assigner l'expédition de sortie - Demande forcée,0
+model,"stock.packing.out,name",0,Customer Shipment,Expédition Client,0
+model,"stock.packing.out.return,name",0,Customer Return Shipment,Retour d'expédition client,0
+model,"stock.product_stock_date.init,name",0,Compute stock quantities,Quantités de stock calculées,0
model,"workflow.activity,name",packingout_act_assigned,Assigned,Assigné,0
model,"workflow.activity,name",packinginternal_act_assigned,Assigned,Assigné,0
-model,"workflow.activity,name",packingin_act_cancel,Cancel,Annulé,0
-model,"workflow.activity,name",packingout_act_cancel,Cancel,Annulé,0
-model,"workflow.activity,name",packinginternal_act_cancel,Cancel,Annulé,0
-model,"workflow.activity,name",inventory_act_cancel,Cancel,Annulé,0
+model,"workflow.activity,name",packing_in_return_act_assigned,Assigned,Assigné,0
+model,"workflow.activity,name",packingin_act_cancel,Canceled,Annulé,0
+model,"workflow.activity,name",packingout_act_cancel,Canceled,Annulé,0
+model,"workflow.activity,name",packinginternal_act_cancel,Canceled,Annulé,0
+model,"workflow.activity,name",packing_out_return_act_cancel,Canceled,Annuler,0
+model,"workflow.activity,name",packing_in_return_act_cancel,Canceled,Annuler,0
+model,"workflow.activity,name",inventory_act_cancel,Canceled,Annulé,0
model,"workflow.activity,name",packingin_act_done,Done,Fait,0
model,"workflow.activity,name",packingout_act_done,Done,Fait,0
model,"workflow.activity,name",packinginternal_act_done,Done,Fait,0
+model,"workflow.activity,name",packing_out_return_act_done,Done,Fait,0
+model,"workflow.activity,name",packing_in_return_act_done,Done,Fait,0
model,"workflow.activity,name",inventory_act_done,Done,Fait,0
model,"workflow.activity,name",packingin_act_draft,Draft,Brouillon,0
model,"workflow.activity,name",packingout_act_draft,Draft,Brouillon,0
model,"workflow.activity,name",packinginternal_act_draft,Draft,Brouillon,0
+model,"workflow.activity,name",packing_out_return_act_draft,Draft,Brouillon,0
+model,"workflow.activity,name",packing_in_return_act_draft,Draft,Brouillon,0
model,"workflow.activity,name",inventory_act_draft,Draft,Brouillon,0
model,"workflow.activity,name",packingout_act_packed,Packed,Emballé,0
model,"workflow.activity,name",packingin_act_received,Received,Reçu,0
+model,"workflow.activity,name",packing_out_return_act_received,Received,Reçu,0
model,"workflow.activity,name",packingout_act_waiting,Waiting,En attente,0
model,"workflow.activity,name",packinginternal_act_waiting,Waiting,En attente,0
-model,"workflow,name",wkf_packingout,Customer Packing,Colisage client,0
-model,"workflow,name",wkf_packinginternal,Internal Packing,Colisage interne,0
+model,"workflow.activity,name",packing_in_return_act_waiting,Waiting,En attente,0
+model,"workflow,name",wkf_packing_out_return,Customer Return Shipment,Retour d'expédition client,0
+model,"workflow,name",wkf_packingout,Customer Shipment,Expédition client,0
+model,"workflow,name",wkf_packinginternal,Internal Shipment,Expédition interne,0
model,"workflow,name",wkf_inventory,Inventory,Inventaire,0
-model,"workflow,name",wkf_packingin,Supplier Packing,Colisage fournisseur,0
-selection,"stock.inventory,state",0,Cancel,Annulé,0
+model,"workflow,name",wkf_packing_in_return,Supplier Return Shipment,Retour d'expédition fournisseur,0
+model,"workflow,name",wkf_packingin,Supplier Shipment,Expédition fournisseur,0
+odt,stock.packing.in.restocking_list,0,Code:,Code :,0
+odt,stock.packing.in.restocking_list,0,E-Mail:,E-Mail :,0
+odt,stock.packing.in.restocking_list,0,From Location,Emplacement d'origine,0
+odt,stock.packing.in.restocking_list,0,Phone:,Téléphone :,0
+odt,stock.packing.in.restocking_list,0,Planned Date:,Date planifiée :,0
+odt,stock.packing.in.restocking_list,0,Product,Produit,0
+odt,stock.packing.in.restocking_list,0,Quantity,Quantité,0
+odt,stock.packing.in.restocking_list,0,Reference:,Référence :,0
+odt,stock.packing.in.restocking_list,0,Restocking List,Liste de restockage,0
+odt,stock.packing.in.restocking_list,0,Supplier:,Fournisseur :,0
+odt,stock.packing.in.restocking_list,0,To Location,Emplacement de destination,0
+odt,stock.packing.in.restocking_list,0,Warehouse:,Entrepôt :,0
+odt,stock.packing.internal.report,0,Code:,Code :,0
+odt,stock.packing.internal.report,0,E-Mail:,E-Mail :,0
+odt,stock.packing.internal.report,0,From Location,Emplacement d'origine,0
+odt,stock.packing.internal.report,0,From Location:,Emplacement d'origine :,0
+odt,stock.packing.internal.report,0,Internal Shipment,Expédition interne,0
+odt,stock.packing.internal.report,0,Phone:,Téléphone :,0
+odt,stock.packing.internal.report,0,Planned Date:,Date planifiée :,0
+odt,stock.packing.internal.report,0,Product,Produit,0
+odt,stock.packing.internal.report,0,Quantity,Quantité,0
+odt,stock.packing.internal.report,0,Reference:,Référence :,0
+odt,stock.packing.internal.report,0,To Location,Emplacement de destination,0
+odt,stock.packing.internal.report,0,To Location:,Emplacement de destination :,0
+odt,stock.packing.out.delivery_note,0,Customer Code:,Code client :,0
+odt,stock.packing.out.delivery_note,0,Date:,Date :,0
+odt,stock.packing.out.delivery_note,0,Delivery Note,Bon de livraison,0
+odt,stock.packing.out.delivery_note,0,E-Mail:,E-Mail :,0
+odt,stock.packing.out.delivery_note,0,Phone:,Téléphone :,0
+odt,stock.packing.out.delivery_note,0,Product,Produit,0
+odt,stock.packing.out.delivery_note,0,Quantity,Quantité,0
+odt,stock.packing.out.delivery_note,0,Reference:,Référence :,0
+odt,stock.packing.out.delivery_note,0,Shipment Number:,Numéro d'expédition :,0
+odt,stock.packing.out.picking_list,0,Code:,Code :,0
+odt,stock.packing.out.picking_list,0,Customer:,Client :,0
+odt,stock.packing.out.picking_list,0,E-Mail:,E-Mail:,0
+odt,stock.packing.out.picking_list,0,From Location,Emplacement d'origine,0
+odt,stock.packing.out.picking_list,0,Phone:,Téléphone :,0
+odt,stock.packing.out.picking_list,0,Picking List,Liste de prélèvement,0
+odt,stock.packing.out.picking_list,0,Planned Date:,Date planifiée :,0
+odt,stock.packing.out.picking_list,0,Product,Produit,0
+odt,stock.packing.out.picking_list,0,Quantity,Quantité,0
+odt,stock.packing.out.picking_list,0,Reference:,Référence :,0
+odt,stock.packing.out.picking_list,0,To Location,Emplacement de destination,0
+odt,stock.packing.out.picking_list,0,Warehouse:,Entrepôt :,0
+odt,stock.packing.out.return.restocking_list,0,Code:,Code :,0
+odt,stock.packing.out.return.restocking_list,0,E-Mail:,E-Mail :,0
+odt,stock.packing.out.return.restocking_list,0,From Location,Emplacement d'origine,0
+odt,stock.packing.out.return.restocking_list,0,Phone:,Téléphone :,0
+odt,stock.packing.out.return.restocking_list,0,Planned Date:,Date planifiée :,0
+odt,stock.packing.out.return.restocking_list,0,Product,Produit,0
+odt,stock.packing.out.return.restocking_list,0,Quantity,Quantité,0
+odt,stock.packing.out.return.restocking_list,0,Reference:,Référence :,0
+odt,stock.packing.out.return.restocking_list,0,Restocking List,Liste de restockage,0
+odt,stock.packing.out.return.restocking_list,0,Supplier:,Fournisseur :,0
+odt,stock.packing.out.return.restocking_list,0,To Location,Emplacement de destination,0
+odt,stock.packing.out.return.restocking_list,0,Warehouse:,Entrepôt :,0
+selection,"stock.inventory,state",0,Canceled,Annulé,0
selection,"stock.inventory,state",0,Done,Fait,0
selection,"stock.inventory,state",0,Draft,Brouillon,0
selection,"stock.location,type",0,Customer,Client,0
@@ -196,38 +344,50 @@ selection,"stock.location,type",0,Lost and Found,Pertes et surplus,0
selection,"stock.location,type",0,Production,Production,0
selection,"stock.location,type",0,Storage,Magasin,0
selection,"stock.location,type",0,Supplier,Fournisseur,0
+selection,"stock.location,type",0,View,Vue,0
selection,"stock.location,type",0,Warehouse,Entrepôt,0
selection,"stock.move,state",0,Assigned,Assigné,0
-selection,"stock.move,state",0,Cancel,Annulé,0
+selection,"stock.move,state",0,Canceled,Annulé,0
selection,"stock.move,state",0,Done,Fait,0
selection,"stock.move,state",0,Draft,Brouillon,0
-selection,"stock.move,type",0,Input,Réception,0
-selection,"stock.move,type",0,Internal,Interne,0
-selection,"stock.move,type",0,Output,Expédition,0
-selection,"stock.packing.in,state",0,Cancel,Annulé,0
+selection,"stock.packing.in.return,state",0,Assigned,Assigné,0
+selection,"stock.packing.in.return,state",0,Canceled,Annuler,0
+selection,"stock.packing.in.return,state",0,Done,Fait,0
+selection,"stock.packing.in.return,state",0,Draft,Brouillon,0
+selection,"stock.packing.in.return,state",0,Waiting,En attente,0
+selection,"stock.packing.in,state",0,Canceled,Annulé,0
selection,"stock.packing.in,state",0,Done,Fait,0
selection,"stock.packing.in,state",0,Draft,Brouillon,0
selection,"stock.packing.in,state",0,Received,Reçu,0
selection,"stock.packing.internal,state",0,Assigned,Assigné,0
-selection,"stock.packing.internal,state",0,Cancel,Annulé,0
+selection,"stock.packing.internal,state",0,Canceled,Annulé,0
selection,"stock.packing.internal,state",0,Done,Fait,0
selection,"stock.packing.internal,state",0,Draft,Brouillon,0
selection,"stock.packing.internal,state",0,Waiting,En attente,0
+selection,"stock.packing.out.return,state",0,Canceled,Annulé,0
+selection,"stock.packing.out.return,state",0,Done,Fait,0
+selection,"stock.packing.out.return,state",0,Draft,Brouillon,0
+selection,"stock.packing.out.return,state",0,Received,Reçu,0
selection,"stock.packing.out,state",0,Assigned,Assigné,0
-selection,"stock.packing.out,state",0,Cancel,Annulé,0
+selection,"stock.packing.out,state",0,Canceled,Annulé,0
selection,"stock.packing.out,state",0,Done,Fait,0
selection,"stock.packing.out,state",0,Draft,Brouillon,0
selection,"stock.packing.out,state",0,Packed,Emballé,0
selection,"stock.packing.out,state",0,Waiting,En attente,0
+view,party.party,0,Stock,Stock,0
view,party.party,0,_Stock,_Stocks,0
view,product.product,0,Products,Produits,0
-view,stock.inventory,0,All generated moves will be cancelled!,Tous les mouvements généré vont être annulés,0
+view,stock.inventory,0,Add an inventory line for each missing products,Ajouter une ligne d'inventaire pour chaque produit manquant,0
+view,stock.inventory,0,All generated moves will be cancelled!,Tous les mouvements générés vont être annulés,0
view,stock.inventory,0,Cancel,Annuler,0
view,stock.inventory,0,Complete Inventory,Compléter l'inventaire,0
view,stock.inventory,0,Confirm,Confirmer,0
view,stock.inventory,0,Inventories,Inventaires,0
view,stock.inventory,0,Inventory,Inventaire,0
view,stock.inventory,0,Re-Open,Ré-Ouvrir,0
+view,stock.inventory.complete.init,0,Categories,Catégories,0
+view,stock.inventory.complete.init,0,Complete Inventory,Inventaire complet,0
+view,stock.inventory.complete.init,0,Products,Produits,0
view,stock.inventory.line,0,Inventory Line,Ligne d'inventaire,0
view,stock.inventory.line,0,Inventory Lines,Lignes d'inventaire,0
view,stock.location,0,Location,Emplacement,0
@@ -244,32 +404,67 @@ view,stock.packing.in,0,Inventory Moves,Mouvements internes,0
view,stock.packing.in,0,Moves,Mouvements,0
view,stock.packing.in,0,Received,Réception,0
view,stock.packing.in,0,Reset to Draft,Remettre en brouillon,0
-view,stock.packing.in,0,Supplier Packing,Colisage fournisseur,0
-view,stock.packing.in,0,Supplier Packings,Colisages fournisseurs,0
+view,stock.packing.in,0,Supplier Shipment,Expédition fournisseur,0
+view,stock.packing.in,0,Supplier Shipments,Expéditions fournisseur,0
+view,stock.packing.in.return,0,Assign,Assigner,0
+view,stock.packing.in.return,0,Cancel,Annuler,0
+view,stock.packing.in.return,0,Done,Fait,0
+view,stock.packing.in.return,0,Draft,Brouillon,0
+view,stock.packing.in.return,0,Reset to Draft,Remettre en brouillon,0
+view,stock.packing.in.return,0,Supplier Return Shipment,Retour d'expédition fournisseur,0
+view,stock.packing.in.return,0,Supplier Return Shipments,Retours d'expédition fournisseur,0
+view,stock.packing.in.return,0,Waiting,En attente,0
+view,stock.packing.in.return.assign.ask_force,0,Moves,Mouvements,0
+view,stock.packing.in.return.assign.ask_force,0,Unable to Assign,Impossible d'assigner,0
+view,stock.packing.in.return.assign.ask_force,0,Unable to assign those products:,Impossible d'assigner ces produits :,0
view,stock.packing.internal,0,Assign,Assigner,0
view,stock.packing.internal,0,Cancel,Annuler,0
view,stock.packing.internal,0,Done,Fait,0
view,stock.packing.internal,0,Draft,Brouillon,0
view,stock.packing.internal,0,Force Assign,Forcer l'assignation,0
-view,stock.packing.internal,0,Internal Packing,Colisage interne,0
-view,stock.packing.internal,0,Internal Packings,Colisages internes,0
+view,stock.packing.internal,0,Internal Shipment,Expédition interne,0
+view,stock.packing.internal,0,Internal Shipments,Expéditions internes,0
view,stock.packing.internal,0,Reset to Draft,Remettre en brouillon,0
view,stock.packing.internal,0,Waiting,En attente,0
+view,stock.packing.internal.assign.ask_force,0,Moves,Mouvements,0
+view,stock.packing.internal.assign.ask_force,0,Unable to Assign,Impossible d'assigner,0
+view,stock.packing.internal.assign.ask_force,0,Unable to assign those products:,Impossible d'assigner ces produits :,0
view,stock.packing.out,0,Are you sure to force assignation?,Ãtes-vous sûr de forcer l'assignation ?,0
view,stock.packing.out,0,Assign,Assigner,0
view,stock.packing.out,0,Cancel,Annuler,0
-view,stock.packing.out,0,Customer Packing,Colisage client,0
-view,stock.packing.out,0,Customer Packings,Colisages clients,0
+view,stock.packing.out,0,Customer Shipment,Expédition client,0
+view,stock.packing.out,0,Customer Shipments,Expéditions client,0
view,stock.packing.out,0,Done,Fait,0
view,stock.packing.out,0,Draft,Brouillon,0
view,stock.packing.out,0,Force Assign,Forcer l'assignation,0
view,stock.packing.out,0,Inventory Moves,Mouvements internes,0
-view,stock.packing.out,0,Make packing,Faire le colis,0
+view,stock.packing.out,0,Make packing,Faire l'expédition,0
view,stock.packing.out,0,Outgoing Moves,Mouvements en sortie,0
view,stock.packing.out,0,Reset to Draft,Remettre en brouillon,0
view,stock.packing.out,0,Unpack,Déballer,0
view,stock.packing.out,0,Waiting,En attente,0
+view,stock.packing.out.assign.ask_force,0,Inventory Moves,Mouvements internes,0
+view,stock.packing.out.assign.ask_force,0,Unable to Assign,Impossible d'assigner,0
+view,stock.packing.out.assign.ask_force,0,Unable to assign those products:,Impossible d'assigner ces produits :,0
+view,stock.packing.out.return,0,Cancel,Annuler,0
+view,stock.packing.out.return,0,Customer Return Shipment,Retour d'expédition client,0
+view,stock.packing.out.return,0,Customer Return Shipments,Retours d'expédition client,0
+view,stock.packing.out.return,0,Done,Fait,0
+view,stock.packing.out.return,0,Incoming Moves,Mouvements entrants,0
+view,stock.packing.out.return,0,Inventory Moves,Mouvements internes,0
+view,stock.packing.out.return,0,Moves,Mouvements,0
+view,stock.packing.out.return,0,Received,Reçu,0
+view,stock.packing.out.return,0,Reset to Draft,Remettre en brouillon,0
+view,stock.product_stock_date.init,0,Product Quantity.,Quantité Produit :,0
+wizard_button,"stock.inventory.complete,init,complete",0,Complete,Achevé,0
+wizard_button,"stock.inventory.complete,init,end",0,Cancel,Annuler,0
wizard_button,"stock.location.open,init,end",0,Cancel,Annuler,0
wizard_button,"stock.location.open,init,open",0,Open,Ouvrir,0
+wizard_button,"stock.packing.in.return.assign,ask_force,end",0,Ok,Ok,0
+wizard_button,"stock.packing.in.return.assign,ask_force,force",0,Force Assign,Forcer l'assignation,0
+wizard_button,"stock.packing.internal.assign,ask_force,end",0,Ok,Ok,0
+wizard_button,"stock.packing.internal.assign,ask_force,force",0,Force Assign,Forcer l'assignation,0
+wizard_button,"stock.packing.out.assign,ask_force,end",0,Ok,Ok,0
+wizard_button,"stock.packing.out.assign,ask_force,force",0,Force Assign,Forcer l'assignation,0
wizard_button,"stock.product.open,init,end",0,Cancel,Annuler,0
wizard_button,"stock.product.open,init,open",0,Open,Ouvrir,0
diff --git a/internal_packing.odt b/internal_packing.odt
new file mode 100644
index 0000000..6ff9790
Binary files /dev/null and b/internal_packing.odt differ
diff --git a/inventory.py b/inventory.py
index 7b43b3d..c90188b 100644
--- a/inventory.py
+++ b/inventory.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.
'Inventory'
-from trytond.osv import fields, OSV
+from trytond.model import ModelWorkflow, ModelView, ModelSQL, fields
from trytond.wizard import Wizard
STATES = {
@@ -9,7 +9,7 @@ STATES = {
}
-class Inventory(OSV):
+class Inventory(ModelWorkflow, ModelSQL, ModelView):
'Stock Inventory'
_name = 'stock.inventory'
_description = __doc__
@@ -20,7 +20,9 @@ class Inventory(OSV):
domain=[('type', '=', 'storage')], states={
'readonly': "state != 'draft' or bool(lines)",
})
- date = fields.Date('Date', states=STATES)
+ date = fields.Date('Date', required=True, states={
+ 'readonly': "state != 'draft' or bool(lines)",
+ })
lost_found = fields.Many2One(
'stock.location', 'Lost and Found', required=True,
domain=[('type', '=', 'lost_found')], states=STATES)
@@ -33,7 +35,7 @@ class Inventory(OSV):
state = fields.Selection([
('draft', 'Draft'),
('done', 'Done'),
- ('cancel', 'Cancel'),
+ ('cancel', 'Canceled'),
], 'State', readonly=True, select=1)
def __init__(self):
@@ -52,17 +54,15 @@ class Inventory(OSV):
if context is None:
context = {}
if context.get('company'):
- return company_obj.name_get(cursor, user, context['company'],
- context=context)[0]
+ return context['company']
return False
def default_lost_found(self, cursor, user, context=None):
location_obj = self.pool.get('stock.location')
location_ids = location_obj.search(cursor, user,
- self.lost_found._domain, context=context)
+ self.lost_found.domain, context=context)
if len(location_ids) == 1:
- return location_obj.name_get(cursor, user, location_ids,
- context=context)[0]
+ return location_ids[0]
return False
def set_state_cancel(self, cursor, user, ids, context=None):
@@ -96,44 +96,67 @@ class Inventory(OSV):
'date': date_obj.today(cursor, user, context=context)},
context=context)
- def copy(self, cursor, user, inventory_id, default=None, context=None):
+ def copy(self, cursor, user, ids, default=None, context=None):
date_obj = self.pool.get('ir.date')
line_obj = self.pool.get('stock.inventory.line')
+
+ int_id = False
+ if isinstance(ids, (int, long)):
+ int_id = True
+ ids = [ids]
+
if default is None:
default = {}
default = default.copy()
default['date'] = date_obj.today(cursor, user, context=context)
default['lines'] = False
- new_id = super(Inventory, self).copy(
- cursor, user, inventory_id, default=default, context=context)
- inventory = self.browse(cursor, user, inventory_id, context=context)
- for line in inventory.lines:
- line_obj.copy(
- cursor, user, line.id, default={
- 'inventory': new_id,
- 'move': False},
- context=context)
- self.complete_lines(cursor, user, [new_id], context=context)
- return new_id
- def complete_lines(self, cursor, user, ids, context=None):
+ new_ids = []
+ for inventory in self.browse(cursor, user, ids, context=context):
+ new_id = super(Inventory, self).copy(cursor, user, inventory.id,
+ default=default, context=context)
+ line_obj.copy(cursor, user, [x.id for x in inventory.lines],
+ default={
+ 'inventory': new_id,
+ 'move': False,
+ }, context=context)
+ self.complete_lines(cursor, user, new_id,
+ product_ids=[x.product.id for x in inventory.lines],
+ context=context)
+ new_ids.append(new_id)
+
+ if int_id:
+ return new_ids[0]
+ return new_ids
+
+ def complete_lines(self, cursor, user, ids, product_ids=None, context=None):
+ '''
+ Complete or update the inventories
+
+ :param cursor: the database cursor
+ :param user: the user id
+ :param ids: the ids of stock.inventory
+ :param product_ids: the ids of product.product
+ if None all products are used
+ :param context: the context
+ '''
line_obj = self.pool.get('stock.inventory.line')
product_obj = self.pool.get('product.product')
uom_obj = self.pool.get('product.uom')
+
+ if isinstance(ids, (int, long)):
+ ids = [ids]
+
inventories = self.browse(cursor, user, ids,
context=context)
context = context and context.copy() or {}
for inventory in inventories:
# Compute product quantities
- if inventory.date:
- context['stock_date_end'] = inventory.date
- pbl = product_obj.products_by_location(
- cursor, user, [inventory.location.id],
- context=context)
- else:
- pbl = product_obj.products_by_location(
- cursor, user, [inventory.location.id], context=context)
+ context['stock_date_end'] = inventory.date
+ pbl = product_obj.products_by_location(
+ cursor, user, [inventory.location.id],
+ product_ids=product_ids, context=context)
# Index some data
product2uom = {}
@@ -188,7 +211,7 @@ class Inventory(OSV):
Inventory()
-class InventoryLine(OSV):
+class InventoryLine(ModelSQL, ModelView):
'Stock Inventory Line'
_name = 'stock.inventory.line'
_description = __doc__
@@ -204,7 +227,8 @@ class InventoryLine(OSV):
digits="(16, unit_digits)", readonly=True)
quantity = fields.Float('Quantity', digits="(16, unit_digits)")
move = fields.Many2One('stock.move', 'Move', readonly=True)
- inventory = fields.Many2One('stock.inventory', 'Inventory', required=True)
+ inventory = fields.Many2One('stock.inventory', 'Inventory', required=True,
+ ondelete='CASCADE')
def __init__(self):
super(InventoryLine, self).__init__()
@@ -214,6 +238,7 @@ class InventoryLine(OSV):
('inventory_product_uniq', 'UNIQUE(inventory, product)',
'Product must be unique by inventory!'),
]
+ self._order.insert(0, ('product', 'ASC'))
def default_unit_digits(self, cursor, user, context=None):
return 2
@@ -226,22 +251,15 @@ class InventoryLine(OSV):
if vals.get('product'):
product = product_obj.browse(cursor, user, vals['product'],
context=context)
- res['uom'] = uom_obj.name_get(cursor, user, product.default_uom.id,
- context=context)[0]
+ res['uom'] = product.default_uom.id
+ res['uom.rec_name'] = product.default_uom.rec_name
res['unit_digits'] = product.default_uom.digits
return res
def get_uom(self, cursor, user, ids, name, arg, context=None):
- uom_obj = self.pool.get('product.uom')
res = {}
for line in self.browse(cursor, user, ids, context=context):
res[line.id] = line.product.default_uom.id
- uom2name = {}
- for uom_id, name in uom_obj.name_get(cursor, user, res.values(),
- context=context):
- uom2name[uom_id] = (uom_id, name)
- for line_id in res:
- res[line_id] = uom2name[res[line_id]]
return res
def get_unit_digits(self, cursor, user, ids, name, arg, context=None):
@@ -286,12 +304,35 @@ class InventoryLine(OSV):
InventoryLine()
+class CompleteInventoryInit(ModelView):
+ 'Complete Inventory Init'
+ _name = 'stock.inventory.complete.init'
+ _description = __doc__
+
+ products = fields.Many2Many('product.product', None, None,
+ 'Products', domain=[('type', '=', 'stockable')])
+ categories = fields.Many2Many('product.category', None, None,
+ 'Categories')
+
+CompleteInventoryInit()
+
+
class CompleteInventory(Wizard):
- 'Complete Inventory '
+ 'Complete Inventory'
_name = 'stock.inventory.complete'
states = {
'init': {
'result': {
+ 'type': 'form',
+ 'object': 'stock.inventory.complete.init',
+ 'state': [
+ ('end', 'Cancel', 'tryton-cancel'),
+ ('complete', 'Complete', 'tryton-ok', True),
+ ],
+ },
+ },
+ 'complete': {
+ 'result': {
'type': 'action',
'action': '_complete',
'state': 'end',
@@ -300,8 +341,25 @@ class CompleteInventory(Wizard):
}
def _complete(self, cursor, user, data, context=None):
+ category_obj = self.pool.get('product.category')
+ product_obj = self.pool.get('product.product')
inventory_obj = self.pool.get('stock.inventory')
- inventory_obj.complete_lines(cursor, user, data['ids'], context=context)
+
+ product_ids = data['form']['products'][0][1] or []
+ category_ids = data['form']['categories'][0][1] or []
+
+ if category_ids:
+ child_category_ids = category_obj.search(cursor, user,
+ [('parent', 'child_of', category_ids)], context=context)
+ cat_product_ids = product_obj.search(cursor, user, [
+ ('category', 'in', child_category_ids),
+ ('type', '=', 'stockable'),
+ ], context=context)
+ if cat_product_ids:
+ product_ids += cat_product_ids
+
+ inventory_obj.complete_lines(cursor, user, data['ids'],
+ product_ids=product_ids, context=context)
return {}
diff --git a/inventory.xml b/inventory.xml
index 65600a6..200b3fc 100644
--- a/inventory.xml
+++ b/inventory.xml
@@ -1,11 +1,13 @@
<?xml version="1.0"?>
-<!-- This file is part of Tryton. The COPYRIGHT file at the top level of this repository contains the full copyright notices and license terms. -->
+<!-- This file is part of Tryton. The COPYRIGHT file at the top level of
+this repository contains the full copyright notices and license terms. -->
<tryton>
<data>
<record model="ir.action.wizard" id="wizard_complete_inventory">
<field name="name">Complete Inventory</field>
<field name="wiz_name">stock.inventory.complete</field>
<field name="model">stock.inventory</field>
+ <field name="groups" eval="[('add', ref('group_stock'))]"/>
</record>
<record model="ir.ui.view" id="inventory_view_form">
@@ -22,17 +24,17 @@
<field name="date"/>
<label name="company"/>
<field name="company"/>
- <label colspan="2"/>
+ <label colspan="2" id="empty"/>
<button string="Complete Inventory" type="action"
name="%(wizard_complete_inventory)d"
states="{'readonly': '''state != 'draft' '''}"
colspan="2"
help="Add an inventory line for each missing products"/>
<field name="lines" colspan="4"/>
- <group col="4" colspan="4">
+ <group col="4" colspan="4" id="group_buttons">
<label name="state"/>
<field name="state"/>
- <group colspan="2" col="3">
+ <group colspan="2" col="3" id="buttons">
<button string="Cancel"
name="cancel"
states="{'invisible': '''state in ('cancel', 'done') ''', 'readonly': '''%(group_stock)d not in groups'''}"
@@ -136,7 +138,7 @@
<record model="workflow.activity" id="inventory_act_cancel">
<field name="workflow" ref="wkf_inventory"/>
<field name="flow_stop">True</field>
- <field name="name">Cancel</field>
+ <field name="name">Canceled</field>
<field name="kind">function</field>
<field name="action">set_state_cancel()</field>
</record>
@@ -194,5 +196,30 @@
<field name="perm_delete" eval="True"/>
</record>
+ <record model="ir.ui.view" id="inventory_complete_init_view_form">
+ <field name="model">stock.inventory.complete.init</field>
+ <field name="type">form</field>
+ <field name="arch" type="xml">
+ <![CDATA[
+ <form string="Complete Inventory">
+ <separator name="categories" colspan="2"/>
+ <separator name="products" colspan="2"/>
+ <field name="categories" colspan="2">
+ <tree string="Categories" fill="1">
+ <field name="rec_name"/>
+ <field name="name" select="1" tree_invisible="1"/>
+ </tree>
+ </field>
+ <field name="products" colspan="2">
+ <tree string="Products" fill="1">
+ <field name="name" select="1"/>
+ <field name="code" select="1"/>
+ </tree>
+ </field>
+ </form>
+ ]]>
+ </field>
+ </record>
+
</data>
</tryton>
diff --git a/location.py b/location.py
index b859a7d..a4c3bcd 100644
--- a/location.py
+++ b/location.py
@@ -1,8 +1,9 @@
#This file is part of Tryton. The COPYRIGHT file at the top level
#of this repository contains the full copyright notices and license terms.
"Wharehouse"
-from trytond.osv import fields, OSV
-from trytond.wizard import Wizard, WizardOSV
+from trytond.model import ModelView, ModelSQL, fields
+from trytond.wizard import Wizard
+from trytond.backend import TableHandler
import datetime
STATES = {
@@ -10,7 +11,7 @@ STATES = {
}
-class Location(OSV):
+class Location(ModelSQL, ModelView):
"Stock Location"
_name = 'stock.location'
_description = __doc__
@@ -30,12 +31,13 @@ class Location(OSV):
('warehouse', 'Warehouse'),
('storage', 'Storage'),
('production', 'Production'),
+ ('view', 'View'),
], 'Location type', states=STATES)
parent = fields.Many2One("stock.location", "Parent", select=1,
left="left", right="right")
- left = fields.Integer('Left', required=True)
- right = fields.Integer('Right', required=True)
- childs = fields.One2Many("stock.location", "parent", "Childs")
+ left = fields.Integer('Left', required=True, select=1)
+ right = fields.Integer('Right', required=True, select=1)
+ childs = fields.One2Many("stock.location", "parent", "Children")
input_location = fields.Many2One(
"stock.location", "Input", states={
'invisible': "type != 'warehouse'",
@@ -72,11 +74,32 @@ class Location(OSV):
self._order.insert(0, ('name', 'ASC'))
self._constraints += [
('check_recursion', 'recursive_locations'),
+ ('check_type_for_moves', 'invalid_type_for_moves'),
]
self._error_messages.update({
'recursive_locations': 'You can not create recursive locations!',
+ 'invalid_type_for_moves': 'A location with existing moves ' \
+ 'cannot be changed to a type that does not support moves.',
})
+ def init(self, cursor, module_name):
+ super(Location, self).init(cursor, module_name)
+
+ table = TableHandler(cursor, self, module_name)
+ table.index_action(['left', 'right'], 'add')
+
+ def check_type_for_moves(self, cursor, user, ids):
+ """ Check locations with moves have types compatible with moves. """
+ invalid_move_types = ['warehouse', 'view']
+ move_obj = self.pool.get('stock.move')
+ for location in self.browse(cursor, user, ids):
+ if location.type in invalid_move_types and \
+ move_obj.search(cursor, user, ['OR',
+ ('to_location', '=', location.id),
+ ('from_location', '=', location.id)]):
+ return False
+ return True
+
def default_active(self, cursor, user, context=None):
return True
@@ -92,19 +115,18 @@ class Location(OSV):
def check_xml_record(self, cursor, user, ids, values, context=None):
return True
- def name_search(self, cursor, user, name, args=None, operator='ilike',
- context=None, limit=None):
- if not args:
- args=[]
- ids = self.search(
- cursor, user, [('code', '=', name)] + args, limit=limit,
- context=context)
- if not ids:
- ids = self.search(
- cursor, user, [('name', operator, name)] + args, limit=limit,
- context=context)
- result = self.name_get(cursor, user, ids, context)
- return result
+ def search_rec_name(self, cursor, user, name, args, context=None):
+ args2 = []
+ i = 0
+ while i < len(args):
+ ids = self.search(cursor, user, [('code', '=', args[i][2])],
+ context=context)
+ if ids:
+ args2.append(('id', 'in', ids))
+ else:
+ args2.append((self._rec_name, args[i][1], args[i][2]))
+ i += 1
+ return args2
def get_quantity(self, cursor, user, ids, name, arg, context=None):
product_obj = self.pool.get('product.product')
@@ -147,7 +169,6 @@ class Location(OSV):
def view_header_get(self, cursor, user, value, view_type='form',
context=None):
product_obj = self.pool.get('product.product')
- uom_obj = self.pool.get('product.uom')
if context is None:
context = {}
ctx = context.copy()
@@ -157,14 +178,11 @@ class Location(OSV):
and product_obj.search(cursor, user, [
('id', '=', context['product']),
], context=ctx):
- product_name = product_obj.name_get(cursor, user, context['product'],
- context=context)[0][1]
product = product_obj.browse(cursor, user, context['product'],
context=context)
- uom_name = uom_obj.name_get(cursor, user, product.default_uom.id,
- context=context)[0][1]
- return value + ': ' + product_name + ' (' + uom_name + ')'
- return False
+ return value + ': ' + product.rec_name + \
+ ' (' + product.default_uom.rec_name + ')'
+ return value
def _set_warehouse_parent(self, cursor, user, locations, context=None):
'''
@@ -209,7 +227,7 @@ class Location(OSV):
Location()
-class Party(OSV):
+class Party(ModelSQL, ModelView):
_name = 'party.party'
supplier_location = fields.Property(type='many2one',
relation='stock.location', string='Supplier Location',
@@ -225,7 +243,7 @@ class Party(OSV):
Party()
-class ChooseStockDateInit(WizardOSV):
+class ChooseStockDateInit(ModelView):
_name = 'stock.location_stock_date.init'
_description = "Compute stock quantities"
forecast_date = fields.Date(
diff --git a/location.xml b/location.xml
index 029913b..f150d3c 100644
--- a/location.xml
+++ b/location.xml
@@ -88,6 +88,7 @@ this repository contains the full copyright notices and license terms. -->
<field name="res_model">product.product</field>
<field name="view_type">form</field>
<field name="window_name" eval="False"/>
+ <field name="domain">[('quantity', '!=', 0.0)]</field>
</record>
<record model="ir.action.wizard" id="wizard_product_open">
<field name="name">Product Quantities</field>
@@ -134,9 +135,9 @@ this repository contains the full copyright notices and license terms. -->
<![CDATA[
<data>
<xpath
- expr="/form/notebook/page[@string="_Accounting"]"
+ expr="/form/notebook/page[@id="accounting"]"
position="after">
- <page string="_Stock">
+ <page string="Stock" id="stock">
<label name="customer_location"/>
<field name="customer_location"/>
<label name="supplier_location"/>
diff --git a/move.py b/move.py
index 5c8a9c0..f1dd31e 100644
--- a/move.py
+++ b/move.py
@@ -1,7 +1,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.
"Move"
-from trytond.osv import fields, OSV
+from trytond.model import ModelView, ModelSQL, fields
+from trytond.backend import TableHandler
from decimal import Decimal
import datetime
@@ -10,7 +11,7 @@ STATES = {
}
-class Move(OSV):
+class Move(ModelSQL, ModelView):
"Stock Move"
_name = 'stock.move'
_description = __doc__
@@ -31,41 +32,50 @@ class Move(OSV):
digits="(16, unit_digits)", states=STATES)
from_location = fields.Many2One("stock.location", "From Location", select=1,
required=True, states=STATES,
- domain=[('type', '!=', 'warehouse')])
+ domain="[('type', 'not in', " \
+ "('warehouse', 'view'))]")
to_location = fields.Many2One("stock.location", "To Location", select=1,
required=True, states=STATES,
- domain=[('type', '!=', 'warehouse')])
- packing_in = fields.Many2One('stock.packing.in', 'Supplier Packing',
- readonly=True, select=1)
- packing_out = fields.Many2One('stock.packing.out', 'Customer Packing',
- readonly=True, select=1)
+ domain="[('type', 'not in', " \
+ "('warehouse', 'view'))]")
+ packing_in = fields.Many2One('stock.packing.in', 'Supplier Shipment',
+ readonly=True, select=1, ondelete='CASCADE')
+ packing_out = fields.Many2One('stock.packing.out', 'Customer Shipment',
+ readonly=True, select=1, ondelete='CASCADE')
+ packing_out_return = fields.Many2One('stock.packing.out.return',
+ 'Customer Return Shipment', readonly=True, select=1,
+ ondelete='CASCADE')
+ packing_in_return = fields.Many2One('stock.packing.in.return',
+ 'Supplier Return Shipment', readonly=True, select=1,
+ ondelete='CASCADE')
packing_internal = fields.Many2One('stock.packing.internal',
- 'Internal Packing', readonly=True, select=1)
+ 'Internal Shipment', readonly=True, select=1, ondelete='CASCADE')
planned_date = fields.Date("Planned Date", states=STATES, select=2)
effective_date = fields.Date("Effective Date", readonly=True, select=2)
state = fields.Selection([
('draft', 'Draft'),
('assigned', 'Assigned'),
('done', 'Done'),
- ('cancel', 'Cancel'),
+ ('cancel', 'Canceled'),
], 'State', select=1, readonly=True)
company = fields.Many2One('company.company', 'Company', required=True,
states={
'readonly': "state != 'draft'",
- })
+ }, domain="[('id', '=', context.get('company', 0))]")
unit_price = fields.Numeric('Unit Price', digits=(16, 4),
states={
- 'invisible': "not type",
- 'required': "type",
+ 'invisible': "not unit_price_required",
+ 'required': "unit_price_required",
'readonly': "state != 'draft'",
})
+ cost_price = fields.Numeric('Cost Price', digits=(16, 4), readonly=True)
currency = fields.Many2One('currency.currency', 'Currency',
states={
- 'invisible': "not type",
- 'required': "type",
+ 'invisible': "not unit_price_required",
+ 'required': "unit_price_required",
'readonly': "state != 'draft'",
})
- type = fields.Function('get_unit_price_required',
+ unit_price_required = fields.Function('get_unit_price_required',
type='boolean', string='Unit Price Required',
on_change_with=['from_location', 'to_location'])
@@ -77,10 +87,18 @@ class Move(OSV):
('check_from_to_locations',
'CHECK(from_location != to_location)',
'Source and destination location must be different'),
- ('check_packing_in_out',
- 'CHECK(NOT(packing_in IS NOT NULL ' \
- 'AND packing_out IS NOT NULL))',
- 'Move can not be in both Supplier and Customer Packing'),
+ ('check_packing',
+ 'CHECK((COALESCE(packing_in, 0) / COALESCE(packing_in, 1) ' \
+ '+ COALESCE(packing_out, 0) / ' \
+ 'COALESCE(packing_out, 1) ' \
+ '+ COALESCE(packing_internal, 0) / ' \
+ 'COALESCE(packing_internal, 1) ' \
+ '+ COALESCE(packing_in_return, 0) / ' \
+ 'COALESCE(packing_in_return, 1) ' \
+ '+ COALESCE(packing_out_return, 0) / ' \
+ 'COALESCE(packing_out_return, 1)) ' \
+ '<= 1)',
+ 'Move can be on only one Shipment'),
]
self._constraints += [
('check_product_type', 'service_product'),
@@ -91,34 +109,88 @@ class Move(OSV):
'set_state_assigned': 'You can not set state to assigned!',
'set_state_done': 'You can not set state to done!',
'del_draft_cancel': 'You can only delete draft or cancelled moves!',
- 'service_product': 'You can not use service product for a move!',
+ 'service_product': 'You can not use service products for a move!',
})
+ def init(self, cursor, module_name):
+ super(Move, self).init(cursor, module_name)
+
+ table = TableHandler(cursor, self, module_name)
+
+ # Migration from 1.0 check_packing_in_out has been removed
+ table.drop_constraint('check_packing_in_out')
+
def default_planned_date(self, cursor, user, context=None):
if context and context.get('planned_date'):
return context.get('planned_date')
def default_to_location(self, cursor, user, context=None):
- if context and context.get('to_location'):
- return context.get('to_location')
- if context and context.get('warehouse') and context.get('type'):
- wh_location = self.pool.get('stock.location').browse(
- cursor, user, context['warehouse'], context=context)
- field = {'inventory_in': 'storage_location',
- 'inventory_out': 'output_location',
- 'incoming': 'input_location',}.get(context['type'])
- return field and wh_location[field].id or False
+ location_obj = self.pool.get('stock.location')
+ party_obj = self.pool.get('party.party')
+ res = False
+
+ if context is None:
+ context = {}
+
+ warehouse = None
+ if context.get('warehouse'):
+ warehouse = location_obj.browse(cursor, user, context['warehouse'],
+ context=context)
+
+ if context.get('type', '') == 'inventory_in':
+ if warehouse:
+ res = warehouse.storage_location.id
+ elif context.get('type', '') == 'inventory_out':
+ if warehouse:
+ res = warehouse.output_location.id
+ elif context.get('type', '') == 'incoming':
+ if warehouse:
+ res = warehouse.input_location.id
+ elif context.get('type', '') == 'outgoing':
+ if context.get('customer'):
+ customer = party_obj.browse(cursor, user, context['customer'],
+ context=context)
+ res = customer.customer_location.id
+
+ if context.get('to_location'):
+ res = context.get('to_location')
+ return res
def default_from_location(self, cursor, user, context=None):
- if context and context.get('from_location'):
- return context.get('from_location')
- if context and context.get('warehouse') and context.get('type'):
- wh_location = self.pool.get('stock.location').browse(
- cursor, user, context['warehouse'], context=context)
- field = {'inventory_in': 'input_location',
- 'inventory_out': 'storage_location',
- 'outgoing': 'output_location',}.get(context['type'])
- return field and wh_location[field].id or False
+ location_obj = self.pool.get('stock.location')
+ party_obj = self.pool.get('party.party')
+ res = False
+
+ if context is None:
+ context = {}
+
+ warehouse = None
+ if context.get('warehouse'):
+ warehouse = location_obj.browse(cursor, user, context['warehouse'],
+ context=context)
+
+ if context.get('type', '') == 'inventory_in':
+ if warehouse:
+ res = warehouse.input_location.id
+ elif context.get('type', '') == 'inventory_out':
+ if warehouse:
+ res = warehouse.storage_location.id
+ elif context.get('type', '') == 'outgoing':
+ if warehouse:
+ res = warehouse.output_location.id
+ elif context.get('type', '') == 'incoming':
+ if context.get('supplier'):
+ supplier = party_obj.browse(cursor, user, context['supplier'],
+ context=context)
+ res = supplier.supplier_location.id
+ elif context.get('customer'):
+ customer = party_obj.browse(cursor, user, context['customer'],
+ context=context)
+ res = customer.customer_location.id
+
+ if context.get('from_location'):
+ res = context.get('from_location')
+ return res
def default_state(self, cursor, user, context=None):
return 'draft'
@@ -128,8 +200,7 @@ class Move(OSV):
if context is None:
context = {}
if context.get('company'):
- return company_obj.name_get(cursor, user, context['company'],
- context=context)[0]
+ return context['company']
return False
def default_currency(self, cursor, user, context=None):
@@ -141,8 +212,7 @@ class Move(OSV):
if context.get('company'):
company = company_obj.browse(cursor, user, context['company'],
context=context)
- return currency_obj.name_get(cursor, user, company.currency.id,
- context=context)[0]
+ return company.currency.id
return False
def on_change_with_unit_digits(self, cursor, user, ids, vals,
@@ -173,12 +243,11 @@ class Move(OSV):
res = {
'unit_price': Decimal('0.0'),
}
-
if vals.get('product'):
product = product_obj.browse(cursor, user, vals['product'],
context=context)
- res['uom'] = uom_obj.name_get(cursor, user,
- product.default_uom.id, context=context)[0]
+ res['uom'] = product.default_uom.id
+ res['uom.rec_name'] = product.default_uom.rec_name
res['unit_digits'] = product.default_uom.digits
to_location = None
if vals.get('to_location'):
@@ -242,7 +311,19 @@ class Move(OSV):
res['unit_price'] = unit_price
return res
- def on_change_with_type(self, cursor, user, ids, vals,
+ def default_unit_price_required(self, cursor, user, context=None):
+ from_location = self.default_from_location(cursor, user,
+ context=context)
+ to_location = self.default_to_location(cursor,user,
+ context=context)
+ vals = {
+ 'from_location': from_location,
+ 'to_location': to_location,
+ }
+ return self.on_change_with_unit_price_required(cursor, user, [],
+ vals, context=context)
+
+ def on_change_with_unit_price_required(self, cursor, user, ids, vals,
context=None):
location_obj = self.pool.get('stock.location')
if vals.get('from_location'):
@@ -274,29 +355,23 @@ class Move(OSV):
return False
return True
- def name_search(self, cursor, user, name='', args=None, operator='ilike',
- context=None, limit=None):
- if not args:
- args = []
- query = ['AND', ('product', operator, name), args]
- ids = self.search(cursor, user, query, limit=limit, context=context)
- return self.name_get(cursor, user, ids, context)
-
- def name_get(self, cursor, user, ids, context=None):
- if isinstance(ids, (int, long)):
- ids = [ids]
- product_obj = self.pool.get('product.product')
+ def get_rec_name(self, cursor, user, ids, name, arg, context=None):
+ if not ids:
+ return {}
+ res = {}
moves = self.browse(cursor, user, ids, context=context)
- pid2name = dict(product_obj.name_get(
- cursor, user, [m.product.id for m in moves], context=context))
- res = []
for m in moves:
- res.append(
- (m.id,
- "%s%s %s" % (m.quantity, m.uom.symbol, pid2name[m.product.id]))
- )
+ res[m.id] = "%s%s %s" % (m.quantity, m.uom.symbol, m.product.rec_name)
return res
+ def search_rec_name(self, cursor, user, name, args, context=None):
+ args2 = []
+ i = 0
+ while i < len(args):
+ args2.append(('product', args[i][1], args[i][2]))
+ i += 1
+ return args2
+
def search(self, cursor, user, args, offset=0, limit=None, order=None,
context=None, count=False, query_string=False):
location_obj = self.pool.get('stock.location')
@@ -344,6 +419,9 @@ class Move(OSV):
currency_obj = self.pool.get('currency.currency')
company_obj = self.pool.get('company.company')
+ if context is None:
+ context = {}
+
if isinstance(uom, (int, long)):
uom = uom_obj.browse(cursor, user, uom, context=context)
if isinstance(company, (int, long)):
@@ -372,14 +450,19 @@ class Move(OSV):
) / (product_qty + qty)
else:
new_cost_price = product.cost_price
+
+ ctx = context.copy()
+ ctx['user'] = user
product_obj.write(
- cursor, user, product.id, {'cost_price': new_cost_price},
- context=context)
+ cursor, 0, product.id, {'cost_price': new_cost_price},
+ context=ctx)
def create(self, cursor, user, vals, context=None):
location_obj = self.pool.get('stock.location')
product_obj = self.pool.get('product.product')
+ vals = vals.copy()
+
if vals.get('state') == 'done':
if not vals.get('effective_date'):
vals['effective_date'] = datetime.date.today()
@@ -401,6 +484,12 @@ class Move(OSV):
cursor, user, vals['product'], -vals['quantity'],
vals['uom'], vals['unit_price'], vals['currency'],
vals['company'], context=context)
+ if not vals.get('cost_price'):
+ # Re-read product to get the updated cost_price
+ product = product_obj.browse(cursor, user, vals['product'],
+ context=context)
+ vals['cost_price'] = product.cost_price
+
elif vals.get('state') == 'assigned':
if not vals.get('effective_date'):
vals['effective_date'] = datetime.date.today()
@@ -461,8 +550,16 @@ class Move(OSV):
cursor, user, move.product.id, -move.quantity,
move.uom, move.unit_price, move.currency,
move.company, context=context)
+ res = super(Move, self).write(cursor, user, ids, vals, context=context)
- return super(Move, self).write(cursor, user, ids, vals, context=context)
+ if vals.get('state', '') == 'done':
+ #Re-read the move because cost_price has been updated
+ for move in self.browse(cursor, user, ids, context=context):
+ if not move.cost_price:
+ self.write(cursor, user, move.id, {
+ 'cost_price': move.product.cost_price,
+ }, context=context)
+ return res
def delete(self, cursor, user, ids, context=None):
for move in self.browse(cursor, user, ids, context=context):
@@ -471,4 +568,123 @@ class Move(OSV):
context=context)
return super(Move, self).delete(cursor, user, ids, context=context)
+ def pick_product(self, cursor, user, move, location_quantities, context=None):
+ """
+ Pick the product across the location. Naive (fast) implementation.
+
+ :param cursor: the database cursor
+ :param user: the user id
+ :param move: a BrowseRecord of stock.move
+ :param location_quantities: a list of tuple (location, available_qty)
+ where location is a BrowseRecord of stock.location.
+ :param context: the context
+ :return: a list of tuple (location, quantity) for quantities
+ that can be picked
+ """
+ to_pick = []
+ needed_qty = move.quantity
+ for location, available_qty in location_quantities.iteritems():
+ # Ignore available_qty when too small
+ if available_qty < move.uom.rounding:
+ continue
+ if needed_qty <= available_qty:
+ to_pick.append((location, needed_qty))
+ return to_pick
+ else:
+ to_pick.append((location, available_qty))
+ needed_qty -= available_qty
+ # Force assignation for consumables:
+ if move.product.type == "consumable":
+ to_pick.append((move.from_location, needed_qty))
+ return to_pick
+ return to_pick
+
+ def assign_try(self, cursor, user, moves, context=None):
+ '''
+ Try to assign moves.
+ It will split the moves to assign as much possible.
+
+ :param cursor: the database cursor
+ :param user: the user id
+ :param moves: a BrowseRecordList of stock.move to assign
+ :param context: the context
+ :return: True if succeed or False if not
+ '''
+ product_obj = self.pool.get('product.product')
+ uom_obj = self.pool.get('product.uom')
+ date_obj = self.pool.get('ir.date')
+ location_obj = self.pool.get('stock.location')
+
+ if context is None:
+ context = {}
+
+ cursor.execute('LOCK TABLE stock_move')
+
+ local_ctx = context and context.copy() or {}
+ local_ctx['stock_date_end'] = date_obj.today(cursor, user,
+ context=context)
+ local_ctx['stock_assign'] = True
+ location_ids = location_obj.search(cursor, user, [
+ ('parent', 'child_of', [x.from_location.id for x in moves]),
+ ], context=context)
+ pbl = product_obj.products_by_location(cursor, user,
+ location_ids=location_ids,
+ product_ids=[m.product.id for m in moves],
+ context=local_ctx)
+
+ success = True
+ for move in moves:
+ if move.state != 'draft':
+ continue
+ to_location = move.to_location
+ location_qties = {}
+ child_ids = location_obj.search(cursor, user, [
+ ('parent', 'child_of', [move.from_location.id]),
+ ], context=context)
+ for location in location_obj.browse(cursor, user, child_ids,
+ context=context):
+ if (location.id, move.product.id) in pbl:
+ location_qties[location] = uom_obj.compute_qty(
+ cursor, user, move.product.default_uom,
+ pbl[(location.id, move.product.id)], move.uom,
+ round=False, context=context)
+
+ to_pick = self.pick_product(
+ cursor, user, move, location_qties, context=context)
+
+ picked_qties = 0.0
+ for _, qty in to_pick:
+ picked_qties += qty
+
+ if picked_qties < move.quantity:
+ success = False
+ first = False
+ self.write(cursor, user, move.id, {
+ 'quantity': move.quantity - picked_qties,
+ }, context=context)
+ else:
+ first = True
+ for from_location, qty in to_pick:
+ values = {
+ 'from_location': from_location.id,
+ 'quantity': qty,
+ 'state': 'assigned',
+ }
+ if first:
+ self.write(cursor, user, move.id, values, context=context)
+ first = False
+ else:
+ move_id = self.copy(cursor, user, move.id, default=values,
+ context=context)
+
+ qty_default_uom = uom_obj.compute_qty(
+ cursor, user, move.uom, qty, move.product.default_uom,
+ round=False, context=context)
+
+ 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
+ return success
+
Move()
diff --git a/move.xml b/move.xml
index 670d50b..21d330e 100644
--- a/move.xml
+++ b/move.xml
@@ -1,5 +1,6 @@
<?xml version="1.0"?>
-<!-- This file is part of Tryton. The COPYRIGHT file at the top level of this repository contains the full copyright notices and license terms. -->
+<!-- This file is part of Tryton. The COPYRIGHT file at the top level of
+this repository contains the full copyright notices and license terms. -->
<tryton>
<data>
<record model="ir.ui.view" id="move_view_form">
@@ -28,10 +29,10 @@
<field name="planned_date"/>
<label name="effective_date"/>
<field name="effective_date"/>
- <separator colspan="4"/>
+ <separator colspan="4" id="separator"/>
<label name="state"/>
<field name="state"/>
- <field name="type" invisible="1" colspan="4"/>
+ <field name="unit_price_required" invisible="1" colspan="4"/>
<field name="unit_digits" invisible="1" colspan="4"/>
</form>
]]>
diff --git a/packing.py b/packing.py
index bb8115a..193e79e 100644
--- a/packing.py
+++ b/packing.py
@@ -1,18 +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.
-"Packing"
-from trytond.osv import fields, OSV
-from trytond.netsvc import LocalService
-import datetime
+"Shipment"
+from trytond.model import ModelWorkflow, ModelView, ModelSQL, fields
from trytond.report import CompanyReport
+from trytond.wizard import Wizard
+from trytond.backend import TableHandler
+import datetime
STATES = {
'readonly': "state in ('cancel', 'done')",
}
-class PackingIn(OSV):
- "Supplier Packing"
+class PackingIn(ModelWorkflow, ModelSQL, ModelView):
+ "Supplier Shipment"
_name = 'stock.packing.in'
_description = __doc__
_rec_name = 'code'
@@ -25,7 +26,8 @@ class PackingIn(OSV):
states={'readonly': "state != 'draft'",})
supplier = fields.Many2One('party.party', 'Supplier',
states={
- 'readonly': "state != 'draft' or bool(incoming_moves)",
+ 'readonly': "(state != 'draft' or bool(incoming_moves)) " \
+ "and bool(supplier)",
}, on_change=['supplier'], required=True)
contact_address = fields.Many2One('party.address', 'Contact Address',
states={
@@ -46,8 +48,10 @@ class PackingIn(OSV):
"('to_location_warehouse', '=', warehouse),"\
"]",
states={
- 'readonly': "state in ('received', 'done', 'cancel')",
- }, context="{'warehouse': warehouse, 'type': 'incoming'}")
+ 'readonly': "state in ('received', 'done', 'cancel') "\
+ "or not bool(warehouse)",
+ }, context="{'warehouse': warehouse, 'type': 'incoming'," \
+ "'supplier': supplier}")
inventory_moves = fields.Function('get_inventory_moves', type='one2many',
relation='stock.move', string='Inventory Moves',
fnct_inv='set_inventory_moves',
@@ -60,25 +64,21 @@ class PackingIn(OSV):
state = fields.Selection([
('draft', 'Draft'),
('done', 'Done'),
- ('cancel', 'Cancel'),
+ ('cancel', 'Canceled'),
('received', 'Received'),
], 'State', readonly=True)
def __init__(self):
super(PackingIn, self).__init__()
- self._rpc_allowed += [
- 'button_draft',
- ]
+ self._rpc.update({
+ 'button_draft': True,
+ })
self._order[0] = ('id', 'DESC')
self._error_messages.update({
'incoming_move_input_dest': 'Incoming Moves must ' \
- 'have input location as destination location!',
+ 'have the warehouse input location as destination location!',
'inventory_move_input_source': 'Inventory Moves must ' \
- 'have input location as source location!',
- 'outgoing_move_output_source': 'Outgoing Moves must ' \
- 'have output location as source location!',
- 'inventory_move_output_dest': 'Inventory Moves must ' \
- 'have output location as destination location!',
+ 'have the warehouse input location as source location!',
})
def default_state(self, cursor, user, context=None):
@@ -87,10 +87,9 @@ class PackingIn(OSV):
def default_warehouse(self, cursor, user, context=None):
location_obj = self.pool.get('stock.location')
location_ids = location_obj.search(cursor, user,
- self.warehouse._domain, context=context)
+ self.warehouse.domain, context=context)
if len(location_ids) == 1:
- return location_obj.name_get(cursor, user, location_ids,
- context=context)[0]
+ return location_ids[0]
return False
def on_change_supplier(self, cursor, user, ids, values, context=None):
@@ -118,6 +117,7 @@ class PackingIn(OSV):
return
packing = self.browse(cursor, user, packing_id, context=context)
+ move_ids = []
for act in value:
if act[0] == 'create':
if 'to_location' in act[1]:
@@ -132,18 +132,17 @@ class PackingIn(OSV):
self.raise_user_error(cursor,
'incoming_move_input_dest', context=context)
elif act[0] == 'add':
- move = move_obj.browse(cursor, user, act[1], context=context)
- if move.to_location.id != \
- packing.warehouse.input_location.id:
- self.raise_user_error(cursor,
- 'incoming_move_input_dest', context=context)
+ move_ids.append(act[1])
elif act[0] == 'set':
- moves = move_obj.browse(cursor, user, act[1], context=context)
- for move in moves:
- if move.to_location.id != \
- packing.warehouse.input_location.id:
- self.raise_user_error(cursor,
- 'incoming_move_input_dest', context=context)
+ move_ids.extend(act[1])
+
+ moves = move_obj.browse(cursor, user, move_ids, context=context)
+ for move in moves:
+ if move.to_location.id != \
+ packing.warehouse.input_location.id:
+ self.raise_user_error(cursor,
+ 'incoming_move_input_dest', context=context)
+
self.write(cursor, user, packing_id, {
'moves': value,
}, context=context)
@@ -165,6 +164,7 @@ class PackingIn(OSV):
return
packing = self.browse(cursor, user, packing_id, context=context)
+ move_ids = []
for act in value:
if act[0] == 'create':
if 'from_location' in act[1]:
@@ -179,18 +179,17 @@ class PackingIn(OSV):
self.raise_user_error(cursor,
'inventory_move_input_source', context=context)
elif act[0] == 'add':
- move = move_obj.browse(cursor, user, act[1], context=context)
- if move.from_location.id != \
- packing.warehouse.input_location.id:
- self.raise_user_error(cursor,
- 'inventory_move_input_source', context=context)
+ move_ids.append(act[1])
elif act[0] == 'set':
- moves = move_obj.browse(cursor, user, act[1], context=context)
- for move in moves:
- if move.from_location.id != \
- packing.warehouse.input_location.id:
- self.raise_user_error(cursor,
- 'inventory_move_input_source', context=context)
+ move_ids.extend(act[1])
+
+ moves = move_obj.browse(cursor, user, move_ids, context=context)
+ for move in moves:
+ if move.from_location.id != \
+ packing.warehouse.input_location.id:
+ self.raise_user_error(cursor,
+ 'inventory_move_input_source', context=context)
+
self.write(cursor, user, packing_id, {
'moves': value,
}, context=context)
@@ -199,7 +198,9 @@ class PackingIn(OSV):
move_obj = self.pool.get('stock.move')
packing = self.browse(cursor, user, packing_id, context=context)
move_obj.write(
- cursor, user, [m.id for m in packing.inventory_moves],
+ cursor, user,
+ [m.id for m in packing.inventory_moves \
+ if m.state not in ('done', 'cancel')],
{'state': 'done'}, context)
self.write(cursor, user, packing_id,{
'state': 'done',
@@ -210,9 +211,12 @@ class PackingIn(OSV):
move_obj = self.pool.get('stock.move')
packing = self.browse(cursor, user, packing_id, context=context)
move_obj.write(
- cursor, user, [m.id for m in packing.incoming_moves] +\
- [m.id for m in packing.inventory_moves], {'state': 'cancel'},
- context)
+ cursor, user,
+ [m.id for m in packing.incoming_moves \
+ if m.state != 'cancel'] +\
+ [m.id for m in packing.inventory_moves \
+ if m.state != 'cancel'],
+ {'state': 'cancel'}, context)
self.write(cursor, user, packing_id, {'state': 'cancel'},
context=context)
@@ -220,7 +224,9 @@ class PackingIn(OSV):
move_obj = self.pool.get('stock.move')
packing = self.browse(cursor, user, packing_id, context=context)
move_obj.write(
- cursor, user, [m.id for m in packing.incoming_moves],
+ cursor, user,
+ [m.id for m in packing.incoming_moves \
+ if m.state not in ('done', 'cancel')],
{'state': 'done'}, context=context)
self.write(cursor, user, packing_id, {
'state': 'received'
@@ -242,17 +248,17 @@ class PackingIn(OSV):
def create(self, cursor, user, values, context=None):
values = values.copy()
values['code'] = self.pool.get('ir.sequence').get(
- cursor, user, 'stock.packing.in')
+ cursor, user, 'stock.packing.in', context=context)
return super(PackingIn, self).create(
cursor, user, values, context=context)
- def copy(self, cursor, user, packing_id, default=None, context=None):
+ def copy(self, cursor, user, ids, default=None, context=None):
if default is None:
default = {}
default = default.copy()
default['inventory_moves']= False
default['incoming_moves']= False
- return super(PackingIn, self).copy(cursor, user, packing_id,
+ return super(PackingIn, self).copy(cursor, user, ids,
default=default, context=context)
def _get_inventory_moves(self, cursor, user, incoming_move, context=None):
@@ -280,29 +286,181 @@ class PackingIn(OSV):
}, context=context)
def button_draft(self, cursor, user, ids, context=None):
- workflow_service = LocalService('workflow')
- for packing in self.browse(cursor, user, ids, context=context):
- workflow_service.trg_create(user, self._name, packing.id, cursor,
- context=context)
+ self.workflow_trigger_create(cursor, user, ids, context=context)
return True
PackingIn()
-class PackingOut(OSV):
- "Customer Packing"
- _name = 'stock.packing.out'
+class PackingInReturn(ModelWorkflow, ModelSQL, ModelView):
+ "Supplier Return Shipment"
+ _name = 'stock.packing.in.return'
_description = __doc__
_rec_name = 'code'
effective_date =fields.Date('Effective Date', readonly=True)
+ planned_date = fields.Date(
+ 'Planned Date', states={'readonly': "state != 'draft'",})
+ code = fields.Char("Code", size=None, select=1, readonly=True)
+ reference = fields.Char(
+ "Reference", size=None, select=1,
+ states={'readonly': "state != 'draft'",})
+ from_location = fields.Many2One(
+ 'stock.location', "From Location", required=True,
+ states={ 'readonly': "state != 'draft' or bool(moves)", },
+ domain=[('type', '=', 'storage')])
+ to_location = fields.Many2One('stock.location', "To Location",
+ required=True, states={
+ 'readonly': "state != 'draft' or bool(moves)",
+ }, domain=[('type', '=', 'supplier')])
+ moves = fields.One2Many(
+ 'stock.move', 'packing_in_return', 'Moves',
+ states={'readonly': "state != 'draft' or "\
+ "not(bool(from_location) and bool (to_location))"},
+ context="{'from_location': from_location,"
+ "'to_location': to_location,"
+ "'planned_date': planned_date}",
+ )
+ state = fields.Selection([
+ ('draft', 'Draft'),
+ ('cancel', 'Canceled'),
+ ('assigned', 'Assigned'),
+ ('waiting', 'Waiting'),
+ ('done', 'Done'),
+ ], 'State', readonly=True)
+
+ def default_state(self, cursor, user, context=None):
+ return 'draft'
+
+ def button_draft(self, cursor, user, ids, context=None):
+ self.workflow_trigger_create(cursor, user, ids, context=context)
+ return True
+
+ def __init__(self):
+ super(PackingInReturn, self).__init__()
+ self._rpc.update({
+ 'button_draft': True,
+ })
+ self._order[0] = ('id', 'DESC')
+
+ def create(self, cursor, user, values, context=None):
+ values = values.copy()
+ values['code'] = self.pool.get('ir.sequence').get(
+ cursor, user, 'stock.packing.in.return', context=context)
+ return super(PackingInReturn, self).create(
+ cursor, user, values, context=context)
+
+ def set_state_draft(self, cursor, user, packing_id, context=None):
+ move_obj = self.pool.get('stock.move')
+ packing = self.browse(cursor, user, packing_id, context=context)
+ self.write(
+ cursor, user, packing_id, {'state': 'draft'}, context=context)
+ move_obj.write(
+ cursor, user, [m.id for m in packing.moves if m.state != 'draft'],
+ {'state': 'draft'}, context=context)
+
+ def set_state_waiting(self, cursor, user, packing_id, context=None):
+ move_obj = self.pool.get('stock.move')
+ packing = self.browse(cursor, user, packing_id, context=context)
+ move_obj.write(
+ cursor, user,
+ [m.id for m in packing.moves if m.state not in ('cancel', 'draft')],
+ {'state': 'draft', 'planned_date': packing.planned_date,},
+ context=context)
+
+ self.write(
+ cursor, user, packing_id, {'state': 'waiting'}, context=context)
+
+ def set_state_assigned(self, cursor, user, packing_id, context=None):
+ self.write(
+ cursor, user, packing_id, {'state': 'assigned'}, context=context)
+
+ def set_state_done(self, cursor, user, packing_id, context=None):
+ move_obj = self.pool.get('stock.move')
+ packing = self.browse(cursor, user, packing_id, context=context)
+ move_obj.write(
+ cursor, user,
+ [m.id for m in packing.moves if m.state not in ('done', 'cancel')],
+ {'state': 'done'}, context=context)
+ self.write(cursor, user, packing_id,
+ {'state': 'done',
+ 'effective_date': datetime.date.today()},
+ context=context)
+
+ def set_state_cancel(self, cursor, user, packing_id, context=None):
+ move_obj = self.pool.get('stock.move')
+ packing = self.browse(cursor, user, packing_id, context=context)
+ move_obj.write(
+ cursor, user, [m.id for m in packing.moves if m.state != 'cancel'],
+ {'state': 'cancel'}, context=context)
+ self.write(
+ cursor, user, packing_id, {'state': 'cancel'}, context=context)
+
+ def assign_try(self, cursor, user, packing_id, context=None):
+ product_obj = self.pool.get('product.product')
+ uom_obj = self.pool.get('product.uom')
+ date_obj = self.pool.get('ir.date')
+ move_obj = self.pool.get('stock.move')
+
+ packing = self.browse(cursor, user, packing_id, context=context)
+
+ cursor.execute('LOCK TABLE stock_move')
+
+ local_ctx = context and context.copy() or {}
+ local_ctx['stock_date_end'] = date_obj.today(cursor, user,
+ context=context)
+ local_ctx['stock_assign'] = True
+ location_ids = [m.from_location.id for m in packing.moves]
+ pbl = product_obj.products_by_location(cursor, user,
+ location_ids=location_ids,
+ product_ids=[m.product.id for m in packing.moves],
+ context=local_ctx)
+
+ for move in packing.moves:
+ if move.state != 'draft':
+ continue
+ if (move.from_location.id, move.product.id) in pbl:
+ qty_default_uom = pbl[(move.from_location.id, move.product.id)]
+ qty = uom_obj.compute_qty(
+ cursor, user, move.product.default_uom, qty_default_uom,
+ move.uom, round=False, context=context)
+ if qty < move.quantity:
+ return False
+ pbl[(move.from_location.id, move.product.id)] = \
+ pbl[(move.from_location.id, move.product.id)] - qty_default_uom
+ else:
+ return False
+
+ move_obj.write(cursor, user, [m.id for m in packing.moves],
+ {'state': 'assigned'}, context=context)
+ return True
+
+ def assign_force(self, cursor, user, packing_id, context=None):
+ packing = self.browse(cursor, user, packing_id, context=context)
+ move_obj = self.pool.get('stock.move')
+ move_obj.write(cursor, user, [m.id for m in packing.moves], {
+ 'state': 'assigned',
+ }, context=context)
+ return True
+
+
+PackingInReturn()
+
+
+class PackingOut(ModelWorkflow, ModelSQL, ModelView):
+ "Customer Shipment"
+ _name = 'stock.packing.out'
+ _description = __doc__
+ _rec_name = 'code'
+
+ effective_date = fields.Date('Effective Date', readonly=True)
planned_date = fields.Date('Planned Date',
states={
'readonly': "state != 'draft'",
})
customer = fields.Many2One('party.party', 'Customer', required=True,
states={
- 'readonly': "state != 'draft'",
+ 'readonly': "state != 'draft' or bool(outgoing_moves)",
}, on_change=['customer'])
delivery_address = fields.Many2One('party.address',
'Delivery Address', required=True,
@@ -315,23 +473,20 @@ class PackingOut(OSV):
})
warehouse = fields.Many2One('stock.location', "Warehouse", required=True,
states={
- 'readonly': "state != 'draft'",
+ 'readonly': "state != 'draft' or bool(outgoing_moves)",
}, domain=[('type', '=', 'warehouse')])
- customer_location = fields.Many2One('stock.location', "Customer Location",
- required=True, states={
- 'readonly': "state != 'draft'",
- }, domain="[('type', '=', 'customer')]")
outgoing_moves = fields.Function('get_outgoing_moves', type='one2many',
relation='stock.move', string='Outgoing Moves',
fnct_inv='set_outgoing_moves',
states={
- 'readonly':"state != 'packed'",
- }, context="{'warehouse': warehouse, 'type': 'outgoing',}")
+ 'readonly':"state != 'draft' or not bool(warehouse)",
+ }, context="{'warehouse': warehouse, 'type': 'outgoing'," \
+ "'customer': customer}")
inventory_moves = fields.Function('get_inventory_moves', type='one2many',
relation='stock.move', string='Inventory Moves',
fnct_inv='set_inventory_moves',
states={
- 'readonly':"state in ('packed', 'done')",
+ 'readonly':"state in ('draft', 'packed', 'done')",
}, context="{'warehouse': warehouse, 'type': 'inventory_out',}")
moves = fields.One2Many('stock.move', 'packing_out', 'Moves',
readonly=True)
@@ -339,7 +494,7 @@ class PackingOut(OSV):
state = fields.Selection([
('draft', 'Draft'),
('done', 'Done'),
- ('cancel', 'Cancel'),
+ ('cancel', 'Canceled'),
('assigned', 'Assigned'),
('packed', 'Packed'),
('waiting', 'Waiting'),
@@ -347,35 +502,37 @@ class PackingOut(OSV):
def __init__(self):
super(PackingOut, self).__init__()
- self._rpc_allowed += [
- 'button_draft',
- ]
+ self._rpc.update({
+ 'button_draft': True,
+ })
self._order[0] = ('id', 'DESC')
+ def init(self, cursor, module_name):
+ super(PackingOut, self).init(cursor, module_name)
+ table = TableHandler(cursor, self, module_name)
+
+ # Migration from 1.0 customer_location is no more used
+ table.drop_column('customer_location', exception=True)
+
def default_state(self, cursor, user, context=None):
return 'draft'
def default_warehouse(self, cursor, user, context=None):
location_obj = self.pool.get('stock.location')
location_ids = location_obj.search(cursor, user,
- self.warehouse._domain, context=context)
+ self.warehouse.domain, context=context)
if len(location_ids) == 1:
- return location_obj.name_get(cursor, user, location_ids,
- context=context)[0]
+ return location_ids[0]
return False
def on_change_customer(self, cursor, user, ids, values, context=None):
if not values.get('customer'):
- return {'delivery_address': False,
- 'customer_location': False}
+ return {'delivery_address': False}
party_obj = self.pool.get("party.party")
address_id = party_obj.address_get(cursor, user, values['customer'],
type='delivery', context=context)
- party = party_obj.browse(cursor, user, values['customer'], context=context)
return {
- 'delivery_address': address_id,
- 'customer_location': party.customer_location.id,
- }
+ 'delivery_address': address_id}
def get_outgoing_moves(self, cursor, user, ids, name, arg, context=None):
res = {}
@@ -395,6 +552,7 @@ class PackingOut(OSV):
return
packing = self.browse(cursor, user, packing_id, context=context)
+ move_ids = []
for act in value:
if act[0] == 'create':
if 'from_location' in act[1]:
@@ -409,18 +567,16 @@ class PackingOut(OSV):
self.raise_user_error(cursor,
'outgoing_move_output_source', context=context)
elif act[0] == 'add':
- move = move_obj.browse(cursor, user, act[1], context=context)
- if move.from_location.id != \
- packing.warehouse.output_location.id:
- self.raise_user_error(cursor,
- 'outgoing_move_output_source', context=context)
+ move_ids.append(act[1])
elif act[0] == 'set':
- moves = move_obj.browse(cursor, user, act[1], context=context)
- for move in moves:
- if move.from_location.id != \
- packing.warehouse.output_location.id:
- self.raise_user_error(cursor,
- 'outgoing_move_output_source', context=context)
+ move_ids.extend(act[1])
+
+ moves = move_obj.browse(cursor, user, move_ids, context=context)
+ for move in moves:
+ if move.from_location.id != \
+ packing.warehouse.output_location.id:
+ self.raise_user_error(cursor,
+ 'outgoing_move_output_source', context=context)
self.write(cursor, user, packing_id, {
'moves': value,
}, context=context)
@@ -443,6 +599,7 @@ class PackingOut(OSV):
return
packing = self.browse(cursor, user, packing_id, context=context)
+ move_ids = []
for act in value:
if act[0] == 'create':
if 'to_location' in act[1]:
@@ -457,18 +614,16 @@ class PackingOut(OSV):
self.raise_user_error(cursor,
'inventory_move_output_dest', context=context)
elif act[0] == 'add':
- move = move_obj.browse(cursor, user, act[1], context=context)
- if move.to_location.id != \
- packing.warehouse.output_location.id:
- self.raise_user_error(cursor,
- 'inventory_move_output_dest', context=context)
+ move_ids.append(act[1])
elif act[0] == 'set':
- moves = move_obj.browse(cursor, user, act[1], context=context)
- for move in moves:
- if move.to_location.id != \
- packing.warehouse.output_location.id:
- self.raise_user_error(cursor,
- 'inventory_move_output_dest', context=context)
+ move_ids.extend(act[1])
+
+ moves = move_obj.browse(cursor, user, move_ids, context=context)
+ for move in moves:
+ if move.to_location.id != \
+ packing.warehouse.output_location.id:
+ self.raise_user_error(cursor,
+ 'inventory_move_output_dest', context=context)
self.write(cursor, user, packing_id, {
'moves': value,
}, context=context)
@@ -484,14 +639,16 @@ class PackingOut(OSV):
cursor, user, packing_id, {'state': 'draft'}, context=context)
move_obj.write(
cursor, user,
- [m.id for m in packing.inventory_moves + packing.outgoing_moves],
+ [m.id for m in packing.inventory_moves + packing.outgoing_moves \
+ if m.state != 'draft'],
{'state': 'draft'}, context=context)
def set_state_done(self, cursor, user, packing_id, context=None):
move_obj = self.pool.get('stock.move')
packing = self.browse(cursor, user, packing_id, context=context)
- move_obj.write(cursor, user,
- [m.id for m in packing.outgoing_moves if m.state == 'draft'],
+ move_obj.write(
+ cursor, user, [m.id for m in packing.outgoing_moves \
+ if m.state not in ('done', 'cancel')],
{'state': 'done'}, context=context)
self.write(cursor, user, packing_id, {
'state': 'done',
@@ -503,7 +660,8 @@ class PackingOut(OSV):
uom_obj = self.pool.get('product.uom')
packing = self.browse(cursor, user, packing_id, context=context)
move_obj.write(
- cursor, user, [m.id for m in packing.inventory_moves],
+ cursor, user, [m.id for m in packing.inventory_moves \
+ if m.state not in ('done', 'cancel')],
{'state': 'done'}, context=context)
self.write(cursor, user, packing_id, {'state': 'packed'},
context=context)
@@ -513,7 +671,7 @@ class PackingOut(OSV):
if move.state == 'cancel': continue
quantity = uom_obj.compute_qty(
cursor, user, move.uom, move.quantity, move.product.default_uom,
- context=context)
+ round=False, context=context)
outgoing_qty.setdefault(move.product.id, 0.0)
outgoing_qty[move.product.id] += quantity
@@ -521,7 +679,7 @@ class PackingOut(OSV):
if move.state == 'cancel': continue
qty_default_uom = uom_obj.compute_qty(
cursor, user, move.uom, move.quantity, move.product.default_uom,
- context=context)
+ round=False, context=context)
# Check if the outgoing move doesn't exist already
if outgoing_qty.get(move.product.id):
# If it exist, decrease the sum
@@ -543,7 +701,7 @@ class PackingOut(OSV):
move.uom, context=context)
move_obj.create(cursor, user, {
'from_location': move.to_location.id,
- 'to_location': packing.customer_location.id,
+ 'to_location': packing.customer.customer_location.id,
'product': move.product.id,
'uom': move.uom.id,
'quantity': out_quantity,
@@ -567,16 +725,21 @@ class PackingOut(OSV):
}, context=context)
removed_qty = uom_obj.compute_qty(
cursor, user, move.uom, min(exc_qty, move.quantity),
- move.product.default_uom, context=context)
+ move.product.default_uom, round=False, context=context)
outgoing_qty[move.product.id] -= removed_qty
+ move_obj.write(cursor, user, [x.id for x in packing.outgoing_moves
+ if x.state != 'cancel'], {
+ 'state': 'assigned',
+ }, context=context)
def set_state_cancel(self, cursor, user, packing_id, context=None):
move_obj = self.pool.get('stock.move')
packing = self.browse(cursor, user, packing_id, context=context)
move_obj.write(
- cursor, user,[m.id for m in packing.outgoing_moves] +\
- [m.id for m in packing.inventory_moves],
+ cursor, user,
+ [m.id for m in packing.outgoing_moves + packing.inventory_moves \
+ if m.state != 'cancel'],
{'state': 'cancel'}, context=context)
self.write(cursor, user, packing_id, {'state': 'cancel'},
context=context)
@@ -592,60 +755,48 @@ class PackingOut(OSV):
self.write(
cursor, user, packing_id, {'state': 'waiting'}, context=context)
- # Sum all inventory quantities
- inventory_qty = {}
- for move in packing.inventory_moves:
- if move.state == 'cancel': continue
- quantity = uom_obj.compute_qty(
- cursor, user, move.uom, move.quantity, move.product.default_uom,
- context=context)
- inventory_qty.setdefault(move.product.id, 0.0)
- inventory_qty[move.product.id] += quantity
+ if packing.inventory_moves:
+ move_obj.write(cursor, user,
+ [x.id for x in packing.inventory_moves], {
+ 'state': 'draft',
+ }, context=context)
+ move_obj.delete(cursor, user,
+ [x.id for x in packing.inventory_moves], context=context)
+
+ # Re-Browse because moves have been deleted
+ packing = self.browse(cursor, user, packing_id, context=context)
for move in packing.outgoing_moves:
- if move.state in ('cancel', 'done'): continue
+ if move.state in ('cancel', 'done'):
+ continue
qty_default_uom = uom_obj.compute_qty(
cursor, user, move.uom, move.quantity, move.product.default_uom,
context=context)
- # Check if the inventory move doesn't exist already
- if inventory_qty.get(move.product.id):
- # If it exist, decrease the sum
- if qty_default_uom <= inventory_qty[move.product.id]:
- inventory_qty[move.product.id] -= qty_default_uom
- continue
- # Else create the complement
- else:
- inv_quantity = qty_default_uom - inventory_qty[move.product.id]
- inv_quantity = uom_obj.compute_qty(
- cursor, user, move.product.default_uom, inv_quantity,
- move.uom, context=context)
- inventory_qty[move.product.id] = 0.0
- else:
- inv_quantity = move.quantity
-
move_obj.create(cursor, user, {
'from_location': move.packing_out.warehouse.storage_location.id,
'to_location': move.from_location.id,
'product': move.product.id,
'uom': move.uom.id,
- 'quantity': inv_quantity,
+ 'quantity': move.quantity,
'packing_out': packing.id,
'state': 'draft',
'company': move.company.id,
}, context=context)
def create(self, cursor, user, values, context=None):
+ values = values.copy()
values['code'] = self.pool.get('ir.sequence').get(
- cursor, user, 'stock.packing.out')
+ cursor, user, 'stock.packing.out', context=context)
return super(PackingOut, self).create(cursor, user, values,
- context=context)
- def copy(self, cursor, user, packing_id, default=None, context=None):
+ context=context)
+
+ def copy(self, cursor, user, ids, default=None, context=None):
if default is None:
default = {}
default = default.copy()
default['inventory_moves']= False
default['outgoing_moves']= False
- return super(PackingOut, self).copy(cursor, user, packing_id,
+ return super(PackingOut, self).copy(cursor, user, ids,
default=default, context=context)
@@ -664,9 +815,9 @@ class PackingOut(OSV):
return res
def assign_try(self, cursor, user, packing_id, context=None):
- product_obj = self.pool.get('product.product')
+ move_obj = self.pool.get('stock.move')
packing = self.browse(cursor, user, packing_id, context=context)
- return product_obj.assign_try(
+ return move_obj.assign_try(
cursor, user, packing.inventory_moves, context=context)
def assign_force(self, cursor, user, packing_id, context=None):
@@ -678,95 +829,437 @@ class PackingOut(OSV):
return True
def button_draft(self, cursor, user, ids, context=None):
- workflow_service = LocalService('workflow')
- for packing in self.browse(cursor, user, ids, context=context):
- workflow_service.trg_create(user, self._name, packing.id, cursor,
- context=context)
+ self.workflow_trigger_create(cursor, user, ids, context=context)
PackingOut()
-class PackingInternal(OSV):
- "Internal Packing"
- _name = 'stock.packing.internal'
+
+class PackingOutReturn(ModelWorkflow, ModelSQL, ModelView):
+ "Customer Return Shipment"
+ _name = 'stock.packing.out.return'
_description = __doc__
_rec_name = 'code'
- effective_date =fields.Date('Effective Date', readonly=True)
- planned_date = fields.Date(
- 'Planned Date', states={'readonly': "state != 'draft'",})
+ effective_date = fields.Date('Effective Date', readonly=True)
+ planned_date = fields.Date('Planned Date',
+ states={
+ 'readonly': "state != 'draft'",
+ })
+ customer = fields.Many2One('party.party', 'Customer', required=True,
+ states={
+ 'readonly': "state != 'draft' or bool(incoming_moves)",
+ }, on_change=['customer'])
+ delivery_address = fields.Many2One('party.address',
+ 'Delivery Address', required=True,
+ states={
+ 'readonly': "state != 'draft'",
+ }, domain="[('party', '=', customer)]")
+ reference = fields.Char("Reference", size=None, select=1,
+ states={
+ 'readonly': "state != 'draft'",
+ })
+ warehouse = fields.Many2One('stock.location', "Warehouse", required=True,
+ states={
+ 'readonly': "state != 'draft' or bool(incoming_moves)",
+ }, domain=[('type', '=', 'warehouse')])
+ incoming_moves = fields.Function('get_incoming_moves', type='one2many',
+ relation='stock.move', string='Incoming Moves',
+ fnct_inv='set_incoming_moves',
+ states={
+ 'readonly':"state != 'draft'",
+ }, context="{'warehouse': warehouse, 'type': 'incoming'," \
+ "'customer': customer}")
+ inventory_moves = fields.Function('get_inventory_moves', type='one2many',
+ relation='stock.move', string='Inventory Moves',
+ fnct_inv='set_inventory_moves',
+ states={
+ 'readonly':"state in ('draft', 'cancel', 'done')",
+ }, context="{'warehouse': warehouse, 'type': 'inventory_out',}")
+ moves = fields.One2Many('stock.move', 'packing_out_return', 'Moves',
+ readonly=True)
code = fields.Char("Code", size=None, select=1, readonly=True)
- reference = fields.Char(
- "Reference", size=None, select=1,
- states={'readonly': "state != 'draft'",})
- from_location = fields.Many2One(
- 'stock.location', "From Location", required=True,
- states={ 'readonly': "state != 'draft' or bool(moves)", },
- domain="[('type', 'not in', " \
- "('supplier', 'customer', 'warehouse'))]")
- to_location = fields.Many2One('stock.location', "To Location",
- required=True, states={
- 'readonly': "state != 'draft' or bool(moves)",
- }, domain="[('type', 'not in', " \
- "('supplier', 'customer', 'warehouse'))]")
- moves = fields.One2Many(
- 'stock.move', 'packing_internal', 'Moves',
- states={'readonly': "state != 'draft' or "\
- "not(bool(from_location) and bool (to_location))"},
- context="{'from_location': from_location,"
- "'to_location': to_location,"
- "'planned_date': planned_date}",
- )
state = fields.Selection([
('draft', 'Draft'),
- ('cancel', 'Cancel'),
- ('assigned', 'Assigned'),
- ('waiting', 'Waiting'),
('done', 'Done'),
+ ('cancel', 'Canceled'),
+ ('received', 'Received'),
], 'State', readonly=True)
- def default_state(self, cursor, user, context=None):
- return 'draft'
-
- def button_draft(self, cursor, user, ids, context=None):
- workflow_service = LocalService('workflow')
- for packing in self.browse(cursor, user, ids, context=context):
- workflow_service.trg_create(user, self._name, packing.id, cursor,
- context=context)
- return True
-
def __init__(self):
- super(PackingInternal, self).__init__()
- self._rpc_allowed += [
- 'button_draft',
- ]
+ super(PackingOutReturn, self).__init__()
+ self._rpc.update({
+ 'button_draft': True,
+ })
self._order[0] = ('id', 'DESC')
+ self._error_messages.update({
+ 'incoming_move_input_dest': 'Incoming Moves must ' \
+ 'have the warehouse input location as destination location!',
+ 'inventory_move_input_source': 'Inventory Moves must ' \
+ 'have the warehouse input location as source location!',
+ })
- def create(self, cursor, user, values, context=None):
- values = values.copy()
- values['code'] = self.pool.get('ir.sequence').get(
- cursor, user, 'stock.packing.internal', context=context)
- return super(PackingInternal, self).create(
- cursor, user, values, context=context)
- def set_state_draft(self, cursor, user, packing_id, context=None):
- move_obj = self.pool.get('stock.move')
- packing = self.browse(cursor, user, packing_id, context=context)
- self.write(
- cursor, user, packing_id, {'state': 'draft'}, context=context)
- move_obj.write(
- cursor, user, [m.id for m in packing.moves], {'state': 'draft'},
- context=context)
+ def default_state(self, cursor, user, context=None):
+ return 'draft'
- def set_state_waiting(self, cursor, user, packing_id, context=None):
+ def default_warehouse(self, cursor, user, context=None):
+ location_obj = self.pool.get('stock.location')
+ location_ids = location_obj.search(cursor, user,
+ self.warehouse.domain, context=context)
+ if len(location_ids) == 1:
+ return location_ids[0]
+ return False
+
+ def on_change_customer(self, cursor, user, ids, values, context=None):
+ if not values.get('customer'):
+ return {'delivery_address': False}
+ party_obj = self.pool.get("party.party")
+ address_id = party_obj.address_get(cursor, user, values['customer'],
+ type='delivery', context=context)
+ party = party_obj.browse(cursor, user, values['customer'], context=context)
+ return {
+ 'delivery_address': address_id,
+ }
+
+ def get_incoming_moves(self, cursor, user, ids, name, arg, context=None):
+ res = {}
+ for packing in self.browse(cursor, user, ids, context=context):
+ res[packing.id] = []
+ for move in packing.moves:
+ if move.to_location.id == \
+ packing.warehouse.input_location.id:
+ res[packing.id].append(move.id)
+ return res
+
+ def set_incoming_moves(self, cursor, user, packing_id, name, value, arg,
+ context=None):
+ move_obj = self.pool.get('stock.move')
+
+ if not value:
+ return
+
+ packing = self.browse(cursor, user, packing_id, context=context)
+ move_ids = []
+ for act in value:
+ if act[0] == 'create':
+ if 'to_location' in act[1]:
+ if act[1]['to_location'] != \
+ packing.warehouse.input_location.id:
+ self.raise_user_error(cursor,
+ 'incoming_move_input_dest', context=context)
+ elif act[0] == 'write':
+ if 'to_location' in act[2]:
+ if act[2]['to_location'] != \
+ packing.warehouse.input_location.id:
+ self.raise_user_error(cursor,
+ 'incoming_move_input_dest', context=context)
+ elif act[0] == 'add':
+ move_ids.append(act[1])
+ elif act[0] == 'set':
+ move_ids.extend(act[1])
+
+ moves = move_obj.browse(cursor, user, move_ids, context=context)
+ for move in moves:
+ if move.to_location.id != \
+ packing.warehouse.input_location.id:
+ self.raise_user_error(cursor,
+ 'incoming_move_input_dest', context=context)
+ self.write(cursor, user, packing_id, {
+ 'moves': value,
+ }, context=context)
+
+ def get_inventory_moves(self, cursor, user, ids, name, arg, context=None):
+ res = {}
+ for packing in self.browse(cursor, user, ids, context=context):
+ res[packing.id] = []
+ for move in packing.moves:
+ if move.from_location.id == \
+ packing.warehouse.input_location.id:
+ res[packing.id].append(move.id)
+ return res
+
+ def set_inventory_moves(self, cursor, user, packing_id, name, value, arg,
+ context=None):
+ move_obj = self.pool.get('stock.move')
+
+ if not value:
+ return
+
+ packing = self.browse(cursor, user, packing_id, context=context)
+ move_ids = []
+ for act in value:
+ if act[0] == 'create':
+ if 'from_location' in act[1]:
+ if act[1]['from_location'] != \
+ packing.warehouse.input_location.id:
+ self.raise_user_error(cursor,
+ 'inventory_move_input_source', context=context)
+ elif act[0] == 'write':
+ if 'from_location' in act[2]:
+ if act[2]['from_location'] != \
+ packing.warehouse.input_location.id:
+ self.raise_user_error(cursor,
+ 'inventory_move_input_source', context=context)
+ elif act[0] == 'add':
+ move_ids.append(act[1])
+ elif act[0] == 'set':
+ move_ids.extend(act[1])
+
+ moves = move_obj.browse(cursor, user, move_ids, context=context)
+ for move in moves:
+ if move.from_location.id != \
+ packing.warehouse.input_location.id:
+ self.raise_user_error(cursor,
+ 'inventory_move_input_source', context=context)
+ self.write(cursor, user, packing_id, {
+ 'moves': value,
+ }, context=context)
+
+ def create(self, cursor, user, values, context=None):
+ values = values.copy()
+ values['code'] = self.pool.get('ir.sequence').get(
+ cursor, user, 'stock.packing.out.return', context=context)
+ return super(PackingOutReturn, self).create(cursor, user, values,
+ context=context)
+
+ def copy(self, cursor, user, ids, default=None, context=None):
+ if default is None:
+ default = {}
+ default = default.copy()
+ default['inventory_moves']= False
+ default['incoming_moves']= False
+ return super(PackingOutReturn, self).copy(cursor, user, ids,
+ default=default, context=context)
+
+
+ def button_draft(self, cursor, user, ids, context=None):
+ self.workflow_trigger_create(cursor, user, ids, context=context)
+
+ def set_state_done(self, cursor, user, packing_id, context=None):
+ move_obj = self.pool.get('stock.move')
+ packing = self.browse(cursor, user, packing_id, context=context)
+ move_obj.write(
+ cursor, user,
+ [m.id for m in packing.inventory_moves \
+ if m.state not in ('done', 'cancel')],
+ {'state': 'done'}, context)
+ self.write(cursor, user, packing_id,{
+ 'state': 'done',
+ 'effective_date': datetime.date.today(),
+ }, context=context)
+
+ def set_state_cancel(self, cursor, user, packing_id, context=None):
+ move_obj = self.pool.get('stock.move')
+ packing = self.browse(cursor, user, packing_id, context=context)
+ move_obj.write(
+ cursor, user,
+ [m.id for m in packing.incoming_moves + packing.inventory_moves \
+ if m.state != 'cancel'],
+ {'state': 'cancel'}, context)
+ self.write(cursor, user, packing_id, {'state': 'cancel'},
+ context=context)
+
+ def set_state_received(self, cursor, user, packing_id, context=None):
+ move_obj = self.pool.get('stock.move')
+ packing = self.browse(cursor, user, packing_id, context=context)
+ move_obj.write(
+ cursor, user,
+ [m.id for m in packing.incoming_moves \
+ if m.state not in ('done', 'cancel')],
+ {'state': 'done'}, context=context)
+ self.write(cursor, user, packing_id, {
+ 'state': 'received'
+ }, context=context)
+
+ def set_state_draft(self, cursor, user, packing_id, context=None):
+ move_obj = self.pool.get('stock.move')
+ packing = self.browse(cursor, user, packing_id, context=context)
+ move_obj.write(cursor, user, [m.id for m in packing.incoming_moves
+ if m.state != 'draft'], {
+ 'state': 'draft',
+ }, context=context)
+ move_obj.delete(cursor, user,
+ [m.id for m in packing.inventory_moves], context=context)
+ self.write(cursor, user, packing_id, {
+ 'state': 'draft',
+ }, context=context)
+
+ def _get_inventory_moves(self, cursor, user, incoming_move, context=None):
+ res = {}
+ if incoming_move.quantity <= 0.0:
+ return None
+ res['product'] = incoming_move.product.id
+ res['uom'] = incoming_move.uom.id
+ res['quantity'] = incoming_move.quantity
+ res['from_location'] = incoming_move.to_location.id
+ res['to_location'] = incoming_move.packing_out_return.warehouse.\
+ storage_location.id
+ res['state'] = 'draft'
+ res['company'] = incoming_move.company.id
+ return res
+
+ def create_inventory_moves(self, cursor, user, packing_id, context=None):
+ packing = self.browse(cursor, user, packing_id, context=context)
+ for incoming_move in packing.incoming_moves:
+ vals = self._get_inventory_moves(cursor, user, incoming_move,
+ context=context)
+ if vals:
+ self.write(cursor, user, packing.id, {
+ 'inventory_moves': [('create', vals)]
+ }, context=context)
+
+PackingOutReturn()
+
+
+class AssignPackingOutAskForce(ModelView):
+ 'Assign Shipment Out Ask Force'
+ _name = 'stock.packing.out.assign.ask_force'
+ _description = __doc__
+
+ inventory_moves = fields.Many2Many('stock.move', None, None,
+ 'Inventory Moves', readonly=True)
+
+AssignPackingOutAskForce()
+
+
+class AssignPackingOut(Wizard):
+ 'Assign Shipment Out'
+ _name = 'stock.packing.out.assign'
+ states = {
+ 'init': {
+ 'result': {
+ 'type': 'choice',
+ 'next_state': '_choice',
+ },
+ },
+ 'ask_force': {
+ 'actions': ['_moves'],
+ 'result': {
+ 'type': 'form',
+ 'object': 'stock.packing.out.assign.ask_force',
+ 'state': [
+ ('force', 'Force Assign', 'tryton-go-next'),
+ ('end', 'Ok', 'tryton-ok', True),
+ ],
+ },
+ },
+ 'force': {
+ 'result': {
+ 'type': 'action',
+ 'action': '_force',
+ 'state': 'end',
+ },
+ },
+ }
+
+ def _choice(self, cursor, user, data, context=None):
+ packing_out_obj = self.pool.get('stock.packing.out')
+
+ packing_out_obj.workflow_trigger_validate(cursor, user, data['id'],
+ 'assign', context=context)
+ packing = packing_out_obj.browse(cursor, user, data['id'],
+ context=context)
+ if not [x.id for x in packing.inventory_moves if x.state == 'draft']:
+ return 'end'
+ else:
+ return 'ask_force'
+
+ def _moves(self, cursor, user, data, context=None):
+ packing_out_obj = self.pool.get('stock.packing.out')
+ packing = packing_out_obj.browse(cursor, user, data['id'],
+ context=context)
+ return {'inventory_moves': [x.id for x in packing.inventory_moves
+ if x.state == 'draft']}
+
+ def _force(self, cursor, user, data, context=None):
+ packing_out_obj = self.pool.get('stock.packing.out')
+
+ packing_out_obj.workflow_trigger_validate(cursor, user, data['id'],
+ 'force_assign', context=context)
+ return {}
+
+AssignPackingOut()
+
+
+class PackingInternal(ModelWorkflow, ModelSQL, ModelView):
+ "Internal Shipment"
+ _name = 'stock.packing.internal'
+ _description = __doc__
+ _rec_name = 'code'
+
+ effective_date =fields.Date('Effective Date', readonly=True)
+ planned_date = fields.Date(
+ 'Planned Date', states={'readonly': "state != 'draft'",})
+ code = fields.Char("Code", size=None, select=1, readonly=True)
+ reference = fields.Char(
+ "Reference", size=None, select=1,
+ states={'readonly': "state != 'draft'",})
+ from_location = fields.Many2One(
+ 'stock.location', "From Location", required=True,
+ states={ 'readonly': "state != 'draft' or bool(moves)", },
+ domain="[('type', 'not in', " \
+ "('supplier', 'customer', 'warehouse', 'view'))]")
+ to_location = fields.Many2One('stock.location', "To Location",
+ required=True, states={
+ 'readonly': "state != 'draft' or bool(moves)",
+ }, domain="[('type', 'not in', " \
+ "('supplier', 'customer', 'warehouse', 'view'))]")
+ moves = fields.One2Many(
+ 'stock.move', 'packing_internal', 'Moves',
+ states={'readonly': "state != 'draft' or "\
+ "not(bool(from_location) and bool (to_location))"},
+ context="{'from_location': from_location,"
+ "'to_location': to_location,"
+ "'planned_date': planned_date}",
+ )
+ state = fields.Selection([
+ ('draft', 'Draft'),
+ ('cancel', 'Canceled'),
+ ('assigned', 'Assigned'),
+ ('waiting', 'Waiting'),
+ ('done', 'Done'),
+ ], 'State', readonly=True)
+
+ def default_state(self, cursor, user, context=None):
+ return 'draft'
+
+ def button_draft(self, cursor, user, ids, context=None):
+ self.workflow_trigger_create(cursor, user, ids, context=context)
+ return True
+
+ def __init__(self):
+ super(PackingInternal, self).__init__()
+ self._rpc.update({
+ 'button_draft': True,
+ })
+ self._order[0] = ('id', 'DESC')
+
+ def create(self, cursor, user, values, context=None):
+ values = values.copy()
+ values['code'] = self.pool.get('ir.sequence').get(
+ cursor, user, 'stock.packing.internal', context=context)
+ return super(PackingInternal, self).create(
+ cursor, user, values, context=context)
+
+ def set_state_draft(self, cursor, user, packing_id, context=None):
move_obj = self.pool.get('stock.move')
packing = self.browse(cursor, user, packing_id, context=context)
+ self.write(
+ cursor, user, packing_id, {'state': 'draft'}, context=context)
move_obj.write(
cursor, user, [m.id for m in packing.moves], {'state': 'draft'},
context=context)
- move_obj.write(
- cursor, user, [m.id for m in packing.moves],
- {'planned_date': packing.planned_date}, context=context)
+
+ def set_state_waiting(self, cursor, user, packing_id, context=None):
+ move_obj = self.pool.get('stock.move')
+ packing = self.browse(cursor, user, packing_id, context=context)
+ move_obj.write(cursor, user, [m.id for m in packing.moves], {
+ 'from_location': packing.from_location.id,
+ 'to_location': packing.to_location.id,
+ 'state': 'draft',
+ 'planned_date': packing.planned_date,
+ }, context=context)
self.write(
cursor, user, packing_id, {'state': 'waiting'}, context=context)
@@ -795,9 +1288,9 @@ class PackingInternal(OSV):
cursor, user, packing_id, {'state': 'cancel'}, context=context)
def assign_try(self, cursor, user, packing_id, context=None):
- product_obj = self.pool.get('product.product')
+ move_obj = self.pool.get('stock.move')
packing = self.browse(cursor, user, packing_id, context=context)
- return product_obj.assign_try(
+ return move_obj.assign_try(
cursor, user, packing.moves, context=context)
def assign_force(self, cursor, user, packing_id, context=None):
@@ -811,15 +1304,229 @@ class PackingInternal(OSV):
PackingInternal()
-class Address(OSV):
+class Address(ModelSQL, ModelView):
_name = 'party.address'
delivery = fields.Boolean('Delivery')
Address()
-class PackingOutReport(CompanyReport):
- _name = 'stock.packing.out'
+class AssignPackingInternalAskForce(ModelView):
+ 'Assign Shipment Internal Ask Force'
+ _name = 'stock.packing.internal.assign.ask_force'
+ _description = __doc__
+
+ moves = fields.Many2Many('stock.move', None, None, 'Moves',
+ readonly=True)
+
+AssignPackingInternalAskForce()
+
+
+class AssignPackingInternal(Wizard):
+ 'Assign Shipment Internal'
+ _name = 'stock.packing.internal.assign'
+ states = {
+ 'init': {
+ 'result': {
+ 'type': 'choice',
+ 'next_state': '_choice',
+ },
+ },
+ 'ask_force': {
+ 'actions': ['_moves'],
+ 'result': {
+ 'type': 'form',
+ 'object': 'stock.packing.internal.assign.ask_force',
+ 'state': [
+ ('force', 'Force Assign', 'tryton-go-next'),
+ ('end', 'Ok', 'tryton-ok', True),
+ ],
+ },
+ },
+ 'force': {
+ 'result': {
+ 'type': 'action',
+ 'action': '_force',
+ 'state': 'end',
+ },
+ },
+ }
+
+ def _choice(self, cursor, user, data, context=None):
+ packing_internal_obj = self.pool.get('stock.packing.internal')
+
+ packing_internal_obj.workflow_trigger_validate(cursor, user,
+ data['id'], 'assign', context=context)
+ packing = packing_internal_obj.browse(cursor, user, data['id'],
+ context=context)
+ if not [x.id for x in packing.moves if x.state == 'draft']:
+ return 'end'
+ else:
+ return 'ask_force'
+
+ def _moves(self, cursor, user, data, context=None):
+ packing_internal_obj = self.pool.get('stock.packing.internal')
+ packing = packing_internal_obj.browse(cursor, user, data['id'],
+ context=context)
+ return {'moves': [x.id for x in packing.moves if x.state == 'draft']}
+
+ def _force(self, cursor, user, data, context=None):
+ packing_internal_obj = self.pool.get('stock.packing.internal')
+
+ packing_internal_obj.workflow_trigger_validate(cursor, user,
+ data['id'], 'force_assign', context=context)
+ return {}
+
+AssignPackingInternal()
+
+
+class AssignPackingInReturnAskForce(ModelView):
+ 'Assign Supplier Return Shipment Ask Force'
+ _name = 'stock.packing.in.return.assign.ask_force'
+ _description = __doc__
+
+ moves = fields.Many2Many('stock.move', None, None, 'Moves',
+ readonly=True)
+
+AssignPackingInReturnAskForce()
+
+
+class AssignPackingInReturn(Wizard):
+ 'Assign Supplier Return Shipment'
+ _name = 'stock.packing.in.return.assign'
+ states = {
+ 'init': {
+ 'result': {
+ 'type': 'choice',
+ 'next_state': '_choice',
+ },
+ },
+ 'ask_force': {
+ 'actions': ['_moves'],
+ 'result': {
+ 'type': 'form',
+ 'object': 'stock.packing.in.return.assign.ask_force',
+ 'state': [
+ ('force', 'Force Assign', 'tryton-go-next'),
+ ('end', 'Ok', 'tryton-ok', True),
+ ],
+ },
+ },
+ 'force': {
+ 'result': {
+ 'type': 'action',
+ 'action': '_force',
+ 'state': 'end',
+ },
+ },
+ }
+
+ def _choice(self, cursor, user, data, context=None):
+ packing_internal_obj = self.pool.get('stock.packing.in.return')
+
+ packing_internal_obj.workflow_trigger_validate(cursor, user,
+ data['id'], 'assign', context=context)
+ packing = packing_internal_obj.browse(cursor, user, data['id'],
+ context=context)
+ if not [x.id for x in packing.moves if x.state == 'draft']:
+ return 'end'
+ else:
+ return 'ask_force'
+
+ def _moves(self, cursor, user, data, context=None):
+ packing_internal_obj = self.pool.get('stock.packing.in.return')
+ packing = packing_internal_obj.browse(cursor, user, data['id'],
+ context=context)
+ return {'moves': [x.id for x in packing.moves if x.state == 'draft']}
+
+ def _force(self, cursor, user, data, context=None):
+ packing_internal_obj = self.pool.get('stock.packing.in.return')
+
+ packing_internal_obj.workflow_trigger_validate(cursor, user,
+ data['id'], 'force_assign', context=context)
+ return {}
+
+AssignPackingInReturn()
+
+
+class CreatePackingOutReturn(Wizard):
+ 'Create Customer Return Shipment'
+ _name = 'stock.packing.out.return.create'
+ states = {
+ 'init': {
+ 'result': {
+ 'type': 'action',
+ 'action': '_create',
+ 'state': 'end',
+ },
+ },
+ }
+ def __init__(self):
+ super(CreatePackingOutReturn, self).__init__()
+ self._error_messages.update({
+ 'packing_done_title': 'You can not create return packing',
+ 'packing_done_msg': 'The packing with code %s is not yet sent.',
+ })
+
+
+ def _create(self, cursor, user, data, context=None):
+ model_data_obj = self.pool.get('ir.model.data')
+ act_window_obj = self.pool.get('ir.action.act_window')
+ packing_out_obj = self.pool.get('stock.packing.out')
+ packing_out_return_obj = self.pool.get('stock.packing.out.return')
+
+ packing_outs = packing_out_obj.browse(
+ cursor, user, data['ids'], context=context)
+
+ packing_out_return_ids = []
+ for packing_out in packing_outs:
+ if packing_out.state != 'done':
+ self.raise_user_error(
+ cursor, 'packing_done_title',
+ error_description='packing_done_msg',
+ error_description_args=packing_out.code,
+ context=context)
+
+ incoming_moves = []
+ for move in packing_out.outgoing_moves:
+ incoming_moves.append(('create', {
+ 'product': move.product.id,
+ 'quantity': move.quantity,
+ 'uom': move.uom.id,
+ 'from_location': move.to_location.id,
+ 'to_location': packing_out.warehouse.input_location.id,
+ 'company': move.company.id,
+ }))
+ packing_out_return_ids.append(
+ packing_out_return_obj.create(
+ cursor, user,
+ {'customer': packing_out.customer.id,
+ 'delivery_address': packing_out.delivery_address.id,
+ 'warehouse': packing_out.warehouse.id,
+ 'incoming_moves': incoming_moves,
+ },
+ context=context)
+ )
+
+ model_data_ids = model_data_obj.search(cursor, user, [
+ ('fs_id', '=', 'act_packing_out_return_form'),
+ ('module', '=', 'stock'),
+ ('inherit', '=', False),
+ ], limit=1, context=context)
+ model_data = model_data_obj.browse(cursor, user, model_data_ids[0],
+ context=context)
+ res = act_window_obj.read(cursor, user, model_data.db_id, context=context)
+ res['res_id'] = packing_out_return_ids
+ if len(packing_out_return_ids) == 1:
+ res['views'].reverse()
+
+ return res
+
+CreatePackingOutReturn()
+
+
+class DeliveryNote(CompanyReport):
+ _name = 'stock.packing.out.delivery_note'
def parse(self, cursor, user, report, objects, datas, context):
if context is None:
@@ -828,14 +1535,214 @@ class PackingOutReport(CompanyReport):
context['product_name'] = lambda product_id, language: \
self.product_name(cursor, user, product_id, language,
context)
- return super(PackingOutReport, self).parse(cursor, user, report,
+ return super(DeliveryNote, self).parse(cursor, user, report,
objects, datas, context)
def product_name(self, cursor, user, product_id, language, context):
product_obj = self.pool.get('product.product')
ctx = context.copy()
ctx['language'] = language
- return product_obj.name_get(cursor, user, [product_id],
- context=ctx)[0][1]
+ return product_obj.browse(cursor, user, product_id,
+ context=ctx).rec_name
+
+DeliveryNote()
+
+
+class PickingList(CompanyReport):
+ _name = 'stock.packing.out.picking_list'
+
+ def parse(self, cursor, user, report, objects, datas, context):
+ move_obj = self.pool.get('stock.move')
+ packing_out_obj = self.pool.get('stock.packing.out')
+
+ compare_context = self.get_compare_context(
+ cursor, user, report, objects, datas, context)
+
+ sorted_moves = {}
+ for packing in objects:
+ sorted_moves[packing.id] = sorted(
+ packing.inventory_moves,
+ lambda x,y: cmp(self.get_compare_key(x, compare_context),
+ self.get_compare_key(y, compare_context))
+ )
+
+ context['moves'] = sorted_moves
+
+ return super(PickingList, self).parse(cursor, user, report,
+ objects, datas, context)
+
+ def get_compare_context(self, cursor, user, report, objects, datas, context):
+ location_obj = self.pool.get('stock.location')
+ from_location_ids = set()
+ to_location_ids = set()
+ for obj in objects:
+ for move in obj.inventory_moves:
+ from_location_ids.add(move.from_location.id)
+ to_location_ids.add(move.to_location.id)
+
+ from_location_ids = location_obj.search(
+ cursor, user, list(from_location_ids), context=context)
+ to_location_ids = location_obj.search(
+ cursor, user, list(to_location_ids), context=context)
+
+ return {'from_location_ids' : from_location_ids,
+ 'to_location_ids' : to_location_ids}
+
+
+ def get_compare_key(self, move, compare_context):
+ from_location_ids = compare_context['from_location_ids']
+ to_location_ids = compare_context['to_location_ids']
+ return [from_location_ids.index(move.from_location.id),
+ to_location_ids.index(move.to_location.id)]
+
+PickingList()
+
+
+class SupplierRestockingList(CompanyReport):
+ _name = 'stock.packing.in.restocking_list'
+
+ def parse(self, cursor, user, report, objects, datas, context):
+ move_obj = self.pool.get('stock.move')
+ packing_in_obj = self.pool.get('stock.packing.in')
+
+ compare_context = self.get_compare_context(
+ cursor, user, report, objects, datas, context)
+
+ sorted_moves = {}
+ for packing in objects:
+ sorted_moves[packing.id] = sorted(
+ packing.inventory_moves,
+ lambda x,y: cmp(self.get_compare_key(x, compare_context),
+ self.get_compare_key(y, compare_context))
+ )
+
+ context['moves'] = sorted_moves
+
+ return super(SupplierRestockingList, self).parse(cursor, user, report,
+ objects, datas, context)
+
+ def get_compare_context(self, cursor, user, report, objects, datas, context):
+ location_obj = self.pool.get('stock.location')
+ from_location_ids = set()
+ to_location_ids = set()
+ for obj in objects:
+ for move in obj.inventory_moves:
+ from_location_ids.add(move.from_location.id)
+ to_location_ids.add(move.to_location.id)
+
+ from_location_ids = location_obj.search(
+ cursor, user, list(from_location_ids), context=context)
+ to_location_ids = location_obj.search(
+ cursor, user, list(to_location_ids), context=context)
+
+ return {'from_location_ids' : from_location_ids,
+ 'to_location_ids' : to_location_ids}
+
+
+ def get_compare_key(self, move, compare_context):
+ from_location_ids = compare_context['from_location_ids']
+ to_location_ids = compare_context['to_location_ids']
+ return [from_location_ids.index(move.from_location.id),
+ to_location_ids.index(move.to_location.id)]
+
+SupplierRestockingList()
+
+
+class CustomerReturnRestockingList(CompanyReport):
+ _name = 'stock.packing.out.return.restocking_list'
+
+ def parse(self, cursor, user, report, objects, datas, context):
+ move_obj = self.pool.get('stock.move')
+ packing_in_obj = self.pool.get('stock.packing.out.return')
+
+ compare_context = self.get_compare_context(
+ cursor, user, report, objects, datas, context)
+
+ sorted_moves = {}
+ for packing in objects:
+ sorted_moves[packing.id] = sorted(
+ packing.inventory_moves,
+ lambda x,y: cmp(self.get_compare_key(x, compare_context),
+ self.get_compare_key(y, compare_context))
+ )
+
+ context['moves'] = sorted_moves
+
+ return super(CustomerReturnRestockingList, self).parse(
+ cursor, user, report, objects, datas, context)
+
+ def get_compare_context(self, cursor, user, report, objects, datas, context):
+ location_obj = self.pool.get('stock.location')
+ from_location_ids = set()
+ to_location_ids = set()
+ for obj in objects:
+ for move in obj.inventory_moves:
+ from_location_ids.add(move.from_location.id)
+ to_location_ids.add(move.to_location.id)
+
+ from_location_ids = location_obj.search(
+ cursor, user, list(from_location_ids), context=context)
+ to_location_ids = location_obj.search(
+ cursor, user, list(to_location_ids), context=context)
+
+ return {'from_location_ids' : from_location_ids,
+ 'to_location_ids' : to_location_ids}
+
+
+ def get_compare_key(self, move, compare_context):
+ from_location_ids = compare_context['from_location_ids']
+ to_location_ids = compare_context['to_location_ids']
+ return [from_location_ids.index(move.from_location.id),
+ to_location_ids.index(move.to_location.id)]
+
+CustomerReturnRestockingList()
+
+
+class InteralPackingReport(CompanyReport):
+ _name = 'stock.packing.internal.report'
+
+ def parse(self, cursor, user, report, objects, datas, context):
+ move_obj = self.pool.get('stock.move')
+ packing_in_obj = self.pool.get('stock.packing.internal')
+
+ compare_context = self.get_compare_context(
+ cursor, user, report, objects, datas, context)
+
+ sorted_moves = {}
+ for packing in objects:
+ sorted_moves[packing.id] = sorted(
+ packing.moves,
+ lambda x,y: cmp(self.get_compare_key(x, compare_context),
+ self.get_compare_key(y, compare_context))
+ )
+
+ context['moves'] = sorted_moves
+
+ return super(InteralPackingReport, self).parse(
+ cursor, user, report, objects, datas, context)
+
+ def get_compare_context(self, cursor, user, report, objects, datas, context):
+ location_obj = self.pool.get('stock.location')
+ from_location_ids = set()
+ to_location_ids = set()
+ for obj in objects:
+ for move in obj.moves:
+ from_location_ids.add(move.from_location.id)
+ to_location_ids.add(move.to_location.id)
+
+ from_location_ids = location_obj.search(
+ cursor, user, list(from_location_ids), context=context)
+ to_location_ids = location_obj.search(
+ cursor, user, list(to_location_ids), context=context)
+
+ return {'from_location_ids' : from_location_ids,
+ 'to_location_ids' : to_location_ids}
+
+
+ def get_compare_key(self, move, compare_context):
+ from_location_ids = compare_context['from_location_ids']
+ to_location_ids = compare_context['to_location_ids']
+ return [from_location_ids.index(move.from_location.id),
+ to_location_ids.index(move.to_location.id)]
-PackingOutReport()
+InteralPackingReport()
diff --git a/packing.xml b/packing.xml
index 934948d..9c87164 100644
--- a/packing.xml
+++ b/packing.xml
@@ -4,13 +4,13 @@ this repository contains the full copyright notices and license terms. -->
<tryton>
<data>
- <!--Packing in view-->
+ <!--Shipment in view-->
<record model="ir.ui.view" id="packing_in_view_form">
<field name="model">stock.packing.in</field>
<field name="type">form</field>
<field name="arch" type="xml">
<![CDATA[
- <form string="Supplier Packing" col="4" cursor="supplier">
+ <form string="Supplier Shipment" col="4" cursor="supplier">
<label name="reference"/>
<field name="reference"/>
<label name="code"/>
@@ -26,7 +26,7 @@ this repository contains the full copyright notices and license terms. -->
<label name="warehouse"/>
<field name="warehouse"/>
<notebook colspan="6">
- <page string="Incoming Moves">
+ <page string="Incoming Moves" id="incoming_moves">
<field name="incoming_moves" colspan="4">
<tree string="Moves">
<field name="product" select="1"/>
@@ -40,14 +40,14 @@ this repository contains the full copyright notices and license terms. -->
</tree>
</field>
</page>
- <page string="Inventory Moves">
+ <page string="Inventory Moves" id="inventory_moves">
<field name="inventory_moves" colspan="4"/>
</page>
</notebook>
- <group col="4" colspan="6">
+ <group col="4" colspan="6" id="state_buttons">
<label name="state"/>
<field name="state"/>
- <group col="5" colspan="2">
+ <group col="5" colspan="2" id="buttons">
<button string="Cancel" name="cancel"
states="{'invisible': '''state in ('cancel', 'done') ''', 'readonly': '''%(group_stock)d not in groups'''}"
icon="tryton-cancel"/>
@@ -72,20 +72,20 @@ this repository contains the full copyright notices and license terms. -->
<field name="type">tree</field>
<field name="arch" type="xml">
<![CDATA[
- <tree string="Supplier Packings">
+ <tree string="Supplier Shipments">
<field name="code" select="1"/>
<field name="reference" select="1"/>
- <field name="state" select="1"/>
<field name="planned_date" select="2"/>
<field name="effective_date" select="2"/>
<field name="supplier" select="2"/>
<field name="contact_address" select="2"/>
+ <field name="state" select="1"/>
</tree>
]]>
</field>
</record>
<record model="ir.action.act_window" id="act_packing_in_form">
- <field name="name">Supplier Packings</field>
+ <field name="name">Supplier Shipments</field>
<field name="res_model">stock.packing.in</field>
<field name="view_type">form</field>
</record>
@@ -105,7 +105,7 @@ this repository contains the full copyright notices and license terms. -->
action="act_packing_in_form" id="menu_packing_in_form"/>
<record model="ir.action.act_window" id="act_packing_in_form2">
- <field name="name">New Supplier Packing</field>
+ <field name="name">New Supplier Shipment</field>
<field name="res_model">stock.packing.in</field>
<field name="view_type">form</field>
</record>
@@ -121,7 +121,7 @@ this repository contains the full copyright notices and license terms. -->
<field name="view" ref="packing_in_view_tree"/>
<field name="act_window" ref="act_packing_in_form2"/>
</record>
- <menuitem parent="menu_packing_in_form" sequence="1"
+ <menuitem parent="menu_packing_in_form" sequence="10"
action="act_packing_in_form2" id="menu_packing_in_form2"/>
<record model="ir.action.act_window" id="act_packing_in_form_received">
@@ -142,27 +142,159 @@ this repository contains the full copyright notices and license terms. -->
<field name="view" ref="packing_in_view_form"/>
<field name="act_window" ref="act_packing_in_form_received"/>
</record>
- <menuitem parent="menu_packing_in_form" sequence="3"
+ <menuitem parent="menu_packing_in_form" sequence="20"
action="act_packing_in_form_received"
id="menu_packing_in_received"/>
- <record model="ir.sequence.type" id="sequence_type_packing_in">
- <field name="name">Supplier Packing</field>
- <field name="code">stock.packing.in</field>
+ <!-- Shipment In Return view-->
+ <record model="ir.action.wizard" id="wizard_packing_in_return_assign">
+ <field name="name">Assign Purchase Return Shipment</field>
+ <field name="wiz_name">stock.packing.in.return.assign</field>
+ <field name="model">stock.packing.in.return</field>
</record>
- <record model="ir.sequence" id="sequence_packing_in">
- <field name="name">Supplier Packing</field>
- <field name="code">stock.packing.in</field>
+ <record model="ir.ui.view" id="packing_in_return_view_form">
+ <field name="model">stock.packing.in.return</field>
+ <field name="type">form</field>
+ <field name="arch" type="xml">
+ <![CDATA[
+ <form string="Supplier Return Shipment" col="4" cursor="from_location">
+ <label name="reference"/>
+ <field name="reference"/>
+ <label name="code"/>
+ <field name="code"/>
+ <label name="from_location"/>
+ <field name="from_location"/>
+ <label name="to_location"/>
+ <field name="to_location"/>
+ <label name="planned_date"/>
+ <field name="planned_date"/>
+ <label name="effective_date"/>
+ <field name="effective_date"/>
+ <separator name="moves" colspan="4"/>
+ <field name="moves" colspan="4"/>
+ <label name="state"/>
+ <field name="state"/>
+ <group col="6" colspan="2" id="buttons">
+ <button string="Cancel" name="cancel"
+ states="{'invisible': '''state in ('cancel', 'done') ''', 'readonly': '''%(group_stock)d not in groups'''}"
+ icon="tryton-cancel"/>
+ <button string="Draft" name="draft"
+ states="{'invisible': '''state != 'waiting' ''', 'readonly': '''%(group_stock)d not in groups'''}"
+ icon="tryton-go-previous"/>
+ <button string="Waiting" name="waiting"
+ states="{'invisible': '''state not in ('assigned', 'draft')''', 'readonly': '''%(group_stock)d not in groups''', 'icon': '''state == 'assigned' and 'tryton-go-previous' or state == 'draft' and 'tryton-go-next' or False'''}"/>
+ <button string="Assign" name="%(wizard_packing_in_return_assign)d"
+ type="action"
+ states="{'invisible': '''state != 'waiting' ''', 'readonly': '''%(group_stock)d not in groups'''}"
+ icon="tryton-go-next"/>
+ <button string="Reset to Draft" name="button_draft"
+ type="object" states="{'invisible': '''state != 'cancel' ''', 'readonly': '''%(group_stock)d not in groups'''}"
+ icon="tryton-clear"/>
+ <button string="Done" name="done"
+ states="{'invisible': '''state != 'assigned' ''', 'readonly': '''%(group_stock)d not in groups'''}"
+ icon="tryton-ok"/>
+ </group>
+ </form>
+ ]]>
+ </field>
+ </record>
+ <record model="ir.ui.view" id="packing_in_return_view_tree">
+ <field name="model">stock.packing.in.return</field>
+ <field name="type">tree</field>
+ <field name="arch" type="xml">
+ <![CDATA[
+ <tree string="Supplier Return Shipments">
+ <field name="code" select="1"/>
+ <field name="reference" select="2"/>
+ <field name="planned_date" select="2"/>
+ <field name="effective_date" select="2"/>
+ <field name="from_location" select="2"/>
+ <field name="to_location" select="2"/>
+ <field name="state" select="1"/>
+ </tree>
+ ]]>
+ </field>
+ </record>
+ <record model="ir.action.act_window" id="act_packing_in_return_form">
+ <field name="name">Supplier Return Shipments</field>
+ <field name="res_model">stock.packing.in.return</field>
+ <field name="view_type">form</field>
+ </record>
+ <record model="ir.action.act_window.view"
+ id="act_packing_in_return_form_view1">
+ <field name="sequence" eval="1"/>
+ <field name="view" ref="packing_in_return_view_tree"/>
+ <field name="act_window" ref="act_packing_in_return_form"/>
+ </record>
+ <record model="ir.action.act_window.view"
+ id="act_packing_in_return_form_view2">
+ <field name="sequence" eval="2"/>
+ <field name="view" ref="packing_in_return_view_form"/>
+ <field name="act_window" ref="act_packing_in_return_form"/>
+ </record>
+ <menuitem parent="menu_packing_in_form" sequence="40"
+ action="act_packing_in_return_form"
+ id="menu_packing_in_return_form"/>
+
+ <record model="ir.action.act_window" id="act_packing_in_return_new_form">
+ <field name="name">New Supplier Return Shipment</field>
+ <field name="res_model">stock.packing.in.return</field>
+ <field name="view_type">form</field>
+ </record>
+ <record model="ir.action.act_window.view"
+ id="act_packing_in_return_new_form_view1">
+ <field name="sequence" eval="2"/>
+ <field name="view" ref="packing_in_return_view_tree"/>
+ <field name="act_window" ref="act_packing_in_return_new_form"/>
+ </record>
+ <record model="ir.action.act_window.view"
+ id="act_packing_in_return_new_form_view2">
+ <field name="sequence" eval="1"/>
+ <field name="view" ref="packing_in_return_view_form"/>
+ <field name="act_window" ref="act_packing_in_return_new_form"/>
+ </record>
+ <menuitem parent="menu_packing_in_return_form" sequence="10"
+ action="act_packing_in_return_new_form"
+ id="menu_packing_in_return_new_form"/>
+
+ <record model="ir.ui.view" id="packing_in_return_assign_ask_force_view_form">
+ <field name="model">stock.packing.in.return.assign.ask_force</field>
+ <field name="type">form</field>
+ <field name="arch" type="xml">
+ <![CDATA[
+ <form string="Unable to Assign" col="2">
+ <image name="tryton-dialog-information"/>
+ <group col="1" id="labels">
+ <separator string="Unable to assign those products:"
+ id="unable"/>
+ <field name="moves">
+ <tree string="Moves" fill="1">
+ <field name="product"/>
+ <field name="quantity"/>
+ <field name="uom"/>
+ <field name="unit_digits" tree_invisible="1"/>
+ </tree>
+ </field>
+ </group>
+ </form>
+ ]]>
+ </field>
+ </record>
+
+ <!--Shipment out view-->
+ <record model="ir.action.wizard" id="wizard_packing_out_assign">
+ <field name="name">Assign Shipment Out</field>
+ <field name="wiz_name">stock.packing.out.assign</field>
+ <field name="model">stock.packing.out</field>
</record>
- <!--Packing out view-->
<record model="ir.ui.view" id="packing_out_view_form">
<field name="model">stock.packing.out</field>
<field name="type">form</field>
<field name="arch" type="xml">
<![CDATA[
- <form string="Customer Packing" col="4" cursor="customer">
+ <form string="Customer Shipment" col="4" cursor="customer">
<label name="reference"/>
<field name="reference"/>
<label name="code"/>
@@ -171,40 +303,36 @@ this repository contains the full copyright notices and license terms. -->
<field name="customer"/>
<label name="delivery_address"/>
<field name="delivery_address"/>
- <label name="warehouse"/>
- <field name="warehouse"/>
- <label name="customer_location"/>
- <field name="customer_location"/>
<label name="planned_date"/>
<field name="planned_date"/>
<label name="effective_date"/>
<field name="effective_date"/>
+ <label name="warehouse"/>
+ <field name="warehouse"/>
<notebook colspan="4">
- <page string="Inventory Moves">
+ <page string="Inventory Moves" id="inventory_moves">
<field name="inventory_moves" colspan="4"/>
</page>
- <page string="Outgoing Moves">
+ <page string="Outgoing Moves" id="outgoing_moves">
<field name="outgoing_moves" colspan="4"/>
</page>
</notebook>
- <group col="4" colspan="4">
+ <group col="4" colspan="4" id="state_buttons">
<label name="state"/>
<field name="state"/>
- <group col="8" colspan="2">
+ <group col="7" colspan="2" id="buttons">
<button string="Cancel" name="cancel"
states="{'invisible': '''state in ('cancel', 'done') ''', 'readonly': '''%(group_stock)d not in groups'''}"
icon="tryton-cancel"/>
<button string="Draft" name="draft"
states="{'invisible': '''state != 'waiting' ''', 'readonly': '''%(group_stock)d not in groups'''}"
- icon="tryton-clear"/>
+ icon="tryton-go-previous"/>
<button string="Waiting" name="waiting"
- states="{'invisible': '''state not in ('assigned', 'draft')''', 'readonly': '''%(group_stock)d not in groups''', 'icon': '''state == 'assigned' and 'tryton-go-previous' or state == 'draft' and 'tryton-go-next' or False'''}"/>
- <button string="Force Assign" name="force_assign"
+ states="{'invisible': '''state not in ('assigned', 'waiting', 'draft')''', 'readonly': '''%(group_stock)d not in groups''', 'icon': '''state == 'assigned' and 'tryton-go-previous' or state == 'waiting' and 'tryton-clear' or state == 'draft' and 'tryton-go-next' or False'''}"/>
+ <button string="Assign" name="%(wizard_packing_out_assign)d"
+ type="action"
states="{'invisible': '''state != 'waiting' ''', 'readonly': '''%(group_stock)d not in groups'''}"
- icon="tryton-go-next"
- confirm="Are you sure to force assignation?"/>
- <button string="Assign" name="assign"
- states="{'invisible': '''state not in ('waiting', 'packed')''', 'readonly': '''%(group_stock)d not in groups''', 'icon': '''state == 'waiting' and 'tryton-go-next' or state == 'packed' and 'tryton-go-previous' or False'''}"/>
+ icon="tryton-go-next"/>
<button string="Make packing" name="packed"
states="{'invisible': '''state != 'assigned' ''', 'readonly': '''%(group_stock)d not in groups'''}"
icon="tryton-go-next"/>
@@ -226,19 +354,32 @@ this repository contains the full copyright notices and license terms. -->
<field name="type">tree</field>
<field name="arch" type="xml">
<![CDATA[
- <tree string="Customer Packings">
+ <tree string="Customer Shipments">
<field name="code" select="1"/>
- <field name="state" select="1"/>
+ <field name="reference" select="1"/>
<field name="planned_date" select="2"/>
<field name="effective_date" select="2"/>
<field name="customer"/>
<field name="delivery_address"/>
+ <field name="state" select="1"/>
</tree>
]]>
</field>
</record>
+
+ <record model="ir.action.wizard" id="create_packing_out_return">
+ <field name="name">Create Return Shipment</field>
+ <field name="wiz_name">stock.packing.out.return.create</field>
+ <field name="model">stock.packing.out</field>
+ </record>
+ <record model="ir.action.keyword" id="create_packing_out_return_keyword">
+ <field name="keyword">form_action</field>
+ <field name="model">stock.packing.out,0</field>
+ <field name="action" ref="create_packing_out_return"/>
+ </record>
+
<record model="ir.action.act_window" id="act_packing_out_form">
- <field name="name">Customer Packings</field>
+ <field name="name">Customer Shipments</field>
<field name="res_model">stock.packing.out</field>
<field name="view_type">form</field>
</record>
@@ -258,7 +399,7 @@ this repository contains the full copyright notices and license terms. -->
action="act_packing_out_form" id="menu_packing_out_form"/>
<record model="ir.action.act_window" id="act_packing_out_form_waiting">
- <field name="name">Customer Packings Waiting Assignation</field>
+ <field name="name">Customer Shipments Waiting Assignation</field>
<field name="res_model">stock.packing.out</field>
<field name="view_type">form</field>
<field name="domain">[('state', '=', 'waiting')]</field>
@@ -275,13 +416,13 @@ this repository contains the full copyright notices and license terms. -->
<field name="view" ref="packing_out_view_form"/>
<field name="act_window" ref="act_packing_out_form_waiting"/>
</record>
- <menuitem parent="menu_packing_out_form" sequence="1"
+ <menuitem parent="menu_packing_out_form" sequence="10"
action="act_packing_out_form_waiting"
id="menu_packing_out_waiting"/>
<record model="ir.action.act_window"
id="act_packing_out_form_assigned">
- <field name="name">Assigned Customer Packings</field>
+ <field name="name">Assigned Customer Shipments</field>
<field name="res_model">stock.packing.out</field>
<field name="view_type">form</field>
<field name="domain">[('state', '=', 'assigned')]</field>
@@ -298,12 +439,12 @@ this repository contains the full copyright notices and license terms. -->
<field name="view" ref="packing_out_view_form"/>
<field name="act_window" ref="act_packing_out_form_assigned"/>
</record>
- <menuitem parent="menu_packing_out_form" sequence="2"
+ <menuitem parent="menu_packing_out_form" sequence="20"
action="act_packing_out_form_assigned"
id="menu_packing_out_assigned"/>
<record model="ir.action.act_window" id="act_packing_out_form_ready">
- <field name="name">Customer Packings Ready for Shipping</field>
+ <field name="name">Customer Shipments Ready for Shipping</field>
<field name="res_model">stock.packing.out</field>
<field name="view_type">form</field>
<field name="domain">[('state', '=', 'packed')]</field>
@@ -320,18 +461,46 @@ this repository contains the full copyright notices and license terms. -->
<field name="view" ref="packing_out_view_form"/>
<field name="act_window" ref="act_packing_out_form_ready"/>
</record>
- <menuitem parent="menu_packing_out_form" sequence="3"
+ <menuitem parent="menu_packing_out_form" sequence="30"
action="act_packing_out_form_ready" id="menu_packing_out_ready"/>
+ <record model="ir.ui.view" id="packing_out_assign_ask_force_view_form">
+ <field name="model">stock.packing.out.assign.ask_force</field>
+ <field name="type">form</field>
+ <field name="arch" type="xml">
+ <![CDATA[
+ <form string="Unable to Assign" col="2">
+ <image name="tryton-dialog-information"/>
+ <group col="1" id="labels">
+ <separator string="Unable to assign those products:"
+ id="unable"/>
+ <field name="inventory_moves">
+ <tree string="Inventory Moves" fill="1">
+ <field name="product"/>
+ <field name="quantity"/>
+ <field name="uom"/>
+ <field name="unit_digits" tree_invisible="1"/>
+ </tree>
+ </field>
+ </group>
+ </form>
+ ]]>
+ </field>
+ </record>
+ <!--Internal Shipment view-->
+ <record model="ir.action.wizard" id="wizard_packing_internal_assign">
+ <field name="name">Assign Shipment Internal</field>
+ <field name="wiz_name">stock.packing.internal.assign</field>
+ <field name="model">stock.packing.internal</field>
+ </record>
- <!--Internal Packing view-->
<record model="ir.ui.view" id="packing_internal_view_form">
<field name="model">stock.packing.internal</field>
<field name="type">form</field>
<field name="arch" type="xml">
<![CDATA[
- <form string="Internal Packing" col="4" cursor="from_location">
+ <form string="Internal Shipment" col="4" cursor="from_location">
<label name="reference"/>
<field name="reference"/>
<label name="code"/>
@@ -348,19 +517,17 @@ this repository contains the full copyright notices and license terms. -->
<field name="moves" colspan="4"/>
<label name="state"/>
<field name="state"/>
- <group col="7" colspan="2">
+ <group col="6" colspan="2" id="buttons">
<button string="Cancel" name="cancel"
states="{'invisible': '''state in ('cancel', 'done') ''', 'readonly': '''%(group_stock)d not in groups'''}"
icon="tryton-cancel"/>
<button string="Draft" name="draft"
states="{'invisible': '''state != 'waiting' ''', 'readonly': '''%(group_stock)d not in groups'''}"
- icon="tryton-clear"/>
+ icon="tryton-go-previous"/>
<button string="Waiting" name="waiting"
- states="{'invisible': '''state not in ('assigned', 'draft')''', 'readonly': '''%(group_stock)d not in groups''', 'icon': '''state == 'assigned' and 'tryton-go-previous' or state == 'draft' and 'tryton-go-next' or False'''}"/>
- <button string="Force Assign" name="force_assign"
- states="{'invisible': '''state != 'waiting' ''', 'readonly': '''%(group_stock)d not in groups'''}"
- icon="tryton-go-next"/>
- <button string="Assign" name="assign"
+ states="{'invisible': '''state not in ('assigned', 'waiting', 'draft')''', 'readonly': '''%(group_stock)d not in groups''', 'icon': '''state == 'assigned' and 'tryton-go-previous' or state == 'waiting' and 'tryton-clear' or state == 'draft' and 'tryton-go-next' or False'''}"/>
+ <button string="Assign" name="%(wizard_packing_internal_assign)d"
+ type="action"
states="{'invisible': '''state != 'waiting' ''', 'readonly': '''%(group_stock)d not in groups'''}"
icon="tryton-go-next"/>
<button string="Reset to Draft" name="button_draft"
@@ -379,20 +546,20 @@ this repository contains the full copyright notices and license terms. -->
<field name="type">tree</field>
<field name="arch" type="xml">
<![CDATA[
- <tree string="Internal Packings">
+ <tree string="Internal Shipments">
<field name="code" select="1"/>
- <field name="state" select="1"/>
<field name="reference" select="2"/>
<field name="planned_date" select="2"/>
<field name="effective_date" select="2"/>
<field name="from_location" select="2"/>
<field name="to_location" select="2"/>
+ <field name="state" select="1"/>
</tree>
]]>
</field>
</record>
<record model="ir.action.act_window" id="act_packing_internal_form">
- <field name="name">Internal Packings</field>
+ <field name="name">Internal Shipments</field>
<field name="res_model">stock.packing.internal</field>
<field name="view_type">form</field>
</record>
@@ -412,8 +579,29 @@ this repository contains the full copyright notices and license terms. -->
action="act_packing_internal_form"
id="menu_packing_internal_form"/>
+ <record model="ir.action.act_window" id="act_packing_internal_new_form">
+ <field name="name">New Internal Shipment</field>
+ <field name="res_model">stock.packing.internal</field>
+ <field name="view_type">form</field>
+ </record>
+ <record model="ir.action.act_window.view"
+ id="act_packing_internal_new_form_view1">
+ <field name="sequence" eval="2"/>
+ <field name="view" ref="packing_internal_view_tree"/>
+ <field name="act_window" ref="act_packing_internal_new_form"/>
+ </record>
+ <record model="ir.action.act_window.view"
+ id="act_packing_internal_new_form_view2">
+ <field name="sequence" eval="1"/>
+ <field name="view" ref="packing_internal_view_form"/>
+ <field name="act_window" ref="act_packing_internal_new_form"/>
+ </record>
+ <menuitem parent="menu_packing_internal_form" sequence="10"
+ action="act_packing_internal_new_form"
+ id="menu_packing_internal_new_form"/>
+
<record model="ir.action.act_window" id="act_packing_internal_draft_form">
- <field name="name">Draft Internal Packings</field>
+ <field name="name">Draft Internal Shipments</field>
<field name="res_model">stock.packing.internal</field>
<field name="view_type">form</field>
<field name="domain">[('state', '=', 'draft')]</field>
@@ -430,12 +618,12 @@ this repository contains the full copyright notices and license terms. -->
<field name="view" ref="packing_internal_view_form"/>
<field name="act_window" ref="act_packing_internal_draft_form"/>
</record>
- <menuitem parent="menu_packing_internal_form" sequence="1"
+ <menuitem parent="menu_packing_internal_form" sequence="20"
action="act_packing_internal_draft_form"
id="menu_packing_internal_draft_form"/>
<record model="ir.action.act_window" id="act_packing_internal_waiting_form">
- <field name="name">Internal Packings Waiting Assignation</field>
+ <field name="name">Internal Shipments Waiting Assignation</field>
<field name="res_model">stock.packing.internal</field>
<field name="view_type">form</field>
<field name="domain">[('state', '=', 'waiting')]</field>
@@ -452,12 +640,12 @@ this repository contains the full copyright notices and license terms. -->
<field name="view" ref="packing_internal_view_form"/>
<field name="act_window" ref="act_packing_internal_waiting_form"/>
</record>
- <menuitem parent="menu_packing_internal_form" sequence="2"
+ <menuitem parent="menu_packing_internal_form" sequence="30"
action="act_packing_internal_waiting_form"
id="menu_packing_internal_waiting_form"/>
<record model="ir.action.act_window" id="act_packing_internal_assigned_form">
- <field name="name">Assigned Internal Packings</field>
+ <field name="name">Assigned Internal Shipments</field>
<field name="res_model">stock.packing.internal</field>
<field name="view_type">form</field>
<field name="domain">[('state', '=', 'assigned')]</field>
@@ -474,24 +662,159 @@ this repository contains the full copyright notices and license terms. -->
<field name="view" ref="packing_internal_view_form"/>
<field name="act_window" ref="act_packing_internal_assigned_form"/>
</record>
- <menuitem parent="menu_packing_internal_form" sequence="3"
+ <menuitem parent="menu_packing_internal_form" sequence="40"
action="act_packing_internal_assigned_form"
id="menu_packing_internal_assigned_form"/>
- <!-- Sequence packing out -->
- <record model="ir.sequence.type" id="sequence_type_packing_out">
- <field name="name">Customer Packing</field>
- <field name="code">stock.packing.out</field>
+ <record model="ir.ui.view" id="packing_internal_assign_ask_force_view_form">
+ <field name="model">stock.packing.internal.assign.ask_force</field>
+ <field name="type">form</field>
+ <field name="arch" type="xml">
+ <![CDATA[
+ <form string="Unable to Assign" col="2">
+ <image name="tryton-dialog-information"/>
+ <group col="1" id="labels">
+ <separator string="Unable to assign those products:"
+ id="unable"/>
+ <field name="moves">
+ <tree string="Moves" fill="1">
+ <field name="product"/>
+ <field name="quantity"/>
+ <field name="uom"/>
+ <field name="unit_digits" tree_invisible="1"/>
+ </tree>
+ </field>
+ </group>
+ </form>
+ ]]>
+ </field>
</record>
- <record model="ir.sequence" id="sequence_packing_out">
- <field name="name">Customer Packing</field>
- <field name="code">stock.packing.out</field>
+ <!--Return Shipment Out view-->
+ <record model="ir.ui.view" id="packing_out_return_view_form">
+ <field name="model">stock.packing.out.return</field>
+ <field name="type">form</field>
+ <field name="arch" type="xml">
+ <![CDATA[
+ <form string="Customer Return Shipment" col="4" cursor="customer">
+ <label name="reference"/>
+ <field name="reference"/>
+ <label name="code"/>
+ <field name="code"/>
+ <label name="customer"/>
+ <field name="customer"/>
+ <label name="delivery_address"/>
+ <field name="delivery_address"/>
+ <label name="planned_date"/>
+ <field name="planned_date"/>
+ <label name="effective_date"/>
+ <field name="effective_date"/>
+ <label name="warehouse"/>
+ <field name="warehouse"/>
+ <notebook colspan="6">
+ <page string="Incoming Moves" id="incoming_moves">
+ <field name="incoming_moves" colspan="4">
+ <tree string="Moves">
+ <field name="product" select="1"/>
+ <field name="from_location" select="2"/>
+ <field name="to_location" select="2"/>
+ <field name="quantity" select="1"/>
+ <field name="uom" select="1"/>
+ <field name="planned_date" select="1"/>
+ <field name="state" select="2"/>
+ <field name="unit_digits" tree_invisible="1"/>
+ </tree>
+ </field>
+ </page>
+ <page string="Inventory Moves" id="inventory_moves">
+ <field name="inventory_moves" colspan="4"/>
+ </page>
+ </notebook>
+ <group col="4" colspan="6" id="state_buttons">
+ <label name="state"/>
+ <field name="state"/>
+ <group col="5" colspan="2" id="buttons">
+ <button string="Cancel" name="cancel"
+ states="{'invisible': '''state in ('cancel', 'done') ''', 'readonly': '''%(group_stock)d not in groups'''}"
+ icon="tryton-cancel"/>
+ <button string="Received" name="received"
+ states="{'invisible': '''state != 'draft' ''', 'readonly': '''%(group_stock)d not in groups'''}"
+ icon="tryton-go-next"/>
+ <button string="Done" name="done"
+ states="{'invisible': '''state != 'received' ''', 'readonly': '''%(group_stock)d not in groups'''}"
+ icon="tryton-ok"/>
+ <button string="Reset to Draft" name="button_draft"
+ type="object"
+ states="{'invisible': '''state != 'cancel' ''', 'readonly': '''%(group_stock)d not in groups'''}"
+ icon="tryton-clear"/>
+ </group>
+ </group>
+ </form>
+ ]]>
+ </field>
+ </record>
+ <record model="ir.ui.view" id="packing_out_return_view_tree">
+ <field name="model">stock.packing.out.return</field>
+ <field name="type">tree</field>
+ <field name="arch" type="xml">
+ <![CDATA[
+ <tree string="Customer Return Shipments">
+ <field name="code" select="1"/>
+ <field name="reference" select="1"/>
+ <field name="state" select="1"/>
+ <field name="planned_date" select="2"/>
+ <field name="effective_date" select="2"/>
+ <field name="customer" select="2"/>
+ <field name="delivery_address" select="2"/>
+ </tree>
+ ]]>
+ </field>
</record>
+ <record model="ir.action.act_window" id="act_packing_out_return_form">
+ <field name="name">Customer Return Shipments</field>
+ <field name="res_model">stock.packing.out.return</field>
+ <field name="view_type">form</field>
+ </record>
+ <record model="ir.action.act_window.view"
+ id="act_packing_out_return_form_view1">
+ <field name="sequence" eval="1"/>
+ <field name="view" ref="packing_out_return_view_tree"/>
+ <field name="act_window" ref="act_packing_out_return_form"/>
+ </record>
+ <record model="ir.action.act_window.view"
+ id="act_packing_out_return_form_view2">
+ <field name="sequence" eval="2"/>
+ <field name="view" ref="packing_out_return_view_form"/>
+ <field name="act_window" ref="act_packing_out_return_form"/>
+ </record>
+ <menuitem parent="menu_packing_out_form" sequence="40"
+ action="act_packing_out_return_form"
+ id="menu_packing_out_return_form"/>
+
+ <record model="ir.action.act_window" id="act_packing_out_return_form2">
+ <field name="name">New Customer Return Shipment</field>
+ <field name="res_model">stock.packing.out.return</field>
+ <field name="view_type">form</field>
+ </record>
+ <record model="ir.action.act_window.view"
+ id="act_packing_out_return_form2_view1">
+ <field name="sequence" eval="1"/>
+ <field name="view" ref="packing_out_return_view_form"/>
+ <field name="act_window" ref="act_packing_out_return_form2"/>
+ </record>
+ <record model="ir.action.act_window.view"
+ id="act_packing_out_return_form2_view2">
+ <field name="sequence" eval="2"/>
+ <field name="view" ref="packing_out_return_view_tree"/>
+ <field name="act_window" ref="act_packing_out_return_form2"/>
+ </record>
+ <menuitem parent="menu_packing_out_return_form" sequence="10"
+ action="act_packing_out_return_form2" id="menu_packing_out_return_form2"/>
+
<!-- Workflow packing in -->
<record model="workflow" id="wkf_packingin">
- <field name="name">Supplier Packing</field>
+ <field name="name">Supplier Shipment</field>
<field name="osv">stock.packing.in</field>
<field name="on_create">True</field>
</record>
@@ -505,7 +828,7 @@ this repository contains the full copyright notices and license terms. -->
<record model="workflow.activity" id="packingin_act_cancel">
<field name="workflow" ref="wkf_packingin"/>
<field name="flow_stop">True</field>
- <field name="name">Cancel</field>
+ <field name="name">Canceled</field>
<field name="kind">function</field>
<field name="action">set_state_cancel()</field>
</record>
@@ -560,7 +883,7 @@ this repository contains the full copyright notices and license terms. -->
<!-- Workflow packing out -->
<record model="workflow" id="wkf_packingout">
- <field name="name">Customer Packing</field>
+ <field name="name">Customer Shipment</field>
<field name="osv">stock.packing.out</field>
<field name="on_create">True</field>
</record>
@@ -574,7 +897,7 @@ this repository contains the full copyright notices and license terms. -->
<record model="workflow.activity" id="packingout_act_cancel">
<field name="workflow" ref="wkf_packingout"/>
<field name="flow_stop">True</field>
- <field name="name">Cancel</field>
+ <field name="name">Canceled</field>
<field name="kind">function</field>
<field name="action">set_state_cancel()</field>
</record>
@@ -620,6 +943,13 @@ this repository contains the full copyright notices and license terms. -->
<field name="signal">waiting</field>
</record>
<record model="workflow.transition"
+ id="packingout_trans_waiting_waiting">
+ <field name="act_from" ref="packingout_act_waiting"/>
+ <field name="act_to" ref="packingout_act_waiting"/>
+ <field name="group" ref="group_stock"/>
+ <field name="signal">waiting</field>
+ </record>
+ <record model="workflow.transition"
id="packingout_trans_waiting_assigned_force">
<field name="act_from" ref="packingout_act_waiting"/>
<field name="act_to" ref="packingout_act_assigned"/>
@@ -663,13 +993,6 @@ this repository contains the full copyright notices and license terms. -->
<field name="signal">packed</field>
</record>
<record model="workflow.transition"
- id="packingout_trans_packed_assigned">
- <field name="act_from" ref="packingout_act_packed"/>
- <field name="act_to" ref="packingout_act_assigned"/>
- <field name="group" ref="group_stock"/>
- <field name="signal">assign</field>
- </record>
- <record model="workflow.transition"
id="packingout_trans_packed_done">
<field name="act_from" ref="packingout_act_packed"/>
<field name="act_to" ref="packingout_act_done"/>
@@ -692,24 +1015,79 @@ this repository contains the full copyright notices and license terms. -->
</record>
- <record model="ir.action.report" id="report_packing_out">
- <field name="name">Customer Packing</field>
+ <record model="ir.action.report" id="report_packing_out_delivery_note">
+ <field name="name">Delivery Note</field>
<field name="model">stock.packing.out</field>
- <field name="report_name">stock.packing.out</field>
- <field name="report">stock/packing_out.odt</field>
+ <field name="report_name">stock.packing.out.delivery_note</field>
+ <field name="report">stock/delivery_note.odt</field>
<field name="style">company/header_A4.odt</field>
</record>
<record model="ir.action.keyword"
- id="report_packing_out_keyword">
+ id="report_packing_out_delivery_note_keyword">
<field name="keyword">form_print</field>
<field name="model">stock.packing.out,0</field>
- <field name="action" ref="report_packing_out"/>
+ <field name="action" ref="report_packing_out_delivery_note"/>
</record>
+ <record model="ir.action.report" id="report_packing_out_picking_list">
+ <field name="name">Picking List</field>
+ <field name="model">stock.packing.out</field>
+ <field name="report_name">stock.packing.out.picking_list</field>
+ <field name="report">stock/picking_list.odt</field>
+ <field name="style">company/header_A4.odt</field>
+ </record>
+ <record model="ir.action.keyword"
+ id="report_packing_out_picking_list_keyword">
+ <field name="keyword">form_print</field>
+ <field name="model">stock.packing.out,0</field>
+ <field name="action" ref="report_packing_out_picking_list"/>
+ </record>
+
+ <record model="ir.action.report" id="report_packing_in_restocking_list">
+ <field name="name">Restocking List</field>
+ <field name="model">stock.packing.in</field>
+ <field name="report_name">stock.packing.in.restocking_list</field>
+ <field name="report">stock/supplier_restocking_list.odt</field>
+ <field name="style">company/header_A4.odt</field>
+ </record>
+ <record model="ir.action.keyword"
+ id="report_packing_in_restocking_list_keyword">
+ <field name="keyword">form_print</field>
+ <field name="model">stock.packing.in,0</field>
+ <field name="action" ref="report_packing_in_restocking_list"/>
+ </record>
+
+ <record model="ir.action.report" id="report_packing_out_return_restocking_list">
+ <field name="name">Restocking List</field>
+ <field name="model">stock.packing.out.return</field>
+ <field name="report_name">stock.packing.out.return.restocking_list</field>
+ <field name="report">stock/customer_return_restocking_list.odt</field>
+ <field name="style">company/header_A4.odt</field>
+ </record>
+ <record model="ir.action.keyword"
+ id="report_packing_out_return_restocking_list_keyword">
+ <field name="keyword">form_print</field>
+ <field name="model">stock.packing.out.return,0</field>
+ <field name="action" ref="report_packing_out_return_restocking_list"/>
+ </record>
+
+ <record model="ir.action.report" id="report_packing_internal">
+ <field name="name">Internal Shipment</field>
+ <field name="model">stock.packing.internal</field>
+ <field name="report_name">stock.packing.internal.report</field>
+ <field name="report">stock/internal_packing.odt</field>
+ <field name="style">company/header_A4.odt</field>
+ </record>
+ <record model="ir.action.keyword"
+ id="report_packing_internal_keyword">
+ <field name="keyword">form_print</field>
+ <field name="model">stock.packing.internal,0</field>
+ <field name="action" ref="report_packing_internal"/>
+ </record>
<!-- Workflow internal packing -->
<record model="workflow" id="wkf_packinginternal">
- <field name="name">Internal Packing</field>
+ <field name="name">Internal Shipment</field>
<field name="osv">stock.packing.internal</field>
<field name="on_create">True</field>
</record>
@@ -723,7 +1101,7 @@ this repository contains the full copyright notices and license terms. -->
<record model="workflow.activity" id="packinginternal_act_cancel">
<field name="workflow" ref="wkf_packinginternal"/>
<field name="flow_stop">True</field>
- <field name="name">Cancel</field>
+ <field name="name">Canceled</field>
<field name="kind">function</field>
<field name="action">set_state_cancel()</field>
</record>
@@ -762,6 +1140,13 @@ this repository contains the full copyright notices and license terms. -->
<field name="signal">draft</field>
</record>
<record model="workflow.transition"
+ id="packinginternal_trans_waiting_waiting">
+ <field name="act_from" ref="packinginternal_act_waiting"/>
+ <field name="act_to" ref="packinginternal_act_waiting"/>
+ <field name="group" ref="group_stock"/>
+ <field name="signal">waiting</field>
+ </record>
+ <record model="workflow.transition"
id="packinginternal_trans_waiting_assigned">
<field name="act_from" ref="packinginternal_act_waiting"/>
<field name="act_to" ref="packinginternal_act_assigned"/>
@@ -811,6 +1196,227 @@ this repository contains the full copyright notices and license terms. -->
<field name="signal">cancel</field>
</record>
+ <!-- Workflow packing out return -->
+ <record model="workflow" id="wkf_packing_out_return">
+ <field name="name">Customer Return Shipment</field>
+ <field name="osv">stock.packing.out.return</field>
+ <field name="on_create">True</field>
+ </record>
+ <record model="workflow.activity" id="packing_out_return_act_draft">
+ <field name="workflow" ref="wkf_packing_out_return"/>
+ <field name="flow_start">True</field>
+ <field name="kind">function</field>
+ <field name="action">set_state_draft()</field>
+ <field name="name">Draft</field>
+ </record>
+ <record model="workflow.activity" id="packing_out_return_act_cancel">
+ <field name="workflow" ref="wkf_packing_out_return"/>
+ <field name="flow_stop">True</field>
+ <field name="name">Canceled</field>
+ <field name="kind">function</field>
+ <field name="action">set_state_cancel()</field>
+ </record>
+ <record model="workflow.activity" id="packing_out_return_act_done">
+ <field name="workflow" ref="wkf_packing_out_return"/>
+ <field name="flow_stop">True</field>
+ <field name="name">Done</field>
+ <field name="kind">function</field>
+ <field name="action">set_state_done()</field>
+ </record>
+ <record model="workflow.activity" id="packing_out_return_act_received">
+ <field name="name">Received</field>
+ <field name="kind">function</field>
+ <field name="workflow" ref="wkf_packing_out_return"/>
+ <field name="action">set_state_received()
create_inventory_moves()</field>
+ </record>
+
+ <record model="workflow.transition"
+ id="packing_out_return_trans_draft_received">
+ <field name="act_from" ref="packing_out_return_act_draft"/>
+ <field name="act_to" ref="packing_out_return_act_received"/>
+ <field name="group" ref="group_stock"/>
+ <field name="signal">received</field>
+ </record>
+ <record model="workflow.transition"
+ id="packing_out_return_trans_received_draft">
+ <field name="act_from" ref="packing_out_return_act_received"/>
+ <field name="act_to" ref="packing_out_return_act_draft"/>
+ <field name="group" ref="group_stock"/>
+ <field name="signal">draft</field>
+ </record>
+ <record model="workflow.transition" id="packing_out_return_trans_received_done">
+ <field name="act_from" ref="packing_out_return_act_received"/>
+ <field name="act_to" ref="packing_out_return_act_done"/>
+ <field name="group" ref="group_stock"/>
+ <field name="signal">done</field>
+ </record>
+ <record model="workflow.transition" id="packing_out_return_trans_draft_cancel">
+ <field name="act_from" ref="packing_out_return_act_draft"/>
+ <field name="act_to" ref="packing_out_return_act_cancel"/>
+ <field name="group" ref="group_stock"/>
+ <field name="signal">cancel</field>
+ </record>
+ <record model="workflow.transition"
+ id="packing_out_return_trans_received_cancel">
+ <field name="act_from" ref="packing_out_return_act_received"/>
+ <field name="act_to" ref="packing_out_return_act_cancel"/>
+ <field name="group" ref="group_stock"/>
+ <field name="signal">cancel</field>
+ </record>
+
+ <!-- Workflow purchase return packing -->
+ <record model="workflow" id="wkf_packing_in_return">
+ <field name="name">Supplier Return Shipment</field>
+ <field name="osv">stock.packing.in.return</field>
+ <field name="on_create">True</field>
+ </record>
+ <record model="workflow.activity" id="packing_in_return_act_draft">
+ <field name="workflow" ref="wkf_packing_in_return"/>
+ <field name="flow_start">True</field>
+ <field name="kind">function</field>
+ <field name="action">set_state_draft()</field>
+ <field name="name">Draft</field>
+ </record>
+ <record model="workflow.activity" id="packing_in_return_act_cancel">
+ <field name="workflow" ref="wkf_packing_in_return"/>
+ <field name="flow_stop">True</field>
+ <field name="name">Canceled</field>
+ <field name="kind">function</field>
+ <field name="action">set_state_cancel()</field>
+ </record>
+ <record model="workflow.activity" id="packing_in_return_act_done">
+ <field name="workflow" ref="wkf_packing_in_return"/>
+ <field name="flow_stop">True</field>
+ <field name="name">Done</field>
+ <field name="kind">function</field>
+ <field name="action">set_state_done()</field>
+ </record>
+ <record model="workflow.activity" id="packing_in_return_act_waiting">
+ <field name="name">Waiting</field>
+ <field name="kind">function</field>
+ <field name="workflow" ref="wkf_packing_in_return"/>
+ <field name="action">set_state_waiting()</field>
+ </record>
+ <record model="workflow.activity" id="packing_in_return_act_assigned">
+ <field name="name">Assigned</field>
+ <field name="kind">function</field>
+ <field name="workflow" ref="wkf_packing_in_return"/>
+ <field name="action">set_state_assigned()</field>
+ </record>
+
+ <record model="workflow.transition"
+ id="packing_in_return_trans_draft_waiting">
+ <field name="act_from" ref="packing_in_return_act_draft"/>
+ <field name="act_to" ref="packing_in_return_act_waiting"/>
+ <field name="group" ref="group_stock"/>
+ <field name="signal">waiting</field>
+ </record>
+ <record model="workflow.transition"
+ id="packing_in_return_trans_waiting_draft">
+ <field name="act_from" ref="packing_in_return_act_waiting"/>
+ <field name="act_to" ref="packing_in_return_act_draft"/>
+ <field name="group" ref="group_stock"/>
+ <field name="signal">draft</field>
+ </record>
+ <record model="workflow.transition"
+ id="packing_in_return_trans_waiting_assigned">
+ <field name="act_from" ref="packing_in_return_act_waiting"/>
+ <field name="act_to" ref="packing_in_return_act_assigned"/>
+ <field name="group" ref="group_stock"/>
+ <field name="signal">assign</field>
+ <field name="condition">assign_try()</field>
+ </record>
+ <record model="workflow.transition"
+ id="packing_in_return_trans_assigned_waiting">
+ <field name="act_from" ref="packing_in_return_act_assigned"/>
+ <field name="act_to" ref="packing_in_return_act_waiting"/>
+ <field name="group" ref="group_stock"/>
+ <field name="signal">waiting</field>
+ </record>
+ <record model="workflow.transition"
+ id="packing_in_return_trans_waiting_assigned_force">
+ <field name="act_from" ref="packing_in_return_act_waiting"/>
+ <field name="act_to" ref="packing_in_return_act_assigned"/>
+ <field name="group" ref="group_stock"/>
+ <field name="signal">force_assign</field>
+ <field name="condition">assign_force()</field>
+ </record>
+ <record model="workflow.transition" id="packing_in_return_trans_assigned_done">
+ <field name="act_from" ref="packing_in_return_act_assigned"/>
+ <field name="act_to" ref="packing_in_return_act_done"/>
+ <field name="group" ref="group_stock"/>
+ <field name="signal">done</field>
+ </record>
+ <record model="workflow.transition" id="packing_in_return_trans_draft_cancel">
+ <field name="act_from" ref="packing_in_return_act_draft"/>
+ <field name="act_to" ref="packing_in_return_act_cancel"/>
+ <field name="group" ref="group_stock"/>
+ <field name="signal">cancel</field>
+ </record>
+ <record model="workflow.transition"
+ id="packing_in_return_trans_waiting_cancel">
+ <field name="act_from" ref="packing_in_return_act_waiting"/>
+ <field name="act_to" ref="packing_in_return_act_cancel"/>
+ <field name="group" ref="group_stock"/>
+ <field name="signal">cancel</field>
+ </record>
+ <record model="workflow.transition"
+ id="packing_in_return_trans_assigned_cancel">
+ <field name="act_from" ref="packing_in_return_act_assigned"/>
+ <field name="act_to" ref="packing_in_return_act_cancel"/>
+ <field name="group" ref="group_stock"/>
+ <field name="signal">cancel</field>
+ </record>
+
+ <!-- Sequence packing out -->
+ <record model="ir.sequence.type" id="sequence_type_packing_out">
+ <field name="name">Customer Shipment</field>
+ <field name="code">stock.packing.out</field>
+ </record>
+ <record model="ir.sequence" id="sequence_packing_out">
+ <field name="name">Customer Shipment</field>
+ <field name="code">stock.packing.out</field>
+ </record>
+
+ <!-- Sequence packing in -->
+ <record model="ir.sequence.type" id="sequence_type_packing_in">
+ <field name="name">Supplier Shipment</field>
+ <field name="code">stock.packing.in</field>
+ </record>
+ <record model="ir.sequence" id="sequence_packing_in">
+ <field name="name">Supplier Shipment</field>
+ <field name="code">stock.packing.in</field>
+ </record>
+
+ <!-- Sequence packing internal -->
+ <record model="ir.sequence.type" id="sequence_type_packing_internal">
+ <field name="name">Internal Shipment</field>
+ <field name="code">stock.packing.internal</field>
+ </record>
+ <record model="ir.sequence" id="sequence_packing_internal">
+ <field name="name">Internal Shipment</field>
+ <field name="code">stock.packing.internal</field>
+ </record>
+
+ <!-- Sequence packing out return-->
+ <record model="ir.sequence.type" id="sequence_type_packing_out_return">
+ <field name="name">Customer Return Shipment</field>
+ <field name="code">stock.packing.out.return</field>
+ </record>
+ <record model="ir.sequence" id="sequence_packing_out_return">
+ <field name="name">Customer Return Shipment</field>
+ <field name="code">stock.packing.out.return</field>
+ </record>
+
+ <!-- Sequence packing in return -->
+ <record model="ir.sequence.type" id="sequence_type_packing_in_return">
+ <field name="name">Supplier Return Shipment</field>
+ <field name="code">stock.packing.in.return</field>
+ </record>
+ <record model="ir.sequence" id="sequence_packing_in_return">
+ <field name="name">Supplier Return Shipment</field>
+ <field name="code">stock.packing.in.return</field>
+ </record>
<!-- Add delivery field on address -->
<record model="ir.ui.view" id="address_view_tree">
@@ -916,5 +1522,52 @@ this repository contains the full copyright notices and license terms. -->
<field name="perm_delete" eval="True"/>
</record>
+ <record model="ir.model.access" id="access_packing_out_return">
+ <field name="model" search="[('model', '=', 'stock.packing.out.return')]"/>
+ <field name="perm_read" eval="True"/>
+ <field name="perm_write" eval="False"/>
+ <field name="perm_create" eval="False"/>
+ <field name="perm_delete" eval="False"/>
+ </record>
+ <record model="ir.model.access" id="access_packing_out_return_group_stock">
+ <field name="model" search="[('model', '=', 'stock.packing.out.return')]"/>
+ <field name="group" ref="group_stock"/>
+ <field name="perm_read" eval="True"/>
+ <field name="perm_write" eval="True"/>
+ <field name="perm_create" eval="True"/>
+ <field name="perm_delete" eval="False"/>
+ </record>
+ <record model="ir.model.access" id="access_packing_out_return_group_stock_admin">
+ <field name="model" search="[('model', '=', 'stock.packing.out.return')]"/>
+ <field name="group" ref="group_stock_admin"/>
+ <field name="perm_read" eval="True"/>
+ <field name="perm_write" eval="True"/>
+ <field name="perm_create" eval="True"/>
+ <field name="perm_delete" eval="True"/>
+ </record>
+
+ <record model="ir.model.access" id="access_packing_in_return">
+ <field name="model" search="[('model', '=', 'stock.packing.in.return')]"/>
+ <field name="perm_read" eval="True"/>
+ <field name="perm_write" eval="False"/>
+ <field name="perm_create" eval="False"/>
+ <field name="perm_delete" eval="False"/>
+ </record>
+ <record model="ir.model.access" id="access_packing_in_return_group_stock">
+ <field name="model" search="[('model', '=', 'stock.packing.in.return')]"/>
+ <field name="group" ref="group_stock"/>
+ <field name="perm_read" eval="True"/>
+ <field name="perm_write" eval="True"/>
+ <field name="perm_create" eval="True"/>
+ <field name="perm_delete" eval="False"/>
+ </record>
+ <record model="ir.model.access" id="access_packing_in_return_group_stock_admin">
+ <field name="model" search="[('model', '=', 'stock.packing.in.return')]"/>
+ <field name="group" ref="group_stock_admin"/>
+ <field name="perm_read" eval="True"/>
+ <field name="perm_write" eval="True"/>
+ <field name="perm_create" eval="True"/>
+ <field name="perm_delete" eval="True"/>
+ </record>
</data>
</tryton>
diff --git a/packing_out.odt b/packing_out.odt
deleted file mode 100644
index b774e2f..0000000
Binary files a/packing_out.odt and /dev/null differ
diff --git a/party.xml b/party.xml
new file mode 100644
index 0000000..efb5f32
--- /dev/null
+++ b/party.xml
@@ -0,0 +1,33 @@
+<?xml version="1.0"?>
+<!-- This file is part of Tryton. The COPYRIGHT file at the top level of
+this repository contains the full copyright notices and license terms. -->
+<tryton>
+ <data>
+ <record model="ir.action.act_window" id="act_packing_out_form2">
+ <field name="name">Customer Shipments</field>
+ <field name="res_model">stock.packing.out</field>
+ <field name="view_type">form</field>
+ <field name="domain">[("customer", "=", active_id)]</field>
+ </record>
+ <record model="ir.action.keyword"
+ id="act_open_purchase_keyword1">
+ <field name="keyword">form_relate</field>
+ <field name="model">party.party,0</field>
+ <field name="action" ref="act_packing_out_form2"/>
+ </record>
+
+ <record model="ir.action.act_window" id="act_packing_out_form3">
+ <field name="name">Supplier Shipments</field>
+ <field name="res_model">stock.packing.in</field>
+ <field name="view_type">form</field>
+ <field name="domain">[("supplier", "=", active_id)]</field>
+ </record>
+ <record model="ir.action.keyword"
+ id="act_open_purchase_keyword2">
+ <field name="keyword">form_relate</field>
+ <field name="model">party.party,0</field>
+ <field name="action" ref="act_packing_out_form3"/>
+ </record>
+
+ </data>
+</tryton>
diff --git a/picking_list.odt b/picking_list.odt
new file mode 100644
index 0000000..41d0b5b
Binary files /dev/null and b/picking_list.odt differ
diff --git a/product.py b/product.py
index c7fb3b2..8eb3821 100644
--- a/product.py
+++ b/product.py
@@ -1,11 +1,11 @@
#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 trytond.osv import fields, OSV
-from trytond.wizard import Wizard, WizardOSV
+from trytond.model import ModelView, ModelSQL, fields
+from trytond.wizard import Wizard
import datetime
-class Template(OSV):
+class Template(ModelSQL, ModelView):
_name = "product.template"
quantity = fields.Function('get_quantity', type='float', string='Quantity')
@@ -25,7 +25,7 @@ class Template(OSV):
Template()
-class Product(OSV):
+class Product(ModelSQL, ModelView):
_name = "product.product"
quantity = fields.Function('get_quantity', type='float', string='Quantity',
@@ -120,11 +120,17 @@ class Product(OSV):
:param with_childs: a boolean to compute also for child locations
:param skip_zero: a boolean to list also items with zero quantity
:param context: the context with keys:
- stock_date_end: if set the date of the stock computation
+ stock_date_end: if set the date of the stock computation.
stock_date_start: if set return the delta of the stock
- between the two dates
- stock_assign: if set compute also the assigned moves as done
- forecast: if set compute the forecast quantity
+ between the two dates, (ignored if stock_date_end is
+ missing).
+ stock_assign: if set compute also the assigned moves as done.
+ forecast: if set compute the forecast quantity.
+ stock_destinations: A list of location ids. If set, restrict the
+ computation to moves from and to those locations.
+ stock_skip_warehouse: if set, quantities on a warehouse are no
+ more quantities of all child locations but quantities of the
+ storage zone.
:return: a dictionary with (location id, product id) as key
and quantity as value
"""
@@ -134,6 +140,8 @@ class Product(OSV):
location_obj = self.pool.get('stock.location')
date_obj = self.pool.get('ir.date')
+ today = date_obj.today(cursor, user, context=context)
+
if not location_ids:
return []
if context is None:
@@ -143,10 +151,11 @@ class Product(OSV):
# and to add after the query.
location_ids = set(location_ids)
storage_to_remove = set()
- wh_to_add= {}
+ wh_to_add = {}
for location in location_obj.browse(
cursor, user, location_ids, context=context):
- if location.type == 'warehouse':
+ if location.type == 'warehouse' \
+ and context.get('stock_skip_warehouse'):
location_ids.remove(location.id)
if location.storage_location.id not in location_ids:
storage_to_remove.add(location.storage_location.id)
@@ -162,16 +171,23 @@ class Product(OSV):
context['stock_date_end'] = datetime.date.max
# date end in the past or today: filter on state done
- if context['stock_date_end'] < date_obj.today(cursor, user,
- context=context) or \
- (context['stock_date_end'] == \
- date_obj.today(cursor, user, context=context) \
- 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'\
- '))'
+ if context['stock_date_end'] < today 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'],
@@ -185,21 +201,43 @@ class Product(OSV):
# 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 ( planned_date <= %s AND planned_date >= %s '\
- ')) '\
- 'OR (effective_date <= %s AND effective_date >= %s)'\
- ')'\
- '))'
- today = date_obj.today(cursor, user, context=context)
+ 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 '\
+ '(planned_date <= %s) '\
+ 'AND '\
+ '(planned_date >= %s)'\
+ ')'\
+ 'OR '\
+ '(' \
+ '(effective_date <= %s) '\
+ 'AND '\
+ '(effective_date >= %s)'\
+ ')'\
+ ')'\
+ ')'\
+ ')'
+
state_date_vals = [
'done', 'assigned', today, today,
'done', 'assigned', 'draft',
@@ -208,36 +246,77 @@ class Product(OSV):
]
if context.get('stock_date_start'):
- if context['stock_date_start'] > date_obj.today(cursor, user,
- context=context):
- 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',
+ 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']])
else:
- tmp_clause = '(state in (%s, %s, %s)) AND ('\
- '(effective_date IS NULL '\
- 'AND ( planned_date >= %s OR planned_date IS NULL)) '\
- 'OR effective_date >= %s'\
- ')'
- today = date_obj.today(cursor, user, context=context)
- state_date_vals.extend(
- ['done', 'assigned', 'draft', today, today])
-
- state_date_clause += ' AND ((' + tmp_clause + \
- ') 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([
+ 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,
@@ -255,14 +334,29 @@ class Product(OSV):
",".join(["%s" for i in location_ids]) + ") "
where_vals = location_ids[:]
- where_clause += " AND " + move_query + " "
- where_vals += move_val
+ if move_query:
+ where_clause += " AND " + move_query + " "
+ where_vals += move_val
if product_ids:
where_clause += "AND product in (" + \
",".join(["%s" for i in product_ids]) + ")"
where_vals += product_ids
+ if context.get('stock_destinations'):
+ destinations = context.get('stock_destinations')
+ dest_clause_from = " AND from_location in ("
+ dest_clause_from += ",".join("%s" for i in destinations)
+ dest_clause_from += ") "
+ dest_clause_to = " AND to_location in ("
+ dest_clause_to += ",".join("%s" for i in destinations)
+ dest_clause_to += ") "
+ dest_vals = destinations
+
+ else:
+ dest_clause_from = dest_clause_to =""
+ dest_vals = []
+
select_clause = \
"SELECT location, product, uom, sum(quantity) AS quantity "\
"FROM ( "\
@@ -281,10 +375,11 @@ class Product(OSV):
"GROUP BY from_location, product, uom "\
") AS T GROUP BY T.location, T.product, T.uom"
- cursor.execute(select_clause % (state_date_clause, where_clause,
- state_date_clause, where_clause),
- state_date_vals + where_vals + \
- state_date_vals + where_vals)
+ cursor.execute(select_clause % (
+ state_date_clause, where_clause + dest_clause_from,
+ state_date_clause, where_clause + dest_clause_to),
+ state_date_vals + where_vals + dest_vals + \
+ state_date_vals + where_vals + dest_vals)
raw_lines = cursor.fetchall()
res = {}
@@ -374,114 +469,16 @@ class Product(OSV):
def view_header_get(self, cursor, user, value, view_type='form',
context=None):
if not context.get('locations'):
- return False
+ return value
location_obj = self.pool.get('stock.location')
locations = location_obj.browse(cursor, user, context.get('locations'),
context=context)
return value + " (" + ",".join([l.name for l in locations]) + ")"
- def pick_product(self, cursor, user, move, location_quantities, context=None):
- """
- Pick the product across the location. Naive (fast)
- implementation.
- :param move is a browse record with the product and the quantity to pick.
- :param location_quantities a list of tuple (location, available_qty)
- where location is a browse record.
- """
- to_pick = []
- needed_qty = move.quantity
- for location, available_qty in location_quantities.iteritems():
- # Ignore available_qty when too small
- if available_qty < move.uom.rounding:
- continue
- if needed_qty <= available_qty:
- to_pick.append((location, needed_qty))
- return to_pick
- else:
- to_pick.append((location, available_qty))
- needed_qty -= available_qty
- # Force assignation for consumables:
- if move.product.type == "consumable":
- to_pick.append((move.from_location, needed_qty))
- return to_pick
- return None
-
- def assign_try(self, cursor, user, moves, context=None):
- move_obj = self.pool.get('stock.move')
- product_obj = self.pool.get('product.product')
- uom_obj = self.pool.get('product.uom')
- date_obj = self.pool.get('ir.date')
- location_obj = self.pool.get('stock.location')
-
- if context is None:
- context = {}
-
- cursor.execute('LOCK TABLE stock_move')
-
- local_ctx = context and context.copy() or {}
- local_ctx['stock_date_end'] = date_obj.today(cursor, user,
- context=context)
- local_ctx['stock_assign'] = True
- location_ids = location_obj.search(cursor, user, [
- ('parent', 'child_of', [x.from_location.id for x in moves]),
- ], context=context)
- pbl = product_obj.products_by_location(cursor, user,
- location_ids=location_ids,
- product_ids=[m.product.id for m in moves],
- context=local_ctx)
-
- success = True
- for move in moves:
- if move.state != 'draft':
- continue
- to_location = move.to_location
- location_qties = {}
- child_ids = location_obj.search(cursor, user, [
- ('parent', 'child_of', [move.from_location.id]),
- ], context=context)
- for location in location_obj.browse(cursor, user, child_ids,
- context=context):
- if (location.id, move.product.id) in pbl:
- location_qties[location] = uom_obj.compute_qty(
- cursor, user, move.product.default_uom,
- pbl[(location.id, move.product.id)], move.uom,
- round=False, context=context)
-
- to_pick = self.pick_product(
- cursor, user, move, location_qties, context=context)
-
- if to_pick is None:
- success = False
- continue
- first = True
- for from_location, qty in to_pick:
- values = {
- 'from_location': from_location.id,
- 'quantity': qty,
- 'state': 'assigned',
- }
- if first:
- move_obj.write(cursor, user, move.id, values,
- context=context)
- first = False
- else:
- move_id = move_obj.copy(cursor, user, move.id,
- default=values, context=context)
-
- qty_defaut_uom = uom_obj.compute_qty(
- cursor, user, move.uom, qty, move.product.default_uom,
- round=False, context=context)
-
- pbl[(from_location.id, move.product.id)] = \
- pbl.get((from_location.id, move.product.id), 0.0) - qty_defaut_uom
- pbl[(to_location.id, move.product.id)]= \
- pbl.get((to_location.id, move.product.id), 0.0) + qty_defaut_uom
- return success
-
Product()
-class ChooseStockDateInit(WizardOSV):
+class ChooseStockDateInit(ModelView):
_name = 'stock.product_stock_date.init'
_description = "Compute stock quantities"
forecast_date = fields.Date(
diff --git a/product.xml b/product.xml
index 8013b1e..91844df 100644
--- a/product.xml
+++ b/product.xml
@@ -1,5 +1,6 @@
<?xml version="1.0"?>
-<!-- This file is part of Tryton. The COPYRIGHT file at the top level of this repository contains the full copyright notices and license terms. -->
+<!-- This file is part of Tryton. The COPYRIGHT file at the top level of
+this repository contains the full copyright notices and license terms. -->
<tryton>
<data>
<record model="ir.ui.view" id="product_view_tree_qty">
@@ -14,6 +15,7 @@
<field name="quantity" select="2"/>
<field name="forecast_quantity" select="2"/>
<field name="default_uom" select="2"/>
+ <field name="type" select="1"/>
<field name="active" select="2"/>
</tree>
]]>
@@ -37,7 +39,6 @@
</record>
<record model="ir.action.act_window" id="act_location_quantity_tree">
<field name="name">Product Stock</field>
- <field name="src_model">product.product</field>
<field name="res_model">stock.location</field>
<field name="view_type">tree</field>
<field name="domain">[('parent', '=', False)]</field>
diff --git a/setup.py b/setup.py
index a08dfd7..82d5a77 100644
--- a/setup.py
+++ b/setup.py
@@ -36,7 +36,11 @@ setup(name='trytond_stock',
package_data={
'trytond.modules.stock': info.get('xml', []) \
+ info.get('translation', []) \
- + ['packing_out.odt'],
+ + ['customer_return_restocking_list.odt',
+ 'delivery_note.odt',
+ 'internal_packing.odt',
+ 'picking_list.odt',
+ 'supplier_restocking_list.odt'],
},
classifiers=[
'Development Status :: 5 - Production/Stable',
diff --git a/stock.xml b/stock.xml
index 12620dc..70fde18 100644
--- a/stock.xml
+++ b/stock.xml
@@ -17,5 +17,9 @@
<menuitem name="Configuration" parent="menu_stock"
id="menu_configuration" groups="group_stock_admin"
sequence="0" icon="tryton-preferences"/>
+
+ <menuitem name="Reporting" parent="menu_stock"
+ id="menu_reporting" sequence="100" active="0"/>
+
</data>
</tryton>
diff --git a/supplier_restocking_list.odt b/supplier_restocking_list.odt
new file mode 100644
index 0000000..22d0b14
Binary files /dev/null and b/supplier_restocking_list.odt differ
diff --git a/tests/test_stock.py b/tests/test_stock.py
index b9925cb..5c3ac50 100644
--- a/tests/test_stock.py
+++ b/tests/test_stock.py
@@ -1,5 +1,6 @@
#!/usr/bin/env python
-#This file is part of Tryton. The COPYRIGHT file at the top level of this repository contains the full copyright notices and license terms.
+#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 sys, os
DIR = os.path.abspath(os.path.normpath(os.path.join(__file__,
@@ -8,8 +9,8 @@ if os.path.isdir(DIR):
sys.path.insert(0, os.path.dirname(DIR))
import unittest
-import trytond.tests
-from trytond.tests import RPCProxy, CONTEXT, SOCK
+import trytond.tests.test_tryton
+from trytond.tests.test_tryton import RPCProxy, CONTEXT, SOCK
class StockTestCase(unittest.TestCase):
'''
@@ -17,7 +18,7 @@ class StockTestCase(unittest.TestCase):
'''
def setUp(self):
- trytond.tests.install_module('stock')
+ trytond.tests.test_tryton.install_module('stock')
self.location = RPCProxy('stock.location')
def test0990location(self):
@@ -47,7 +48,7 @@ def suite():
return unittest.TestLoader().loadTestsFromTestCase(StockTestCase)
if __name__ == '__main__':
- suiteTrytond = trytond.tests.suite()
+ suiteTrytond = trytond.tests.test_tryton.suite()
suiteStock = suite()
alltests = unittest.TestSuite([suiteTrytond, suiteStock])
unittest.TextTestRunner(verbosity=2).run(alltests)
diff --git a/trytond_stock.egg-info/PKG-INFO b/trytond_stock.egg-info/PKG-INFO
index dc53c89..a2ba43a 100644
--- a/trytond_stock.egg-info/PKG-INFO
+++ b/trytond_stock.egg-info/PKG-INFO
@@ -1,21 +1,21 @@
Metadata-Version: 1.0
Name: trytond-stock
-Version: 1.0.3
+Version: 1.2.0
Summary: Stock Management and Inventory Control with:
- Location definition
- Stock move
- - Packing Supplier / Customer / Internal
+ - Shipment: Supplier, Customer or Internal
- Stock Inventory
And with reports:
- - Customer Packing
+ - Customer Shipment
- Products by Locations
Home-page: http://www.tryton.org/
Author: B2CK
Author-email: info at b2ck.com
License: GPL-3
-Download-URL: http://downloads.tryton.org/1.0/
+Download-URL: http://downloads.tryton.org/1.2/
Description: UNKNOWN
Platform: UNKNOWN
Classifier: Development Status :: 5 - Production/Stable
diff --git a/trytond_stock.egg-info/SOURCES.txt b/trytond_stock.egg-info/SOURCES.txt
index dc5d487..257c9c2 100644
--- a/trytond_stock.egg-info/SOURCES.txt
+++ b/trytond_stock.egg-info/SOURCES.txt
@@ -5,17 +5,23 @@ LICENSE
MANIFEST.in
README
TODO
+customer_return_restocking_list.odt
de_DE.csv
+delivery_note.odt
+es_CO.csv
es_ES.csv
fr_FR.csv
+internal_packing.odt
inventory.xml
location.xml
move.xml
packing.xml
-packing_out.odt
+party.xml
+picking_list.odt
product.xml
setup.py
stock.xml
+supplier_restocking_list.odt
./__init__.py
./__tryton__.py
./inventory.py
diff --git a/trytond_stock.egg-info/requires.txt b/trytond_stock.egg-info/requires.txt
index 2bc3e8b..6e70b7e 100644
--- a/trytond_stock.egg-info/requires.txt
+++ b/trytond_stock.egg-info/requires.txt
@@ -2,5 +2,5 @@ trytond_party
trytond_product
trytond_company
trytond_currency
-trytond >= 1.0
-trytond < 1.1
\ No newline at end of file
+trytond >= 1.2
+trytond < 1.3
\ No newline at end of file
commit 17480271018706b81567a3f9efbb86298cf85357
Author: Daniel Baumann <daniel at debian.org>
Date: Mon Mar 23 07:58:31 2009 +0100
Adding upstream version 1.0.3.
diff --git a/CHANGELOG b/CHANGELOG
index bf64720..72ad7b8 100644
--- a/CHANGELOG
+++ b/CHANGELOG
@@ -1,3 +1,6 @@
+Version 1.0.3 - 2009-03-02
+* Some bug fixes (see mercurial logs for details)
+
Version 1.0.2 - 2009-01-06
* Handle average price for products return to supplier
* Some bug fixes (see mercurial logs for details)
diff --git a/COPYRIGHT b/COPYRIGHT
index 37fef2d..da277a9 100644
--- a/COPYRIGHT
+++ b/COPYRIGHT
@@ -1,7 +1,7 @@
Copyright (C) 2004-2008 Tiny SPRL.
-Copyright (C) 2008 Cédric Krier.
-Copyright (C) 2008 Bertrand Chenal.
-Copyright (C) 2008 B2CK SPRL.
+Copyright (C) 2008-2009 Cédric Krier.
+Copyright (C) 2008-2009 Bertrand Chenal.
+Copyright (C) 2008-2009 B2CK SPRL.
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
diff --git a/PKG-INFO b/PKG-INFO
index 3108ef8..83440bc 100644
--- a/PKG-INFO
+++ b/PKG-INFO
@@ -1,6 +1,6 @@
Metadata-Version: 1.0
Name: trytond_stock
-Version: 1.0.2
+Version: 1.0.3
Summary: Stock Management and Inventory Control with:
- Location definition
- Stock move
diff --git a/__tryton__.py b/__tryton__.py
index 33faf60..c458297 100644
--- a/__tryton__.py
+++ b/__tryton__.py
@@ -5,7 +5,7 @@
'name_de_DE': 'Lagerverwaltung',
'name_fr_FR': 'Gestion des stocks',
'name_es_ES': 'Inventarios',
- 'version': '1.0.2',
+ 'version': '1.0.3',
'author': 'B2CK',
'email': 'info at b2ck.com',
'website': 'http://www.tryton.org/',
diff --git a/location.py b/location.py
index 951485a..b859a7d 100644
--- a/location.py
+++ b/location.py
@@ -110,8 +110,19 @@ class Location(OSV):
product_obj = self.pool.get('product.product')
date_obj = self.pool.get('ir.date')
- if (not context) or (not context.get('product')):
- return dict([(i,0) for i in ids])
+ if not context:
+ context = {}
+
+ if (not context.get('product')) \
+ or not (isinstance(context['product'], (int, long))):
+ return dict([(i, 0) for i in ids])
+
+ ctx = context.copy()
+ ctx['active_test'] = False
+ if not product_obj.search(cursor, user, [
+ ('id', '=', context['product']),
+ ], context=ctx):
+ return dict([(i, 0) for i in ids])
if name == 'quantity' and \
context.get('stock_date_end') > \
@@ -131,7 +142,7 @@ class Location(OSV):
product_ids=[context['product']], with_childs=True, skip_zero=False,
context=context).iteritems()
- return dict( [(loc,qty) for (loc,prod), qty in pbl] )
+ return dict([(loc,qty) for (loc,prod), qty in pbl])
def view_header_get(self, cursor, user, value, view_type='form',
context=None):
@@ -139,7 +150,13 @@ class Location(OSV):
uom_obj = self.pool.get('product.uom')
if context is None:
context = {}
- if context.get('product'):
+ ctx = context.copy()
+ ctx['active_test'] = False
+ if context.get('product') \
+ and isinstance(context['product'], (int, long)) \
+ and product_obj.search(cursor, user, [
+ ('id', '=', context['product']),
+ ], context=ctx):
product_name = product_obj.name_get(cursor, user, context['product'],
context=context)[0][1]
product = product_obj.browse(cursor, user, context['product'],
diff --git a/move.py b/move.py
index 472bd42..5c8a9c0 100644
--- a/move.py
+++ b/move.py
@@ -22,7 +22,9 @@ class Move(OSV):
uom = fields.Many2One("product.uom", "Uom", required=True, states=STATES,
domain="[('category', '=', " \
"(product, 'product.default_uom.category'))]",
- context="{'category': (product, 'product.default_uom.category')}")
+ context="{'category': (product, 'product.default_uom.category')}",
+ on_change=['product', 'currency', 'uom', 'company',
+ 'from_location', 'to_location'])
unit_digits = fields.Function('get_unit_digits', type='integer',
string='Unit Digits', on_change_with=['uom'])
quantity = fields.Float("Quantity", required=True,
@@ -197,7 +199,46 @@ class Move(OSV):
vals['company'], context=context)
unit_price = currency_obj.compute(cursor, user,
company.currency, unit_price, currency,
+ round=False, context=context)
+ res['unit_price'] = unit_price
+ return res
+
+ def on_change_uom(self, cursor, user, ids, vals, context=None):
+ product_obj = self.pool.get('product.product')
+ uom_obj = self.pool.get('product.uom')
+ currency_obj = self.pool.get('currency.currency')
+ company_obj = self.pool.get('company.company')
+ location_obj = self.pool.get('stock.location')
+
+ if context is None:
+ context = {}
+
+ res = {
+ 'unit_price': Decimal('0.0'),
+ }
+ if vals.get('product'):
+ product = product_obj.browse(cursor, user, vals['product'],
+ context=context)
+ to_location = None
+ if vals.get('to_location'):
+ to_location = location_obj.browse(cursor, user,
+ vals['to_location'], context=context)
+ if to_location and to_location.type == 'storage':
+ unit_price = product.cost_price
+ if vals.get('uom') and vals['uom'] != product.default_uom.id:
+ uom = uom_obj.browse(cursor, user, vals['uom'],
context=context)
+ unit_price = uom_obj.compute_price(cursor, user,
+ product.default_uom, unit_price, uom,
+ context=context)
+ if vals.get('currency') and vals.get('company'):
+ currency = currency_obj.browse(cursor, user,
+ vals['currency'], context=context)
+ company = company_obj.browse(cursor, user,
+ vals['company'], context=context)
+ unit_price = currency_obj.compute(cursor, user,
+ company.currency, unit_price, currency,
+ round=False, context=context)
res['unit_price'] = unit_price
return res
@@ -321,7 +362,7 @@ class Move(OSV):
# convert wrt currency
unit_price = currency_obj.compute(
cursor, user, currency, unit_price, company.currency,
- context=context)
+ round=False, context=context)
# convert wrt to the uom
unit_price = uom_obj.compute_price(
cursor, user, uom, unit_price, product.default_uom, context=context)
@@ -360,6 +401,9 @@ class Move(OSV):
cursor, user, vals['product'], -vals['quantity'],
vals['uom'], vals['unit_price'], vals['currency'],
vals['company'], context=context)
+ elif vals.get('state') == 'assigned':
+ if not vals.get('effective_date'):
+ vals['effective_date'] = datetime.date.today()
return super(Move, self).create(cursor, user, vals, context=context)
def write(self, cursor, user, ids, vals, context=None):
@@ -396,6 +440,7 @@ class Move(OSV):
if move.state in ('cancel', 'done'):
self.raise_user_error(cursor, 'set_state_assigned',
context=context)
+ vals['effective_date'] = datetime.date.today()
elif vals['state'] == 'done':
if move.state in ('cancel'):
self.raise_user_error(cursor, 'set_state_done',
diff --git a/packing.py b/packing.py
index 83c09db..bb8115a 100644
--- a/packing.py
+++ b/packing.py
@@ -95,7 +95,7 @@ class PackingIn(OSV):
def on_change_supplier(self, cursor, user, ids, values, context=None):
if not values.get('supplier'):
- return {}
+ return {'contact_address': False}
party_obj = self.pool.get("party.party")
address_id = party_obj.address_get(cursor, user, values['supplier'],
context=context)
@@ -316,7 +316,7 @@ class PackingOut(OSV):
warehouse = fields.Many2One('stock.location', "Warehouse", required=True,
states={
'readonly': "state != 'draft'",
- }, domain="[('type', '=', 'warehouse')]")
+ }, domain=[('type', '=', 'warehouse')])
customer_location = fields.Many2One('stock.location', "Customer Location",
required=True, states={
'readonly': "state != 'draft'",
@@ -366,7 +366,8 @@ class PackingOut(OSV):
def on_change_customer(self, cursor, user, ids, values, context=None):
if not values.get('customer'):
- return {}
+ return {'delivery_address': False,
+ 'customer_location': False}
party_obj = self.pool.get("party.party")
address_id = party_obj.address_get(cursor, user, values['customer'],
type='delivery', context=context)
@@ -741,6 +742,13 @@ class PackingInternal(OSV):
]
self._order[0] = ('id', 'DESC')
+ def create(self, cursor, user, values, context=None):
+ values = values.copy()
+ values['code'] = self.pool.get('ir.sequence').get(
+ cursor, user, 'stock.packing.internal', context=context)
+ return super(PackingInternal, self).create(
+ cursor, user, values, context=context)
+
def set_state_draft(self, cursor, user, packing_id, context=None):
move_obj = self.pool.get('stock.move')
packing = self.browse(cursor, user, packing_id, context=context)
@@ -795,8 +803,9 @@ class PackingInternal(OSV):
def assign_force(self, cursor, user, packing_id, context=None):
packing = self.browse(cursor, user, packing_id, context=context)
move_obj = self.pool.get('stock.move')
- move_obj.write(
- cursor, user, [m.id for m in packing.moves], {'state': 'assigned'})
+ move_obj.write(cursor, user, [m.id for m in packing.moves], {
+ 'state': 'assigned',
+ }, context=context)
return True
PackingInternal()
diff --git a/product.py b/product.py
index 4f70a80..c7fb3b2 100644
--- a/product.py
+++ b/product.py
@@ -402,7 +402,7 @@ class Product(OSV):
needed_qty -= available_qty
# Force assignation for consumables:
if move.product.type == "consumable":
- to_pick.append((move.from_location.id, needed_qty))
+ to_pick.append((move.from_location, needed_qty))
return to_pick
return None
@@ -411,6 +411,7 @@ class Product(OSV):
product_obj = self.pool.get('product.product')
uom_obj = self.pool.get('product.uom')
date_obj = self.pool.get('ir.date')
+ location_obj = self.pool.get('stock.location')
if context is None:
context = {}
@@ -421,8 +422,11 @@ class Product(OSV):
local_ctx['stock_date_end'] = date_obj.today(cursor, user,
context=context)
local_ctx['stock_assign'] = True
+ location_ids = location_obj.search(cursor, user, [
+ ('parent', 'child_of', [x.from_location.id for x in moves]),
+ ], context=context)
pbl = product_obj.products_by_location(cursor, user,
- location_ids=[m.from_location.id for m in moves],
+ location_ids=location_ids,
product_ids=[m.product.id for m in moves],
context=local_ctx)
@@ -432,8 +436,11 @@ class Product(OSV):
continue
to_location = move.to_location
location_qties = {}
- childs = [m for m in move.from_location.childs] + [move.from_location]
- for location in childs:
+ child_ids = location_obj.search(cursor, user, [
+ ('parent', 'child_of', [move.from_location.id]),
+ ], context=context)
+ for location in location_obj.browse(cursor, user, child_ids,
+ context=context):
if (location.id, move.product.id) in pbl:
location_qties[location] = uom_obj.compute_qty(
cursor, user, move.product.default_uom,
@@ -450,24 +457,16 @@ class Product(OSV):
for from_location, qty in to_pick:
values = {
'from_location': from_location.id,
- 'to_location': to_location.id,
- 'product': move.product.id,
- 'uom': move.uom.id,
'quantity': qty,
'state': 'assigned',
- 'company': move.company.id,
}
- for field in ('packing_out', 'packing_in', 'packing_internal'):
- if move[field]:
- values.update({field: move[field].id})
- break
-
if first:
move_obj.write(cursor, user, move.id, values,
context=context)
first = False
else:
- move_obj.create(cursor, user, values, context=context)
+ move_id = move_obj.copy(cursor, user, move.id,
+ default=values, context=context)
qty_defaut_uom = uom_obj.compute_qty(
cursor, user, move.uom, qty, move.product.default_uom,
diff --git a/product.xml b/product.xml
index 4469bdb..8013b1e 100644
--- a/product.xml
+++ b/product.xml
@@ -24,6 +24,7 @@
<field name="model">stock.location</field>
<field name="type">tree</field>
<field name="field_childs">childs</field>
+ <field name="priority" eval="20"/>
<field name="arch" type="xml">
<![CDATA[
<tree string="Product Stock">
diff --git a/trytond_stock.egg-info/PKG-INFO b/trytond_stock.egg-info/PKG-INFO
index f9662ab..dc53c89 100644
--- a/trytond_stock.egg-info/PKG-INFO
+++ b/trytond_stock.egg-info/PKG-INFO
@@ -1,6 +1,6 @@
Metadata-Version: 1.0
Name: trytond-stock
-Version: 1.0.2
+Version: 1.0.3
Summary: Stock Management and Inventory Control with:
- Location definition
- Stock move
commit a6c5f7cc3693b97cb519071e908f5aa01960c8b8
Author: Daniel Baumann <daniel at debian.org>
Date: Mon Mar 23 07:19:55 2009 +0100
Adding upstream version 1.0.2.
diff --git a/CHANGELOG b/CHANGELOG
index 9801fce..bf64720 100644
--- a/CHANGELOG
+++ b/CHANGELOG
@@ -1,3 +1,7 @@
+Version 1.0.2 - 2009-01-06
+* Handle average price for products return to supplier
+* Some bug fixes (see mercurial logs for details)
+
Version 1.0.1 - 2008-12-01
* Allow egg installation
diff --git a/PKG-INFO b/PKG-INFO
index afea210..3108ef8 100644
--- a/PKG-INFO
+++ b/PKG-INFO
@@ -1,6 +1,6 @@
Metadata-Version: 1.0
Name: trytond_stock
-Version: 1.0.1
+Version: 1.0.2
Summary: Stock Management and Inventory Control with:
- Location definition
- Stock move
diff --git a/__tryton__.py b/__tryton__.py
index ee79b7f..33faf60 100644
--- a/__tryton__.py
+++ b/__tryton__.py
@@ -5,7 +5,7 @@
'name_de_DE': 'Lagerverwaltung',
'name_fr_FR': 'Gestion des stocks',
'name_es_ES': 'Inventarios',
- 'version': '1.0.1',
+ 'version': '1.0.2',
'author': 'B2CK',
'email': 'info at b2ck.com',
'website': 'http://www.tryton.org/',
diff --git a/doc/index_en.rst b/doc/index.rst
similarity index 95%
rename from doc/index_en.rst
rename to doc/index.rst
index 677cd6c..1bf1982 100644
--- a/doc/index_en.rst
+++ b/doc/index.rst
@@ -12,12 +12,12 @@ Location
Location are generic places where products are physically or virtually
stored. There are six types of locations:
-Storage
+* Storage
Storage locations define real places where products are stored.
-Warehouse
+* Warehouse
Warehouses are meta-locations which define input, storage and output
locations. These locations are all of type Storage. Input and Output
@@ -26,17 +26,17 @@ Warehouse
biggest location where products are stored for middle or long
periods of time.
-Customer
+* Customer
Customer locations are virtual locations accumulating products that
have been sent to customers.
-Supplier
+* Supplier
Supplier locations are virtual locations accumulating products that have
been received from suppliers.
-Lost And Found
+* Lost And Found
Lost And Found locations collects inventory gaps. See
:ref:inventory for details.
@@ -57,22 +57,22 @@ actually made).
A move can be in one of this states:
-Draft
+* Draft
The initial state, used when the move is created and to define
future stock movement that are planned, but still subject to
modifications.
-Assigned
+* Assigned
An assigned move allow to reserve some products. Thus preventing
other user to assign them.
-Done
+* Done
The move is in state Done when the real movement is made.
-Cancel
+* Cancel
A cancelled move will be ignored by the system. Only Draft or
Assigned move can be cancelled. To revert a move in state Done, an
@@ -105,12 +105,12 @@ A supplier packing is used when products are received from a
supplier. It is mainly composed of a party (the supplier), a location
(the warehouse in which the products are coming) and two list of moves:
-Incoming moves
+* Incoming moves
The moves between the supplier location and the input location
(as defined on the warehouse).
-Inventory moves
+* Inventory moves
The inventory moves are between the input location and the storage
location (or one of his child locations).
@@ -118,20 +118,20 @@ Inventory moves
The supplier packing can be in one of this states:
-Draft
+* Draft
Incoming moves and inventory moves (if they exist) are in draft.
-Received
+* Received
Incoming move are set in state Done, inventory moves are created if
necessary.
-Done
+* Done
Inventory moves are in state Done.
-Cancel
+* Cancel
All moves are cancelled.
@@ -143,12 +143,12 @@ A customer packing is used for sending products to customer. It is
mainly composed of a party (the customer), a location (the warehouse
out of which the product are going) and two list of moves:
-Inventory moves:
+* Inventory moves
The moves between a storage location and the output location of the
warehouse
-Outgoing moves
+* Outgoing moves
The moves between the output location of the warehouse and a
customer location.
@@ -156,33 +156,33 @@ Outgoing moves
The customer packing can be in one of this states:
-Draft
+* Draft
Outgoing moves and inventory moves (if they exist) are in draft.
-Waiting
+* Waiting
When a customer packing is set to waiting, the inventory moves are
created (or completed) to balance the outgoing moves. The waiting
state also means that the packing should be processed.
-Assigned
+* Assigned
The assigned state is when products have been assigned (or reserved)
from the storage locations.
-Packed
+* Packed
The packed state is when the inventory moves have been made, i.e
when the products have been physically moved to the outgoing
locations.
-Done
+* Done
The packing is Done when the outgoing moves have been made,
e.g. when a truck left the warehouse.
-Cancel
+* Cancel
A packing which is not yet completed (not in state Done) can be
cancelled at any time. This also cancel all the moves.
@@ -196,23 +196,23 @@ inside the company. It is mainly composed of two locations and a list
of moves. It can be in one of these states:
-Draft
+* Draft
The moves (if they exist) are in draft.
-Waiting
+* Waiting
The waiting state means that the packing should be processed.
-Assigned
+* Assigned
The assigned state is when products have been assigned.
-Done
+* Done
The packing is Done when the moves have been made.
-Cancel
+* Cancel
A packing which is not yet completed (not in state Done) can be
cancelled at any time. This also cancel all the moves.
diff --git a/inventory.py b/inventory.py
index 3be3009..7b43b3d 100644
--- a/inventory.py
+++ b/inventory.py
@@ -137,9 +137,12 @@ class Inventory(OSV):
# Index some data
product2uom = {}
- for product in product_obj.browse(
- cursor, user, [line[1] for line in pbl], context=context):
+ product2type = {}
+ for product in product_obj.browse(cursor, user,
+ [line[1] for line in pbl], context=context):
product2uom[product.id] = product.default_uom.id
+ product2type[product.id] = product.type
+
product_qty = {}
for (location, product), quantity in pbl.iteritems():
product_qty[product] = (quantity, product2uom[product])
@@ -169,6 +172,8 @@ class Inventory(OSV):
# Create lines if needed
for product in product_qty:
+ if product2type[product] != 'stockable':
+ continue
quantity, uom_id = product_qty[product]
values = {
'product': product,
diff --git a/location.py b/location.py
index 446df6e..951485a 100644
--- a/location.py
+++ b/location.py
@@ -42,21 +42,27 @@ class Location(OSV):
'readonly': "not active",
'required': "type == 'warehouse'",
},
- domain="[('type','=','storage'), ('parent', 'child_of', [active_id])]")
+ domain="[('type','=','storage'), ['OR', " \
+ "('parent', 'child_of', [active_id]), " \
+ "('parent', '=', False)]]")
output_location = fields.Many2One(
"stock.location", "Output", states={
'invisible': "type != 'warehouse'",
'readonly': "not active",
'required': "type == 'warehouse'",
},
- domain="[('type','=','storage'), ('parent', 'child_of', [active_id])]")
+ domain="[('type','=','storage'), ['OR', " \
+ "('parent', 'child_of', [active_id]), " \
+ "('parent', '=', False)]]")
storage_location = fields.Many2One(
"stock.location", "Storage", states={
'invisible': "type != 'warehouse'",
'readonly': "not active",
'required': "type == 'warehouse'",
},
- domain="[('type','=','storage'), ('parent', 'child_of', [active_id])]")
+ domain="[('type','=','storage'), ['OR', " \
+ "('parent', 'child_of', [active_id]), " \
+ "('parent', '=', False)]]")
quantity = fields.Function('get_quantity', type='float', string='Quantity')
forecast_quantity = fields.Function('get_quantity', type='float',
string='Forecast Quantity')
@@ -143,6 +149,46 @@ class Location(OSV):
return value + ': ' + product_name + ' (' + uom_name + ')'
return False
+ def _set_warehouse_parent(self, cursor, user, locations, context=None):
+ '''
+ Set the parent of child location of warehouse if not set
+
+ :param cursor: the database cursor
+ :param user: the user id
+ :param locations: a BrowseRecordList of locations
+ :param context: the context
+ :return: a list with updated location ids
+ '''
+ location_ids = set()
+ for location in locations:
+ if location.type == 'warehouse':
+ if not location.input_location.parent:
+ location_ids.add(location.input_location.id)
+ if not location.output_location.parent:
+ location_ids.add(location.output_location.id)
+ if not location.storage_location.parent:
+ location_ids.add(location.storage_location.id)
+ location_ids = list(location_ids)
+ if location_ids:
+ self.write(cursor, user, location_ids, {
+ 'parent': location.id,
+ }, context=context)
+
+ def create(self, cursor, user, vals, context=None):
+ res = super(Location, self).create(cursor, user, vals, context=context)
+ locations = self.browse(cursor, user, [res], context=context)
+ self._set_warehouse_parent(cursor, user, locations, context=context)
+ return res
+
+ def write(self, cursor, user, ids, vals, context=None):
+ res = super(Location, self).write(cursor, user, ids, vals,
+ context=context)
+ if isinstance(ids, (int, long)):
+ ids = [ids]
+ locations = self.browse(cursor, user, ids, context=context)
+ self._set_warehouse_parent(cursor, user, locations, context=context)
+ return res
+
Location()
diff --git a/location.xml b/location.xml
index 9e7b31f..029913b 100644
--- a/location.xml
+++ b/location.xml
@@ -127,29 +127,59 @@ this repository contains the full copyright notices and license terms. -->
<field name="perm_delete" eval="True"/>
</record>
- <!-- Default locations -->
- <record model="stock.location" id="location_warehouse">
- <field name="name">Warehouse</field>
+ <record model="ir.ui.view" id="party_view_form">
+ <field name="model">party.party</field>
+ <field name="inherit" ref="party.party_view_form"/>
+ <field name="arch" type="xml">
+ <![CDATA[
+ <data>
+ <xpath
+ expr="/form/notebook/page[@string="_Accounting"]"
+ position="after">
+ <page string="_Stock">
+ <label name="customer_location"/>
+ <field name="customer_location"/>
+ <label name="supplier_location"/>
+ <field name="supplier_location"/>
+ </page>
+ </xpath>
+ </data>
+ ]]>
+ </field>
+ </record>
+
+ <record model="ir.ui.view" id="location_stock_date_init_view_form">
+ <field name="model">stock.location_stock_date.init</field>
+ <field name="type">form</field>
+ <field name="arch" type="xml">
+ <![CDATA[
+ <form string="Product Quantity.">
+ <label name="forecast_date"/>
+ <field name="forecast_date"/>
+ </form>
+ ]]>
+ </field>
</record>
+
+ </data>
+ <data noupdate="1">
+ <!-- Default locations -->
<record model="stock.location" id="location_input">
<field name="name">Input Zone</field>
<field name="code">IN</field>
<field name="type">storage</field>
- <field name="parent" ref="location_warehouse"/>
</record>
<record model="stock.location" id="location_output">
<field name="name">Output Zone</field>
<field name="code">OUT</field>
<field name="type">storage</field>
- <field name="parent" ref="location_warehouse"/>
</record>
<record model="stock.location" id="location_storage">
<field name="name">Storage Zone</field>
<field name="code">STO</field>
<field name="type">storage</field>
- <field name="parent" ref="location_warehouse"/>
</record>
- <record model="stock.location" id="location_warehouse" update="1">
+ <record model="stock.location" id="location_warehouse">
<field name="name">Warehouse</field>
<field name="code">WH</field>
<field name="type">warehouse</field>
@@ -172,40 +202,6 @@ this repository contains the full copyright notices and license terms. -->
<field name="type">lost_found</field>
</record>
- <record model="ir.ui.view" id="party_view_form">
- <field name="model">party.party</field>
- <field name="inherit" ref="party.party_view_form"/>
- <field name="arch" type="xml">
- <![CDATA[
- <data>
- <xpath
- expr="/form/notebook/page[@string="_Accounting"]"
- position="after">
- <page string="_Stock">
- <label name="customer_location"/>
- <field name="customer_location"/>
- <label name="supplier_location"/>
- <field name="supplier_location"/>
- </page>
- </xpath>
- </data>
- ]]>
- </field>
- </record>
-
- <record model="ir.ui.view" id="location_stock_date_init_view_form">
- <field name="model">stock.location_stock_date.init</field>
- <field name="type">form</field>
- <field name="arch" type="xml">
- <![CDATA[
- <form string="Product Quantity.">
- <label name="forecast_date"/>
- <field name="forecast_date"/>
- </form>
- ]]>
- </field>
- </record>
-
<record model="ir.property" id="property_supplier_location">
<field name="name">supplier_location</field>
<field name="field"
diff --git a/move.py b/move.py
index 12071cf..472bd42 100644
--- a/move.py
+++ b/move.py
@@ -16,7 +16,8 @@ class Move(OSV):
_description = __doc__
product = fields.Many2One("product.product", "Product", required=True,
select=1, states=STATES,
- on_change=['product', 'type', 'currency', 'uom', 'company'],
+ on_change=['product', 'currency', 'uom', 'company',
+ 'from_location', 'to_location'],
domain=[('type', '!=', 'service')])
uom = fields.Many2One("product.uom", "Uom", required=True, states=STATES,
domain="[('category', '=', " \
@@ -28,12 +29,10 @@ class Move(OSV):
digits="(16, unit_digits)", states=STATES)
from_location = fields.Many2One("stock.location", "From Location", select=1,
required=True, states=STATES,
- domain=[('type', '!=', 'warehouse')],
- on_change=['from_location', 'to_location'])
+ domain=[('type', '!=', 'warehouse')])
to_location = fields.Many2One("stock.location", "To Location", select=1,
required=True, states=STATES,
- domain=[('type', '!=', 'warehouse')],
- on_change=['from_location', 'to_location'])
+ domain=[('type', '!=', 'warehouse')])
packing_in = fields.Many2One('stock.packing.in', 'Supplier Packing',
readonly=True, select=1)
packing_out = fields.Many2One('stock.packing.out', 'Customer Packing',
@@ -54,22 +53,19 @@ class Move(OSV):
})
unit_price = fields.Numeric('Unit Price', digits=(16, 4),
states={
- 'invisible': "type not in ('input', 'output')",
- 'required': "type in ('input', 'output')",
- 'readonly': "state not in ('draft',)",
+ 'invisible': "not type",
+ 'required': "type",
+ 'readonly': "state != 'draft'",
})
currency = fields.Many2One('currency.currency', 'Currency',
states={
- 'invisible': "type not in ('input', 'output')",
- 'required': "type in ('input', 'output')",
- 'readonly': "state not in ('draft',)",
+ 'invisible': "not type",
+ 'required': "type",
+ 'readonly': "state != 'draft'",
})
- type = fields.Function('get_type', type='selection',
- selection=[
- ('input', 'Input'),
- ('output', 'Output'),
- ('internal', 'Internal'),
- ], string='Type')
+ type = fields.Function('get_unit_price_required',
+ type='boolean', string='Unit Price Required',
+ on_change_with=['from_location', 'to_location'])
def __init__(self):
super(Move, self).__init__()
@@ -147,39 +143,6 @@ class Move(OSV):
context=context)[0]
return False
- def name_search(self, cursor, user, name='', args=None, operator='ilike',
- context=None, limit=None):
- if not args:
- args = []
- query = ['AND', ('product', operator, name), args]
- ids = self.search(cursor, user, query, limit=limit, context=context)
- return self.name_get(cursor, user, ids, context)
-
- def name_get(self, cursor, user, ids, context=None):
- if isinstance(ids, (int, long)):
- ids = [ids]
- product_obj = self.pool.get('product.product')
- moves = self.browse(cursor, user, ids, context=context)
- pid2name = dict(product_obj.name_get(
- cursor, user, [m.product.id for m in moves], context=context))
- res = []
- for m in moves:
- res.append(
- (m.id,
- "%s%s %s" % (m.quantity, m.uom.symbol, pid2name[m.product.id]))
- )
- return res
-
- def get_type(self, cursor, user, ids, name, args, context=None):
- res = {}
- for move in self.browse(cursor, user, ids, context=context):
- res[move.id] = 'internal'
- if move.from_location.type == 'supplier':
- res[move.id] = 'input'
- if move.to_location.type == 'customer':
- res[move.id] = 'output'
- return res
-
def on_change_with_unit_digits(self, cursor, user, ids, vals,
context=None):
uom_obj = self.pool.get('product.uom')
@@ -200,16 +163,26 @@ class Move(OSV):
uom_obj = self.pool.get('product.uom')
currency_obj = self.pool.get('currency.currency')
company_obj = self.pool.get('company.company')
+ location_obj = self.pool.get('stock.location')
+
if context is None:
context = {}
- res = {'unit_price': Decimal('0.0')}
+
+ res = {
+ 'unit_price': Decimal('0.0'),
+ }
+
if vals.get('product'):
product = product_obj.browse(cursor, user, vals['product'],
context=context)
res['uom'] = uom_obj.name_get(cursor, user,
product.default_uom.id, context=context)[0]
res['unit_digits'] = product.default_uom.digits
- if vals.get('type', 'internal') == 'input':
+ to_location = None
+ if vals.get('to_location'):
+ to_location = location_obj.browse(cursor, user,
+ vals['to_location'], context=context)
+ if to_location and to_location.type == 'storage':
unit_price = product.cost_price
if vals.get('uom') and vals['uom'] != product.default_uom.id:
uom = uom_obj.browse(cursor, user, vals['uom'],
@@ -228,19 +201,30 @@ class Move(OSV):
res['unit_price'] = unit_price
return res
- def _on_change_location(self, cursor, user, ids, vals, context=None):
+ def on_change_with_type(self, cursor, user, ids, vals,
+ context=None):
location_obj = self.pool.get('stock.location')
- res = {'type': 'internal'}
if vals.get('from_location'):
- location = location_obj.browse(cursor, user, vals['from_location'],
- context=context)
- if location.type == 'supplier':
- res['type'] = 'input'
+ from_location = location_obj.browse(cursor, user,
+ vals['from_location'], context=context)
+ if from_location.type == 'supplier':
+ return True
if vals.get('to_location'):
- location = location_obj.browse(cursor, user, vals['to_location'],
- context=context)
- if location.type == 'customer':
- res['type'] = 'output'
+ to_location = location_obj.browse(cursor, user,
+ vals['to_location'], context=context)
+ if to_location.type == 'customer':
+ return True
+ return False
+
+ def get_unit_price_required(self, cursor, user, ids, name, arg,
+ context=None):
+ res = {}
+ for move in self.browse(cursor, user, ids, context=context):
+ res[move.id] = False
+ if move.from_location.type == 'supplier':
+ res[move.id] = True
+ if move.to_location.type == 'customer':
+ res[move.id] = True
return res
def check_product_type(self, cursor, user, ids):
@@ -249,13 +233,28 @@ class Move(OSV):
return False
return True
- def on_change_from_location(self, cursor, user, ids, vals, context=None):
- return self._on_change_location(cursor, user, ids, vals,
- context=context)
+ def name_search(self, cursor, user, name='', args=None, operator='ilike',
+ context=None, limit=None):
+ if not args:
+ args = []
+ query = ['AND', ('product', operator, name), args]
+ ids = self.search(cursor, user, query, limit=limit, context=context)
+ return self.name_get(cursor, user, ids, context)
- def on_change_to_location(self, cursor, user, ids, vals, context=None):
- return self._on_change_location(cursor, user, ids, vals,
- context=context)
+ def name_get(self, cursor, user, ids, context=None):
+ if isinstance(ids, (int, long)):
+ ids = [ids]
+ product_obj = self.pool.get('product.product')
+ moves = self.browse(cursor, user, ids, context=context)
+ pid2name = dict(product_obj.name_get(
+ cursor, user, [m.product.id for m in moves], context=context))
+ res = []
+ for m in moves:
+ res.append(
+ (m.id,
+ "%s%s %s" % (m.quantity, m.uom.symbol, pid2name[m.product.id]))
+ )
+ return res
def search(self, cursor, user, args, offset=0, limit=None, order=None,
context=None, count=False, query_string=False):
@@ -345,6 +344,8 @@ class Move(OSV):
vals['effective_date'] = datetime.date.today()
from_location = location_obj.browse(cursor, user,
vals['from_location'], context=context)
+ to_location = location_obj.browse(cursor, user,
+ vals['to_location'], context=context)
product = product_obj.browse(cursor, user, vals['product'],
context=context)
if from_location.type == 'supplier' \
@@ -353,6 +354,12 @@ class Move(OSV):
cursor, user, vals['product'], vals['quantity'],
vals['uom'], vals['unit_price'], vals['currency'],
vals['company'], context=context)
+ if to_location.type == 'supplier' \
+ and product.cost_price_method == 'average':
+ self._update_product_cost_price(
+ cursor, user, vals['product'], -vals['quantity'],
+ vals['uom'], vals['unit_price'], vals['currency'],
+ vals['company'], context=context)
return super(Move, self).create(cursor, user, vals, context=context)
def write(self, cursor, user, ids, vals, context=None):
@@ -366,12 +373,20 @@ class Move(OSV):
for move in self.browse(cursor, user, ids, context=context):
if vals['state'] == 'cancel':
vals['effective_date'] = False
- if move.type == 'input' and move.state != 'cancel' \
+ if move.from_location.type == 'supplier' \
+ and move.state != 'cancel' \
and move.product.cost_price_method == 'average':
self._update_product_cost_price(
cursor, user, move.product.id, -move.quantity,
move.uom, move.unit_price, move.currency,
move.company, context=context)
+ if move.to_location.type == 'supplier' \
+ and move.state != 'cancel' \
+ and move.product.cost_price_method == 'average':
+ self._update_product_cost_price(
+ cursor, user, move.product.id, move.quantity,
+ move.uom, move.unit_price, move.currency,
+ move.company, context=context)
elif vals['state'] == 'draft':
if move.state == 'done':
@@ -387,12 +402,20 @@ class Move(OSV):
context=context)
vals['effective_date'] = datetime.date.today()
- if move.type == 'input' and move.state != 'done' \
+ if move.from_location.type == 'supplier' \
+ and move.state != 'done' \
and move.product.cost_price_method == 'average':
self._update_product_cost_price(
cursor, user, move.product.id, move.quantity,
move.uom, move.unit_price, move.currency,
move.company, context=context)
+ if move.to_location.type == 'supplier' \
+ and move.state != 'done' \
+ and move.product.cost_price_method == 'average':
+ self._update_product_cost_price(
+ cursor, user, move.product.id, -move.quantity,
+ move.uom, move.unit_price, move.currency,
+ move.company, context=context)
return super(Move, self).write(cursor, user, ids, vals, context=context)
diff --git a/packing.py b/packing.py
index fbcbb65..83c09db 100644
--- a/packing.py
+++ b/packing.py
@@ -113,6 +113,10 @@ class PackingIn(OSV):
def set_incoming_moves(self, cursor, user, packing_id, name, value, arg,
context=None):
move_obj = self.pool.get('stock.move')
+
+ if not value:
+ return
+
packing = self.browse(cursor, user, packing_id, context=context)
for act in value:
if act[0] == 'create':
@@ -156,6 +160,10 @@ class PackingIn(OSV):
def set_inventory_moves(self, cursor, user, packing_id, name, value, arg,
context=None):
move_obj = self.pool.get('stock.move')
+
+ if not value:
+ return
+
packing = self.browse(cursor, user, packing_id, context=context)
for act in value:
if act[0] == 'create':
@@ -381,6 +389,10 @@ class PackingOut(OSV):
def set_outgoing_moves(self, cursor, user, packing_id, name, value, arg,
context=None):
move_obj = self.pool.get('stock.move')
+
+ if not value:
+ return
+
packing = self.browse(cursor, user, packing_id, context=context)
for act in value:
if act[0] == 'create':
@@ -425,6 +437,10 @@ class PackingOut(OSV):
def set_inventory_moves(self, cursor, user, packing_id, name, value, arg,
context=None):
move_obj = self.pool.get('stock.move')
+
+ if not value:
+ return
+
packing = self.browse(cursor, user, packing_id, context=context)
for act in value:
if act[0] == 'create':
@@ -685,11 +701,13 @@ class PackingInternal(OSV):
from_location = fields.Many2One(
'stock.location', "From Location", required=True,
states={ 'readonly': "state != 'draft' or bool(moves)", },
- domain="[('type', '=', 'storage')]", )
+ domain="[('type', 'not in', " \
+ "('supplier', 'customer', 'warehouse'))]")
to_location = fields.Many2One('stock.location', "To Location",
required=True, states={
'readonly': "state != 'draft' or bool(moves)",
- }, domain="[('type', '=', 'storage')]")
+ }, domain="[('type', 'not in', " \
+ "('supplier', 'customer', 'warehouse'))]")
moves = fields.One2Many(
'stock.move', 'packing_internal', 'Moves',
states={'readonly': "state != 'draft' or "\
diff --git a/product.py b/product.py
index d8b7165..4f70a80 100644
--- a/product.py
+++ b/product.py
@@ -167,11 +167,11 @@ class Product(OSV):
(context['stock_date_end'] == \
date_obj.today(cursor, user, context=context) \
and not context.get('forecast')):
- state_date_clause = '(state in (%s, %s)) AND ('\
+ state_date_clause = '((state in (%s, %s)) AND ('\
'(effective_date IS NULL '\
- 'AND ( planned_date <= %s or planned_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'],
@@ -185,20 +185,20 @@ class Product(OSV):
# before today, or on all state and date between today and
# date_end.
else:
- state_date_clause = '(' + \
+ state_date_clause = '((' + \
'(state in (%s, %s)) AND ('\
'(effective_date IS NULL '\
- 'AND ( planned_date <= %s or planned_date IS NULL)) '\
+ 'AND ( planned_date <= %s )) '\
'OR effective_date <= %s)' \
+ \
') OR (' + \
'(state in (%s, %s, %s)) AND ('\
'(effective_date IS NULL '\
- 'AND (( planned_date <= %s AND planned_date >= %s ) '\
- 'OR planned_date IS NULL)) '\
+ 'AND ( planned_date <= %s AND planned_date >= %s '\
+ ')) '\
'OR (effective_date <= %s AND effective_date >= %s)'\
')'\
- ')'
+ '))'
today = date_obj.today(cursor, user, context=context)
state_date_vals = [
'done', 'assigned', today, today,
@@ -210,25 +210,25 @@ class Product(OSV):
if context.get('stock_date_start'):
if context['stock_date_start'] > date_obj.today(cursor, user,
context=context):
- state_date_clause += ' AND (state in (%s, %s, %s)) AND ('\
+ state_date_clause += ' AND ((state in (%s, %s, %s)) AND ('\
'(effective_date IS NULL '\
- 'AND ( planned_date >= %s or planned_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']])
else:
tmp_clause = '(state in (%s, %s, %s)) AND ('\
'(effective_date IS NULL '\
- 'AND ( planned_date >= %s or planned_date IS NULL)) '\
+ 'AND ( planned_date >= %s OR planned_date IS NULL)) '\
'OR effective_date >= %s'\
')'
today = date_obj.today(cursor, user, context=context)
state_date_vals.extend(
['done', 'assigned', 'draft', today, today])
- state_date_clause += ' AND (' + tmp_clause + \
+ state_date_clause += ' AND ((' + tmp_clause + \
') OR (' + \
'(state in (%s, %s)) AND ('\
'(effective_date IS NULL '\
@@ -236,7 +236,7 @@ class Product(OSV):
'OR planned_date IS NULL)) '\
'OR (effective_date >= %s AND effective_date < %s)'\
')'\
- ')'
+ '))'
state_date_vals.extend([
'done',
context.get('stock_assign') and 'assigned' or 'done',
diff --git a/trytond_stock.egg-info/PKG-INFO b/trytond_stock.egg-info/PKG-INFO
index 1727305..f9662ab 100644
--- a/trytond_stock.egg-info/PKG-INFO
+++ b/trytond_stock.egg-info/PKG-INFO
@@ -1,6 +1,6 @@
Metadata-Version: 1.0
Name: trytond-stock
-Version: 1.0.1
+Version: 1.0.2
Summary: Stock Management and Inventory Control with:
- Location definition
- Stock move
diff --git a/trytond_stock.egg-info/SOURCES.txt b/trytond_stock.egg-info/SOURCES.txt
index 8ef3d26..dc5d487 100644
--- a/trytond_stock.egg-info/SOURCES.txt
+++ b/trytond_stock.egg-info/SOURCES.txt
@@ -23,7 +23,7 @@ stock.xml
./move.py
./packing.py
./product.py
-doc/index_en.rst
+doc/index.rst
tests/__init__.py
tests/test_stock.py
trytond_stock.egg-info/PKG-INFO
commit 7bf05b7b38bbe08f6a5bff60907fc07e07096168
Author: Daniel Baumann <daniel at debian.org>
Date: Wed Jan 28 14:18:36 2009 +0100
Adding upstream version 1.0.1.
diff --git a/CHANGELOG b/CHANGELOG
index eacaaef..9801fce 100644
--- a/CHANGELOG
+++ b/CHANGELOG
@@ -1,2 +1,5 @@
+Version 1.0.1 - 2008-12-01
+* Allow egg installation
+
Version 1.0.0 - 2008-11-17
* Initial release
diff --git a/PKG-INFO b/PKG-INFO
index 0df0703..afea210 100644
--- a/PKG-INFO
+++ b/PKG-INFO
@@ -1,6 +1,6 @@
Metadata-Version: 1.0
Name: trytond_stock
-Version: 1.0.0
+Version: 1.0.1
Summary: Stock Management and Inventory Control with:
- Location definition
- Stock move
@@ -15,6 +15,7 @@ Home-page: http://www.tryton.org/
Author: B2CK
Author-email: info at b2ck.com
License: GPL-3
+Download-URL: http://downloads.tryton.org/1.0/
Description: UNKNOWN
Platform: UNKNOWN
Classifier: Development Status :: 5 - Production/Stable
diff --git a/__tryton__.py b/__tryton__.py
index eade2b9..ee79b7f 100644
--- a/__tryton__.py
+++ b/__tryton__.py
@@ -5,7 +5,7 @@
'name_de_DE': 'Lagerverwaltung',
'name_fr_FR': 'Gestion des stocks',
'name_es_ES': 'Inventarios',
- 'version': '1.0.0',
+ 'version': '1.0.1',
'author': 'B2CK',
'email': 'info at b2ck.com',
'website': 'http://www.tryton.org/',
diff --git a/setup.py b/setup.py
index aa566ac..a08dfd7 100644
--- a/setup.py
+++ b/setup.py
@@ -27,6 +27,8 @@ setup(name='trytond_stock',
author=info.get('author', ''),
author_email=info.get('email', ''),
url=info.get('website', ''),
+ download_url="http://downloads.tryton.org/" + \
+ info.get('version', '0.0.1').rsplit('.', 1)[0] + '/',
package_dir={'trytond.modules.stock': '.'},
packages=[
'trytond.modules.stock',
@@ -54,4 +56,9 @@ setup(name='trytond_stock',
],
license='GPL-3',
install_requires=requires,
+ zip_safe=False,
+ entry_points="""
+ [trytond.modules]
+ stock = trytond.modules.stock
+ """,
)
diff --git a/trytond_stock.egg-info/PKG-INFO b/trytond_stock.egg-info/PKG-INFO
index 1faa74c..1727305 100644
--- a/trytond_stock.egg-info/PKG-INFO
+++ b/trytond_stock.egg-info/PKG-INFO
@@ -1,6 +1,6 @@
Metadata-Version: 1.0
Name: trytond-stock
-Version: 1.0.0
+Version: 1.0.1
Summary: Stock Management and Inventory Control with:
- Location definition
- Stock move
@@ -15,6 +15,7 @@ Home-page: http://www.tryton.org/
Author: B2CK
Author-email: info at b2ck.com
License: GPL-3
+Download-URL: http://downloads.tryton.org/1.0/
Description: UNKNOWN
Platform: UNKNOWN
Classifier: Development Status :: 5 - Production/Stable
diff --git a/trytond_stock.egg-info/SOURCES.txt b/trytond_stock.egg-info/SOURCES.txt
index 7cd3be6..8ef3d26 100644
--- a/trytond_stock.egg-info/SOURCES.txt
+++ b/trytond_stock.egg-info/SOURCES.txt
@@ -29,5 +29,7 @@ tests/test_stock.py
trytond_stock.egg-info/PKG-INFO
trytond_stock.egg-info/SOURCES.txt
trytond_stock.egg-info/dependency_links.txt
+trytond_stock.egg-info/entry_points.txt
+trytond_stock.egg-info/not-zip-safe
trytond_stock.egg-info/requires.txt
trytond_stock.egg-info/top_level.txt
\ No newline at end of file
diff --git a/trytond_stock.egg-info/entry_points.txt b/trytond_stock.egg-info/entry_points.txt
new file mode 100644
index 0000000..6690b86
--- /dev/null
+++ b/trytond_stock.egg-info/entry_points.txt
@@ -0,0 +1,4 @@
+
+ [trytond.modules]
+ stock = trytond.modules.stock
+
\ No newline at end of file
diff --git a/trytond_stock.egg-info/not-zip-safe b/trytond_stock.egg-info/not-zip-safe
new file mode 100644
index 0000000..8b13789
--- /dev/null
+++ b/trytond_stock.egg-info/not-zip-safe
@@ -0,0 +1 @@
+
commit d315321544bc1fc435ffa562e986bf27be4dcf34
Author: Daniel Baumann <daniel at debian.org>
Date: Tue Nov 18 13:05:56 2008 +0100
Adding upstream version 1.0.0.
diff --git a/CHANGELOG b/CHANGELOG
new file mode 100644
index 0000000..eacaaef
--- /dev/null
+++ b/CHANGELOG
@@ -0,0 +1,2 @@
+Version 1.0.0 - 2008-11-17
+* Initial release
diff --git a/COPYRIGHT b/COPYRIGHT
new file mode 100644
index 0000000..37fef2d
--- /dev/null
+++ b/COPYRIGHT
@@ -0,0 +1,17 @@
+Copyright (C) 2004-2008 Tiny SPRL.
+Copyright (C) 2008 Cédric Krier.
+Copyright (C) 2008 Bertrand Chenal.
+Copyright (C) 2008 B2CK SPRL.
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see <http://www.gnu.org/licenses/>.
diff --git a/INSTALL b/INSTALL
new file mode 100644
index 0000000..24b5182
--- /dev/null
+++ b/INSTALL
@@ -0,0 +1,33 @@
+Installing trytond_stock
+========================
+
+Prerequisites
+-------------
+
+ * Python 2.4 or later (http://www.python.org/)
+ * trytond 0.0.x (http://www.tryton.org/)
+ * trytond_party (http://www.tryton.org/)
+ * trytond_product (http://www.tryton.org/)
+ * trytond_company (http://www.tryton.org/)
+ * trytond_currency (http://www.tryton.org/)
+
+Installation
+------------
+
+Once you've downloaded and unpacked a trytond_stock source release, enter the
+directory where the archive was unpacked, and run:
+
+ python setup.py install
+
+Note that you may need administrator/root privileges for this step, as
+this command will by default attempt to install module to the Python
+site-packages directory on your system.
+
+For advanced options, please refer to the easy_install and/or the distutils
+documentation:
+
+ http://peak.telecommunity.com/DevCenter/EasyInstall
+ http://docs.python.org/inst/inst.html
+
+To use without installation, extract the archive into ``trytond/modules`` with
+the directory name stock.
diff --git a/LICENSE b/LICENSE
new file mode 100644
index 0000000..94a9ed0
--- /dev/null
+++ b/LICENSE
@@ -0,0 +1,674 @@
+ GNU GENERAL PUBLIC LICENSE
+ Version 3, 29 June 2007
+
+ Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+ Preamble
+
+ The GNU General Public License is a free, copyleft license for
+software and other kinds of works.
+
+ The licenses for most software and other practical works are designed
+to take away your freedom to share and change the works. By contrast,
+the GNU General Public License is intended to guarantee your freedom to
+share and change all versions of a program--to make sure it remains free
+software for all its users. We, the Free Software Foundation, use the
+GNU General Public License for most of our software; it applies also to
+any other work released this way by its authors. You can apply it to
+your programs, too.
+
+ When we speak of free software, we are referring to freedom, not
+price. Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+them if you wish), that you receive source code or can get it if you
+want it, that you can change the software or use pieces of it in new
+free programs, and that you know you can do these things.
+
+ To protect your rights, we need to prevent others from denying you
+these rights or asking you to surrender the rights. Therefore, you have
+certain responsibilities if you distribute copies of the software, or if
+you modify it: responsibilities to respect the freedom of others.
+
+ For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must pass on to the recipients the same
+freedoms that you received. You must make sure that they, too, receive
+or can get the source code. And you must show them these terms so they
+know their rights.
+
+ Developers that use the GNU GPL protect your rights with two steps:
+(1) assert copyright on the software, and (2) offer you this License
+giving you legal permission to copy, distribute and/or modify it.
+
+ For the developers' and authors' protection, the GPL clearly explains
+that there is no warranty for this free software. For both users' and
+authors' sake, the GPL requires that modified versions be marked as
+changed, so that their problems will not be attributed erroneously to
+authors of previous versions.
+
+ Some devices are designed to deny users access to install or run
+modified versions of the software inside them, although the manufacturer
+can do so. This is fundamentally incompatible with the aim of
+protecting users' freedom to change the software. The systematic
+pattern of such abuse occurs in the area of products for individuals to
+use, which is precisely where it is most unacceptable. Therefore, we
+have designed this version of the GPL to prohibit the practice for those
+products. If such problems arise substantially in other domains, we
+stand ready to extend this provision to those domains in future versions
+of the GPL, as needed to protect the freedom of users.
+
+ Finally, every program is threatened constantly by software patents.
+States should not allow patents to restrict development and use of
+software on general-purpose computers, but in those that do, we wish to
+avoid the special danger that patents applied to a free program could
+make it effectively proprietary. To prevent this, the GPL assures that
+patents cannot be used to render the program non-free.
+
+ The precise terms and conditions for copying, distribution and
+modification follow.
+
+ TERMS AND CONDITIONS
+
+ 0. Definitions.
+
+ "This License" refers to version 3 of the GNU General Public License.
+
+ "Copyright" also means copyright-like laws that apply to other kinds of
+works, such as semiconductor masks.
+
+ "The Program" refers to any copyrightable work licensed under this
+License. Each licensee is addressed as "you". "Licensees" and
+"recipients" may be individuals or organizations.
+
+ To "modify" a work means to copy from or adapt all or part of the work
+in a fashion requiring copyright permission, other than the making of an
+exact copy. The resulting work is called a "modified version" of the
+earlier work or a work "based on" the earlier work.
+
+ A "covered work" means either the unmodified Program or a work based
+on the Program.
+
+ To "propagate" a work means to do anything with it that, without
+permission, would make you directly or secondarily liable for
+infringement under applicable copyright law, except executing it on a
+computer or modifying a private copy. Propagation includes copying,
+distribution (with or without modification), making available to the
+public, and in some countries other activities as well.
+
+ To "convey" a work means any kind of propagation that enables other
+parties to make or receive copies. Mere interaction with a user through
+a computer network, with no transfer of a copy, is not conveying.
+
+ An interactive user interface displays "Appropriate Legal Notices"
+to the extent that it includes a convenient and prominently visible
+feature that (1) displays an appropriate copyright notice, and (2)
+tells the user that there is no warranty for the work (except to the
+extent that warranties are provided), that licensees may convey the
+work under this License, and how to view a copy of this License. If
+the interface presents a list of user commands or options, such as a
+menu, a prominent item in the list meets this criterion.
+
+ 1. Source Code.
+
+ The "source code" for a work means the preferred form of the work
+for making modifications to it. "Object code" means any non-source
+form of a work.
+
+ A "Standard Interface" means an interface that either is an official
+standard defined by a recognized standards body, or, in the case of
+interfaces specified for a particular programming language, one that
+is widely used among developers working in that language.
+
+ The "System Libraries" of an executable work include anything, other
+than the work as a whole, that (a) is included in the normal form of
+packaging a Major Component, but which is not part of that Major
+Component, and (b) serves only to enable use of the work with that
+Major Component, or to implement a Standard Interface for which an
+implementation is available to the public in source code form. A
+"Major Component", in this context, means a major essential component
+(kernel, window system, and so on) of the specific operating system
+(if any) on which the executable work runs, or a compiler used to
+produce the work, or an object code interpreter used to run it.
+
+ The "Corresponding Source" for a work in object code form means all
+the source code needed to generate, install, and (for an executable
+work) run the object code and to modify the work, including scripts to
+control those activities. However, it does not include the work's
+System Libraries, or general-purpose tools or generally available free
+programs which are used unmodified in performing those activities but
+which are not part of the work. For example, Corresponding Source
+includes interface definition files associated with source files for
+the work, and the source code for shared libraries and dynamically
+linked subprograms that the work is specifically designed to require,
+such as by intimate data communication or control flow between those
+subprograms and other parts of the work.
+
+ The Corresponding Source need not include anything that users
+can regenerate automatically from other parts of the Corresponding
+Source.
+
+ The Corresponding Source for a work in source code form is that
+same work.
+
+ 2. Basic Permissions.
+
+ All rights granted under this License are granted for the term of
+copyright on the Program, and are irrevocable provided the stated
+conditions are met. This License explicitly affirms your unlimited
+permission to run the unmodified Program. The output from running a
+covered work is covered by this License only if the output, given its
+content, constitutes a covered work. This License acknowledges your
+rights of fair use or other equivalent, as provided by copyright law.
+
+ You may make, run and propagate covered works that you do not
+convey, without conditions so long as your license otherwise remains
+in force. You may convey covered works to others for the sole purpose
+of having them make modifications exclusively for you, or provide you
+with facilities for running those works, provided that you comply with
+the terms of this License in conveying all material for which you do
+not control copyright. Those thus making or running the covered works
+for you must do so exclusively on your behalf, under your direction
+and control, on terms that prohibit them from making any copies of
+your copyrighted material outside their relationship with you.
+
+ Conveying under any other circumstances is permitted solely under
+the conditions stated below. Sublicensing is not allowed; section 10
+makes it unnecessary.
+
+ 3. Protecting Users' Legal Rights From Anti-Circumvention Law.
+
+ No covered work shall be deemed part of an effective technological
+measure under any applicable law fulfilling obligations under article
+11 of the WIPO copyright treaty adopted on 20 December 1996, or
+similar laws prohibiting or restricting circumvention of such
+measures.
+
+ When you convey a covered work, you waive any legal power to forbid
+circumvention of technological measures to the extent such circumvention
+is effected by exercising rights under this License with respect to
+the covered work, and you disclaim any intention to limit operation or
+modification of the work as a means of enforcing, against the work's
+users, your or third parties' legal rights to forbid circumvention of
+technological measures.
+
+ 4. Conveying Verbatim Copies.
+
+ You may convey verbatim copies of the Program's source code as you
+receive it, in any medium, provided that you conspicuously and
+appropriately publish on each copy an appropriate copyright notice;
+keep intact all notices stating that this License and any
+non-permissive terms added in accord with section 7 apply to the code;
+keep intact all notices of the absence of any warranty; and give all
+recipients a copy of this License along with the Program.
+
+ You may charge any price or no price for each copy that you convey,
+and you may offer support or warranty protection for a fee.
+
+ 5. Conveying Modified Source Versions.
+
+ You may convey a work based on the Program, or the modifications to
+produce it from the Program, in the form of source code under the
+terms of section 4, provided that you also meet all of these conditions:
+
+ a) The work must carry prominent notices stating that you modified
+ it, and giving a relevant date.
+
+ b) The work must carry prominent notices stating that it is
+ released under this License and any conditions added under section
+ 7. This requirement modifies the requirement in section 4 to
+ "keep intact all notices".
+
+ c) You must license the entire work, as a whole, under this
+ License to anyone who comes into possession of a copy. This
+ License will therefore apply, along with any applicable section 7
+ additional terms, to the whole of the work, and all its parts,
+ regardless of how they are packaged. This License gives no
+ permission to license the work in any other way, but it does not
+ invalidate such permission if you have separately received it.
+
+ d) If the work has interactive user interfaces, each must display
+ Appropriate Legal Notices; however, if the Program has interactive
+ interfaces that do not display Appropriate Legal Notices, your
+ work need not make them do so.
+
+ A compilation of a covered work with other separate and independent
+works, which are not by their nature extensions of the covered work,
+and which are not combined with it such as to form a larger program,
+in or on a volume of a storage or distribution medium, is called an
+"aggregate" if the compilation and its resulting copyright are not
+used to limit the access or legal rights of the compilation's users
+beyond what the individual works permit. Inclusion of a covered work
+in an aggregate does not cause this License to apply to the other
+parts of the aggregate.
+
+ 6. Conveying Non-Source Forms.
+
+ You may convey a covered work in object code form under the terms
+of sections 4 and 5, provided that you also convey the
+machine-readable Corresponding Source under the terms of this License,
+in one of these ways:
+
+ a) Convey the object code in, or embodied in, a physical product
+ (including a physical distribution medium), accompanied by the
+ Corresponding Source fixed on a durable physical medium
+ customarily used for software interchange.
+
+ b) Convey the object code in, or embodied in, a physical product
+ (including a physical distribution medium), accompanied by a
+ written offer, valid for at least three years and valid for as
+ long as you offer spare parts or customer support for that product
+ model, to give anyone who possesses the object code either (1) a
+ copy of the Corresponding Source for all the software in the
+ product that is covered by this License, on a durable physical
+ medium customarily used for software interchange, for a price no
+ more than your reasonable cost of physically performing this
+ conveying of source, or (2) access to copy the
+ Corresponding Source from a network server at no charge.
+
+ c) Convey individual copies of the object code with a copy of the
+ written offer to provide the Corresponding Source. This
+ alternative is allowed only occasionally and noncommercially, and
+ only if you received the object code with such an offer, in accord
+ with subsection 6b.
+
+ d) Convey the object code by offering access from a designated
+ place (gratis or for a charge), and offer equivalent access to the
+ Corresponding Source in the same way through the same place at no
+ further charge. You need not require recipients to copy the
+ Corresponding Source along with the object code. If the place to
+ copy the object code is a network server, the Corresponding Source
+ may be on a different server (operated by you or a third party)
+ that supports equivalent copying facilities, provided you maintain
+ clear directions next to the object code saying where to find the
+ Corresponding Source. Regardless of what server hosts the
+ Corresponding Source, you remain obligated to ensure that it is
+ available for as long as needed to satisfy these requirements.
+
+ e) Convey the object code using peer-to-peer transmission, provided
+ you inform other peers where the object code and Corresponding
+ Source of the work are being offered to the general public at no
+ charge under subsection 6d.
+
+ A separable portion of the object code, whose source code is excluded
+from the Corresponding Source as a System Library, need not be
+included in conveying the object code work.
+
+ A "User Product" is either (1) a "consumer product", which means any
+tangible personal property which is normally used for personal, family,
+or household purposes, or (2) anything designed or sold for incorporation
+into a dwelling. In determining whether a product is a consumer product,
+doubtful cases shall be resolved in favor of coverage. For a particular
+product received by a particular user, "normally used" refers to a
+typical or common use of that class of product, regardless of the status
+of the particular user or of the way in which the particular user
+actually uses, or expects or is expected to use, the product. A product
+is a consumer product regardless of whether the product has substantial
+commercial, industrial or non-consumer uses, unless such uses represent
+the only significant mode of use of the product.
+
+ "Installation Information" for a User Product means any methods,
+procedures, authorization keys, or other information required to install
+and execute modified versions of a covered work in that User Product from
+a modified version of its Corresponding Source. The information must
+suffice to ensure that the continued functioning of the modified object
+code is in no case prevented or interfered with solely because
+modification has been made.
+
+ If you convey an object code work under this section in, or with, or
+specifically for use in, a User Product, and the conveying occurs as
+part of a transaction in which the right of possession and use of the
+User Product is transferred to the recipient in perpetuity or for a
+fixed term (regardless of how the transaction is characterized), the
+Corresponding Source conveyed under this section must be accompanied
+by the Installation Information. But this requirement does not apply
+if neither you nor any third party retains the ability to install
+modified object code on the User Product (for example, the work has
+been installed in ROM).
+
+ The requirement to provide Installation Information does not include a
+requirement to continue to provide support service, warranty, or updates
+for a work that has been modified or installed by the recipient, or for
+the User Product in which it has been modified or installed. Access to a
+network may be denied when the modification itself materially and
+adversely affects the operation of the network or violates the rules and
+protocols for communication across the network.
+
+ Corresponding Source conveyed, and Installation Information provided,
+in accord with this section must be in a format that is publicly
+documented (and with an implementation available to the public in
+source code form), and must require no special password or key for
+unpacking, reading or copying.
+
+ 7. Additional Terms.
+
+ "Additional permissions" are terms that supplement the terms of this
+License by making exceptions from one or more of its conditions.
+Additional permissions that are applicable to the entire Program shall
+be treated as though they were included in this License, to the extent
+that they are valid under applicable law. If additional permissions
+apply only to part of the Program, that part may be used separately
+under those permissions, but the entire Program remains governed by
+this License without regard to the additional permissions.
+
+ When you convey a copy of a covered work, you may at your option
+remove any additional permissions from that copy, or from any part of
+it. (Additional permissions may be written to require their own
+removal in certain cases when you modify the work.) You may place
+additional permissions on material, added by you to a covered work,
+for which you have or can give appropriate copyright permission.
+
+ Notwithstanding any other provision of this License, for material you
+add to a covered work, you may (if authorized by the copyright holders of
+that material) supplement the terms of this License with terms:
+
+ a) Disclaiming warranty or limiting liability differently from the
+ terms of sections 15 and 16 of this License; or
+
+ b) Requiring preservation of specified reasonable legal notices or
+ author attributions in that material or in the Appropriate Legal
+ Notices displayed by works containing it; or
+
+ c) Prohibiting misrepresentation of the origin of that material, or
+ requiring that modified versions of such material be marked in
+ reasonable ways as different from the original version; or
+
+ d) Limiting the use for publicity purposes of names of licensors or
+ authors of the material; or
+
+ e) Declining to grant rights under trademark law for use of some
+ trade names, trademarks, or service marks; or
+
+ f) Requiring indemnification of licensors and authors of that
+ material by anyone who conveys the material (or modified versions of
+ it) with contractual assumptions of liability to the recipient, for
+ any liability that these contractual assumptions directly impose on
+ those licensors and authors.
+
+ All other non-permissive additional terms are considered "further
+restrictions" within the meaning of section 10. If the Program as you
+received it, or any part of it, contains a notice stating that it is
+governed by this License along with a term that is a further
+restriction, you may remove that term. If a license document contains
+a further restriction but permits relicensing or conveying under this
+License, you may add to a covered work material governed by the terms
+of that license document, provided that the further restriction does
+not survive such relicensing or conveying.
+
+ If you add terms to a covered work in accord with this section, you
+must place, in the relevant source files, a statement of the
+additional terms that apply to those files, or a notice indicating
+where to find the applicable terms.
+
+ Additional terms, permissive or non-permissive, may be stated in the
+form of a separately written license, or stated as exceptions;
+the above requirements apply either way.
+
+ 8. Termination.
+
+ You may not propagate or modify a covered work except as expressly
+provided under this License. Any attempt otherwise to propagate or
+modify it is void, and will automatically terminate your rights under
+this License (including any patent licenses granted under the third
+paragraph of section 11).
+
+ However, if you cease all violation of this License, then your
+license from a particular copyright holder is reinstated (a)
+provisionally, unless and until the copyright holder explicitly and
+finally terminates your license, and (b) permanently, if the copyright
+holder fails to notify you of the violation by some reasonable means
+prior to 60 days after the cessation.
+
+ Moreover, your license from a particular copyright holder is
+reinstated permanently if the copyright holder notifies you of the
+violation by some reasonable means, this is the first time you have
+received notice of violation of this License (for any work) from that
+copyright holder, and you cure the violation prior to 30 days after
+your receipt of the notice.
+
+ Termination of your rights under this section does not terminate the
+licenses of parties who have received copies or rights from you under
+this License. If your rights have been terminated and not permanently
+reinstated, you do not qualify to receive new licenses for the same
+material under section 10.
+
+ 9. Acceptance Not Required for Having Copies.
+
+ You are not required to accept this License in order to receive or
+run a copy of the Program. Ancillary propagation of a covered work
+occurring solely as a consequence of using peer-to-peer transmission
+to receive a copy likewise does not require acceptance. However,
+nothing other than this License grants you permission to propagate or
+modify any covered work. These actions infringe copyright if you do
+not accept this License. Therefore, by modifying or propagating a
+covered work, you indicate your acceptance of this License to do so.
+
+ 10. Automatic Licensing of Downstream Recipients.
+
+ Each time you convey a covered work, the recipient automatically
+receives a license from the original licensors, to run, modify and
+propagate that work, subject to this License. You are not responsible
+for enforcing compliance by third parties with this License.
+
+ An "entity transaction" is a transaction transferring control of an
+organization, or substantially all assets of one, or subdividing an
+organization, or merging organizations. If propagation of a covered
+work results from an entity transaction, each party to that
+transaction who receives a copy of the work also receives whatever
+licenses to the work the party's predecessor in interest had or could
+give under the previous paragraph, plus a right to possession of the
+Corresponding Source of the work from the predecessor in interest, if
+the predecessor has it or can get it with reasonable efforts.
+
+ You may not impose any further restrictions on the exercise of the
+rights granted or affirmed under this License. For example, you may
+not impose a license fee, royalty, or other charge for exercise of
+rights granted under this License, and you may not initiate litigation
+(including a cross-claim or counterclaim in a lawsuit) alleging that
+any patent claim is infringed by making, using, selling, offering for
+sale, or importing the Program or any portion of it.
+
+ 11. Patents.
+
+ A "contributor" is a copyright holder who authorizes use under this
+License of the Program or a work on which the Program is based. The
+work thus licensed is called the contributor's "contributor version".
+
+ A contributor's "essential patent claims" are all patent claims
+owned or controlled by the contributor, whether already acquired or
+hereafter acquired, that would be infringed by some manner, permitted
+by this License, of making, using, or selling its contributor version,
+but do not include claims that would be infringed only as a
+consequence of further modification of the contributor version. For
+purposes of this definition, "control" includes the right to grant
+patent sublicenses in a manner consistent with the requirements of
+this License.
+
+ Each contributor grants you a non-exclusive, worldwide, royalty-free
+patent license under the contributor's essential patent claims, to
+make, use, sell, offer for sale, import and otherwise run, modify and
+propagate the contents of its contributor version.
+
+ In the following three paragraphs, a "patent license" is any express
+agreement or commitment, however denominated, not to enforce a patent
+(such as an express permission to practice a patent or covenant not to
+sue for patent infringement). To "grant" such a patent license to a
+party means to make such an agreement or commitment not to enforce a
+patent against the party.
+
+ If you convey a covered work, knowingly relying on a patent license,
+and the Corresponding Source of the work is not available for anyone
+to copy, free of charge and under the terms of this License, through a
+publicly available network server or other readily accessible means,
+then you must either (1) cause the Corresponding Source to be so
+available, or (2) arrange to deprive yourself of the benefit of the
+patent license for this particular work, or (3) arrange, in a manner
+consistent with the requirements of this License, to extend the patent
+license to downstream recipients. "Knowingly relying" means you have
+actual knowledge that, but for the patent license, your conveying the
+covered work in a country, or your recipient's use of the covered work
+in a country, would infringe one or more identifiable patents in that
+country that you have reason to believe are valid.
+
+ If, pursuant to or in connection with a single transaction or
+arrangement, you convey, or propagate by procuring conveyance of, a
+covered work, and grant a patent license to some of the parties
+receiving the covered work authorizing them to use, propagate, modify
+or convey a specific copy of the covered work, then the patent license
+you grant is automatically extended to all recipients of the covered
+work and works based on it.
+
+ A patent license is "discriminatory" if it does not include within
+the scope of its coverage, prohibits the exercise of, or is
+conditioned on the non-exercise of one or more of the rights that are
+specifically granted under this License. You may not convey a covered
+work if you are a party to an arrangement with a third party that is
+in the business of distributing software, under which you make payment
+to the third party based on the extent of your activity of conveying
+the work, and under which the third party grants, to any of the
+parties who would receive the covered work from you, a discriminatory
+patent license (a) in connection with copies of the covered work
+conveyed by you (or copies made from those copies), or (b) primarily
+for and in connection with specific products or compilations that
+contain the covered work, unless you entered into that arrangement,
+or that patent license was granted, prior to 28 March 2007.
+
+ Nothing in this License shall be construed as excluding or limiting
+any implied license or other defenses to infringement that may
+otherwise be available to you under applicable patent law.
+
+ 12. No Surrender of Others' Freedom.
+
+ If conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License. If you cannot convey a
+covered work so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you may
+not convey it at all. For example, if you agree to terms that obligate you
+to collect a royalty for further conveying from those to whom you convey
+the Program, the only way you could satisfy both those terms and this
+License would be to refrain entirely from conveying the Program.
+
+ 13. Use with the GNU Affero General Public License.
+
+ Notwithstanding any other provision of this License, you have
+permission to link or combine any covered work with a work licensed
+under version 3 of the GNU Affero General Public License into a single
+combined work, and to convey the resulting work. The terms of this
+License will continue to apply to the part which is the covered work,
+but the special requirements of the GNU Affero General Public License,
+section 13, concerning interaction through a network will apply to the
+combination as such.
+
+ 14. Revised Versions of this License.
+
+ The Free Software Foundation may publish revised and/or new versions of
+the GNU General Public License from time to time. Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+ Each version is given a distinguishing version number. If the
+Program specifies that a certain numbered version of the GNU General
+Public License "or any later version" applies to it, you have the
+option of following the terms and conditions either of that numbered
+version or of any later version published by the Free Software
+Foundation. If the Program does not specify a version number of the
+GNU General Public License, you may choose any version ever published
+by the Free Software Foundation.
+
+ If the Program specifies that a proxy can decide which future
+versions of the GNU General Public License can be used, that proxy's
+public statement of acceptance of a version permanently authorizes you
+to choose that version for the Program.
+
+ Later license versions may give you additional or different
+permissions. However, no additional obligations are imposed on any
+author or copyright holder as a result of your choosing to follow a
+later version.
+
+ 15. Disclaimer of Warranty.
+
+ THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
+APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
+HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
+OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
+THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
+IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
+ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
+
+ 16. Limitation of Liability.
+
+ IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
+THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
+GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
+USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
+DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
+PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
+EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
+SUCH DAMAGES.
+
+ 17. Interpretation of Sections 15 and 16.
+
+ If the disclaimer of warranty and limitation of liability provided
+above cannot be given local legal effect according to their terms,
+reviewing courts shall apply local law that most closely approximates
+an absolute waiver of all civil liability in connection with the
+Program, unless a warranty or assumption of liability accompanies a
+copy of the Program in return for a fee.
+
+ END OF TERMS AND CONDITIONS
+
+ How to Apply These Terms to Your New Programs
+
+ If you develop a new program, and you want it to be of the greatest
+possible use to the public, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these terms.
+
+ To do so, attach the following notices to the program. It is safest
+to attach them to the start of each source file to most effectively
+state the exclusion of warranty; and each file should have at least
+the "copyright" line and a pointer to where the full notice is found.
+
+ <one line to give the program's name and a brief idea of what it does.>
+ Copyright (C) <year> <name of author>
+
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+Also add information on how to contact you by electronic and paper mail.
+
+ If the program does terminal interaction, make it output a short
+notice like this when it starts in an interactive mode:
+
+ <program> Copyright (C) <year> <name of author>
+ This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+ This is free software, and you are welcome to redistribute it
+ under certain conditions; type `show c' for details.
+
+The hypothetical commands `show w' and `show c' should show the appropriate
+parts of the General Public License. Of course, your program's commands
+might be different; for a GUI interface, you would use an "about box".
+
+ You should also get your employer (if you work as a programmer) or school,
+if any, to sign a "copyright disclaimer" for the program, if necessary.
+For more information on this, and how to apply and follow the GNU GPL, see
+<http://www.gnu.org/licenses/>.
+
+ The GNU General Public License does not permit incorporating your program
+into proprietary programs. If your program is a subroutine library, you
+may consider it more useful to permit linking proprietary applications with
+the library. If this is what you want to do, use the GNU Lesser General
+Public License instead of this License. But first, please read
+<http://www.gnu.org/philosophy/why-not-lgpl.html>.
diff --git a/MANIFEST.in b/MANIFEST.in
new file mode 100644
index 0000000..b2a140e
--- /dev/null
+++ b/MANIFEST.in
@@ -0,0 +1,11 @@
+include INSTALL
+include README
+include TODO
+include COPYRIGHT
+include CHANGELOG
+include LICENSE
+include *.xml
+include *.odt
+include *.csv
+include tests/*
+include doc/*
diff --git a/PKG-INFO b/PKG-INFO
new file mode 100644
index 0000000..0df0703
--- /dev/null
+++ b/PKG-INFO
@@ -0,0 +1,33 @@
+Metadata-Version: 1.0
+Name: trytond_stock
+Version: 1.0.0
+Summary: Stock Management and Inventory Control with:
+ - Location definition
+ - Stock move
+ - Packing Supplier / Customer / Internal
+ - Stock Inventory
+
+And with reports:
+ - Customer Packing
+ - Products by Locations
+
+Home-page: http://www.tryton.org/
+Author: B2CK
+Author-email: info at b2ck.com
+License: GPL-3
+Description: UNKNOWN
+Platform: UNKNOWN
+Classifier: Development Status :: 5 - Production/Stable
+Classifier: Environment :: Plugins
+Classifier: Intended Audience :: Developers
+Classifier: Intended Audience :: Financial and Insurance Industry
+Classifier: Intended Audience :: Legal Industry
+Classifier: Intended Audience :: Manufacturing
+Classifier: License :: OSI Approved :: GNU General Public License (GPL)
+Classifier: Natural Language :: English
+Classifier: Natural Language :: French
+Classifier: Natural Language :: German
+Classifier: Natural Language :: Spanish
+Classifier: Operating System :: OS Independent
+Classifier: Programming Language :: Python
+Classifier: Topic :: Office/Business
diff --git a/README b/README
new file mode 100644
index 0000000..fc8c3ff
--- /dev/null
+++ b/README
@@ -0,0 +1,36 @@
+trytond_stock
+=============
+
+The stock module of the Tryton application platform.
+See __tryton__.py
+
+Installing
+----------
+
+See INSTALL
+
+Support
+-------
+
+If you encounter any problems with Tryton, please don't hesitate to ask
+questions on the Tryton bug tracker, mailing list, wiki or IRC channel:
+
+ http://bugs.tryton.org/
+ http://groups.tryton.org/
+ http://wiki.tryton.org/
+ irc://irc.freenode.net/tryton
+
+License
+-------
+
+See LICENSE
+
+Copyright
+---------
+
+See COPYRIGHT
+
+
+For more information please visit the Tryton web site:
+
+ http://www.tryton.org/
diff --git a/TODO b/TODO
new file mode 100644
index 0000000..1b49e71
--- /dev/null
+++ b/TODO
@@ -0,0 +1,3 @@
+- use a wizard for assignation on customer packing and internal packing,
+ to display error message if not all lines were assigned (issue540).
+- handle withdraw packing
diff --git a/__init__.py b/__init__.py
new file mode 100644
index 0000000..af1492a
--- /dev/null
+++ b/__init__.py
@@ -0,0 +1,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.
+
+from location import *
+from packing import *
+from move import *
+from product import *
+from inventory import *
diff --git a/__tryton__.py b/__tryton__.py
new file mode 100644
index 0000000..eade2b9
--- /dev/null
+++ b/__tryton__.py
@@ -0,0 +1,74 @@
+#This file is part of Tryton. The COPYRIGHT file at the top level of
+#this repository contains the full copyright notices and license terms.
+{
+ 'name': 'Stock Management',
+ 'name_de_DE': 'Lagerverwaltung',
+ 'name_fr_FR': 'Gestion des stocks',
+ 'name_es_ES': 'Inventarios',
+ 'version': '1.0.0',
+ 'author': 'B2CK',
+ 'email': 'info at b2ck.com',
+ 'website': 'http://www.tryton.org/',
+ 'description': '''Stock Management and Inventory Control with:
+ - Location definition
+ - Stock move
+ - Packing Supplier / Customer / Internal
+ - Stock Inventory
+
+And with reports:
+ - Customer Packing
+ - Products by Locations
+''',
+ 'description_de_DE': '''Lagerverwaltung und Bestandskontrolle mit:
+ - Definition von Lagerorten
+ - Lagerbewegungen
+ - Packlisten/Lieferscheine Lieferant / Kunde / Intern
+ - Lagerbestand
+
+Zugehörige Berichte:
+ - Lieferschein für Kunden
+ - Artikel nach Lagerorten
+''',
+ 'description_fr_FR':'''Gestion des stocks et contrôle de l'inventaire avec:
+ - Emplacement
+ - Mouvement de stock
+ - Colisages client / fournisseur / interne
+ - Inventaire
+
+Et les rapports:
+ - Colisage client
+ - Quantités de produit par location
+''',
+ 'description_es_ES': '''Administración de Inventarios y bodegas:
+ - Definición de sitios
+ - Movimiento de Bodega
+ - Empaque de Proveedor / Cliente / Interno
+ - Inventario en Bodega
+
+Y con los reportes:
+ - Empaques de Clientes
+ - Productos por Lugar
+''',
+
+ 'depends': [
+ 'ir',
+ 'workflow',
+ 'party',
+ 'product',
+ 'company',
+ 'currency',
+ ],
+ 'xml': [
+ 'stock.xml',
+ 'product.xml',
+ 'location.xml',
+ 'packing.xml',
+ 'move.xml',
+ 'inventory.xml',
+ ],
+ 'translation': [
+ 'de_DE.csv',
+ 'es_ES.csv',
+ 'fr_FR.csv',
+ ],
+}
diff --git a/de_DE.csv b/de_DE.csv
new file mode 100644
index 0000000..bb37ff0
--- /dev/null
+++ b/de_DE.csv
@@ -0,0 +1,295 @@
+type,name,res_id,src,value,fuzzy
+error,stock.inventory.line,0,Line quantity must be positive!,Menge der Position muss positiv sein!,0
+error,stock.inventory.line,0,Product must be unique by inventory!,Ein Artikel kann in einem Lagerbestand nicht mehrfach vergeben werden!,0
+error,stock.location,0,You can not create recursive locations!,Lagerorte können nicht rekursiv angelegt werden!,0
+error,stock.move,0,Move can not be in both Supplier and Customer Packing,Eine Bewegung kann nicht in Lieferanten- und Kundenlieferung erfolgen,0
+error,stock.move,0,Move quantity must be positive,Zu bewegende Menge muss positiv sein,0
+error,stock.move,0,Source and destination location must be different,Herkunfts- und Bestimmungsort müssen unterschiedlich sein,0
+error,stock.move,0,You can not set state to assigned!,Status kann nicht auf Zugewiesen gesetzt werden!,0
+error,stock.move,0,You can not set state to done!,Status kann nicht auf Erledigt gesetzt werden!,0
+error,stock.move,0,You can not set state to draft!,"Status ""Entwurf"" kann nicht gesetzt werden!",0
+error,stock.move,0,You can not use service product for a move!,Der Bestand einer Dienstleistung kann nicht geändert werden!,0
+error,stock.move,0,You can only delete draft or cancelled moves!,"Nur Bewegungen mit Status ""Entwurf"" oder ""Abgebrochen"" können gelöscht werden!",0
+error,stock.packing.in,0,Incoming Moves must have input location as destination location!,Eingehende Bewegungen müssen einen Lagerort vom Typ eingehend als Bestimmung haben!,0
+error,stock.packing.in,0,Inventory Moves must have input location as source location!,Bestandsänderungen müssen einen Lagerort vom Typ eingehend als Herkunft haben!,0
+error,stock.packing.in,0,Inventory Moves must have output location as destination location!,Bestandsänderungen müssen einen Lagerort vom Typ ausgehend als Herkunft haben! ,0
+error,stock.packing.in,0,Outgoing Moves must have output location as source location!,Ausgehende Bewegungen müssen einen Lagerort vom Typ ausgehend als Herkunft haben! ,0
+field,"party.address,delivery",0,Delivery,Lieferadresse,0
+field,"party.party,customer_location",0,Customer Location,Lagerort Kunde,0
+field,"party.party,supplier_location",0,Supplier Location,Lagerort Lieferant,0
+field,"product.product,forecast_quantity",0,Forecast Quantity,Voraussichtliche Menge,0
+field,"product.product,quantity",0,Quantity,Menge,0
+field,"product.template,forecast_quantity",0,Forecast Quantity,Voraussichtliche Menge,0
+field,"product.template,quantity",0,Quantity,Menge,0
+field,"stock.inventory,company",0,Company,Unternehmen,0
+field,"stock.inventory,date",0,Date,Datum,0
+field,"stock.inventory.line,expected_quantity",0,Expected Quantity,Erwartete Menge,0
+field,"stock.inventory.line,inventory",0,Inventory,Lagerbestand,0
+field,"stock.inventory.line,move",0,Move,Bewegung,0
+field,"stock.inventory.line,product",0,Product,Artikel,0
+field,"stock.inventory.line,quantity",0,Quantity,Menge,0
+field,"stock.inventory,lines",0,Lines,Positionen,0
+field,"stock.inventory.line,unit_digits",0,Unit Digits,Anzahl Stellen,0
+field,"stock.inventory.line,uom",0,UOM,MaÃeinheit,0
+field,"stock.inventory,location",0,Location,Ort,0
+field,"stock.inventory,lost_found",0,Lost and Found,Inventurdifferenz,0
+field,"stock.inventory,state",0,State,Status,0
+field,"stock.location,active",0,Active,Aktiv,0
+field,"stock.location,address",0,Address,Adresse,0
+field,"stock.location,childs",0,Childs,Untergeordnet (Lagerorte),0
+field,"stock.location,code",0,Code,Code,0
+field,"stock.location,forecast_quantity",0,Forecast Quantity,Voraussichtliche Menge,0
+field,"stock.location,input_location",0,Input,Eingang,0
+field,"stock.location,left",0,Left,Links,0
+field,"stock.location,name",0,Name,Name,0
+field,"stock.location,output_location",0,Output,Ausgang,0
+field,"stock.location,parent",0,Parent,Ãbergeordnet (Lagerort),0
+field,"stock.location,quantity",0,Quantity,Menge,0
+field,"stock.location,right",0,Right,Rechts,0
+field,"stock.location_stock_date.init,forecast_date",0,At Date,Zum,0
+field,"stock.location,storage_location",0,Storage,Lager,0
+field,"stock.location,type",0,Location type,Lagertyp,0
+field,"stock.move,company",0,Company,Unternehmen,0
+field,"stock.move,currency",0,Currency,Währung,0
+field,"stock.move,effective_date",0,Effective Date,Effektives Datum,0
+field,"stock.move,from_location",0,From Location,Von Lagerort,0
+field,"stock.move,packing_in",0,Supplier Packing,Lieferschein von Lieferant,0
+field,"stock.move,packing_internal",0,Internal Packing,Interner Lieferschein,0
+field,"stock.move,packing_out",0,Customer Packing,Lieferschein an Kunde,0
+field,"stock.move,planned_date",0,Planned Date,Geplantes Datum,0
+field,"stock.move,product",0,Product,Artikel,0
+field,"stock.move,quantity",0,Quantity,Menge,0
+field,"stock.move,state",0,State,Status,0
+field,"stock.move,to_location",0,To Location,Zu Lagerort,0
+field,"stock.move,type",0,Type,Typ,0
+field,"stock.move,unit_digits",0,Unit Digits,Anzahl Stellen,0
+field,"stock.move,unit_price",0,Unit Price,Einzelpreis,0
+field,"stock.move,uom",0,Uom,Einheit,0
+field,"stock.packing.in,code",0,Code,Code,0
+field,"stock.packing.in,contact_address",0,Contact Address,Kontaktadresse,0
+field,"stock.packing.in,effective_date",0,Effective Date,Effektives Datum,0
+field,"stock.packing.in,incoming_moves",0,Incoming Moves,Eingehende Bewegungen,0
+field,"stock.packing.in,inventory_moves",0,Inventory Moves,Bestandsänderungen,0
+field,"stock.packing.in,moves",0,Moves,Bewegungen,0
+field,"stock.packing.in,planned_date",0,Planned Date,Geplantes Datum,0
+field,"stock.packing.in,reference",0,Reference,Referenz,0
+field,"stock.packing.in,state",0,State,Status,0
+field,"stock.packing.in,supplier",0,Supplier,Lieferant,0
+field,"stock.packing.internal,code",0,Code,Code,0
+field,"stock.packing.internal,effective_date",0,Effective Date,Effektives Datum,0
+field,"stock.packing.internal,from_location",0,From Location,Von Lagerort,0
+field,"stock.packing.internal,moves",0,Moves,Bewegungen,0
+field,"stock.packing.internal,planned_date",0,Planned Date,Geplantes Datum,0
+field,"stock.packing.internal,reference",0,Reference,Referenz,0
+field,"stock.packing.internal,state",0,State,Status,0
+field,"stock.packing.internal,to_location",0,To Location,Zu Lagerort,0
+field,"stock.packing.in,warehouse",0,Warehouse,Warenlager,0
+field,"stock.packing.out,code",0,Code,Code,0
+field,"stock.packing.out,customer",0,Customer,Kunde,0
+field,"stock.packing.out,customer_location",0,Customer Location,Lagerort Kunde,0
+field,"stock.packing.out,delivery_address",0,Delivery Address,Lieferadresse,0
+field,"stock.packing.out,effective_date",0,Effective Date,Effektives Datum,0
+field,"stock.packing.out,inventory_moves",0,Inventory Moves,Bestandsänderungen,0
+field,"stock.packing.out,moves",0,Moves,Bewegungen,0
+field,"stock.packing.out,outgoing_moves",0,Outgoing Moves,Ausgehende Bewegungen,0
+field,"stock.packing.out,planned_date",0,Planned Date,Geplantes Datum,0
+field,"stock.packing.out,reference",0,Reference,Referenz,0
+field,"stock.packing.out,state",0,State,Status,0
+field,"stock.packing.out,warehouse",0,Warehouse,Warenlager,0
+field,"stock.product_stock_date.init,forecast_date",0,At Date,Zum,0
+help,"party.party,customer_location",0,The default destination location when sending products to the party.,Standardbestimmungsort für Sendungen zum Geschäftspartner,0
+help,"party.party,supplier_location",0,The default source location when receiving products from the party.,Standardbestimmungsort für Sendungen vom Geschäftspartner,0
+help,"stock.location_stock_date.init,forecast_date",0,"Allow to compute expected stock quantities for this date.
+* An empty value is an infinite date in the future.
+* A date in the past will provide historical values.","Berechnet den erwarteten Lagerbestand für dieses Datum
+* ein leerer Wert ist ein unbegrenztes Datum in der Zukunft
+* ein Datum in der Vergangenheit berechnet historische Werte
+",0
+help,"stock.product_stock_date.init,forecast_date",0,"Allow to compute expected stock quantities for this date.
+* An empty value is an infinite date in the future.
+* A date in the past will provide historical values.","Berechnet den erwarteten Lagerbestand für dieses Datum
+* ein leerer Wert ist ein unbegrenztes Datum in der Zukunft
+* ein Datum in der Vergangenheit berechnet historische Werte
+",0
+model,"ir.action,name",act_packing_out_form_assigned,Assigned Customer Packings,Zugewiesene Kundenlieferscheine,0
+model,"ir.action,name",act_packing_internal_assigned_form,Assigned Internal Packings,Zugewiesene Interne Lieferscheine,0
+model,"ir.action,name",wizard_complete_inventory,Complete Inventory,Aktueller Lagerbestand,0
+model,"ir.action,name",report_packing_out,Customer Packing,Lieferschein an Kunde,0
+model,"ir.action,name",act_packing_out_form,Customer Packings,Lieferscheine an Kunden,0
+model,"ir.action,name",act_packing_out_form_ready,Customer Packings Ready for Shipping,Versandbereite Lieferscheine an Kunden,0
+model,"ir.action,name",act_packing_out_form_waiting,Customer Packings Waiting Assignation,Zuzuweisende Lieferscheine an Kunden,0
+model,"ir.action,name",act_packing_internal_draft_form,Draft Internal Packings,Entwürfe (Interne Lieferscheine),0
+model,"ir.action,name",act_location_form,Edit Locations,Lagerorte bearbeiten,0
+model,"ir.action,name",act_packing_internal_form,Internal Packings,Interne Lieferscheine,0
+model,"ir.action,name",act_packing_internal_waiting_form,Internal Packings Waiting Assignation,Zuzuweisende Interne Lieferscheine,0
+model,"ir.action,name",act_inventory_form,Inventories,Lagerbestände,0
+model,"ir.action,name",act_location_tree,Locations,Lagerorte,0
+model,"ir.action,name",act_move_form,Moves,Lagerbewegungen,0
+model,"ir.action,name",act_move_form_supp,Moves from Suppliers,Bewegungen von Lieferanten,0
+model,"ir.action,name",act_move_form_supp_proceed,Moves from Suppliers Waiting Arrival,Erwartete Bewegungen von Lieferanten,0
+model,"ir.action,name",act_move_form_cust,Moves to Customers,Bewegungen zu Kunden,0
+model,"ir.action,name",act_packing_in_form2,New Supplier Packing,Neuer Lieferschein von Lieferant,0
+model,"ir.action,name",wizard_location_open,Product by Location,Artikel nach Lagerort,0
+model,"ir.action,name",wizard_product_open,Product Quantities,Artikelbestand,0
+model,"ir.action,name",act_product_by_location,Products by Locations,Artikel nach Lagerort,0
+model,"ir.action,name",act_location_quantity_tree,Product Stock,Lagerbestand,0
+model,"ir.action,name",act_packing_in_form_received,Received Supplier packings,Erhaltene Lieferscheine von Lieferanten,0
+model,"ir.action,name",act_packing_in_form,Supplier Packings,Lieferscheine von Lieferanten,0
+model,"ir.sequence,name",sequence_packing_out,Customer Packing,Lieferschein Kunde,0
+model,"ir.sequence,name",sequence_packing_in,Supplier Packing,Lieferschein Lieferant,0
+model,"ir.sequence.type,name",sequence_type_packing_out,Customer Packing,Lieferschein Kunde,0
+model,"ir.sequence.type,name",sequence_type_packing_in,Supplier Packing,Lieferschein Lieferant,0
+model,"ir.ui.menu,name",menu_packing_out_assigned,Assigned Customer Packings,Zugewiesene Kundenlieferscheine,0
+model,"ir.ui.menu,name",menu_packing_internal_assigned_form,Assigned Internal Packings,Zugewiesene Interne Lieferscheine,0
+model,"ir.ui.menu,name",menu_configuration,Configuration,Einstellungen,0
+model,"ir.ui.menu,name",menu_packing_out_form,Customer Packings,Lieferscheine an Kunden,0
+model,"ir.ui.menu,name",menu_packing_out_ready,Customer Packings Ready for Shipping,Versandbereite Lieferscheine an Kunden,0
+model,"ir.ui.menu,name",menu_packing_out_waiting,Customer Packings Waiting Assignation,Zuzuweisende Lieferscheine an Kunden,0
+model,"ir.ui.menu,name",menu_packing_internal_draft_form,Draft Internal Packings,Entwürfe (Interne Lieferscheine),0
+model,"ir.ui.menu,name",menu_location_form,Edit Locations,Lagerorte bearbeiten,0
+model,"ir.ui.menu,name",menu_packing_internal_form,Internal Packings,Interne Lieferscheine,0
+model,"ir.ui.menu,name",menu_packing_internal_waiting_form,Internal Packings Waiting Assignation,Zuzuweisende Interne Lieferscheine,0
+model,"ir.ui.menu,name",menu_inventory_form,Inventories,Bestandskontrolle,0
+model,"ir.ui.menu,name",menu_stock,Inventory Management,Lager,0
+model,"ir.ui.menu,name",menu_location_tree,Locations,Lagerorte,0
+model,"ir.ui.menu,name",menu_move_form,Moves,Bewegungen,0
+model,"ir.ui.menu,name",menu_move_form_supp,Moves from Suppliers,Bewegungen von Lieferanten,0
+model,"ir.ui.menu,name",menu_move_form_supp_proceed,Moves from Suppliers Waiting Arrival,Erwartete Bewegungen von Lieferanten,0
+model,"ir.ui.menu,name",menu_move_form_cust,Moves to Customers,Bewegungen zu Kunden,0
+model,"ir.ui.menu,name",menu_packing_in_form2,New Supplier Packing,Neuer Lieferschein von Lieferant,0
+model,"ir.ui.menu,name",menu_packing_in_received,Received Supplier packings,Erhaltene Lieferscheine von Lieferanten,0
+model,"ir.ui.menu,name",menu_packing_in_form,Supplier Packings,Lieferscheine von Lieferanten,0
+model,"res.group,name",group_stock,Stock,Lager,0
+model,"res.group,name",group_stock_admin,Stock Administration,Administration Lagerverwaltung,0
+model,"stock.location,name",location_customer,Customer,Kunde,0
+model,"stock.location,name",location_input,Input Zone,Wareneingang,0
+model,"stock.location,name",location_lost_found,Lost and Found,Inventurdifferenz,0
+model,"stock.location,name",location_output,Output Zone,Warenausgang,0
+model,"stock.location,name",location_storage,Storage Zone,Lagerzone,0
+model,"stock.location,name",location_supplier,Supplier,Lieferant,0
+model,"stock.location,name",location_warehouse,Warehouse,Warenlager,0
+model,"workflow.activity,name",packingout_act_assigned,Assigned,Zugewiesen,0
+model,"workflow.activity,name",packinginternal_act_assigned,Assigned,Zugewiesen,0
+model,"workflow.activity,name",packingin_act_cancel,Cancel,Abbrechen,0
+model,"workflow.activity,name",packingout_act_cancel,Cancel,Abbrechen,0
+model,"workflow.activity,name",packinginternal_act_cancel,Cancel,Abbrechen,0
+model,"workflow.activity,name",inventory_act_cancel,Cancel,Abbrechen,0
+model,"workflow.activity,name",packingin_act_done,Done,Erledigt,0
+model,"workflow.activity,name",packingout_act_done,Done,Erledigt,0
+model,"workflow.activity,name",packinginternal_act_done,Done,Erledigt,0
+model,"workflow.activity,name",inventory_act_done,Done,Erledigt,0
+model,"workflow.activity,name",packingin_act_draft,Draft,Entwurf,0
+model,"workflow.activity,name",packingout_act_draft,Draft,Entwurf,0
+model,"workflow.activity,name",packinginternal_act_draft,Draft,Entwurf,0
+model,"workflow.activity,name",inventory_act_draft,Draft,Entwurf,0
+model,"workflow.activity,name",packingout_act_packed,Packed,Gepackt,0
+model,"workflow.activity,name",packingin_act_received,Received,Erhalten,0
+model,"workflow.activity,name",packingout_act_waiting,Waiting,Wartend,0
+model,"workflow.activity,name",packinginternal_act_waiting,Waiting,Wartend,0
+model,"workflow,name",wkf_packingout,Customer Packing,Lieferschein Kunde,0
+model,"workflow,name",wkf_packinginternal,Internal Packing,Interner Lieferschein,0
+model,"workflow,name",wkf_inventory,Inventory,Lagerbestand,0
+model,"workflow,name",wkf_packingin,Supplier Packing,Lieferschein Lieferant,0
+odt,stock.packing.out,0,Customer Code:,Kundennummer:,0
+odt,stock.packing.out,0,Date:,Datum:,0
+odt,stock.packing.out,0,E-Mail:,E-Mail:,0
+odt,stock.packing.out,0,List,Liste,0
+odt,stock.packing.out,0,Packing,Lieferschein,0
+odt,stock.packing.out,0,Packing Number:,Lieferscheinnummer:,0
+odt,stock.packing.out,0,Phone:,Telefon:,0
+odt,stock.packing.out,0,Product,Artikel,0
+odt,stock.packing.out,0,Quantity,Menge,0
+odt,stock.packing.out,0,Reference:,Referenz,0
+selection,"stock.inventory,state",0,Cancel,Abbrechen,0
+selection,"stock.inventory,state",0,Done,Erledigt,0
+selection,"stock.inventory,state",0,Draft,Entwurf,0
+selection,"stock.location,type",0,Customer,Kunde,0
+selection,"stock.location,type",0,Lost and Found,Differenzen allgemein,0
+selection,"stock.location,type",0,Production,Produktion,0
+selection,"stock.location,type",0,Storage,Lager,0
+selection,"stock.location,type",0,Supplier,Lieferant,0
+selection,"stock.location,type",0,Warehouse,Warenlager,0
+selection,"stock.move,state",0,Assigned,Zugewiesen,0
+selection,"stock.move,state",0,Cancel,Abbrechen,0
+selection,"stock.move,state",0,Done,Erledigt,0
+selection,"stock.move,state",0,Draft,Entwurf,0
+selection,"stock.move,type",0,Input,Eingang,0
+selection,"stock.move,type",0,Internal,Intern,0
+selection,"stock.move,type",0,Output,Ausgang,0
+selection,"stock.packing.in,state",0,Cancel,Abbrechen,0
+selection,"stock.packing.in,state",0,Done,Erledigt,0
+selection,"stock.packing.in,state",0,Draft,Entwurf,0
+selection,"stock.packing.in,state",0,Received,Erhalten,0
+selection,"stock.packing.internal,state",0,Assigned,Zugewiesen,0
+selection,"stock.packing.internal,state",0,Cancel,Abbrechen,0
+selection,"stock.packing.internal,state",0,Done,Erledigt,0
+selection,"stock.packing.internal,state",0,Draft,Entwurf,0
+selection,"stock.packing.internal,state",0,Waiting,Wartend,0
+selection,"stock.packing.out,state",0,Assigned,Zugewiesen,0
+selection,"stock.packing.out,state",0,Cancel,Abbrechen,0
+selection,"stock.packing.out,state",0,Done,Erledigt,0
+selection,"stock.packing.out,state",0,Draft,Entwurf,0
+selection,"stock.packing.out,state",0,Packed,Gepackt,0
+selection,"stock.packing.out,state",0,Waiting,Wartend,0
+view,party.party,0,_Stock,_Lager,0
+view,product.product,0,Products,Artikel,0
+view,stock.product_stock_date.init,0,Product Quantity.,Artikel Mengen,0
+view,stock.inventory,0,All generated moves will be cancelled!,Sämtliche erzeugten Bewegungen werden rückgängig gemacht!,0
+view,stock.inventory,0,Cancel,Abbrechen,0
+view,stock.inventory,0,Complete Inventory,Aktueller Lagerbestand,0
+view,stock.inventory,0,Confirm,Beauftragen,0
+view,stock.inventory,0,Inventories,Lagerbestände,0
+view,stock.inventory,0,Inventory,Lagerbestand,0
+view,stock.inventory,0,Re-Open,Wiedereröffnen,0
+view,stock.inventory.line,0,Inventory Line,Position Bestand,0
+view,stock.inventory.line,0,Inventory Lines,Positionen Bestand,0
+view,stock.location,0,Location,Lagerort,0
+view,stock.location,0,Locations,Lagerorte,0
+view,stock.location,0,Product Stock,Lagerbestand,0
+view,stock.location_stock_date.init,0,Product Quantity.,Artikel Mengen,0
+view,stock.move,0,Cancel,Abbrechen,0
+view,stock.move,0,Move,Bewegung,0
+view,stock.move,0,Moves,Bewegungen,0
+view,stock.move,0,Set Done,Auf Erledigt setzen,0
+view,stock.move,0,Set Draft,Auf Entwurf setzen,0
+view,stock.packing.in,0,Cancel,Abbrechen,0
+view,stock.packing.in,0,Done,Erledigt,0
+view,stock.packing.in,0,Draft,Entwurf,0
+view,stock.packing.in,0,Incoming Moves,Eingehende Bewegungen,0
+view,stock.packing.in,0,Inventory Moves,Bestandsänderungen,0
+view,stock.packing.in,0,Moves,Bewegungen,0
+view,stock.packing.in,0,Received,Erhalten,0
+view,stock.packing.in,0,Reset to Draft,Auf Entwurf zurücksetzen,0
+view,stock.packing.in,0,Supplier Packing,Lieferschein von Lieferant,0
+view,stock.packing.in,0,Supplier Packings,Lieferscheine von Lieferanten,0
+view,stock.packing.internal,0,Assign,Zuweisen,0
+view,stock.packing.internal,0,Cancel,Abbrechen,0
+view,stock.packing.internal,0,Done,Erledigt,0
+view,stock.packing.internal,0,Draft,Entwurf,0
+view,stock.packing.internal,0,Force Assign,Zuweisung erzwingen,0
+view,stock.packing.internal,0,Internal Packing,Interner Lieferschein,0
+view,stock.packing.internal,0,Internal Packings,Interne Lieferscheine,0
+view,stock.packing.internal,0,Reset to Draft,Auf Entwurf zurücksetzen,0
+view,stock.packing.internal,0,Set Done,Auf Erledigt setzen,0
+view,stock.packing.internal,0,Set Waiting,Auf Wartend setzen,0
+view,stock.packing.internal,0,Waiting,Wartend,0
+view,stock.packing.out,0,Are you sure to force assignation?,Zuweisung wirklich erzwingen?,0
+view,stock.packing.out,0,Assign,Zuweisen,0
+view,stock.packing.out,0,Cancel,Abbrechen,0
+view,stock.packing.out,0,Customer Packing,Lieferschein an Kunde,0
+view,stock.packing.out,0,Customer Packings,Lieferscheine an Kunden,0
+view,stock.packing.out,0,Done,Erledigt,0
+view,stock.packing.out,0,Draft,Entwurf,0
+view,stock.packing.out,0,Force Assign,Zuweisung erzwingen,0
+view,stock.packing.out,0,Inventory Moves,Bestandsänderungen,0
+view,stock.packing.out,0,Make packing,Lieferung fertigstellen,0
+view,stock.packing.out,0,Outgoing Moves,Ausgehende Bewegungen,0
+view,stock.packing.out,0,Reset to Draft,Auf Entwurf zurücksetzen,0
+view,stock.packing.out,0,Set Done,Auf Erledigt setzen,0
+view,stock.packing.out,0,Set Waiting,Auf Wartend setzen,0
+view,stock.packing.out,0,Unpack,Entpackt,0
+view,stock.packing.out,0,Waiting,Wartend,0
+wizard_button,"stock.location.open,init,end",0,Cancel,Abbrechen,0
+wizard_button,"stock.location.open,init,open",0,Open,Ãffnen,0
+wizard_button,"stock.product.open,init,end",0,Cancel,Abbrechen,0
+wizard_button,"stock.product.open,init,open",0,Open,Ãffnen,0
diff --git a/doc/index_en.rst b/doc/index_en.rst
new file mode 100644
index 0000000..677cd6c
--- /dev/null
+++ b/doc/index_en.rst
@@ -0,0 +1,234 @@
+Stock Module
+############
+
+The stock module define fundamental for all stock management
+stations: Locations where product are stored, move between these
+locations, packings for product arrivals and departures and inventory to
+control and update stock levels.
+
+Location
+********
+
+Location are generic places where products are physically or virtually
+stored. There are six types of locations:
+
+Storage
+
+ Storage locations define real places where products are stored.
+
+
+Warehouse
+
+ Warehouses are meta-locations which define input, storage and output
+ locations. These locations are all of type Storage. Input and Output
+ are locations where incoming an outgoing product are temporally
+ stored awaiting transportation. The storage location is often the
+ biggest location where products are stored for middle or long
+ periods of time.
+
+Customer
+
+ Customer locations are virtual locations accumulating products that
+ have been sent to customers.
+
+Supplier
+
+ Supplier locations are virtual locations accumulating products that have
+ been received from suppliers.
+
+Lost And Found
+
+ Lost And Found locations collects inventory gaps. See
+ :ref:inventory for details.
+
+Locations are organised in tree structures, allowing to define
+fine grained structures.
+
+
+Move
+****
+
+A move is a movement of a product in a given quantity between two
+locations. It may eventually define a unit price and a currency for
+the products that are moved from or to another company, allowing to
+compute stock value at any time. A move also define a planned date
+(when one plan to do the move) and an effective date (when the move is
+actually made).
+
+A move can be in one of this states:
+
+Draft
+
+ The initial state, used when the move is created and to define
+ future stock movement that are planned, but still subject to
+ modifications.
+
+Assigned
+
+ An assigned move allow to reserve some products. Thus preventing
+ other user to assign them.
+
+Done
+
+ The move is in state Done when the real movement is made.
+
+Cancel
+
+ A cancelled move will be ignored by the system. Only Draft or
+ Assigned move can be cancelled. To revert a move in state Done, an
+ opposite move must be created.
+
+
+Product Quantities
+++++++++++++++++++
+
+Product quantities on each location are the sum of all moves coming
+from or going to this location. For quantities that are computed for
+a date in the past, only confirmed moves (i.e. in state Done) with an
+effective date inferior to the considered date are taken into account,
+reflecting the real situation. For future quantities, Draft and
+Assigned move with a planned date greater than today and smaller than
+the given date are also summed.
+
+
+Packing
+*******
+
+A Packing define a group of moves happening at the same date and
+around the same location.
+
+
+Supplier Packing
+++++++++++++++++
+
+A supplier packing is used when products are received from a
+supplier. It is mainly composed of a party (the supplier), a location
+(the warehouse in which the products are coming) and two list of moves:
+
+Incoming moves
+
+ The moves between the supplier location and the input location
+ (as defined on the warehouse).
+
+Inventory moves
+
+ The inventory moves are between the input location and the storage
+ location (or one of his child locations).
+
+
+The supplier packing can be in one of this states:
+
+Draft
+
+ Incoming moves and inventory moves (if they exist) are in draft.
+
+Received
+
+ Incoming move are set in state Done, inventory moves are created if
+ necessary.
+
+Done
+
+ Inventory moves are in state Done.
+
+Cancel
+
+ All moves are cancelled.
+
+
+Customer Packing
+++++++++++++++++
+
+A customer packing is used for sending products to customer. It is
+mainly composed of a party (the customer), a location (the warehouse
+out of which the product are going) and two list of moves:
+
+Inventory moves:
+
+ The moves between a storage location and the output location of the
+ warehouse
+
+Outgoing moves
+
+ The moves between the output location of the warehouse and a
+ customer location.
+
+
+The customer packing can be in one of this states:
+
+Draft
+
+ Outgoing moves and inventory moves (if they exist) are in draft.
+
+Waiting
+
+ When a customer packing is set to waiting, the inventory moves are
+ created (or completed) to balance the outgoing moves. The waiting
+ state also means that the packing should be processed.
+
+Assigned
+
+ The assigned state is when products have been assigned (or reserved)
+ from the storage locations.
+
+Packed
+
+ The packed state is when the inventory moves have been made, i.e
+ when the products have been physically moved to the outgoing
+ locations.
+
+Done
+
+ The packing is Done when the outgoing moves have been made,
+ e.g. when a truck left the warehouse.
+
+Cancel
+
+ A packing which is not yet completed (not in state Done) can be
+ cancelled at any time. This also cancel all the moves.
+
+
+Internal Packing
+++++++++++++++++
+
+A customer packing is used for sending products across locations
+inside the company. It is mainly composed of two locations and a list
+of moves. It can be in one of these states:
+
+
+Draft
+
+ The moves (if they exist) are in draft.
+
+Waiting
+
+ The waiting state means that the packing should be processed.
+
+Assigned
+
+ The assigned state is when products have been assigned.
+
+Done
+
+ The packing is Done when the moves have been made.
+
+Cancel
+
+ A packing which is not yet completed (not in state Done) can be
+ cancelled at any time. This also cancel all the moves.
+
+
+
+Inventory
+*********
+
+Inventories allow to control and update stock levels. They are mainly
+composed of two locations ( a Storage location and a Lost And Found
+location), and a list of inventory lines. A button allow to
+auto-complete inventory lines with respect to the expected quantities
+for each product in the location. Inventory lines consist of: a
+product and it's default unit of measure, an expected quantity and the
+real quantity (the real products on the shelves).
+
+When the inventory is confirmed, moves are created to balance expected
+quantities and real ones.
diff --git a/es_ES.csv b/es_ES.csv
new file mode 100644
index 0000000..c9054ae
--- /dev/null
+++ b/es_ES.csv
@@ -0,0 +1,255 @@
+type,name,res_id,src,value,fuzzy
+error,stock.inventory.line,0,Line quantity must be positive!,La lÃnea de cantidad debe ser positiva!,0
+error,stock.inventory.line,0,Product must be unique by inventory!,El producto debe ser único por inventario!,0
+error,stock.move,0,Move can not be in both Supplier and Customer Packing,El Movimiento no puede estar en el empaque del Proveedor y del Cliente,0
+error,stock.move,0,Move quantity must be positive,El valor del movimiento debe ser positivo,0
+error,stock.move,0,Source and destination location must be different,Los lugares fuente y destino deben diferir,0
+error,stock.move,0,You can not set state to assigned!,No puede establecer el estado como asignado!,0
+error,stock.move,0,You can not set state to done!,No puede establecer el estado como hecho!,0
+error,stock.move,0,You can not set state to draft!,No puede establecer el estado como borrador!,0
+error,stock.move,0,You can not use service product for a move!,No puede usar un producto de servicio para un movimiento!,0
+error,stock.move,0,You can only delete draft or cancelled moves!,Solamente puede eliminar movimientos en borrador o cancelados!,0
+error,stock.packing.in,0,Incoming Moves must have input location as destination location!,Los movimientos de Entrada deben tener lugar destino y de inicio!,0
+error,stock.packing.in,0,Inventory Moves must have input location as source location!,Los movimientos de Inventario deben tener un lugar de entrada como lugar de origen!,0
+error,stock.packing.in,0,Inventory Moves must have output location as destination location!,Los movimientos de Inventario deben tener un lugar de salida como lugar de destino!,0
+error,stock.packing.in,0,Outgoing Moves must have output location as source location!,Los Movimientos de Salida deben tener tanto lugar de salida como origen!,0
+field,"party.address,delivery",0,Delivery,EnvÃo,0
+field,"party.party,customer_location",0,Customer Location,Lugar del Cliente,0
+field,"party.party,supplier_location",0,Supplier Location,Lugar del Proveedor,0
+field,"product.product,forecast_quantity",0,Forecast Quantity,Cantidad Proyectada,0
+field,"product.product,quantity",0,Quantity,Cantidad,0
+field,"product.template,forecast_quantity",0,Forecast Quantity,Cantidad Proyectada,0
+field,"product.template,quantity",0,Quantity,Cantidad,0
+field,"stock.inventory,company",0,Company,CompañÃa,0
+field,"stock.inventory,date",0,Date,Fecha,0
+field,"stock.inventory.line,expected_quantity",0,Expected Quantity,Cantidad Esperada,0
+field,"stock.inventory.line,inventory",0,Inventory,Inventario,0
+field,"stock.inventory.line,product",0,Product,Producto,0
+field,"stock.inventory.line,quantity",0,Quantity,Cantidad,0
+field,"stock.inventory,lines",0,Lines,LÃneas de Inventario,0
+field,"stock.inventory.line,unit_digits",0,Unit Digits,DÃgitos Unitarios,0
+field,"stock.inventory.line,uom",0,UOM,UDM,0
+field,"stock.inventory,location",0,Location,Lugar,0
+field,"stock.inventory,lost_found",0,Lost and Found,Perdido y Encontrado,0
+field,"stock.inventory,moves",0,Moves,Movimientos Generados,0
+field,"stock.inventory,state",0,State,Estado,0
+field,"stock.location,active",0,Active,Activo,0
+field,"stock.location,address",0,Address,Direcciones,0
+field,"stock.location,childs",0,Childs,Hij at s,0
+field,"stock.location,code",0,Code,Código,0
+field,"stock.location,forecast_quantity",0,Forecast Quantity,Cantidad Proyectada,0
+field,"stock.location,input_location",0,Input,Entrada,0
+field,"stock.location,left",0,Left,Izquierda,0
+field,"stock.location,name",0,Name,Nombre,0
+field,"stock.location,output_location",0,Output,Salida,0
+field,"stock.location,parent",0,Parent,Padre,0
+field,"stock.location,quantity",0,Quantity,Cantidad,0
+field,"stock.location,right",0,Right,Derecha,0
+field,"stock.location_stock_date.init,forecast_date",0,At Date,En la fecha,0
+field,"stock.location,storage_location",0,Storage,Almacén,0
+field,"stock.location,type",0,Location type,Tipo de Lugar,0
+field,"stock.move,company",0,Company,CompañÃa,0
+field,"stock.move,currency",0,Currency,Moneda,0
+field,"stock.move,effective_date",0,Effective Date,Fecha Efectiva,0
+field,"stock.move,from_location",0,From Location,Lugar Inicial,0
+field,"stock.move,packing_in",0,Supplier Packing,Empaque del Proveedor,0
+field,"stock.move,packing_internal",0,Internal Packing,Empaque Interno,0
+field,"stock.move,packing_out",0,Customer Packing,Empaque de Cliente,0
+field,"stock.move,planned_date",0,Planned Date,Fecha Planeada,0
+field,"stock.move,product",0,Product,Producto,0
+field,"stock.move,quantity",0,Quantity,Cantidad,0
+field,"stock.move,state",0,State,Estado,0
+field,"stock.move,to_location",0,To Location,Al Lugar:,0
+field,"stock.move,type",0,Type,Tipo,0
+field,"stock.move,unit_digits",0,Unit Digits,DÃgitos de Unidad,0
+field,"stock.move,unit_price",0,Unit Price,Precio Unitario,0
+field,"stock.move,uom",0,Uom,Udm,0
+field,"stock.packing.in,code",0,Code,Código,0
+field,"stock.packing.in,contact_address",0,Contact Address,Dirección de Contacto,0
+field,"stock.packing.in,effective_date",0,Effective Date,Fecha Efectiva,0
+field,"stock.packing.in,incoming_moves",0,Incoming Moves,Movimientos de Entrada,0
+field,"stock.packing.in,inventory_moves",0,Inventory Moves,Movimientos de Inventario,0
+field,"stock.packing.in,moves",0,Moves,Movimientos,0
+field,"stock.packing.in,planned_date",0,Planned Date,Fecha Planeada,0
+field,"stock.packing.in,reference",0,Reference,Referencia,0
+field,"stock.packing.in,state",0,State,Estado,0
+field,"stock.packing.in,supplier",0,Supplier,Proveedor,0
+field,"stock.packing.internal,code",0,Code,Código,0
+field,"stock.packing.internal,effective_date",0,Effective Date,Fecha Efectiva,0
+field,"stock.packing.internal,from_location",0,From Location,Lugar Inicial,0
+field,"stock.packing.internal,moves",0,Moves,Movimientos,0
+field,"stock.packing.internal,planned_date",0,Planned Date,Fecha Planeada,0
+field,"stock.packing.internal,reference",0,Reference,Referencia,0
+field,"stock.packing.internal,state",0,State,Estado,0
+field,"stock.packing.internal,to_location",0,To Location,Al Lugar:,0
+field,"stock.packing.in,warehouse",0,Warehouse,Depósito,0
+field,"stock.packing.out,code",0,Code,Código,0
+field,"stock.packing.out,customer",0,Customer,Cliente,0
+field,"stock.packing.out,customer_location",0,Customer Location,Lugar del Cliente,0
+field,"stock.packing.out,delivery_address",0,Delivery Address,Dirección de EnvÃo,0
+field,"stock.packing.out,effective_date",0,Effective Date,Fecha Efectiva,0
+field,"stock.packing.out,inventory_moves",0,Inventory Moves,Movimientos de Inventario,0
+field,"stock.packing.out,moves",0,Moves,Movimientos,0
+field,"stock.packing.out,outgoing_moves",0,Outgoing Moves,Movimientos de Salida,0
+field,"stock.packing.out,planned_date",0,Planned Date,Fecha Planeada,0
+field,"stock.packing.out,reference",0,Reference,Referencia,0
+field,"stock.packing.out,state",0,State,Estado,0
+field,"stock.packing.out,warehouse",0,Warehouse,Depósito,0
+field,"stock.product_stock_date.init,forecast_date",0,At Date,En la fecha,0
+help,"party.party,customer_location",0,The default destination location when sending products to the party.,El lugar predeterminado destino cuando se envian productos al tercero.,0
+help,"party.party,supplier_location",0,The default source location when receiving products from the party.,El lugar origen predeterminado cuando se reciben productos del tercero.,0
+help,"stock.location_stock_date.init,forecast_date",0,"Allow to compute expected stock quantities for this date.
+* An empty value is an infinite date in the future.
+* A date in the past will provide historical values.","Permitir calcular el inventario esperado para esta fecha.
+* Un valor vacÃoes una fecha infinita en el futuro.
+* Una fecha en el pasado indicará usar datos históricos.",0
+help,"stock.product_stock_date.init,forecast_date",0,"Allow to compute expected stock quantities for this date.
+* An empty value is an infinite date in the future.
+* A date in the past will provide historical values.","Permitir calcular el inventario esperado para esta fecha.
+* Un valor vacÃoes una fecha infinita en el futuro.
+* Una fecha en el pasado indicará usar datos históricos.",0
+model,"ir.action,name",act_packing_out_form_assigned,Assigned Customer Packings,Empaques asignados a Clientes,0
+model,"ir.action,name",act_packing_internal_assigned_form,Assigned Internal Packings,Empaques asignados internamente,0
+model,"ir.action,name",wizard_complete_inventory,Complete Inventory,Inventario Completo,0
+model,"ir.action,name",report_packing_out,Customer Packing,Empaque de Cliente,0
+model,"ir.action,name",act_packing_out_form,Customer Packings,Empaques de Cliente,0
+model,"ir.action,name",act_packing_out_form_ready,Customer Packings Ready for Shipping,Empaques de Cliente listos para EnvÃo,0
+model,"ir.action,name",act_packing_out_form_waiting,Customer Packings Waiting Assignation,Empaques de Cliente listos esperando Asignación,0
+model,"ir.action,name",act_packing_internal_draft_form,Draft Internal Packings,Empaques Internos en Borrador,0
+model,"ir.action,name",act_location_form,Edit Locations,Editar Lugares,0
+model,"ir.action,name",act_packing_internal_form,Internal Packings,Empaques Internos,0
+model,"ir.action,name",act_packing_internal_waiting_form,Internal Packings Waiting Assignation,Empaques Internos esperando Asignación,0
+model,"ir.action,name",act_inventory_form,Inventories,Inventarios,0
+model,"ir.action,name",act_location_tree,Locations,Lugares,0
+model,"ir.action,name",act_move_form,Moves,Movimientos,0
+model,"ir.action,name",act_move_form_supp,Moves from Suppliers,Movimientos de Proveedores,0
+model,"ir.action,name",act_move_form_supp_proceed,Moves from Suppliers Waiting Arrival,Movimientos de Proveedores en espera de Arrivo,0
+model,"ir.action,name",act_move_form_cust,Moves to Customers,Movimientos hacia Clientes,0
+model,"ir.action,name",act_packing_in_form2,New Supplier Packing,Nuevo Empaque de Proveedor,0
+model,"ir.action,name",wizard_location_open,Product by Location,Producto por Lugar,0
+model,"ir.action,name",wizard_product_open,Product Quantities,Cantidades de Producto,0
+model,"ir.action,name",act_product_by_location,Products by Locations,Productos por Lugares,0
+model,"ir.action,name",act_location_quantity_tree,Product Stock,Inventario de Producto,0
+model,"ir.action,name",act_packing_in_form_received,Received Supplier packings,Empaques de Proveedores recibidos,0
+model,"ir.action,name",act_packing_in_form,Supplier Packings,Empaques del Proveedor,0
+model,"ir.ui.menu,name",menu_packing_out_assigned,Assigned Customer Packings,Empaques asignados a Clientes,0
+model,"ir.ui.menu,name",menu_packing_internal_assigned_form,Assigned Internal Packings,Empaques asignados internamente,0
+model,"ir.ui.menu,name",menu_configuration,Configuration,Configuración,0
+model,"ir.ui.menu,name",menu_packing_out_form,Customer Packings,Empaques de Cliente,0
+model,"ir.ui.menu,name",menu_packing_out_ready,Customer Packings Ready for Shipping,Empaques de Cliente listos para EnvÃo,0
+model,"ir.ui.menu,name",menu_packing_out_waiting,Customer Packings Waiting Assignation,Empaques de Cliente listos esperando Asignación,0
+model,"ir.ui.menu,name",menu_packing_internal_draft_form,Draft Internal Packings,Empaques Internos en Borrador,0
+model,"ir.ui.menu,name",menu_location_form,Edit Locations,Editar Lugares,0
+model,"ir.ui.menu,name",menu_packing_internal_form,Internal Packings,Empaques Internos,0
+model,"ir.ui.menu,name",menu_packing_internal_waiting_form,Internal Packings Waiting Assignation,Empaques Internos esperando Asignación,0
+model,"ir.ui.menu,name",menu_inventory_form,Inventories,Inventarios,0
+model,"ir.ui.menu,name",menu_stock,Inventory Management,Manejo de Inventarios,0
+model,"ir.ui.menu,name",menu_location_tree,Locations,Lugares,0
+model,"ir.ui.menu,name",menu_move_form,Moves,Movimientos,0
+model,"ir.ui.menu,name",menu_move_form_supp,Moves from Suppliers,Movimientos de Proveedores,0
+model,"ir.ui.menu,name",menu_move_form_supp_proceed,Moves from Suppliers Waiting Arrival,Movimientos de Proveedores en espera de Arrivo,0
+model,"ir.ui.menu,name",menu_move_form_cust,Moves to Customers,Movimientos hacia Clientes,0
+model,"ir.ui.menu,name",menu_packing_in_form2,New Supplier Packing,Nuevo Empaque de Proveedor,0
+model,"ir.ui.menu,name",menu_packing_in_received,Received Supplier packings,Empaques de Proveedores recibidos,0
+model,"ir.ui.menu,name",menu_packing_in_form,Supplier Packings,Empaques del Proveedor,0
+odt,stock.packing.out,0,Customer Code:,Código de Cliente:,0
+odt,stock.packing.out,0,Date:,Fecha:,0
+odt,stock.packing.out,0,E-Mail:,Correo electrónico:,0
+odt,stock.packing.out,0,List,Lista,0
+odt,stock.packing.out,0,Packing,En empaque,0
+odt,stock.packing.out,0,Packing Number:,Número de Empaque:,0
+odt,stock.packing.out,0,Phone:,Teléfono:,0
+odt,stock.packing.out,0,Product,Producto,0
+odt,stock.packing.out,0,Quantity,Cantidad,0
+odt,stock.packing.out,0,Reference:,Referencia:,0
+selection,"stock.inventory,state",0,Cancel,Cancelar,0
+selection,"stock.inventory,state",0,Done,Hecho,0
+selection,"stock.inventory,state",0,Open,Abrir,0
+selection,"stock.location,type",0,Customer,Cliente,0
+selection,"stock.location,type",0,Lost and Found,Perdido y Encontrado,0
+selection,"stock.location,type",0,Production,Producción,0
+selection,"stock.location,type",0,Storage,Almacén,0
+selection,"stock.location,type",0,Supplier,Proveedor,0
+selection,"stock.location,type",0,Warehouse,Depósito,0
+selection,"stock.move,state",0,Assigned,Asignado,0
+selection,"stock.move,state",0,Cancel,Cancelar,0
+selection,"stock.move,state",0,Done,Hecho,0
+selection,"stock.move,state",0,Draft,Borrador,0
+selection,"stock.move,type",0,Input,Entrada,0
+selection,"stock.move,type",0,Internal,Interna,0
+selection,"stock.move,type",0,Output,Salida,0
+selection,"stock.packing.in,state",0,Cancel,Cancelar,0
+selection,"stock.packing.in,state",0,Done,Hecho,0
+selection,"stock.packing.in,state",0,Draft,Borrador,0
+selection,"stock.packing.in,state",0,Received,Recibido,0
+selection,"stock.packing.internal,state",0,Assigned,Asignado,0
+selection,"stock.packing.internal,state",0,Cancel,Cancelar,0
+selection,"stock.packing.internal,state",0,Done,Hecho,0
+selection,"stock.packing.internal,state",0,Draft,Borrador,0
+selection,"stock.packing.internal,state",0,Waiting,En Espera,0
+selection,"stock.packing.out,state",0,Assigned,Asignado,0
+selection,"stock.packing.out,state",0,Cancel,Cancelar,0
+selection,"stock.packing.out,state",0,Done,Hecho,0
+selection,"stock.packing.out,state",0,Draft,Borrador,0
+selection,"stock.packing.out,state",0,Packed,Empacado,0
+selection,"stock.packing.out,state",0,Waiting,En Espera,0
+view,party.party,0,_Stock,_Existencias,0
+view,stock.product_stock_date.init,0,Product Quantity.,Cantidad de Producto.,0
+view,stock.inventory,0,All generated moves will be cancelled!,Se cancelarán todos los movimientos generados!,0
+view,stock.inventory,0,Cancel,Cancelar,0
+view,stock.inventory,0,Complete Inventory,Inventario Completo,0
+view,stock.inventory,0,Confirm,Confirmar,0
+view,stock.inventory,0,Inventories,Inventarios,0
+view,stock.inventory,0,Inventory,Inventario,0
+view,stock.inventory,0,Re-Open,Re-abrir,0
+view,stock.inventory.line,0,Inventory Line,LÃnea de Inventario,0
+view,stock.inventory.line,0,Inventory Lines,LÃneas de Inventario,0
+view,stock.location,0,Location,Lugar,0
+view,stock.location,0,Locations,Lugares,0
+view,stock.location,0,Product Stock,Inventario de Producto,0
+view,stock.location_stock_date.init,0,Product Quantity.,Cantidad de Producto.,0
+view,stock.move,0,Cancel,Cancelar,0
+view,stock.move,0,Move,Movimiento,0
+view,stock.move,0,Moves,Movimientos,0
+view,stock.move,0,Set Done,Marcar como Hecho,0
+view,stock.move,0,Set Draft,Marcar como Borrador,0
+view,stock.packing.in,0,Cancel,Cancelar,0
+view,stock.packing.in,0,Done,Hecho,0
+view,stock.packing.in,0,Draft,Borrador,0
+view,stock.packing.in,0,Incoming Moves,Movimientos de Entrada,0
+view,stock.packing.in,0,Inventory Moves,Movimientos de Inventario,0
+view,stock.packing.in,0,Moves,Movimientos,0
+view,stock.packing.in,0,Received,Recibido,0
+view,stock.packing.in,0,Reset to Draft,Revertir a Borrador,0
+view,stock.packing.in,0,Supplier Packing,Empaque del Proveedor,0
+view,stock.packing.in,0,Supplier Packings,Empaques del Proveedor,0
+view,stock.packing.internal,0,Assign,Asignar,0
+view,stock.packing.internal,0,Cancel,Cancelar,0
+view,stock.packing.internal,0,Done,Hecho,0
+view,stock.packing.internal,0,Draft,Borrador,0
+view,stock.packing.internal,0,Force Assign,Forzar Asignación,0
+view,stock.packing.internal,0,Internal Packing,Empaque Interno,0
+view,stock.packing.internal,0,Internal Packings,Empaques Internos,0
+view,stock.packing.internal,0,Reset to Draft,Revertir a Borrador,0
+view,stock.packing.internal,0,Set Done,Marcar como Hecho,0
+view,stock.packing.internal,0,Set Waiting,Colocar en Espera,0
+view,stock.packing.internal,0,Waiting,En espera,0
+view,stock.packing.out,0,Assign,Asignar,0
+view,stock.packing.out,0,Cancel,Cancelar,0
+view,stock.packing.out,0,Customer Packing,Empaque de Cliente,0
+view,stock.packing.out,0,Customer Packings,Empaques de Cliente,0
+view,stock.packing.out,0,Done,Hecho,0
+view,stock.packing.out,0,Draft,Borrador,0
+view,stock.packing.out,0,Force Assign,Forzar Asignación,0
+view,stock.packing.out,0,Inventory Moves,Movimientos de Inventario,0
+view,stock.packing.out,0,Make packing,Hacer Empaque,0
+view,stock.packing.out,0,Outgoing Moves,Movimientos de Salida,0
+view,stock.packing.out,0,Reset to Draft,Revertir a Borrador,0
+view,stock.packing.out,0,Set Done,Marcar como Hecho,0
+view,stock.packing.out,0,Set Waiting,Colocar en Espera,0
+view,stock.packing.out,0,Unpack,Sin empaque,0
+view,stock.packing.out,0,Waiting,En espera,0
+wizard_button,"stock.location.open,init,end",0,Cancel,Cancelar,0
+wizard_button,"stock.location.open,init,open",0,Open,Abrir,0
+wizard_button,"stock.product.open,init,end",0,Cancel,Cancelar,0
+wizard_button,"stock.product.open,init,open",0,Open,Abrir,0
diff --git a/fr_FR.csv b/fr_FR.csv
new file mode 100644
index 0000000..45c07a6
--- /dev/null
+++ b/fr_FR.csv
@@ -0,0 +1,275 @@
+type,name,res_id,src,value,fuzzy
+error,stock.inventory.line,0,Line quantity must be positive!,Les quantités sur les lignes doivent être positives!,0
+error,stock.inventory.line,0,Product must be unique by inventory!,Chaque produit ne peut apparaître qu'une seule fois par inventaire,0
+error,stock.location,0,You can not create recursive locations!,Vous ne pouvez pas créer des emplacements récursifs,0
+error,stock.move,0,Move can not be in both Supplier and Customer Packing,Un mouvement ne peut pas être en même temps dans un packing founisseur et un packing client.,0
+error,stock.move,0,Move quantity must be positive,La quantité sur le mouvement doit être positive.,0
+error,stock.move,0,Source and destination location must be different,Les emplacements d'origine et de destination doivent être distinctes,0
+error,stock.move,0,You can not set state to assigned!,Vous ne pouvez pas mettre l'état à assigné !,0
+error,stock.move,0,You can not set state to done!,Vous ne pouvez pas mettre l'état à fait !,0
+error,stock.move,0,You can not set state to draft!,Vous ne pouvez pas mettre l'état à brouillon!,0
+error,stock.move,0,You can not use service product for a move!,Vous ne pouvez pas utiliser un produit de type service sur un mouvement !,0
+error,stock.move,0,You can only delete draft or cancelled moves!,Vous pouvez supprimer que des mouvement qui sont annulé ou dans l'état brouillon !,0
+error,stock.packing.in,0,Incoming Moves must have input location as destination location!,Les mouvement entrants doivent avoir un emplacement de type réception comme destination,0
+error,stock.packing.in,0,Inventory Moves must have input location as source location!,Les mouvement internes doivent avoir un emplacement de type réception comme origine,0
+error,stock.packing.in,0,Inventory Moves must have output location as destination location!,Les mouvement internes doivent avoir un emplacement de type expédition comme destination,0
+error,stock.packing.in,0,Outgoing Moves must have output location as source location!,Les mouvement sortants doivent avoir un emplacement de type expédition comme origine,0
+field,"party.address,delivery",0,Delivery,Livraison,0
+field,"party.party,customer_location",0,Customer Location,Emplacement client,0
+field,"party.party,supplier_location",0,Supplier Location,Emplacement fournisseur,0
+field,"product.product,forecast_quantity",0,Forecast Quantity,Quantités prévisionnelles,0
+field,"product.product,quantity",0,Quantity,Quantité,0
+field,"product.template,forecast_quantity",0,Forecast Quantity,Quantité prévue,0
+field,"product.template,quantity",0,Quantity,Quantité,0
+field,"stock.inventory,company",0,Company,Companie,0
+field,"stock.inventory,date",0,Date,Date,0
+field,"stock.inventory.line,expected_quantity",0,Expected Quantity,Quantité attendue,0
+field,"stock.inventory.line,inventory",0,Inventory,Inventaire,0
+field,"stock.inventory.line,move",0,Move,Mouvement,0
+field,"stock.inventory.line,product",0,Product,Produit,0
+field,"stock.inventory.line,quantity",0,Quantity,Quantité,0
+field,"stock.inventory,lines",0,Lines,Lignes,0
+field,"stock.inventory.line,unit_digits",0,Unit Digits,Décimales de l'unité,0
+field,"stock.inventory.line,uom",0,UOM,UDM,0
+field,"stock.inventory,location",0,Location,Emplacement,0
+field,"stock.inventory,lost_found",0,Lost and Found,Pertes et surplus,0
+field,"stock.inventory,state",0,State,Ãtat,0
+field,"stock.location,active",0,Active,Actif,0
+field,"stock.location,address",0,Address,Adresse,0
+field,"stock.location,childs",0,Childs,Enfants,0
+field,"stock.location,code",0,Code,Code,0
+field,"stock.location,forecast_quantity",0,Forecast Quantity,Quantité prévisionnelle,0
+field,"stock.location,input_location",0,Input,Réception,0
+field,"stock.location,left",0,Left,Gauche,0
+field,"stock.location,name",0,Name,Nom,0
+field,"stock.location,output_location",0,Output,Expédition,0
+field,"stock.location,parent",0,Parent,Parent,0
+field,"stock.location,quantity",0,Quantity,Quantité,0
+field,"stock.location,right",0,Right,Droit,0
+field,"stock.location_stock_date.init,forecast_date",0,At Date,Ã la date,0
+field,"stock.location,storage_location",0,Storage,Magasin,0
+field,"stock.location,type",0,Location type,Type d'emplacement,0
+field,"stock.move,company",0,Company,Companie,0
+field,"stock.move,currency",0,Currency,Devise,0
+field,"stock.move,effective_date",0,Effective Date,Date effective,0
+field,"stock.move,from_location",0,From Location,Origine,0
+field,"stock.move,packing_in",0,Supplier Packing,Colisage fournisseur,0
+field,"stock.move,packing_internal",0,Internal Packing,Colisage interne,0
+field,"stock.move,packing_out",0,Customer Packing,Colisage client,0
+field,"stock.move,planned_date",0,Planned Date,Date planifiée,0
+field,"stock.move,product",0,Product,Produit,0
+field,"stock.move,quantity",0,Quantity,Quantité,0
+field,"stock.move,state",0,State,Etat,0
+field,"stock.move,to_location",0,To Location,Destination,0
+field,"stock.move,type",0,Type,Type,0
+field,"stock.move,unit_digits",0,Unit Digits,Décimales de l'unité,0
+field,"stock.move,unit_price",0,Unit Price,Prix unitaire,0
+field,"stock.move,uom",0,Uom,UDM,0
+field,"stock.packing.in,code",0,Code,Code,0
+field,"stock.packing.in,contact_address",0,Contact Address,Adresse de contact,0
+field,"stock.packing.in,effective_date",0,Effective Date,Date effective,0
+field,"stock.packing.in,incoming_moves",0,Incoming Moves,Mouvements entrants,0
+field,"stock.packing.in,inventory_moves",0,Inventory Moves,Mouvement internes,0
+field,"stock.packing.in,moves",0,Moves,Mouvements,0
+field,"stock.packing.in,planned_date",0,Planned Date,Date planifiée,0
+field,"stock.packing.in,reference",0,Reference,Référence,0
+field,"stock.packing.in,state",0,State,Ãtat,0
+field,"stock.packing.in,supplier",0,Supplier,Fournisseur,0
+field,"stock.packing.internal,code",0,Code,Code,0
+field,"stock.packing.internal,effective_date",0,Effective Date,Date effective,0
+field,"stock.packing.internal,from_location",0,From Location,Origine,0
+field,"stock.packing.internal,moves",0,Moves,Mouvements,0
+field,"stock.packing.internal,planned_date",0,Planned Date,Date planifiée,0
+field,"stock.packing.internal,reference",0,Reference,Référence,0
+field,"stock.packing.internal,state",0,State,Ãtat,0
+field,"stock.packing.internal,to_location",0,To Location,Destination,0
+field,"stock.packing.in,warehouse",0,Warehouse,Entrepôt,0
+field,"stock.packing.out,code",0,Code,Code,0
+field,"stock.packing.out,customer",0,Customer,Client,0
+field,"stock.packing.out,customer_location",0,Customer Location,Emplacement client,0
+field,"stock.packing.out,delivery_address",0,Delivery Address,Adresse de livraison,0
+field,"stock.packing.out,effective_date",0,Effective Date,Date effective,0
+field,"stock.packing.out,inventory_moves",0,Inventory Moves,Mouvements internes,0
+field,"stock.packing.out,moves",0,Moves,Mouvements,0
+field,"stock.packing.out,outgoing_moves",0,Outgoing Moves,Mouvements de sortie,0
+field,"stock.packing.out,planned_date",0,Planned Date,Date planifiée,0
+field,"stock.packing.out,reference",0,Reference,Référence,0
+field,"stock.packing.out,state",0,State,Ãtat,0
+field,"stock.packing.out,warehouse",0,Warehouse,Entrepôt,0
+field,"stock.product_stock_date.init,forecast_date",0,At Date,Ã la date,0
+help,"party.party,customer_location",0,The default destination location when sending products to the party.,L'emplacement de destination par défaut quand des produits sont envoyé vers ce tiers.,0
+help,"party.party,supplier_location",0,The default source location when receiving products from the party.,L'emplacement d'origine par défaut quand des produits sont reçu depuis ce tiers.,0
+help,"stock.location_stock_date.init,forecast_date",0,"Allow to compute expected stock quantities for this date.
+* An empty value is an infinite date in the future.
+* A date in the past will provide historical values.","Permet de calculer les quantités en stock attendues pour cette date.
+* Une valeur vide correspond à une date infinie dans le futur.
+* Une date dans le passé retournera des données historiques.",0
+help,"stock.product_stock_date.init,forecast_date",0,"Allow to compute expected stock quantities for this date.
+* An empty value is an infinite date in the future.
+* A date in the past will provide historical values.","Permet de calculer les quantités en stock attendues pour cette date.
+* Une valeur vide correspond à une date infinie dans le futur.
+* Une date dans le passé retournera des données historiques.",0
+model,"ir.action,name",act_packing_out_form_assigned,Assigned Customer Packings,Colisages clients assignés,0
+model,"ir.action,name",act_packing_internal_assigned_form,Assigned Internal Packings,Colisages internes assignés,0
+model,"ir.action,name",wizard_complete_inventory,Complete Inventory,Compléter l'inventaire,0
+model,"ir.action,name",report_packing_out,Customer Packing,Colisage client,0
+model,"ir.action,name",act_packing_out_form,Customer Packings,Colisages clients,0
+model,"ir.action,name",act_packing_out_form_ready,Customer Packings Ready for Shipping,Colisages clients prêt à livrer,0
+model,"ir.action,name",act_packing_out_form_waiting,Customer Packings Waiting Assignation,Colisages clients en attente d'assignation,0
+model,"ir.action,name",act_packing_internal_draft_form,Draft Internal Packings,Colisages internes brouillon,0
+model,"ir.action,name",act_location_form,Edit Locations,Ãditer les emplacements,0
+model,"ir.action,name",act_packing_internal_form,Internal Packings,Colisage interne,0
+model,"ir.action,name",act_packing_internal_waiting_form,Internal Packings Waiting Assignation,Colisages internes en attente d'assignation,0
+model,"ir.action,name",act_inventory_form,Inventories,Inventaires,0
+model,"ir.action,name",act_location_tree,Locations,Emplacements,0
+model,"ir.action,name",act_move_form,Moves,Mouvements,0
+model,"ir.action,name",act_move_form_supp,Moves from Suppliers,Mouvements fournisseurs,0
+model,"ir.action,name",act_move_form_supp_proceed,Moves from Suppliers Waiting Arrival,Mouvement fournisseur en attente de réception,0
+model,"ir.action,name",act_move_form_cust,Moves to Customers,Mouvements clients,0
+model,"ir.action,name",act_packing_in_form2,New Supplier Packing,Nouveau colisage fournisseur,0
+model,"ir.action,name",wizard_location_open,Product by Location,Produits par emplacement,0
+model,"ir.action,name",wizard_product_open,Product Quantities,Quantités de produit,0
+model,"ir.action,name",act_product_by_location,Products by Locations,Produits par emplacements,0
+model,"ir.action,name",act_location_quantity_tree,Product Stock,Quantités en stock,0
+model,"ir.action,name",act_packing_in_form_received,Received Supplier packings,Colisages fournisseurs reçus,0
+model,"ir.action,name",act_packing_in_form,Supplier Packings,Colisages fournisseurs,0
+model,"ir.sequence,name",sequence_packing_out,Customer Packing,Colisage client,0
+model,"ir.sequence,name",sequence_packing_in,Supplier Packing,Colisage fournisseur,0
+model,"ir.sequence.type,name",sequence_type_packing_out,Customer Packing,Colisage client,0
+model,"ir.sequence.type,name",sequence_type_packing_in,Supplier Packing,Colisage fournisseur,0
+model,"ir.ui.menu,name",menu_packing_out_assigned,Assigned Customer Packings,Colisages clients assignés,0
+model,"ir.ui.menu,name",menu_packing_internal_assigned_form,Assigned Internal Packings,Colisages internes assignés,0
+model,"ir.ui.menu,name",menu_configuration,Configuration,Configuration,0
+model,"ir.ui.menu,name",menu_packing_out_form,Customer Packings,Colisages clients,0
+model,"ir.ui.menu,name",menu_packing_out_ready,Customer Packings Ready for Shipping,Colisages clients prêts pour la livraison,0
+model,"ir.ui.menu,name",menu_packing_out_waiting,Customer Packings Waiting Assignation,Colisages clients en attente d'assignation,0
+model,"ir.ui.menu,name",menu_packing_internal_draft_form,Draft Internal Packings,Colisages internes brouillons,0
+model,"ir.ui.menu,name",menu_location_form,Edit Locations,Ãditer les emplacements,0
+model,"ir.ui.menu,name",menu_packing_internal_form,Internal Packings,Colisages internes,0
+model,"ir.ui.menu,name",menu_packing_internal_waiting_form,Internal Packings Waiting Assignation,Colisages internes en attente d'assignation,0
+model,"ir.ui.menu,name",menu_inventory_form,Inventories,Inventaires,0
+model,"ir.ui.menu,name",menu_stock,Inventory Management,Gestion des stocks,0
+model,"ir.ui.menu,name",menu_location_tree,Locations,Emplacements,0
+model,"ir.ui.menu,name",menu_move_form,Moves,Mouvements,0
+model,"ir.ui.menu,name",menu_move_form_supp,Moves from Suppliers,Mouvements fournisseurs,0
+model,"ir.ui.menu,name",menu_move_form_supp_proceed,Moves from Suppliers Waiting Arrival,Mouvements fournisseur en attente de réception,0
+model,"ir.ui.menu,name",menu_move_form_cust,Moves to Customers,Mouvements clients,0
+model,"ir.ui.menu,name",menu_packing_in_form2,New Supplier Packing,Nouveau colisage fournisseur,0
+model,"ir.ui.menu,name",menu_packing_in_received,Received Supplier packings,Colisages fournisseur reçus,0
+model,"ir.ui.menu,name",menu_packing_in_form,Supplier Packings,Colisages fournisseurs,0
+model,"res.group,name",group_stock,Stock,Stock,0
+model,"res.group,name",group_stock_admin,Stock Administration,Administration des stocks,0
+model,"stock.location,name",location_customer,Customer,Client,0
+model,"stock.location,name",location_input,Input Zone,Zone d'entrée,0
+model,"stock.location,name",location_lost_found,Lost and Found,Pertes et surplus,0
+model,"stock.location,name",location_output,Output Zone,Zone de sortie,0
+model,"stock.location,name",location_storage,Storage Zone,Zone rangement,0
+model,"stock.location,name",location_supplier,Supplier,Fournisseur,0
+model,"stock.location,name",location_warehouse,Warehouse,Entrepôt,0
+model,"workflow.activity,name",packingout_act_assigned,Assigned,Assigné,0
+model,"workflow.activity,name",packinginternal_act_assigned,Assigned,Assigné,0
+model,"workflow.activity,name",packingin_act_cancel,Cancel,Annulé,0
+model,"workflow.activity,name",packingout_act_cancel,Cancel,Annulé,0
+model,"workflow.activity,name",packinginternal_act_cancel,Cancel,Annulé,0
+model,"workflow.activity,name",inventory_act_cancel,Cancel,Annulé,0
+model,"workflow.activity,name",packingin_act_done,Done,Fait,0
+model,"workflow.activity,name",packingout_act_done,Done,Fait,0
+model,"workflow.activity,name",packinginternal_act_done,Done,Fait,0
+model,"workflow.activity,name",inventory_act_done,Done,Fait,0
+model,"workflow.activity,name",packingin_act_draft,Draft,Brouillon,0
+model,"workflow.activity,name",packingout_act_draft,Draft,Brouillon,0
+model,"workflow.activity,name",packinginternal_act_draft,Draft,Brouillon,0
+model,"workflow.activity,name",inventory_act_draft,Draft,Brouillon,0
+model,"workflow.activity,name",packingout_act_packed,Packed,Emballé,0
+model,"workflow.activity,name",packingin_act_received,Received,Reçu,0
+model,"workflow.activity,name",packingout_act_waiting,Waiting,En attente,0
+model,"workflow.activity,name",packinginternal_act_waiting,Waiting,En attente,0
+model,"workflow,name",wkf_packingout,Customer Packing,Colisage client,0
+model,"workflow,name",wkf_packinginternal,Internal Packing,Colisage interne,0
+model,"workflow,name",wkf_inventory,Inventory,Inventaire,0
+model,"workflow,name",wkf_packingin,Supplier Packing,Colisage fournisseur,0
+selection,"stock.inventory,state",0,Cancel,Annulé,0
+selection,"stock.inventory,state",0,Done,Fait,0
+selection,"stock.inventory,state",0,Draft,Brouillon,0
+selection,"stock.location,type",0,Customer,Client,0
+selection,"stock.location,type",0,Lost and Found,Pertes et surplus,0
+selection,"stock.location,type",0,Production,Production,0
+selection,"stock.location,type",0,Storage,Magasin,0
+selection,"stock.location,type",0,Supplier,Fournisseur,0
+selection,"stock.location,type",0,Warehouse,Entrepôt,0
+selection,"stock.move,state",0,Assigned,Assigné,0
+selection,"stock.move,state",0,Cancel,Annulé,0
+selection,"stock.move,state",0,Done,Fait,0
+selection,"stock.move,state",0,Draft,Brouillon,0
+selection,"stock.move,type",0,Input,Réception,0
+selection,"stock.move,type",0,Internal,Interne,0
+selection,"stock.move,type",0,Output,Expédition,0
+selection,"stock.packing.in,state",0,Cancel,Annulé,0
+selection,"stock.packing.in,state",0,Done,Fait,0
+selection,"stock.packing.in,state",0,Draft,Brouillon,0
+selection,"stock.packing.in,state",0,Received,Reçu,0
+selection,"stock.packing.internal,state",0,Assigned,Assigné,0
+selection,"stock.packing.internal,state",0,Cancel,Annulé,0
+selection,"stock.packing.internal,state",0,Done,Fait,0
+selection,"stock.packing.internal,state",0,Draft,Brouillon,0
+selection,"stock.packing.internal,state",0,Waiting,En attente,0
+selection,"stock.packing.out,state",0,Assigned,Assigné,0
+selection,"stock.packing.out,state",0,Cancel,Annulé,0
+selection,"stock.packing.out,state",0,Done,Fait,0
+selection,"stock.packing.out,state",0,Draft,Brouillon,0
+selection,"stock.packing.out,state",0,Packed,Emballé,0
+selection,"stock.packing.out,state",0,Waiting,En attente,0
+view,party.party,0,_Stock,_Stocks,0
+view,product.product,0,Products,Produits,0
+view,stock.inventory,0,All generated moves will be cancelled!,Tous les mouvements généré vont être annulés,0
+view,stock.inventory,0,Cancel,Annuler,0
+view,stock.inventory,0,Complete Inventory,Compléter l'inventaire,0
+view,stock.inventory,0,Confirm,Confirmer,0
+view,stock.inventory,0,Inventories,Inventaires,0
+view,stock.inventory,0,Inventory,Inventaire,0
+view,stock.inventory,0,Re-Open,Ré-Ouvrir,0
+view,stock.inventory.line,0,Inventory Line,Ligne d'inventaire,0
+view,stock.inventory.line,0,Inventory Lines,Lignes d'inventaire,0
+view,stock.location,0,Location,Emplacement,0
+view,stock.location,0,Locations,Emplacements,0
+view,stock.location,0,Product Stock,Quantités en stock,0
+view,stock.location_stock_date.init,0,Product Quantity.,Quantité de produit,0
+view,stock.move,0,Move,Mouvement,0
+view,stock.move,0,Moves,Mouvements,0
+view,stock.packing.in,0,Cancel,Annuler,0
+view,stock.packing.in,0,Done,Fait,0
+view,stock.packing.in,0,Draft,Brouillon,0
+view,stock.packing.in,0,Incoming Moves,Mouvements en entrée,0
+view,stock.packing.in,0,Inventory Moves,Mouvements internes,0
+view,stock.packing.in,0,Moves,Mouvements,0
+view,stock.packing.in,0,Received,Réception,0
+view,stock.packing.in,0,Reset to Draft,Remettre en brouillon,0
+view,stock.packing.in,0,Supplier Packing,Colisage fournisseur,0
+view,stock.packing.in,0,Supplier Packings,Colisages fournisseurs,0
+view,stock.packing.internal,0,Assign,Assigner,0
+view,stock.packing.internal,0,Cancel,Annuler,0
+view,stock.packing.internal,0,Done,Fait,0
+view,stock.packing.internal,0,Draft,Brouillon,0
+view,stock.packing.internal,0,Force Assign,Forcer l'assignation,0
+view,stock.packing.internal,0,Internal Packing,Colisage interne,0
+view,stock.packing.internal,0,Internal Packings,Colisages internes,0
+view,stock.packing.internal,0,Reset to Draft,Remettre en brouillon,0
+view,stock.packing.internal,0,Waiting,En attente,0
+view,stock.packing.out,0,Are you sure to force assignation?,Ãtes-vous sûr de forcer l'assignation ?,0
+view,stock.packing.out,0,Assign,Assigner,0
+view,stock.packing.out,0,Cancel,Annuler,0
+view,stock.packing.out,0,Customer Packing,Colisage client,0
+view,stock.packing.out,0,Customer Packings,Colisages clients,0
+view,stock.packing.out,0,Done,Fait,0
+view,stock.packing.out,0,Draft,Brouillon,0
+view,stock.packing.out,0,Force Assign,Forcer l'assignation,0
+view,stock.packing.out,0,Inventory Moves,Mouvements internes,0
+view,stock.packing.out,0,Make packing,Faire le colis,0
+view,stock.packing.out,0,Outgoing Moves,Mouvements en sortie,0
+view,stock.packing.out,0,Reset to Draft,Remettre en brouillon,0
+view,stock.packing.out,0,Unpack,Déballer,0
+view,stock.packing.out,0,Waiting,En attente,0
+wizard_button,"stock.location.open,init,end",0,Cancel,Annuler,0
+wizard_button,"stock.location.open,init,open",0,Open,Ouvrir,0
+wizard_button,"stock.product.open,init,end",0,Cancel,Annuler,0
+wizard_button,"stock.product.open,init,open",0,Open,Ouvrir,0
diff --git a/inventory.py b/inventory.py
new file mode 100644
index 0000000..3be3009
--- /dev/null
+++ b/inventory.py
@@ -0,0 +1,303 @@
+#This file is part of Tryton. The COPYRIGHT file at the top level
+#of this repository contains the full copyright notices and license terms.
+'Inventory'
+from trytond.osv import fields, OSV
+from trytond.wizard import Wizard
+
+STATES = {
+ 'readonly': "state != 'draft'",
+}
+
+
+class Inventory(OSV):
+ 'Stock Inventory'
+ _name = 'stock.inventory'
+ _description = __doc__
+ _rec_name = 'location'
+
+ location = fields.Many2One(
+ 'stock.location', 'Location', required=True,
+ domain=[('type', '=', 'storage')], states={
+ 'readonly': "state != 'draft' or bool(lines)",
+ })
+ date = fields.Date('Date', states=STATES)
+ lost_found = fields.Many2One(
+ 'stock.location', 'Lost and Found', required=True,
+ domain=[('type', '=', 'lost_found')], states=STATES)
+ lines = fields.One2Many(
+ 'stock.inventory.line', 'inventory', 'Lines', states=STATES)
+ company = fields.Many2One(
+ 'company.company', 'Company', required=True, states={
+ 'readonly': "state != 'draft' or bool(lines)",
+ })
+ state = fields.Selection([
+ ('draft', 'Draft'),
+ ('done', 'Done'),
+ ('cancel', 'Cancel'),
+ ], 'State', readonly=True, select=1)
+
+ def __init__(self):
+ super(Inventory, self).__init__()
+ self._order.insert(0, ('date', 'DESC'))
+
+ def default_state(self, cursor, user, context=None):
+ return 'draft'
+
+ def default_date(self, cursor, user, context=None):
+ date_obj = self.pool.get('ir.date')
+ return date_obj.today(cursor, user, context=context)
+
+ def default_company(self, cursor, user, context=None):
+ company_obj = self.pool.get('company.company')
+ if context is None:
+ context = {}
+ if context.get('company'):
+ return company_obj.name_get(cursor, user, context['company'],
+ context=context)[0]
+ return False
+
+ def default_lost_found(self, cursor, user, context=None):
+ location_obj = self.pool.get('stock.location')
+ location_ids = location_obj.search(cursor, user,
+ self.lost_found._domain, context=context)
+ if len(location_ids) == 1:
+ return location_obj.name_get(cursor, user, location_ids,
+ context=context)[0]
+ return False
+
+ def set_state_cancel(self, cursor, user, ids, context=None):
+ self.write(cursor, user, ids, {
+ 'state': 'cancel',
+ }, context=context)
+
+ def set_state_draft(self, cursor, user, inventory_id, context=None):
+ self.write(cursor, user, inventory_id, {
+ 'state': 'draft',
+ }, context=context)
+
+ def set_state_cancel(self, cursor, user, inventory_id, context=None):
+ line_obj = self.pool.get("stock.inventory.line")
+ inventory = self.browse(cursor, user, inventory_id, context=context)
+ line_obj.cancel_move(cursor, user, inventory.lines, context=context)
+ self.write(cursor, user, inventory_id, {
+ 'state': 'cancel',
+ }, context=context)
+
+ def set_state_done(self, cursor, user, inventory_id, context=None):
+ date_obj = self.pool.get('ir.date')
+ line_obj = self.pool.get('stock.inventory.line')
+ inventory = self.browse(cursor, user, inventory_id, context=context)
+
+ for line in inventory.lines:
+ line_obj.create_move(cursor, user, line, context=context)
+ self.write(
+ cursor, user, inventory_id,
+ {'state': 'done',
+ 'date': date_obj.today(cursor, user, context=context)},
+ context=context)
+
+ def copy(self, cursor, user, inventory_id, default=None, context=None):
+ date_obj = self.pool.get('ir.date')
+ line_obj = self.pool.get('stock.inventory.line')
+ if default is None:
+ default = {}
+ default = default.copy()
+ default['date'] = date_obj.today(cursor, user, context=context)
+ default['lines'] = False
+ new_id = super(Inventory, self).copy(
+ cursor, user, inventory_id, default=default, context=context)
+ inventory = self.browse(cursor, user, inventory_id, context=context)
+ for line in inventory.lines:
+ line_obj.copy(
+ cursor, user, line.id, default={
+ 'inventory': new_id,
+ 'move': False},
+ context=context)
+ self.complete_lines(cursor, user, [new_id], context=context)
+ return new_id
+
+ def complete_lines(self, cursor, user, ids, context=None):
+ line_obj = self.pool.get('stock.inventory.line')
+ product_obj = self.pool.get('product.product')
+ uom_obj = self.pool.get('product.uom')
+ inventories = self.browse(cursor, user, ids,
+ context=context)
+ context = context and context.copy() or {}
+
+ for inventory in inventories:
+ # Compute product quantities
+ if inventory.date:
+ context['stock_date_end'] = inventory.date
+ pbl = product_obj.products_by_location(
+ cursor, user, [inventory.location.id],
+ context=context)
+ else:
+ pbl = product_obj.products_by_location(
+ cursor, user, [inventory.location.id], context=context)
+
+ # Index some data
+ product2uom = {}
+ for product in product_obj.browse(
+ cursor, user, [line[1] for line in pbl], context=context):
+ product2uom[product.id] = product.default_uom.id
+ product_qty = {}
+ for (location, product), quantity in pbl.iteritems():
+ product_qty[product] = (quantity, product2uom[product])
+
+ # Update existing lines
+ for line in inventory.lines:
+ if line.product.id in product_qty:
+ quantity, uom_id = product_qty[line.product.id]
+ del product_qty[line.product.id]
+ # if nothing as changed, continue
+ if line.quantity == line.expected_quantity == quantity \
+ and line.uom.id == uom_id:
+ continue
+ values = {'expected_quantity': quantity,
+ 'uom': uom_id}
+ # update also quantity field if not edited
+ if line.quantity == line.expected_quantity:
+ values['quantity'] = max(quantity, 0.0)
+ else:
+ values = {'expected_quantity': 0.0,}
+ if line.quantity == line.expected_quantity:
+ values['quantity'] = 0
+
+
+ line_obj.write(
+ cursor, user, line.id, values, context=context)
+
+ # Create lines if needed
+ for product in product_qty:
+ quantity, uom_id = product_qty[product]
+ values = {
+ 'product': product,
+ 'expected_quantity': quantity,
+ 'quantity': max(quantity, 0.0),
+ 'uom': uom_id,
+ 'inventory': inventory.id,
+ }
+ line_obj.create(
+ cursor, user, values, context=context)
+
+Inventory()
+
+
+class InventoryLine(OSV):
+ 'Stock Inventory Line'
+ _name = 'stock.inventory.line'
+ _description = __doc__
+ _rec_name = 'product'
+
+ product = fields.Many2One('product.product', 'Product', required=True,
+ domain=[('type', '=', 'stockable')], on_change=['product'])
+ uom = fields.Function('get_uom', type='many2one', relation='product.uom',
+ string='UOM')
+ unit_digits = fields.Function('get_unit_digits', type='integer',
+ string='Unit Digits')
+ expected_quantity = fields.Float('Expected Quantity',
+ digits="(16, unit_digits)", readonly=True)
+ quantity = fields.Float('Quantity', digits="(16, unit_digits)")
+ move = fields.Many2One('stock.move', 'Move', readonly=True)
+ inventory = fields.Many2One('stock.inventory', 'Inventory', required=True)
+
+ def __init__(self):
+ super(InventoryLine, self).__init__()
+ self._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!'),
+ ]
+
+ def default_unit_digits(self, cursor, user, context=None):
+ return 2
+
+ def on_change_product(self, cursor, user, ids, vals, context=None):
+ product_obj = self.pool.get('product.product')
+ uom_obj = self.pool.get('product.uom')
+ res = {}
+ res['unit_digits'] = 2
+ if vals.get('product'):
+ product = product_obj.browse(cursor, user, vals['product'],
+ context=context)
+ res['uom'] = uom_obj.name_get(cursor, user, product.default_uom.id,
+ context=context)[0]
+ res['unit_digits'] = product.default_uom.digits
+ return res
+
+ def get_uom(self, cursor, user, ids, name, arg, context=None):
+ uom_obj = self.pool.get('product.uom')
+ res = {}
+ for line in self.browse(cursor, user, ids, context=context):
+ res[line.id] = line.product.default_uom.id
+ uom2name = {}
+ for uom_id, name in uom_obj.name_get(cursor, user, res.values(),
+ context=context):
+ uom2name[uom_id] = (uom_id, name)
+ for line_id in res:
+ res[line_id] = uom2name[res[line_id]]
+ return res
+
+ def get_unit_digits(self, cursor, user, ids, name, arg, context=None):
+ res = {}
+ for line in self.browse(cursor, user, ids, context=context):
+ res[line.id] = line.product.default_uom.digits
+ return res
+
+ def cancel_move(self, cursor, user, lines, context=None):
+ move_obj = self.pool.get('stock.move')
+ move_obj.write(
+ cursor, user, [l.move.id for l in lines if l.move], {'state': 'cancel'},
+ context=context)
+ move_obj.delete(
+ cursor, user, [l.move.id for l in lines if l.move], context=context)
+ self.write(
+ cursor, user, [l.id for l in lines if l.move], {'move': False},
+ context=context)
+
+ def create_move(self, cursor, user, line, context=None):
+ move_obj = self.pool.get('stock.move')
+ delta_qty = line.expected_quantity - line.quantity
+ if delta_qty == 0.0:
+ return
+ from_location = line.inventory.location.id
+ to_location = line.inventory.lost_found.id
+ if delta_qty < 0:
+ (from_location, to_location, delta_qty) = \
+ (to_location, from_location, -delta_qty)
+
+ move_id = move_obj.create(cursor, user, {
+ 'from_location': from_location,
+ 'to_location': to_location,
+ 'quantity': delta_qty,
+ 'product': line.product.id,
+ 'uom': line.uom.id,
+ 'company': line.inventory.company.id,
+ 'state': 'done',
+ }, context=context)
+ self.write(cursor, user, line.id, {'move': move_id}, context=context)
+
+InventoryLine()
+
+
+class CompleteInventory(Wizard):
+ 'Complete Inventory '
+ _name = 'stock.inventory.complete'
+ states = {
+ 'init': {
+ 'result': {
+ 'type': 'action',
+ 'action': '_complete',
+ 'state': 'end',
+ },
+ },
+ }
+
+ def _complete(self, cursor, user, data, context=None):
+ inventory_obj = self.pool.get('stock.inventory')
+ inventory_obj.complete_lines(cursor, user, data['ids'], context=context)
+
+ return {}
+
+CompleteInventory()
diff --git a/inventory.xml b/inventory.xml
new file mode 100644
index 0000000..65600a6
--- /dev/null
+++ b/inventory.xml
@@ -0,0 +1,198 @@
+<?xml version="1.0"?>
+<!-- This file is part of Tryton. The COPYRIGHT file at the top level of this repository contains the full copyright notices and license terms. -->
+<tryton>
+ <data>
+ <record model="ir.action.wizard" id="wizard_complete_inventory">
+ <field name="name">Complete Inventory</field>
+ <field name="wiz_name">stock.inventory.complete</field>
+ <field name="model">stock.inventory</field>
+ </record>
+
+ <record model="ir.ui.view" id="inventory_view_form">
+ <field name="model">stock.inventory</field>
+ <field name="type">form</field>
+ <field name="arch" type="xml">
+ <![CDATA[
+ <form string="Inventory" col="4">
+ <label name="location"/>
+ <field name="location"/>
+ <label name="lost_found"/>
+ <field name="lost_found"/>
+ <label name="date"/>
+ <field name="date"/>
+ <label name="company"/>
+ <field name="company"/>
+ <label colspan="2"/>
+ <button string="Complete Inventory" type="action"
+ name="%(wizard_complete_inventory)d"
+ states="{'readonly': '''state != 'draft' '''}"
+ colspan="2"
+ help="Add an inventory line for each missing products"/>
+ <field name="lines" colspan="4"/>
+ <group col="4" colspan="4">
+ <label name="state"/>
+ <field name="state"/>
+ <group colspan="2" col="3">
+ <button string="Cancel"
+ name="cancel"
+ states="{'invisible': '''state in ('cancel', 'done') ''', 'readonly': '''%(group_stock)d not in groups'''}"
+ icon="tryton-cancel" />
+ <button string="Confirm"
+ name="done"
+ states="{'invisible': '''state in ('done','cancel') ''', 'readonly': '''%(group_stock)d not in groups'''}"
+ icon="tryton-ok"/>
+ </group>
+ </group>
+ </form>
+ ]]>
+ </field>
+ </record>
+ <record model="ir.ui.view" id="inventory_view_tree">
+ <field name="model">stock.inventory</field>
+ <field name="type">tree</field>
+ <field name="arch" type="xml">
+ <![CDATA[
+ <tree string="Inventories">
+ <field name="location" select="1"/>
+ <field name="date" select="1"/>
+ <field name="state" select="1"/>
+ <field name="company" select="2"/>
+ </tree>
+ ]]>
+ </field>
+ </record>
+ <record model="ir.action.act_window" id="act_inventory_form">
+ <field name="name">Inventories</field>
+ <field name="res_model">stock.inventory</field>
+ <field name="view_type">form</field>
+ </record>
+ <record model="ir.action.act_window.view"
+ id="act_inventory_form_view1">
+ <field name="sequence" eval="1"/>
+ <field name="view" ref="inventory_view_tree"/>
+ <field name="act_window" ref="act_inventory_form"/>
+ </record>
+ <record model="ir.action.act_window.view"
+ id="act_inventory_form_view2">
+ <field name="sequence" eval="2"/>
+ <field name="view" ref="inventory_view_form"/>
+ <field name="act_window" ref="act_inventory_form"/>
+ </record>
+ <menuitem parent="menu_stock" sequence="50"
+ action="act_inventory_form" id="menu_inventory_form"/>
+
+ <record model="ir.ui.view" id="inventory_line_view_form">
+ <field name="model">stock.inventory.line</field>
+ <field name="type">form</field>
+ <field name="arch" type="xml">
+ <![CDATA[
+ <form string="Inventory Line" col="4">
+ <label name="product"/>
+ <field name="product"/>
+ <label name="uom"/>
+ <field name="uom"/>
+ <label name="expected_quantity"/>
+ <field name="expected_quantity"/>
+ <label name="quantity"/>
+ <field name="quantity"/>
+ <label name="move"/>
+ <field name="move"/>
+ <label name="inventory"/>
+ <field name="inventory"/>
+ <field name="unit_digits" invisible="1" colspan="4"/>
+ </form>
+ ]]>
+ </field>
+ </record>
+ <record model="ir.ui.view" id="inventory_line_view_tree">
+ <field name="model">stock.inventory.line</field>
+ <field name="type">tree</field>
+ <field name="arch" type="xml">
+ <![CDATA[
+ <tree string="Inventory Lines" editable="bottom">
+ <field name="product" select="1"/>
+ <field name="expected_quantity"/>
+ <field name="quantity" select="2"/>
+ <field name="uom" select="2"/>
+ <field name="unit_digits" tree_invisible="1"/>
+ </tree>
+ ]]>
+ </field>
+ </record>
+
+ <!-- Workflow inventory -->
+ <record model="workflow" id="wkf_inventory">
+ <field name="name">Inventory</field>
+ <field name="osv">stock.inventory</field>
+ <field name="on_create">True</field>
+ </record>
+ <record model="workflow.activity" id="inventory_act_draft">
+ <field name="workflow" ref="wkf_inventory"/>
+ <field name="flow_start">True</field>
+ <field name="kind">function</field>
+ <field name="action">set_state_draft()</field>
+ <field name="name">Draft</field>
+ </record>
+ <record model="workflow.activity" id="inventory_act_cancel">
+ <field name="workflow" ref="wkf_inventory"/>
+ <field name="flow_stop">True</field>
+ <field name="name">Cancel</field>
+ <field name="kind">function</field>
+ <field name="action">set_state_cancel()</field>
+ </record>
+ <record model="workflow.activity" id="inventory_act_done">
+ <field name="workflow" ref="wkf_inventory"/>
+ <field name="flow_stop">True</field>
+ <field name="name">Done</field>
+ <field name="kind">function</field>
+ <field name="action">set_state_done()</field>
+ </record>
+ <record model="workflow.transition"
+ id="inventory_trans_draft_cancel">
+ <field name="act_from" ref="inventory_act_draft"/>
+ <field name="act_to" ref="inventory_act_cancel"/>
+ <field name="group" ref="group_stock"/>
+ <field name="signal">cancel</field>
+ </record>
+ <record model="workflow.transition"
+ id="inventory_trans_draft_done">
+ <field name="act_from" ref="inventory_act_draft"/>
+ <field name="act_to" ref="inventory_act_done"/>
+ <field name="group" ref="group_stock"/>
+ <field name="signal">done</field>
+ </record>
+
+ <record model="ir.model.access" id="access_inventory">
+ <field name="model" search="[('model', '=', 'stock.inventory')]"/>
+ <field name="perm_read" eval="True"/>
+ <field name="perm_write" eval="False"/>
+ <field name="perm_create" eval="False"/>
+ <field name="perm_delete" eval="False"/>
+ </record>
+ <record model="ir.model.access" id="access_inventory_group_stock">
+ <field name="model" search="[('model', '=', 'stock.inventory')]"/>
+ <field name="group" ref="group_stock"/>
+ <field name="perm_read" eval="True"/>
+ <field name="perm_write" eval="True"/>
+ <field name="perm_create" eval="True"/>
+ <field name="perm_delete" eval="True"/>
+ </record>
+
+ <record model="ir.model.access" id="access_inventory_line">
+ <field name="model" search="[('model', '=', 'stock.inventory.line')]"/>
+ <field name="perm_read" eval="True"/>
+ <field name="perm_write" eval="False"/>
+ <field name="perm_create" eval="False"/>
+ <field name="perm_delete" eval="False"/>
+ </record>
+ <record model="ir.model.access" id="access_inventory_line_group_stock">
+ <field name="model" search="[('model', '=', 'stock.inventory.line')]"/>
+ <field name="group" ref="group_stock"/>
+ <field name="perm_read" eval="True"/>
+ <field name="perm_write" eval="True"/>
+ <field name="perm_create" eval="True"/>
+ <field name="perm_delete" eval="True"/>
+ </record>
+
+ </data>
+</tryton>
diff --git a/location.py b/location.py
new file mode 100644
index 0000000..446df6e
--- /dev/null
+++ b/location.py
@@ -0,0 +1,227 @@
+#This file is part of Tryton. The COPYRIGHT file at the top level
+#of this repository contains the full copyright notices and license terms.
+"Wharehouse"
+from trytond.osv import fields, OSV
+from trytond.wizard import Wizard, WizardOSV
+import datetime
+
+STATES = {
+ 'readonly': "not active",
+}
+
+
+class Location(OSV):
+ "Stock Location"
+ _name = 'stock.location'
+ _description = __doc__
+ name = fields.Char("Name", size=None, required=True, states=STATES,
+ translate=True)
+ code = fields.Char("Code", size=None, states=STATES, select=1)
+ active = fields.Boolean('Active', select=1)
+ address = fields.Many2One("party.address", "Address",
+ states={
+ 'invisible': "type != 'warehouse'",
+ 'readonly': "not active",
+ })
+ type = fields.Selection([
+ ('supplier', 'Supplier'),
+ ('customer', 'Customer'),
+ ('lost_found', 'Lost and Found'),
+ ('warehouse', 'Warehouse'),
+ ('storage', 'Storage'),
+ ('production', 'Production'),
+ ], 'Location type', states=STATES)
+ parent = fields.Many2One("stock.location", "Parent", select=1,
+ left="left", right="right")
+ left = fields.Integer('Left', required=True)
+ right = fields.Integer('Right', required=True)
+ childs = fields.One2Many("stock.location", "parent", "Childs")
+ input_location = fields.Many2One(
+ "stock.location", "Input", states={
+ 'invisible': "type != 'warehouse'",
+ 'readonly': "not active",
+ 'required': "type == 'warehouse'",
+ },
+ domain="[('type','=','storage'), ('parent', 'child_of', [active_id])]")
+ output_location = fields.Many2One(
+ "stock.location", "Output", states={
+ 'invisible': "type != 'warehouse'",
+ 'readonly': "not active",
+ 'required': "type == 'warehouse'",
+ },
+ domain="[('type','=','storage'), ('parent', 'child_of', [active_id])]")
+ storage_location = fields.Many2One(
+ "stock.location", "Storage", states={
+ 'invisible': "type != 'warehouse'",
+ 'readonly': "not active",
+ 'required': "type == 'warehouse'",
+ },
+ domain="[('type','=','storage'), ('parent', 'child_of', [active_id])]")
+ quantity = fields.Function('get_quantity', type='float', string='Quantity')
+ forecast_quantity = fields.Function('get_quantity', type='float',
+ string='Forecast Quantity')
+
+ def __init__(self):
+ super(Location, self).__init__()
+ self._order.insert(0, ('name', 'ASC'))
+ self._constraints += [
+ ('check_recursion', 'recursive_locations'),
+ ]
+ self._error_messages.update({
+ 'recursive_locations': 'You can not create recursive locations!',
+ })
+
+ def default_active(self, cursor, user, context=None):
+ return True
+
+ def default_left(self, cursor, user, context=None):
+ return 0
+
+ def default_right(self, cursor, user, context=None):
+ return 0
+
+ def default_type(self, cursor, user, context=None):
+ return 'storage'
+
+ def check_xml_record(self, cursor, user, ids, values, context=None):
+ return True
+
+ def name_search(self, cursor, user, name, args=None, operator='ilike',
+ context=None, limit=None):
+ if not args:
+ args=[]
+ ids = self.search(
+ cursor, user, [('code', '=', name)] + args, limit=limit,
+ context=context)
+ if not ids:
+ ids = self.search(
+ cursor, user, [('name', operator, name)] + args, limit=limit,
+ context=context)
+ result = self.name_get(cursor, user, ids, context)
+ return result
+
+ def get_quantity(self, cursor, user, ids, name, arg, context=None):
+ product_obj = self.pool.get('product.product')
+ date_obj = self.pool.get('ir.date')
+
+ if (not context) or (not context.get('product')):
+ return dict([(i,0) for i in ids])
+
+ if name == 'quantity' and \
+ context.get('stock_date_end') > \
+ date_obj.today(cursor, user, context=context):
+
+ context = context.copy()
+ context['stock_date_end'] = date_obj.today(
+ cursor, user, context=context)
+
+ if name == 'forecast_quantity':
+ context = context.copy()
+ context['forecast'] = True
+ if not context.get('stock_date_end'):
+ context['stock_date_end'] = datetime.date.max
+
+ pbl = product_obj.products_by_location(cursor, user, location_ids=ids,
+ product_ids=[context['product']], with_childs=True, skip_zero=False,
+ context=context).iteritems()
+
+ return dict( [(loc,qty) for (loc,prod), qty in pbl] )
+
+ def view_header_get(self, cursor, user, value, view_type='form',
+ context=None):
+ product_obj = self.pool.get('product.product')
+ uom_obj = self.pool.get('product.uom')
+ if context is None:
+ context = {}
+ if context.get('product'):
+ product_name = product_obj.name_get(cursor, user, context['product'],
+ context=context)[0][1]
+ product = product_obj.browse(cursor, user, context['product'],
+ context=context)
+ uom_name = uom_obj.name_get(cursor, user, product.default_uom.id,
+ context=context)[0][1]
+ return value + ': ' + product_name + ' (' + uom_name + ')'
+ return False
+
+Location()
+
+
+class Party(OSV):
+ _name = 'party.party'
+ supplier_location = fields.Property(type='many2one',
+ relation='stock.location', string='Supplier Location',
+ domain=[('type', '=', 'supplier')],
+ help='The default source location ' \
+ 'when receiving products from the party.')
+ customer_location = fields.Property(type='many2one',
+ relation='stock.location', string='Customer Location',
+ domain=[('type', '=', 'customer')],
+ help='The default destination location ' \
+ 'when sending products to the party.')
+
+Party()
+
+
+class ChooseStockDateInit(WizardOSV):
+ _name = 'stock.location_stock_date.init'
+ _description = "Compute stock quantities"
+ forecast_date = fields.Date(
+ 'At Date', help='Allow to compute expected '\
+ 'stock quantities for this date.\n'\
+ '* An empty value is an infinite date in the future.\n'\
+ '* A date in the past will provide historical values.')
+
+ def default_forecast_date(self, cursor, user, context=None):
+ date_obj = self.pool.get('ir.date')
+ return date_obj.today(cursor, user, context=context)
+
+ChooseStockDateInit()
+
+
+class OpenProduct(Wizard):
+ 'Open Products'
+ _name = 'stock.product.open'
+ states = {
+ 'init': {
+ 'result': {
+ 'type': 'form',
+ 'object': 'stock.location_stock_date.init',
+ 'state': [
+ ('end', 'Cancel', 'tryton-cancel'),
+ ('open', 'Open', 'tryton-ok', True),
+ ],
+ },
+ },
+ 'open': {
+ 'result': {
+ 'type': 'action',
+ 'action': '_action_open_product',
+ 'state': 'end',
+ },
+ },
+ }
+
+ def _action_open_product(self, cursor, user, data, context=None):
+ model_data_obj = self.pool.get('ir.model.data')
+ act_window_obj = self.pool.get('ir.action.act_window')
+
+ model_data_ids = model_data_obj.search(cursor, user, [
+ ('fs_id', '=', 'act_product_by_location'),
+ ('module', '=', 'stock'),
+ ('inherit', '=', False),
+ ], limit=1, context=context)
+ model_data = model_data_obj.browse(cursor, user, model_data_ids[0],
+ context=context)
+ res = act_window_obj.read(cursor, user, model_data.db_id, context=context)
+
+ if context == None: context = {}
+ context['locations'] = data['ids']
+ if data['form']['forecast_date']:
+ context['stock_date_end'] = data['form']['forecast_date']
+ else:
+ context['stock_date_end'] = datetime.date.max
+ res['context'] = str(context)
+
+ return res
+
+OpenProduct()
diff --git a/location.xml b/location.xml
new file mode 100644
index 0000000..9e7b31f
--- /dev/null
+++ b/location.xml
@@ -0,0 +1,224 @@
+<?xml version="1.0"?>
+<!-- This file is part of Tryton. The COPYRIGHT file at the top level of
+this repository contains the full copyright notices and license terms. -->
+<tryton>
+ <data>
+ <record model="ir.ui.view" id="location_view_form">
+ <field name="model">stock.location</field>
+ <field name="type">form</field>
+ <field name="arch" type="xml">
+ <![CDATA[
+ <form string="Location">
+ <label name="name"/>
+ <field name="name"/>
+ <label name="code"/>
+ <field name="code"/>
+ <label name="parent"/>
+ <field name="parent"/>
+ <label name="active"/>
+ <field name="active"/>
+ <label name="type"/>
+ <field name="type"/>
+ <newline/>
+ <label name="address"/>
+ <field name="address"/>
+ <newline/>
+ <label name="input_location"/>
+ <field name="input_location"/>
+ <newline/>
+ <label name="output_location"/>
+ <field name="output_location"/>
+ <newline/>
+ <label name="storage_location"/>
+ <field name="storage_location"/>
+ </form>
+ ]]>
+ </field>
+ </record>
+ <record model="ir.ui.view" id="location_view_tree">
+ <field name="model">stock.location</field>
+ <field name="type">tree</field>
+ <field name="field_childs">childs</field>
+ <field name="arch" type="xml">
+ <![CDATA[
+ <tree string="Locations">
+ <field name="name" select="1"/>
+ <field name="code" select="2"/>
+ <field name="type" select="1"/>
+ <field name="active" select="2" tree_invisible="1"/>
+ </tree>
+ ]]>
+ </field>
+ </record>
+
+ <record model="ir.action.act_window" id="act_location_tree">
+ <field name="name">Locations</field>
+ <field name="res_model">stock.location</field>
+ <field name="view_type">tree</field>
+ <field name="domain">[('parent', '=', False)]</field>
+ </record>
+ <record model="ir.action.act_window.view" id="act_location_tree_view">
+ <field name="sequence" eval="10"/>
+ <field name="view" ref="location_view_tree"/>
+ <field name="act_window" ref="act_location_tree"/>
+ </record>
+ <menuitem parent="menu_stock" sequence="10"
+ action="act_location_tree" id="menu_location_tree"/>
+
+ <record model="ir.action.act_window" id="act_location_form">
+ <field name="name">Edit Locations</field>
+ <field name="res_model">stock.location</field>
+ <field name="view_type">form</field>
+ </record>
+ <record model="ir.action.act_window.view" id="act_location_form_view1">
+ <field name="sequence" eval="1"/>
+ <field name="view" ref="location_view_tree"/>
+ <field name="act_window" ref="act_location_form"/>
+ </record>
+ <record model="ir.action.act_window.view" id="act_location_form_view2">
+ <field name="sequence" eval="2"/>
+ <field name="view" ref="location_view_form"/>
+ <field name="act_window" ref="act_location_form"/>
+ </record>
+ <menuitem parent="menu_configuration" sequence="1"
+ action="act_location_form" id="menu_location_form"/>
+
+ <record model="ir.action.act_window" id="act_product_by_location">
+ <field name="name">Products by Locations</field>
+ <field name="res_model">product.product</field>
+ <field name="view_type">form</field>
+ <field name="window_name" eval="False"/>
+ </record>
+ <record model="ir.action.wizard" id="wizard_product_open">
+ <field name="name">Product Quantities</field>
+ <field name="wiz_name">stock.product.open</field>
+ <field name="model">stock.location</field>
+ </record>
+ <record model="ir.action.keyword"
+ id="act_product_by_location_keyword1">
+ <field name="keyword">tree_open</field>
+ <field name="model">stock.location,0</field>
+ <field name="action" ref="wizard_product_open"/>
+ </record>
+ <record model="ir.action.act_window.view" id="act_product_form_view">
+ <field name="sequence" eval="20"/>
+ <field name="view" ref="product.product_view_form"/>
+ <field name="act_window" ref="act_product_by_location"/>
+ </record>
+ <record model="ir.action.act_window.view" id="act_product_form_view2">
+ <field name="sequence" eval="10"/>
+ <field name="view" ref="product_view_tree_qty"/>
+ <field name="act_window" ref="act_product_by_location"/>
+ </record>
+
+ <record model="ir.model.access" id="access_location">
+ <field name="model" search="[('model', '=', 'stock.location')]"/>
+ <field name="perm_read" eval="True"/>
+ <field name="perm_write" eval="False"/>
+ <field name="perm_create" eval="False"/>
+ <field name="perm_delete" eval="False"/>
+ </record>
+ <record model="ir.model.access" id="access_location_admin">
+ <field name="model" search="[('model', '=', 'stock.location')]"/>
+ <field name="group" ref="group_stock_admin"/>
+ <field name="perm_read" eval="True"/>
+ <field name="perm_write" eval="True"/>
+ <field name="perm_create" eval="True"/>
+ <field name="perm_delete" eval="True"/>
+ </record>
+
+ <!-- Default locations -->
+ <record model="stock.location" id="location_warehouse">
+ <field name="name">Warehouse</field>
+ </record>
+ <record model="stock.location" id="location_input">
+ <field name="name">Input Zone</field>
+ <field name="code">IN</field>
+ <field name="type">storage</field>
+ <field name="parent" ref="location_warehouse"/>
+ </record>
+ <record model="stock.location" id="location_output">
+ <field name="name">Output Zone</field>
+ <field name="code">OUT</field>
+ <field name="type">storage</field>
+ <field name="parent" ref="location_warehouse"/>
+ </record>
+ <record model="stock.location" id="location_storage">
+ <field name="name">Storage Zone</field>
+ <field name="code">STO</field>
+ <field name="type">storage</field>
+ <field name="parent" ref="location_warehouse"/>
+ </record>
+ <record model="stock.location" id="location_warehouse" update="1">
+ <field name="name">Warehouse</field>
+ <field name="code">WH</field>
+ <field name="type">warehouse</field>
+ <field name="input_location" ref="location_input"/>
+ <field name="output_location" ref="location_output"/>
+ <field name="storage_location" ref="location_storage"/>
+ </record>
+ <record model="stock.location" id="location_supplier">
+ <field name="name">Supplier</field>
+ <field name="code">SUP</field>
+ <field name="type">supplier</field>
+ </record>
+ <record model="stock.location" id="location_customer">
+ <field name="name">Customer</field>
+ <field name="code">CUS</field>
+ <field name="type">customer</field>
+ </record>
+ <record model="stock.location" id="location_lost_found">
+ <field name="name">Lost and Found</field>
+ <field name="type">lost_found</field>
+ </record>
+
+ <record model="ir.ui.view" id="party_view_form">
+ <field name="model">party.party</field>
+ <field name="inherit" ref="party.party_view_form"/>
+ <field name="arch" type="xml">
+ <![CDATA[
+ <data>
+ <xpath
+ expr="/form/notebook/page[@string="_Accounting"]"
+ position="after">
+ <page string="_Stock">
+ <label name="customer_location"/>
+ <field name="customer_location"/>
+ <label name="supplier_location"/>
+ <field name="supplier_location"/>
+ </page>
+ </xpath>
+ </data>
+ ]]>
+ </field>
+ </record>
+
+ <record model="ir.ui.view" id="location_stock_date_init_view_form">
+ <field name="model">stock.location_stock_date.init</field>
+ <field name="type">form</field>
+ <field name="arch" type="xml">
+ <![CDATA[
+ <form string="Product Quantity.">
+ <label name="forecast_date"/>
+ <field name="forecast_date"/>
+ </form>
+ ]]>
+ </field>
+ </record>
+
+ <record model="ir.property" id="property_supplier_location">
+ <field name="name">supplier_location</field>
+ <field name="field"
+ search="[('model.model', '=', 'party.party'),
+ ('name', '=', 'supplier_location')]"/>
+ <field name="value" eval="'stock.location,' + str(ref('location_supplier'))"/>
+ </record>
+ <record model="ir.property" id="property_customer_location">
+ <field name="name">customer_location</field>
+ <field name="field"
+ search="[('model.model', '=', 'party.party'),
+ ('name', '=', 'customer_location')]"/>
+ <field name="value" eval="'stock.location,' + str(ref('location_customer'))"/>
+ </record>
+ </data>
+</tryton>
diff --git a/move.py b/move.py
new file mode 100644
index 0000000..12071cf
--- /dev/null
+++ b/move.py
@@ -0,0 +1,406 @@
+#This file is part of Tryton. The COPYRIGHT file at the top level of
+#this repository contains the full copyright notices and license terms.
+"Move"
+from trytond.osv import fields, OSV
+from decimal import Decimal
+import datetime
+
+STATES = {
+ 'readonly': "(state in ('cancel', 'done'))",
+}
+
+
+class Move(OSV):
+ "Stock Move"
+ _name = 'stock.move'
+ _description = __doc__
+ product = fields.Many2One("product.product", "Product", required=True,
+ select=1, states=STATES,
+ on_change=['product', 'type', 'currency', 'uom', 'company'],
+ domain=[('type', '!=', 'service')])
+ uom = fields.Many2One("product.uom", "Uom", required=True, states=STATES,
+ domain="[('category', '=', " \
+ "(product, 'product.default_uom.category'))]",
+ context="{'category': (product, 'product.default_uom.category')}")
+ unit_digits = fields.Function('get_unit_digits', type='integer',
+ string='Unit Digits', on_change_with=['uom'])
+ quantity = fields.Float("Quantity", required=True,
+ digits="(16, unit_digits)", states=STATES)
+ from_location = fields.Many2One("stock.location", "From Location", select=1,
+ required=True, states=STATES,
+ domain=[('type', '!=', 'warehouse')],
+ on_change=['from_location', 'to_location'])
+ to_location = fields.Many2One("stock.location", "To Location", select=1,
+ required=True, states=STATES,
+ domain=[('type', '!=', 'warehouse')],
+ on_change=['from_location', 'to_location'])
+ packing_in = fields.Many2One('stock.packing.in', 'Supplier Packing',
+ readonly=True, select=1)
+ packing_out = fields.Many2One('stock.packing.out', 'Customer Packing',
+ readonly=True, select=1)
+ packing_internal = fields.Many2One('stock.packing.internal',
+ 'Internal Packing', readonly=True, select=1)
+ planned_date = fields.Date("Planned Date", states=STATES, select=2)
+ effective_date = fields.Date("Effective Date", readonly=True, select=2)
+ state = fields.Selection([
+ ('draft', 'Draft'),
+ ('assigned', 'Assigned'),
+ ('done', 'Done'),
+ ('cancel', 'Cancel'),
+ ], 'State', select=1, readonly=True)
+ company = fields.Many2One('company.company', 'Company', required=True,
+ states={
+ 'readonly': "state != 'draft'",
+ })
+ unit_price = fields.Numeric('Unit Price', digits=(16, 4),
+ states={
+ 'invisible': "type not in ('input', 'output')",
+ 'required': "type in ('input', 'output')",
+ 'readonly': "state not in ('draft',)",
+ })
+ currency = fields.Many2One('currency.currency', 'Currency',
+ states={
+ 'invisible': "type not in ('input', 'output')",
+ 'required': "type in ('input', 'output')",
+ 'readonly': "state not in ('draft',)",
+ })
+ type = fields.Function('get_type', type='selection',
+ selection=[
+ ('input', 'Input'),
+ ('output', 'Output'),
+ ('internal', 'Internal'),
+ ], string='Type')
+
+ def __init__(self):
+ super(Move, self).__init__()
+ self._sql_constraints += [
+ ('check_move_qty_pos',
+ 'CHECK(quantity >= 0.0)', 'Move quantity must be positive'),
+ ('check_from_to_locations',
+ 'CHECK(from_location != to_location)',
+ 'Source and destination location must be different'),
+ ('check_packing_in_out',
+ 'CHECK(NOT(packing_in IS NOT NULL ' \
+ 'AND packing_out IS NOT NULL))',
+ 'Move can not be in both Supplier and Customer Packing'),
+ ]
+ self._constraints += [
+ ('check_product_type', 'service_product'),
+ ]
+ self._order[0] = ('id', 'DESC')
+ self._error_messages.update({
+ 'set_state_draft': 'You can not set state to draft!',
+ 'set_state_assigned': 'You can not set state to assigned!',
+ 'set_state_done': 'You can not set state to done!',
+ 'del_draft_cancel': 'You can only delete draft or cancelled moves!',
+ 'service_product': 'You can not use service product for a move!',
+ })
+
+ def default_planned_date(self, cursor, user, context=None):
+ if context and context.get('planned_date'):
+ return context.get('planned_date')
+
+ def default_to_location(self, cursor, user, context=None):
+ if context and context.get('to_location'):
+ return context.get('to_location')
+ if context and context.get('warehouse') and context.get('type'):
+ wh_location = self.pool.get('stock.location').browse(
+ cursor, user, context['warehouse'], context=context)
+ field = {'inventory_in': 'storage_location',
+ 'inventory_out': 'output_location',
+ 'incoming': 'input_location',}.get(context['type'])
+ return field and wh_location[field].id or False
+
+ def default_from_location(self, cursor, user, context=None):
+ if context and context.get('from_location'):
+ return context.get('from_location')
+ if context and context.get('warehouse') and context.get('type'):
+ wh_location = self.pool.get('stock.location').browse(
+ cursor, user, context['warehouse'], context=context)
+ field = {'inventory_in': 'input_location',
+ 'inventory_out': 'storage_location',
+ 'outgoing': 'output_location',}.get(context['type'])
+ return field and wh_location[field].id or False
+
+ def default_state(self, cursor, user, context=None):
+ return 'draft'
+
+ def default_company(self, cursor, user, context=None):
+ company_obj = self.pool.get('company.company')
+ if context is None:
+ context = {}
+ if context.get('company'):
+ return company_obj.name_get(cursor, user, context['company'],
+ context=context)[0]
+ return False
+
+ def default_currency(self, cursor, user, context=None):
+ company_obj = self.pool.get('company.company')
+ currency_obj = self.pool.get('currency.currency')
+ if context is None:
+ context = {}
+ company = None
+ if context.get('company'):
+ company = company_obj.browse(cursor, user, context['company'],
+ context=context)
+ return currency_obj.name_get(cursor, user, company.currency.id,
+ context=context)[0]
+ return False
+
+ def name_search(self, cursor, user, name='', args=None, operator='ilike',
+ context=None, limit=None):
+ if not args:
+ args = []
+ query = ['AND', ('product', operator, name), args]
+ ids = self.search(cursor, user, query, limit=limit, context=context)
+ return self.name_get(cursor, user, ids, context)
+
+ def name_get(self, cursor, user, ids, context=None):
+ if isinstance(ids, (int, long)):
+ ids = [ids]
+ product_obj = self.pool.get('product.product')
+ moves = self.browse(cursor, user, ids, context=context)
+ pid2name = dict(product_obj.name_get(
+ cursor, user, [m.product.id for m in moves], context=context))
+ res = []
+ for m in moves:
+ res.append(
+ (m.id,
+ "%s%s %s" % (m.quantity, m.uom.symbol, pid2name[m.product.id]))
+ )
+ return res
+
+ def get_type(self, cursor, user, ids, name, args, context=None):
+ res = {}
+ for move in self.browse(cursor, user, ids, context=context):
+ res[move.id] = 'internal'
+ if move.from_location.type == 'supplier':
+ res[move.id] = 'input'
+ if move.to_location.type == 'customer':
+ res[move.id] = 'output'
+ return res
+
+ def on_change_with_unit_digits(self, cursor, user, ids, vals,
+ context=None):
+ uom_obj = self.pool.get('product.uom')
+ if vals.get('uom'):
+ uom = uom_obj.browse(cursor, user, vals['uom'],
+ context=context)
+ return uom.digits
+ return 2
+
+ def get_unit_digits(self, cursor, user, ids, name, arg, context=None):
+ res = {}
+ for move in self.browse(cursor, user, ids, context=context):
+ res[move.id] = move.uom.digits
+ return res
+
+ def on_change_product(self, cursor, user, ids, vals, context=None):
+ product_obj = self.pool.get('product.product')
+ uom_obj = self.pool.get('product.uom')
+ currency_obj = self.pool.get('currency.currency')
+ company_obj = self.pool.get('company.company')
+ if context is None:
+ context = {}
+ res = {'unit_price': Decimal('0.0')}
+ if vals.get('product'):
+ product = product_obj.browse(cursor, user, vals['product'],
+ context=context)
+ res['uom'] = uom_obj.name_get(cursor, user,
+ product.default_uom.id, context=context)[0]
+ res['unit_digits'] = product.default_uom.digits
+ if vals.get('type', 'internal') == 'input':
+ unit_price = product.cost_price
+ if vals.get('uom') and vals['uom'] != product.default_uom.id:
+ uom = uom_obj.browse(cursor, user, vals['uom'],
+ context=context)
+ unit_price = uom_obj.compute_price(cursor, user,
+ product.default_uom, unit_price, uom,
+ context=context)
+ if vals.get('currency') and vals.get('company'):
+ currency = currency_obj.browse(cursor, user,
+ vals['currency'], context=context)
+ company = company_obj.browse(cursor, user,
+ vals['company'], context=context)
+ unit_price = currency_obj.compute(cursor, user,
+ company.currency, unit_price, currency,
+ context=context)
+ res['unit_price'] = unit_price
+ return res
+
+ def _on_change_location(self, cursor, user, ids, vals, context=None):
+ location_obj = self.pool.get('stock.location')
+ res = {'type': 'internal'}
+ if vals.get('from_location'):
+ location = location_obj.browse(cursor, user, vals['from_location'],
+ context=context)
+ if location.type == 'supplier':
+ res['type'] = 'input'
+ if vals.get('to_location'):
+ location = location_obj.browse(cursor, user, vals['to_location'],
+ context=context)
+ if location.type == 'customer':
+ res['type'] = 'output'
+ return res
+
+ def check_product_type(self, cursor, user, ids):
+ for move in self.browse(cursor, user, ids):
+ if move.product.type == 'service':
+ return False
+ return True
+
+ def on_change_from_location(self, cursor, user, ids, vals, context=None):
+ return self._on_change_location(cursor, user, ids, vals,
+ context=context)
+
+ def on_change_to_location(self, cursor, user, ids, vals, context=None):
+ return self._on_change_location(cursor, user, ids, vals,
+ context=context)
+
+ def search(self, cursor, user, args, offset=0, limit=None, order=None,
+ context=None, count=False, query_string=False):
+ location_obj = self.pool.get('stock.location')
+
+ args = args[:]
+ def process_args(args):
+ i = 0
+ while i < len(args):
+ if isinstance(args[i], list):
+ process_args(args[i])
+ if isinstance(args[i], tuple) \
+ and args[i][0] == 'to_location_warehouse':
+ location_id = False
+ if args[i][2]:
+ location = location_obj.browse(cursor, user,
+ args[i][2], context=context)
+ if location.type == 'warehouse':
+ location_id = location.input_location.id
+ args[i] = ('to_location', args[i][1], location_id)
+ i += 1
+ process_args(args)
+ return super(Move, self).search(cursor, user, args, offset=offset,
+ limit=limit, order=order, context=context, count=count,
+ query_string=query_string)
+
+ def _update_product_cost_price(self, cursor, user, product_id, quantity, uom,
+ unit_price, currency, company, context=None):
+ """
+ Update the cost price on the given product
+
+ :param cursor: the database cursor
+ :param user: the user id
+ :param product_id: the id of the product
+ :param quantity: the quantity of the product, positive if incoming and
+ negative if outgoing
+ :param uom: the uom id or a BrowseRecord of the uom
+ :param unit_price: the unit price of the product
+ :param currency: the currency of the unit price
+ :param company: the company id ot a BrowseRecord of the company
+ :param context: the context
+ """
+ uom_obj = self.pool.get('product.uom')
+ product_obj = self.pool.get('product.product')
+ location_obj = self.pool.get('stock.location')
+ currency_obj = self.pool.get('currency.currency')
+ company_obj = self.pool.get('company.company')
+
+ if isinstance(uom, (int, long)):
+ uom = uom_obj.browse(cursor, user, uom, context=context)
+ if isinstance(company, (int, long)):
+ company = company_obj.browse(cursor, user, company, context=context)
+
+ ctx = context and context.copy() or {}
+ ctx['locations'] = location_obj.search(
+ cursor, user, [('type', '=', 'storage')], context=context)
+ ctx['stock_date_end'] = datetime.date.today()
+ product = product_obj.browse(cursor, user, product_id, context=ctx)
+ qty = uom_obj.compute_qty(
+ cursor, user, uom, quantity, product.default_uom, context=context)
+
+ qty = Decimal(str(qty))
+ product_qty = Decimal(str(product.template.quantity))
+ # convert wrt currency
+ unit_price = currency_obj.compute(
+ cursor, user, currency, unit_price, company.currency,
+ context=context)
+ # convert wrt to the uom
+ unit_price = uom_obj.compute_price(
+ cursor, user, uom, unit_price, product.default_uom, context=context)
+ if product_qty + qty != Decimal('0.0'):
+ new_cost_price = (
+ (product.cost_price * product_qty) + (unit_price * qty)
+ ) / (product_qty + qty)
+ else:
+ new_cost_price = product.cost_price
+ product_obj.write(
+ cursor, user, product.id, {'cost_price': new_cost_price},
+ context=context)
+
+ def create(self, cursor, user, vals, context=None):
+ location_obj = self.pool.get('stock.location')
+ product_obj = self.pool.get('product.product')
+
+ if vals.get('state') == 'done':
+ if not vals.get('effective_date'):
+ vals['effective_date'] = datetime.date.today()
+ from_location = location_obj.browse(cursor, user,
+ vals['from_location'], context=context)
+ product = product_obj.browse(cursor, user, vals['product'],
+ context=context)
+ if from_location.type == 'supplier' \
+ and product.cost_price_method == 'average':
+ self._update_product_cost_price(
+ cursor, user, vals['product'], vals['quantity'],
+ vals['uom'], vals['unit_price'], vals['currency'],
+ vals['company'], context=context)
+ return super(Move, self).create(cursor, user, vals, context=context)
+
+ def write(self, cursor, user, ids, vals, context=None):
+ if context is None:
+ context = {}
+
+ if isinstance(ids, (int, long)):
+ ids = [ids]
+
+ if 'state' in vals:
+ for move in self.browse(cursor, user, ids, context=context):
+ if vals['state'] == 'cancel':
+ vals['effective_date'] = False
+ if move.type == 'input' and move.state != 'cancel' \
+ and move.product.cost_price_method == 'average':
+ self._update_product_cost_price(
+ cursor, user, move.product.id, -move.quantity,
+ move.uom, move.unit_price, move.currency,
+ move.company, context=context)
+
+ elif vals['state'] == 'draft':
+ if move.state == 'done':
+ self.raise_user_error(cursor, 'set_state_draft',
+ context=context)
+ elif vals['state'] == 'assigned':
+ if move.state in ('cancel', 'done'):
+ self.raise_user_error(cursor, 'set_state_assigned',
+ context=context)
+ elif vals['state'] == 'done':
+ if move.state in ('cancel'):
+ self.raise_user_error(cursor, 'set_state_done',
+ context=context)
+ vals['effective_date'] = datetime.date.today()
+
+ if move.type == 'input' and move.state != 'done' \
+ and move.product.cost_price_method == 'average':
+ self._update_product_cost_price(
+ cursor, user, move.product.id, move.quantity,
+ move.uom, move.unit_price, move.currency,
+ move.company, context=context)
+
+ return super(Move, self).write(cursor, user, ids, vals, context=context)
+
+ def delete(self, cursor, user, ids, context=None):
+ for move in self.browse(cursor, user, ids, context=context):
+ if move.state not in ('draft', 'cancel'):
+ self.raise_user_error(cursor, 'del_draft_cancel',
+ context=context)
+ return super(Move, self).delete(cursor, user, ids, context=context)
+
+Move()
diff --git a/move.xml b/move.xml
new file mode 100644
index 0000000..670d50b
--- /dev/null
+++ b/move.xml
@@ -0,0 +1,167 @@
+<?xml version="1.0"?>
+<!-- This file is part of Tryton. The COPYRIGHT file at the top level of this repository contains the full copyright notices and license terms. -->
+<tryton>
+ <data>
+ <record model="ir.ui.view" id="move_view_form">
+ <field name="model">stock.move</field>
+ <field name="type">form</field>
+ <field name="arch" type="xml">
+ <![CDATA[
+ <form string="Move" col="4">
+ <label name="from_location"/>
+ <field name="from_location"/>
+ <label name="to_location"/>
+ <field name="to_location"/>
+ <label name="product"/>
+ <field name="product"/>
+ <label name="company"/>
+ <field name="company"/>
+ <label name="quantity"/>
+ <field name="quantity"/>
+ <label name="uom"/>
+ <field name="uom"/>
+ <label name="unit_price"/>
+ <field name="unit_price"/>
+ <label name="currency"/>
+ <field name="currency"/>
+ <label name="planned_date"/>
+ <field name="planned_date"/>
+ <label name="effective_date"/>
+ <field name="effective_date"/>
+ <separator colspan="4"/>
+ <label name="state"/>
+ <field name="state"/>
+ <field name="type" invisible="1" colspan="4"/>
+ <field name="unit_digits" invisible="1" colspan="4"/>
+ </form>
+ ]]>
+ </field>
+ </record>
+ <record model="ir.ui.view" id="move_view_tree">
+ <field name="model">stock.move</field>
+ <field name="type">tree</field>
+ <field name="arch" type="xml">
+ <![CDATA[
+ <tree string="Moves">
+ <field name="product" select="1"/>
+ <field name="from_location" select="1"/>
+ <field name="to_location" select="1"/>
+ <field name="quantity" select="2"/>
+ <field name="uom" select="2"/>
+ <field name="state" select="2"/>
+ <field name="unit_digits" tree_invisible="1"/>
+ </tree>
+ ]]>
+ </field>
+ </record>
+ <record model="ir.action.act_window" id="act_move_form">
+ <field name="name">Moves</field>
+ <field name="res_model">stock.move</field>
+ <field name="view_type">form</field>
+ </record>
+ <record model="ir.action.act_window.view" id="act_move_form_view1">
+ <field name="sequence" eval="1"/>
+ <field name="view" ref="move_view_tree"/>
+ <field name="act_window" ref="act_move_form"/>
+ </record>
+ <record model="ir.action.act_window.view" id="act_move_form_view2">
+ <field name="sequence" eval="2"/>
+ <field name="view" ref="move_view_form"/>
+ <field name="act_window" ref="act_move_form"/>
+ </record>
+ <menuitem parent="menu_stock" sequence="40"
+ action="act_move_form" id="menu_move_form"/>
+
+
+ <record model="ir.action.act_window" id="act_move_form_supp">
+ <field name="name">Moves from Suppliers</field>
+ <field name="res_model">stock.move</field>
+ <field name="view_type">form</field>
+ <field name="domain">[('from_location.type', '=', 'supplier')]</field>
+ </record>
+ <record model="ir.action.act_window.view" id="act_move_form_supp_view1">
+ <field name="sequence" eval="1"/>
+ <field name="view" ref="move_view_tree"/>
+ <field name="act_window" ref="act_move_form_supp"/>
+ </record>
+ <record model="ir.action.act_window.view"
+ id="act_move_form_supp_view2">
+ <field name="sequence" eval="2"/>
+ <field name="view" ref="move_view_form"/>
+ <field name="act_window" ref="act_move_form_supp"/>
+ </record>
+ <menuitem parent="menu_move_form" sequence="1"
+ action="act_move_form_supp" id="menu_move_form_supp"/>
+
+ <record model="ir.action.act_window" id="act_move_form_supp_proceed">
+ <field name="name">Moves from Suppliers Waiting Arrival</field>
+ <field name="res_model">stock.move</field>
+ <field name="view_type">form</field>
+ <field name="domain">[('from_location.type', '=', 'supplier'), ('state', '=', 'draft'), ('packing_in', '=', False)]</field>
+ </record>
+ <record model="ir.action.act_window.view"
+ id="act_move_form_supp_proceed_view1">
+ <field name="sequence" eval="1"/>
+ <field name="view" ref="move_view_tree"/>
+ <field name="act_window" ref="act_move_form_supp_proceed"/>
+ </record>
+ <record model="ir.action.act_window.view"
+ id="act_move_form_supp_proceed_view2">
+ <field name="sequence" eval="2"/>
+ <field name="view" ref="move_view_form"/>
+ <field name="act_window" ref="act_move_form_supp_proceed"/>
+ </record>
+ <menuitem parent="menu_move_form_supp" sequence="1"
+ action="act_move_form_supp_proceed"
+ id="menu_move_form_supp_proceed"/>
+
+ <record model="ir.action.act_window" id="act_move_form_cust">
+ <field name="name">Moves to Customers</field>
+ <field name="res_model">stock.move</field>
+ <field name="view_type">form</field>
+ <field name="domain">[('to_location.type', '=', 'customer')]</field>
+ </record>
+ <record model="ir.action.act_window.view"
+ id="act_move_form_cust_view1">
+ <field name="sequence" eval="1"/>
+ <field name="view" ref="move_view_tree"/>
+ <field name="act_window" ref="act_move_form_cust"/>
+ </record>
+ <record model="ir.action.act_window.view"
+ id="act_move_form_cust_view2">
+ <field name="sequence" eval="2"/>
+ <field name="view" ref="move_view_form"/>
+ <field name="act_window" ref="act_move_form_cust"/>
+ </record>
+ <menuitem parent="menu_move_form" sequence="3"
+ action="act_move_form_cust" id="menu_move_form_cust"/>
+
+ <record model="ir.rule.group" id="rule_group_move">
+ <field name="model" search="[('model', '=', 'stock.move')]"/>
+ <field name="global_p" eval="True"/>
+ </record>
+ <record model="ir.rule" id="rule_move">
+ <field name="field" search="[('name', '=', 'company'), ('model.model', '=', 'stock.move')]"/>
+ <field name="operator">=</field>
+ <field name="operand">User/Current Company</field>
+ <field name="rule_group" ref="rule_group_move"/>
+ </record>
+
+ <record model="ir.model.access" id="access_move">
+ <field name="model" search="[('model', '=', 'stock.move')]"/>
+ <field name="perm_read" eval="True"/>
+ <field name="perm_write" eval="False"/>
+ <field name="perm_create" eval="False"/>
+ <field name="perm_delete" eval="False"/>
+ </record>
+ <record model="ir.model.access" id="access_move_group_stock">
+ <field name="model" search="[('model', '=', 'stock.move')]"/>
+ <field name="group" ref="group_stock"/>
+ <field name="perm_read" eval="True"/>
+ <field name="perm_write" eval="True"/>
+ <field name="perm_create" eval="True"/>
+ <field name="perm_delete" eval="True"/>
+ </record>
+
+ </data>
+</tryton>
diff --git a/packing.py b/packing.py
new file mode 100644
index 0000000..fbcbb65
--- /dev/null
+++ b/packing.py
@@ -0,0 +1,814 @@
+#This file is part of Tryton. The COPYRIGHT file at the top level of
+#this repository contains the full copyright notices and license terms.
+"Packing"
+from trytond.osv import fields, OSV
+from trytond.netsvc import LocalService
+import datetime
+from trytond.report import CompanyReport
+
+STATES = {
+ 'readonly': "state in ('cancel', 'done')",
+}
+
+
+class PackingIn(OSV):
+ "Supplier Packing"
+ _name = 'stock.packing.in'
+ _description = __doc__
+ _rec_name = 'code'
+
+ effective_date = fields.Date('Effective Date', readonly=True)
+ planned_date = fields.Date(
+ 'Planned Date', states={'readonly': "state != 'draft'",})
+ reference = fields.Char(
+ "Reference", size=None, select=1,
+ states={'readonly': "state != 'draft'",})
+ supplier = fields.Many2One('party.party', 'Supplier',
+ states={
+ 'readonly': "state != 'draft' or bool(incoming_moves)",
+ }, on_change=['supplier'], required=True)
+ contact_address = fields.Many2One('party.address', 'Contact Address',
+ states={
+ 'readonly': "state != 'draft'",
+ }, domain="[('party', '=', supplier)]")
+ warehouse = fields.Many2One('stock.location', "Warehouse",
+ required=True, domain=[('type', '=', 'warehouse')],
+ states={
+ 'readonly': "state in ('cancel', 'done') or " \
+ "bool(incoming_moves)",
+ })
+ incoming_moves = fields.Function('get_incoming_moves', type='one2many',
+ relation='stock.move', string='Incoming Moves',
+ fnct_inv='set_incoming_moves', add_remove="[" \
+ "('packing_in', '=', False),"\
+ "('from_location.type', '=', 'supplier'),"\
+ "('state', '=', 'draft'),"\
+ "('to_location_warehouse', '=', warehouse),"\
+ "]",
+ states={
+ 'readonly': "state in ('received', 'done', 'cancel')",
+ }, context="{'warehouse': warehouse, 'type': 'incoming'}")
+ inventory_moves = fields.Function('get_inventory_moves', type='one2many',
+ relation='stock.move', string='Inventory Moves',
+ fnct_inv='set_inventory_moves',
+ states={
+ 'readonly': "state in ('draft', 'done', 'cancel')",
+ }, context="{'warehouse': warehouse, 'type': 'inventory_in'}")
+ moves = fields.One2Many('stock.move', 'packing_in', 'Moves',
+ readonly=True)
+ code = fields.Char("Code", size=None, select=1, readonly=True)
+ state = fields.Selection([
+ ('draft', 'Draft'),
+ ('done', 'Done'),
+ ('cancel', 'Cancel'),
+ ('received', 'Received'),
+ ], 'State', readonly=True)
+
+ def __init__(self):
+ super(PackingIn, self).__init__()
+ self._rpc_allowed += [
+ 'button_draft',
+ ]
+ self._order[0] = ('id', 'DESC')
+ self._error_messages.update({
+ 'incoming_move_input_dest': 'Incoming Moves must ' \
+ 'have input location as destination location!',
+ 'inventory_move_input_source': 'Inventory Moves must ' \
+ 'have input location as source location!',
+ 'outgoing_move_output_source': 'Outgoing Moves must ' \
+ 'have output location as source location!',
+ 'inventory_move_output_dest': 'Inventory Moves must ' \
+ 'have output location as destination location!',
+ })
+
+ def default_state(self, cursor, user, context=None):
+ return 'draft'
+
+ def default_warehouse(self, cursor, user, context=None):
+ location_obj = self.pool.get('stock.location')
+ location_ids = location_obj.search(cursor, user,
+ self.warehouse._domain, context=context)
+ if len(location_ids) == 1:
+ return location_obj.name_get(cursor, user, location_ids,
+ context=context)[0]
+ return False
+
+ def on_change_supplier(self, cursor, user, ids, values, context=None):
+ if not values.get('supplier'):
+ return {}
+ party_obj = self.pool.get("party.party")
+ address_id = party_obj.address_get(cursor, user, values['supplier'],
+ context=context)
+ return {'contact_address': address_id}
+
+ def get_incoming_moves(self, cursor, user, ids, name, arg, context=None):
+ res = {}
+ for packing in self.browse(cursor, user, ids, context=context):
+ res[packing.id] = []
+ for move in packing.moves:
+ if move.to_location.id == packing.warehouse.input_location.id:
+ res[packing.id].append(move.id)
+ return res
+
+ def set_incoming_moves(self, cursor, user, packing_id, name, value, arg,
+ context=None):
+ move_obj = self.pool.get('stock.move')
+ packing = self.browse(cursor, user, packing_id, context=context)
+ for act in value:
+ if act[0] == 'create':
+ if 'to_location' in act[1]:
+ if act[1]['to_location'] != \
+ packing.warehouse.input_location.id:
+ self.raise_user_error(cursor,
+ 'incoming_move_input_dest', context=context)
+ elif act[0] == 'write':
+ if 'to_location' in act[2]:
+ if act[2]['to_location'] != \
+ packing.warehouse.input_location.id:
+ self.raise_user_error(cursor,
+ 'incoming_move_input_dest', context=context)
+ elif act[0] == 'add':
+ move = move_obj.browse(cursor, user, act[1], context=context)
+ if move.to_location.id != \
+ packing.warehouse.input_location.id:
+ self.raise_user_error(cursor,
+ 'incoming_move_input_dest', context=context)
+ elif act[0] == 'set':
+ moves = move_obj.browse(cursor, user, act[1], context=context)
+ for move in moves:
+ if move.to_location.id != \
+ packing.warehouse.input_location.id:
+ self.raise_user_error(cursor,
+ 'incoming_move_input_dest', context=context)
+ self.write(cursor, user, packing_id, {
+ 'moves': value,
+ }, context=context)
+
+ def get_inventory_moves(self, cursor, user, ids, name, arg, context=None):
+ res = {}
+ for packing in self.browse(cursor, user, ids, context=context):
+ res[packing.id] = []
+ for move in packing.moves:
+ if move.from_location.id == packing.warehouse.input_location.id:
+ res[packing.id].append(move.id)
+ return res
+
+ def set_inventory_moves(self, cursor, user, packing_id, name, value, arg,
+ context=None):
+ move_obj = self.pool.get('stock.move')
+ packing = self.browse(cursor, user, packing_id, context=context)
+ for act in value:
+ if act[0] == 'create':
+ if 'from_location' in act[1]:
+ if act[1]['from_location'] != \
+ packing.warehouse.input_location.id:
+ self.raise_user_error(cursor,
+ 'inventory_move_input_source', context=context)
+ elif act[0] == 'write':
+ if 'from_location' in act[2]:
+ if act[2]['from_location'] != \
+ packing.warehouse.input_location.id:
+ self.raise_user_error(cursor,
+ 'inventory_move_input_source', context=context)
+ elif act[0] == 'add':
+ move = move_obj.browse(cursor, user, act[1], context=context)
+ if move.from_location.id != \
+ packing.warehouse.input_location.id:
+ self.raise_user_error(cursor,
+ 'inventory_move_input_source', context=context)
+ elif act[0] == 'set':
+ moves = move_obj.browse(cursor, user, act[1], context=context)
+ for move in moves:
+ if move.from_location.id != \
+ packing.warehouse.input_location.id:
+ self.raise_user_error(cursor,
+ 'inventory_move_input_source', context=context)
+ self.write(cursor, user, packing_id, {
+ 'moves': value,
+ }, context=context)
+
+ def set_state_done(self, cursor, user, packing_id, context=None):
+ move_obj = self.pool.get('stock.move')
+ packing = self.browse(cursor, user, packing_id, context=context)
+ move_obj.write(
+ cursor, user, [m.id for m in packing.inventory_moves],
+ {'state': 'done'}, context)
+ self.write(cursor, user, packing_id,{
+ 'state': 'done',
+ 'effective_date': datetime.date.today(),
+ }, context=context)
+
+ def set_state_cancel(self, cursor, user, packing_id, context=None):
+ move_obj = self.pool.get('stock.move')
+ packing = self.browse(cursor, user, packing_id, context=context)
+ move_obj.write(
+ cursor, user, [m.id for m in packing.incoming_moves] +\
+ [m.id for m in packing.inventory_moves], {'state': 'cancel'},
+ context)
+ self.write(cursor, user, packing_id, {'state': 'cancel'},
+ context=context)
+
+ def set_state_received(self, cursor, user, packing_id, context=None):
+ move_obj = self.pool.get('stock.move')
+ packing = self.browse(cursor, user, packing_id, context=context)
+ move_obj.write(
+ cursor, user, [m.id for m in packing.incoming_moves],
+ {'state': 'done'}, context=context)
+ self.write(cursor, user, packing_id, {
+ 'state': 'received'
+ }, context=context)
+
+ def set_state_draft(self, cursor, user, packing_id, context=None):
+ move_obj = self.pool.get('stock.move')
+ packing = self.browse(cursor, user, packing_id, context=context)
+ move_obj.write(cursor, user, [m.id for m in packing.incoming_moves
+ if m.state != 'draft'], {
+ 'state': 'draft',
+ }, context=context)
+ move_obj.delete(cursor, user,
+ [m.id for m in packing.inventory_moves], context=context)
+ self.write(cursor, user, packing_id, {
+ 'state': 'draft',
+ }, context=context)
+
+ def create(self, cursor, user, values, context=None):
+ values = values.copy()
+ values['code'] = self.pool.get('ir.sequence').get(
+ cursor, user, 'stock.packing.in')
+ return super(PackingIn, self).create(
+ cursor, user, values, context=context)
+
+ def copy(self, cursor, user, packing_id, default=None, context=None):
+ if default is None:
+ default = {}
+ default = default.copy()
+ default['inventory_moves']= False
+ default['incoming_moves']= False
+ return super(PackingIn, self).copy(cursor, user, packing_id,
+ default=default, context=context)
+
+ def _get_inventory_moves(self, cursor, user, incoming_move, context=None):
+ res = {}
+ if incoming_move.quantity <= 0.0:
+ return None
+ res['product'] = incoming_move.product.id
+ res['uom'] = incoming_move.uom.id
+ res['quantity'] = incoming_move.quantity
+ res['from_location'] = incoming_move.to_location.id
+ res['to_location'] = incoming_move.packing_in.warehouse.\
+ storage_location.id
+ res['state'] = 'draft'
+ res['company'] = incoming_move.company.id
+ return res
+
+ def create_inventory_moves(self, cursor, user, packing_id, context=None):
+ packing = self.browse(cursor, user, packing_id, context=context)
+ for incoming_move in packing.incoming_moves:
+ vals = self._get_inventory_moves(cursor, user, incoming_move,
+ context=context)
+ if vals:
+ self.write(cursor, user, packing.id, {
+ 'inventory_moves': [('create', vals)]
+ }, context=context)
+
+ def button_draft(self, cursor, user, ids, context=None):
+ workflow_service = LocalService('workflow')
+ for packing in self.browse(cursor, user, ids, context=context):
+ workflow_service.trg_create(user, self._name, packing.id, cursor,
+ context=context)
+ return True
+
+PackingIn()
+
+
+class PackingOut(OSV):
+ "Customer Packing"
+ _name = 'stock.packing.out'
+ _description = __doc__
+ _rec_name = 'code'
+
+ effective_date =fields.Date('Effective Date', readonly=True)
+ planned_date = fields.Date('Planned Date',
+ states={
+ 'readonly': "state != 'draft'",
+ })
+ customer = fields.Many2One('party.party', 'Customer', required=True,
+ states={
+ 'readonly': "state != 'draft'",
+ }, on_change=['customer'])
+ delivery_address = fields.Many2One('party.address',
+ 'Delivery Address', required=True,
+ states={
+ 'readonly': "state != 'draft'",
+ }, domain="[('party', '=', customer)]")
+ reference = fields.Char("Reference", size=None, select=1,
+ states={
+ 'readonly': "state != 'draft'",
+ })
+ warehouse = fields.Many2One('stock.location', "Warehouse", required=True,
+ states={
+ 'readonly': "state != 'draft'",
+ }, domain="[('type', '=', 'warehouse')]")
+ customer_location = fields.Many2One('stock.location', "Customer Location",
+ required=True, states={
+ 'readonly': "state != 'draft'",
+ }, domain="[('type', '=', 'customer')]")
+ outgoing_moves = fields.Function('get_outgoing_moves', type='one2many',
+ relation='stock.move', string='Outgoing Moves',
+ fnct_inv='set_outgoing_moves',
+ states={
+ 'readonly':"state != 'packed'",
+ }, context="{'warehouse': warehouse, 'type': 'outgoing',}")
+ inventory_moves = fields.Function('get_inventory_moves', type='one2many',
+ relation='stock.move', string='Inventory Moves',
+ fnct_inv='set_inventory_moves',
+ states={
+ 'readonly':"state in ('packed', 'done')",
+ }, context="{'warehouse': warehouse, 'type': 'inventory_out',}")
+ moves = fields.One2Many('stock.move', 'packing_out', 'Moves',
+ readonly=True)
+ code = fields.Char("Code", size=None, select=1, readonly=True)
+ state = fields.Selection([
+ ('draft', 'Draft'),
+ ('done', 'Done'),
+ ('cancel', 'Cancel'),
+ ('assigned', 'Assigned'),
+ ('packed', 'Packed'),
+ ('waiting', 'Waiting'),
+ ], 'State', readonly=True)
+
+ def __init__(self):
+ super(PackingOut, self).__init__()
+ self._rpc_allowed += [
+ 'button_draft',
+ ]
+ self._order[0] = ('id', 'DESC')
+
+ def default_state(self, cursor, user, context=None):
+ return 'draft'
+
+ def default_warehouse(self, cursor, user, context=None):
+ location_obj = self.pool.get('stock.location')
+ location_ids = location_obj.search(cursor, user,
+ self.warehouse._domain, context=context)
+ if len(location_ids) == 1:
+ return location_obj.name_get(cursor, user, location_ids,
+ context=context)[0]
+ return False
+
+ def on_change_customer(self, cursor, user, ids, values, context=None):
+ if not values.get('customer'):
+ return {}
+ party_obj = self.pool.get("party.party")
+ address_id = party_obj.address_get(cursor, user, values['customer'],
+ type='delivery', context=context)
+ party = party_obj.browse(cursor, user, values['customer'], context=context)
+ return {
+ 'delivery_address': address_id,
+ 'customer_location': party.customer_location.id,
+ }
+
+ def get_outgoing_moves(self, cursor, user, ids, name, arg, context=None):
+ res = {}
+ for packing in self.browse(cursor, user, ids, context=context):
+ res[packing.id] = []
+ for move in packing.moves:
+ if move.from_location.id == \
+ packing.warehouse.output_location.id:
+ res[packing.id].append(move.id)
+ return res
+
+ def set_outgoing_moves(self, cursor, user, packing_id, name, value, arg,
+ context=None):
+ move_obj = self.pool.get('stock.move')
+ packing = self.browse(cursor, user, packing_id, context=context)
+ for act in value:
+ if act[0] == 'create':
+ if 'from_location' in act[1]:
+ if act[1]['from_location'] != \
+ packing.warehouse.output_location.id:
+ self.raise_user_error(cursor,
+ 'outgoing_move_output_source', context=context)
+ elif act[0] == 'write':
+ if 'from_location' in act[2]:
+ if act[2]['from_location'] != \
+ packing.warehouse.output_location.id:
+ self.raise_user_error(cursor,
+ 'outgoing_move_output_source', context=context)
+ elif act[0] == 'add':
+ move = move_obj.browse(cursor, user, act[1], context=context)
+ if move.from_location.id != \
+ packing.warehouse.output_location.id:
+ self.raise_user_error(cursor,
+ 'outgoing_move_output_source', context=context)
+ elif act[0] == 'set':
+ moves = move_obj.browse(cursor, user, act[1], context=context)
+ for move in moves:
+ if move.from_location.id != \
+ packing.warehouse.output_location.id:
+ self.raise_user_error(cursor,
+ 'outgoing_move_output_source', context=context)
+ self.write(cursor, user, packing_id, {
+ 'moves': value,
+ }, context=context)
+
+ def get_inventory_moves(self, cursor, user, ids, name, arg, context=None):
+ res = {}
+ for packing in self.browse(cursor, user, ids, context=context):
+ res[packing.id] = []
+ for move in packing.moves:
+ if move.to_location.id == \
+ packing.warehouse.output_location.id:
+ res[packing.id].append(move.id)
+ return res
+
+ def set_inventory_moves(self, cursor, user, packing_id, name, value, arg,
+ context=None):
+ move_obj = self.pool.get('stock.move')
+ packing = self.browse(cursor, user, packing_id, context=context)
+ for act in value:
+ if act[0] == 'create':
+ if 'to_location' in act[1]:
+ if act[1]['to_location'] != \
+ packing.warehouse.output_location.id:
+ self.raise_user_error(cursor,
+ 'inventory_move_output_dest', context=context)
+ elif act[0] == 'write':
+ if 'to_location' in act[2]:
+ if act[2]['to_location'] != \
+ packing.warehouse.output_location.id:
+ self.raise_user_error(cursor,
+ 'inventory_move_output_dest', context=context)
+ elif act[0] == 'add':
+ move = move_obj.browse(cursor, user, act[1], context=context)
+ if move.to_location.id != \
+ packing.warehouse.output_location.id:
+ self.raise_user_error(cursor,
+ 'inventory_move_output_dest', context=context)
+ elif act[0] == 'set':
+ moves = move_obj.browse(cursor, user, act[1], context=context)
+ for move in moves:
+ if move.to_location.id != \
+ packing.warehouse.output_location.id:
+ self.raise_user_error(cursor,
+ 'inventory_move_output_dest', context=context)
+ self.write(cursor, user, packing_id, {
+ 'moves': value,
+ }, context=context)
+
+ def set_state_assigned(self, cursor, user, packing_id, context=None):
+ self.write(cursor, user, packing_id, {'state': 'assigned'},
+ context=context)
+
+ def set_state_draft(self, cursor, user, packing_id, context=None):
+ move_obj = self.pool.get('stock.move')
+ packing = self.browse(cursor, user, packing_id, context=context)
+ self.write(
+ cursor, user, packing_id, {'state': 'draft'}, context=context)
+ move_obj.write(
+ cursor, user,
+ [m.id for m in packing.inventory_moves + packing.outgoing_moves],
+ {'state': 'draft'}, context=context)
+
+ def set_state_done(self, cursor, user, packing_id, context=None):
+ move_obj = self.pool.get('stock.move')
+ packing = self.browse(cursor, user, packing_id, context=context)
+ move_obj.write(cursor, user,
+ [m.id for m in packing.outgoing_moves if m.state == 'draft'],
+ {'state': 'done'}, context=context)
+ self.write(cursor, user, packing_id, {
+ 'state': 'done',
+ 'effective_date': datetime.date.today(),
+ }, context=context)
+
+ def set_state_packed(self, cursor, user, packing_id, context=None):
+ move_obj = self.pool.get('stock.move')
+ uom_obj = self.pool.get('product.uom')
+ packing = self.browse(cursor, user, packing_id, context=context)
+ move_obj.write(
+ cursor, user, [m.id for m in packing.inventory_moves],
+ {'state': 'done'}, context=context)
+ self.write(cursor, user, packing_id, {'state': 'packed'},
+ context=context)
+ # Sum all outgoing quantities
+ outgoing_qty = {}
+ for move in packing.outgoing_moves:
+ if move.state == 'cancel': continue
+ quantity = uom_obj.compute_qty(
+ cursor, user, move.uom, move.quantity, move.product.default_uom,
+ context=context)
+ outgoing_qty.setdefault(move.product.id, 0.0)
+ outgoing_qty[move.product.id] += quantity
+
+ for move in packing.inventory_moves:
+ if move.state == 'cancel': continue
+ qty_default_uom = uom_obj.compute_qty(
+ cursor, user, move.uom, move.quantity, move.product.default_uom,
+ context=context)
+ # Check if the outgoing move doesn't exist already
+ if outgoing_qty.get(move.product.id):
+ # If it exist, decrease the sum
+ if qty_default_uom <= outgoing_qty[move.product.id]:
+ outgoing_qty[move.product.id] -= qty_default_uom
+ continue
+ # Else create the complement
+ else:
+ out_quantity = qty_default_uom - outgoing_qty[move.product.id]
+ out_quantity = uom_obj.compute_qty(
+ cursor, user, move.product.default_uom, out_quantity,
+ move.uom, context=context)
+ outgoing_qty[move.product.id] = 0.0
+ else:
+ out_quantity = move.quantity
+
+ unit_price = uom_obj.compute_price(
+ cursor, user, move.product.default_uom, move.product.list_price,
+ move.uom, context=context)
+ move_obj.create(cursor, user, {
+ 'from_location': move.to_location.id,
+ 'to_location': packing.customer_location.id,
+ 'product': move.product.id,
+ 'uom': move.uom.id,
+ 'quantity': out_quantity,
+ 'packing_out': packing.id,
+ 'state': 'draft',
+ 'company': move.company.id,
+ 'currency': move.company.currency.id,
+ 'unit_price': unit_price,
+ }, context=context)
+
+ #Re-read the packing and remove exceeding quantities
+ packing = self.browse(cursor, user, packing_id, context=context)
+ for move in packing.outgoing_moves:
+ if move.state == 'cancel': continue
+ if outgoing_qty.get(move.product.id, 0.0) > 0.0:
+ exc_qty = uom_obj.compute_qty(
+ cursor, user, move.product.default_uom,
+ outgoing_qty[move.product.id], move.uom, context=context)
+ move_obj.write(cursor, user, move.id,{
+ 'quantity': max(0.0, move.quantity-exc_qty),
+ }, context=context)
+ removed_qty = uom_obj.compute_qty(
+ cursor, user, move.uom, min(exc_qty, move.quantity),
+ move.product.default_uom, context=context)
+ outgoing_qty[move.product.id] -= removed_qty
+
+
+ def set_state_cancel(self, cursor, user, packing_id, context=None):
+ move_obj = self.pool.get('stock.move')
+ packing = self.browse(cursor, user, packing_id, context=context)
+ move_obj.write(
+ cursor, user,[m.id for m in packing.outgoing_moves] +\
+ [m.id for m in packing.inventory_moves],
+ {'state': 'cancel'}, context=context)
+ self.write(cursor, user, packing_id, {'state': 'cancel'},
+ context=context)
+
+ def set_state_waiting(self, cursor, user, packing_id, context=None):
+ """
+ Complete inventory moves to match the products and quantities
+ that are in the outgoing moves.
+ """
+ move_obj = self.pool.get('stock.move')
+ uom_obj = self.pool.get('product.uom')
+ packing = self.browse(cursor, user, packing_id, context=context)
+ self.write(
+ cursor, user, packing_id, {'state': 'waiting'}, context=context)
+
+ # Sum all inventory quantities
+ inventory_qty = {}
+ for move in packing.inventory_moves:
+ if move.state == 'cancel': continue
+ quantity = uom_obj.compute_qty(
+ cursor, user, move.uom, move.quantity, move.product.default_uom,
+ context=context)
+ inventory_qty.setdefault(move.product.id, 0.0)
+ inventory_qty[move.product.id] += quantity
+
+ for move in packing.outgoing_moves:
+ if move.state in ('cancel', 'done'): continue
+ qty_default_uom = uom_obj.compute_qty(
+ cursor, user, move.uom, move.quantity, move.product.default_uom,
+ context=context)
+ # Check if the inventory move doesn't exist already
+ if inventory_qty.get(move.product.id):
+ # If it exist, decrease the sum
+ if qty_default_uom <= inventory_qty[move.product.id]:
+ inventory_qty[move.product.id] -= qty_default_uom
+ continue
+ # Else create the complement
+ else:
+ inv_quantity = qty_default_uom - inventory_qty[move.product.id]
+ inv_quantity = uom_obj.compute_qty(
+ cursor, user, move.product.default_uom, inv_quantity,
+ move.uom, context=context)
+ inventory_qty[move.product.id] = 0.0
+ else:
+ inv_quantity = move.quantity
+
+ move_obj.create(cursor, user, {
+ 'from_location': move.packing_out.warehouse.storage_location.id,
+ 'to_location': move.from_location.id,
+ 'product': move.product.id,
+ 'uom': move.uom.id,
+ 'quantity': inv_quantity,
+ 'packing_out': packing.id,
+ 'state': 'draft',
+ 'company': move.company.id,
+ }, context=context)
+
+ def create(self, cursor, user, values, context=None):
+ values['code'] = self.pool.get('ir.sequence').get(
+ cursor, user, 'stock.packing.out')
+ return super(PackingOut, self).create(cursor, user, values,
+ context=context)
+ def copy(self, cursor, user, packing_id, default=None, context=None):
+ if default is None:
+ default = {}
+ default = default.copy()
+ default['inventory_moves']= False
+ default['outgoing_moves']= False
+ return super(PackingOut, self).copy(cursor, user, packing_id,
+ default=default, context=context)
+
+
+ def _location_amount(self, cursor, user, target_uom,
+ qty_uom, uom_index, context=None):
+ """
+ Take a raw list of quantities and uom and convert it to
+ the target uom.
+ """
+ uom_obj = self.pool.get('product.uom')
+ res = 0
+ for uom, qty in qty_uom:
+ res += uom_obj.compute_qty(
+ cursor, user, uom_index[uom], qty, uom_index[target_uom],
+ context=context)
+ return res
+
+ def assign_try(self, cursor, user, packing_id, context=None):
+ product_obj = self.pool.get('product.product')
+ packing = self.browse(cursor, user, packing_id, context=context)
+ return product_obj.assign_try(
+ cursor, user, packing.inventory_moves, context=context)
+
+ def assign_force(self, cursor, user, packing_id, context=None):
+ packing = self.browse(cursor, user, packing_id, context=context)
+ move_obj = self.pool.get('stock.move')
+ move_obj.write(
+ cursor, user, [m.id for m in packing.inventory_moves],
+ {'state': 'assigned'})
+ return True
+
+ def button_draft(self, cursor, user, ids, context=None):
+ workflow_service = LocalService('workflow')
+ for packing in self.browse(cursor, user, ids, context=context):
+ workflow_service.trg_create(user, self._name, packing.id, cursor,
+ context=context)
+
+PackingOut()
+
+
+class PackingInternal(OSV):
+ "Internal Packing"
+ _name = 'stock.packing.internal'
+ _description = __doc__
+ _rec_name = 'code'
+
+ effective_date =fields.Date('Effective Date', readonly=True)
+ planned_date = fields.Date(
+ 'Planned Date', states={'readonly': "state != 'draft'",})
+ code = fields.Char("Code", size=None, select=1, readonly=True)
+ reference = fields.Char(
+ "Reference", size=None, select=1,
+ states={'readonly': "state != 'draft'",})
+ from_location = fields.Many2One(
+ 'stock.location', "From Location", required=True,
+ states={ 'readonly': "state != 'draft' or bool(moves)", },
+ domain="[('type', '=', 'storage')]", )
+ to_location = fields.Many2One('stock.location', "To Location",
+ required=True, states={
+ 'readonly': "state != 'draft' or bool(moves)",
+ }, domain="[('type', '=', 'storage')]")
+ moves = fields.One2Many(
+ 'stock.move', 'packing_internal', 'Moves',
+ states={'readonly': "state != 'draft' or "\
+ "not(bool(from_location) and bool (to_location))"},
+ context="{'from_location': from_location,"
+ "'to_location': to_location,"
+ "'planned_date': planned_date}",
+ )
+ state = fields.Selection([
+ ('draft', 'Draft'),
+ ('cancel', 'Cancel'),
+ ('assigned', 'Assigned'),
+ ('waiting', 'Waiting'),
+ ('done', 'Done'),
+ ], 'State', readonly=True)
+
+ def default_state(self, cursor, user, context=None):
+ return 'draft'
+
+ def button_draft(self, cursor, user, ids, context=None):
+ workflow_service = LocalService('workflow')
+ for packing in self.browse(cursor, user, ids, context=context):
+ workflow_service.trg_create(user, self._name, packing.id, cursor,
+ context=context)
+ return True
+
+ def __init__(self):
+ super(PackingInternal, self).__init__()
+ self._rpc_allowed += [
+ 'button_draft',
+ ]
+ self._order[0] = ('id', 'DESC')
+
+ def set_state_draft(self, cursor, user, packing_id, context=None):
+ move_obj = self.pool.get('stock.move')
+ packing = self.browse(cursor, user, packing_id, context=context)
+ self.write(
+ cursor, user, packing_id, {'state': 'draft'}, context=context)
+ move_obj.write(
+ cursor, user, [m.id for m in packing.moves], {'state': 'draft'},
+ context=context)
+
+ def set_state_waiting(self, cursor, user, packing_id, context=None):
+ move_obj = self.pool.get('stock.move')
+ packing = self.browse(cursor, user, packing_id, context=context)
+ move_obj.write(
+ cursor, user, [m.id for m in packing.moves], {'state': 'draft'},
+ context=context)
+ move_obj.write(
+ cursor, user, [m.id for m in packing.moves],
+ {'planned_date': packing.planned_date}, context=context)
+ self.write(
+ cursor, user, packing_id, {'state': 'waiting'}, context=context)
+
+ def set_state_assigned(self, cursor, user, packing_id, context=None):
+ self.write(
+ cursor, user, packing_id, {'state': 'assigned'}, context=context)
+
+ def set_state_done(self, cursor, user, packing_id, context=None):
+ move_obj = self.pool.get('stock.move')
+ packing = self.browse(cursor, user, packing_id, context=context)
+ move_obj.write(
+ cursor, user, [m.id for m in packing.moves], {'state': 'done'},
+ context=context)
+ self.write( cursor, user, packing_id,
+ {'state': 'done',
+ 'effective_date': datetime.date.today()},
+ context=context)
+
+ def set_state_cancel(self, cursor, user, packing_id, context=None):
+ move_obj = self.pool.get('stock.move')
+ packing = self.browse(cursor, user, packing_id, context=context)
+ move_obj.write(
+ cursor, user, [m.id for m in packing.moves], {'state': 'cancel'},
+ context=context)
+ self.write(
+ cursor, user, packing_id, {'state': 'cancel'}, context=context)
+
+ def assign_try(self, cursor, user, packing_id, context=None):
+ product_obj = self.pool.get('product.product')
+ packing = self.browse(cursor, user, packing_id, context=context)
+ return product_obj.assign_try(
+ cursor, user, packing.moves, context=context)
+
+ def assign_force(self, cursor, user, packing_id, context=None):
+ packing = self.browse(cursor, user, packing_id, context=context)
+ move_obj = self.pool.get('stock.move')
+ move_obj.write(
+ cursor, user, [m.id for m in packing.moves], {'state': 'assigned'})
+ return True
+
+PackingInternal()
+
+
+class Address(OSV):
+ _name = 'party.address'
+ delivery = fields.Boolean('Delivery')
+
+Address()
+
+
+class PackingOutReport(CompanyReport):
+ _name = 'stock.packing.out'
+
+ def parse(self, cursor, user, report, objects, datas, context):
+ if context is None:
+ context = {}
+ context = context.copy()
+ context['product_name'] = lambda product_id, language: \
+ self.product_name(cursor, user, product_id, language,
+ context)
+ return super(PackingOutReport, self).parse(cursor, user, report,
+ objects, datas, context)
+
+ def product_name(self, cursor, user, product_id, language, context):
+ product_obj = self.pool.get('product.product')
+ ctx = context.copy()
+ ctx['language'] = language
+ return product_obj.name_get(cursor, user, [product_id],
+ context=ctx)[0][1]
+
+PackingOutReport()
diff --git a/packing.xml b/packing.xml
new file mode 100644
index 0000000..934948d
--- /dev/null
+++ b/packing.xml
@@ -0,0 +1,920 @@
+<?xml version="1.0"?>
+<!-- This file is part of Tryton. The COPYRIGHT file at the top level of
+this repository contains the full copyright notices and license terms. -->
+<tryton>
+ <data>
+
+ <!--Packing in view-->
+ <record model="ir.ui.view" id="packing_in_view_form">
+ <field name="model">stock.packing.in</field>
+ <field name="type">form</field>
+ <field name="arch" type="xml">
+ <![CDATA[
+ <form string="Supplier Packing" col="4" cursor="supplier">
+ <label name="reference"/>
+ <field name="reference"/>
+ <label name="code"/>
+ <field name="code"/>
+ <label name="supplier"/>
+ <field name="supplier"/>
+ <label name="contact_address"/>
+ <field name="contact_address"/>
+ <label name="planned_date"/>
+ <field name="planned_date"/>
+ <label name="effective_date"/>
+ <field name="effective_date"/>
+ <label name="warehouse"/>
+ <field name="warehouse"/>
+ <notebook colspan="6">
+ <page string="Incoming Moves">
+ <field name="incoming_moves" colspan="4">
+ <tree string="Moves">
+ <field name="product" select="1"/>
+ <field name="from_location" select="2"/>
+ <field name="to_location" select="2"/>
+ <field name="quantity" select="1"/>
+ <field name="uom" select="1"/>
+ <field name="planned_date" select="1"/>
+ <field name="state" select="2"/>
+ <field name="unit_digits" tree_invisible="1"/>
+ </tree>
+ </field>
+ </page>
+ <page string="Inventory Moves">
+ <field name="inventory_moves" colspan="4"/>
+ </page>
+ </notebook>
+ <group col="4" colspan="6">
+ <label name="state"/>
+ <field name="state"/>
+ <group col="5" colspan="2">
+ <button string="Cancel" name="cancel"
+ states="{'invisible': '''state in ('cancel', 'done') ''', 'readonly': '''%(group_stock)d not in groups'''}"
+ icon="tryton-cancel"/>
+ <button string="Received" name="received"
+ states="{'invisible': '''state != 'draft' ''', 'readonly': '''%(group_stock)d not in groups'''}"
+ icon="tryton-go-next"/>
+ <button string="Done" name="done"
+ states="{'invisible': '''state != 'received' ''', 'readonly': '''%(group_stock)d not in groups'''}"
+ icon="tryton-ok"/>
+ <button string="Reset to Draft" name="button_draft"
+ type="object"
+ states="{'invisible': '''state != 'cancel' ''', 'readonly': '''%(group_stock)d not in groups'''}"
+ icon="tryton-clear"/>
+ </group>
+ </group>
+ </form>
+ ]]>
+ </field>
+ </record>
+ <record model="ir.ui.view" id="packing_in_view_tree">
+ <field name="model">stock.packing.in</field>
+ <field name="type">tree</field>
+ <field name="arch" type="xml">
+ <![CDATA[
+ <tree string="Supplier Packings">
+ <field name="code" select="1"/>
+ <field name="reference" select="1"/>
+ <field name="state" select="1"/>
+ <field name="planned_date" select="2"/>
+ <field name="effective_date" select="2"/>
+ <field name="supplier" select="2"/>
+ <field name="contact_address" select="2"/>
+ </tree>
+ ]]>
+ </field>
+ </record>
+ <record model="ir.action.act_window" id="act_packing_in_form">
+ <field name="name">Supplier Packings</field>
+ <field name="res_model">stock.packing.in</field>
+ <field name="view_type">form</field>
+ </record>
+ <record model="ir.action.act_window.view"
+ id="act_packing_in_form_view1">
+ <field name="sequence" eval="1"/>
+ <field name="view" ref="packing_in_view_tree"/>
+ <field name="act_window" ref="act_packing_in_form"/>
+ </record>
+ <record model="ir.action.act_window.view"
+ id="act_packing_in_form_view2">
+ <field name="sequence" eval="2"/>
+ <field name="view" ref="packing_in_view_form"/>
+ <field name="act_window" ref="act_packing_in_form"/>
+ </record>
+ <menuitem parent="menu_stock" sequence="20"
+ action="act_packing_in_form" id="menu_packing_in_form"/>
+
+ <record model="ir.action.act_window" id="act_packing_in_form2">
+ <field name="name">New Supplier Packing</field>
+ <field name="res_model">stock.packing.in</field>
+ <field name="view_type">form</field>
+ </record>
+ <record model="ir.action.act_window.view"
+ id="act_packing_in_form2_view1">
+ <field name="sequence" eval="1"/>
+ <field name="view" ref="packing_in_view_form"/>
+ <field name="act_window" ref="act_packing_in_form2"/>
+ </record>
+ <record model="ir.action.act_window.view"
+ id="act_packing_in_form2_view2">
+ <field name="sequence" eval="2"/>
+ <field name="view" ref="packing_in_view_tree"/>
+ <field name="act_window" ref="act_packing_in_form2"/>
+ </record>
+ <menuitem parent="menu_packing_in_form" sequence="1"
+ action="act_packing_in_form2" id="menu_packing_in_form2"/>
+
+ <record model="ir.action.act_window" id="act_packing_in_form_received">
+ <field name="name">Received Supplier packings</field>
+ <field name="res_model">stock.packing.in</field>
+ <field name="view_type">form</field>
+ <field name="domain">[('state', '=', 'received')]</field>
+ </record>
+ <record model="ir.action.act_window.view"
+ id="act_packing_in_received_form_view1">
+ <field name="sequence" eval="1"/>
+ <field name="view" ref="packing_in_view_tree"/>
+ <field name="act_window" ref="act_packing_in_form_received"/>
+ </record>
+ <record model="ir.action.act_window.view"
+ id="act_packing_in_received_form_view2">
+ <field name="sequence" eval="2"/>
+ <field name="view" ref="packing_in_view_form"/>
+ <field name="act_window" ref="act_packing_in_form_received"/>
+ </record>
+ <menuitem parent="menu_packing_in_form" sequence="3"
+ action="act_packing_in_form_received"
+ id="menu_packing_in_received"/>
+
+ <record model="ir.sequence.type" id="sequence_type_packing_in">
+ <field name="name">Supplier Packing</field>
+ <field name="code">stock.packing.in</field>
+ </record>
+
+ <record model="ir.sequence" id="sequence_packing_in">
+ <field name="name">Supplier Packing</field>
+ <field name="code">stock.packing.in</field>
+ </record>
+
+ <!--Packing out view-->
+ <record model="ir.ui.view" id="packing_out_view_form">
+ <field name="model">stock.packing.out</field>
+ <field name="type">form</field>
+ <field name="arch" type="xml">
+ <![CDATA[
+ <form string="Customer Packing" col="4" cursor="customer">
+ <label name="reference"/>
+ <field name="reference"/>
+ <label name="code"/>
+ <field name="code"/>
+ <label name="customer"/>
+ <field name="customer"/>
+ <label name="delivery_address"/>
+ <field name="delivery_address"/>
+ <label name="warehouse"/>
+ <field name="warehouse"/>
+ <label name="customer_location"/>
+ <field name="customer_location"/>
+ <label name="planned_date"/>
+ <field name="planned_date"/>
+ <label name="effective_date"/>
+ <field name="effective_date"/>
+ <notebook colspan="4">
+ <page string="Inventory Moves">
+ <field name="inventory_moves" colspan="4"/>
+ </page>
+ <page string="Outgoing Moves">
+ <field name="outgoing_moves" colspan="4"/>
+ </page>
+ </notebook>
+ <group col="4" colspan="4">
+ <label name="state"/>
+ <field name="state"/>
+ <group col="8" colspan="2">
+ <button string="Cancel" name="cancel"
+ states="{'invisible': '''state in ('cancel', 'done') ''', 'readonly': '''%(group_stock)d not in groups'''}"
+ icon="tryton-cancel"/>
+ <button string="Draft" name="draft"
+ states="{'invisible': '''state != 'waiting' ''', 'readonly': '''%(group_stock)d not in groups'''}"
+ icon="tryton-clear"/>
+ <button string="Waiting" name="waiting"
+ states="{'invisible': '''state not in ('assigned', 'draft')''', 'readonly': '''%(group_stock)d not in groups''', 'icon': '''state == 'assigned' and 'tryton-go-previous' or state == 'draft' and 'tryton-go-next' or False'''}"/>
+ <button string="Force Assign" name="force_assign"
+ states="{'invisible': '''state != 'waiting' ''', 'readonly': '''%(group_stock)d not in groups'''}"
+ icon="tryton-go-next"
+ confirm="Are you sure to force assignation?"/>
+ <button string="Assign" name="assign"
+ states="{'invisible': '''state not in ('waiting', 'packed')''', 'readonly': '''%(group_stock)d not in groups''', 'icon': '''state == 'waiting' and 'tryton-go-next' or state == 'packed' and 'tryton-go-previous' or False'''}"/>
+ <button string="Make packing" name="packed"
+ states="{'invisible': '''state != 'assigned' ''', 'readonly': '''%(group_stock)d not in groups'''}"
+ icon="tryton-go-next"/>
+ <button string="Done" name="done"
+ states="{'invisible': '''state != 'packed' ''', 'readonly': '''%(group_stock)d not in groups'''}"
+ icon="tryton-ok"/>
+ <button string="Reset to Draft" name="button_draft"
+ type="object"
+ states="{'invisible': '''state != 'cancel' ''', 'readonly': '''%(group_stock)d not in groups'''}"
+ icon="tryton-clear"/>
+ </group>
+ </group>
+ </form>
+ ]]>
+ </field>
+ </record>
+ <record model="ir.ui.view" id="packing_out_view_tree">
+ <field name="model">stock.packing.out</field>
+ <field name="type">tree</field>
+ <field name="arch" type="xml">
+ <![CDATA[
+ <tree string="Customer Packings">
+ <field name="code" select="1"/>
+ <field name="state" select="1"/>
+ <field name="planned_date" select="2"/>
+ <field name="effective_date" select="2"/>
+ <field name="customer"/>
+ <field name="delivery_address"/>
+ </tree>
+ ]]>
+ </field>
+ </record>
+ <record model="ir.action.act_window" id="act_packing_out_form">
+ <field name="name">Customer Packings</field>
+ <field name="res_model">stock.packing.out</field>
+ <field name="view_type">form</field>
+ </record>
+ <record model="ir.action.act_window.view"
+ id="act_packing_out_form_view1">
+ <field name="sequence" eval="1"/>
+ <field name="view" ref="packing_out_view_tree"/>
+ <field name="act_window" ref="act_packing_out_form"/>
+ </record>
+ <record model="ir.action.act_window.view"
+ id="act_packing_out_form_view2">
+ <field name="sequence" eval="2"/>
+ <field name="view" ref="packing_out_view_form"/>
+ <field name="act_window" ref="act_packing_out_form"/>
+ </record>
+ <menuitem parent="menu_stock" sequence="30"
+ action="act_packing_out_form" id="menu_packing_out_form"/>
+
+ <record model="ir.action.act_window" id="act_packing_out_form_waiting">
+ <field name="name">Customer Packings Waiting Assignation</field>
+ <field name="res_model">stock.packing.out</field>
+ <field name="view_type">form</field>
+ <field name="domain">[('state', '=', 'waiting')]</field>
+ </record>
+ <record model="ir.action.act_window.view"
+ id="act_packing_out_waiting_form_view1">
+ <field name="sequence" eval="1"/>
+ <field name="view" ref="packing_out_view_tree"/>
+ <field name="act_window" ref="act_packing_out_form_waiting"/>
+ </record>
+ <record model="ir.action.act_window.view"
+ id="act_packing_out_waiting_form_view2">
+ <field name="sequence" eval="2"/>
+ <field name="view" ref="packing_out_view_form"/>
+ <field name="act_window" ref="act_packing_out_form_waiting"/>
+ </record>
+ <menuitem parent="menu_packing_out_form" sequence="1"
+ action="act_packing_out_form_waiting"
+ id="menu_packing_out_waiting"/>
+
+ <record model="ir.action.act_window"
+ id="act_packing_out_form_assigned">
+ <field name="name">Assigned Customer Packings</field>
+ <field name="res_model">stock.packing.out</field>
+ <field name="view_type">form</field>
+ <field name="domain">[('state', '=', 'assigned')]</field>
+ </record>
+ <record model="ir.action.act_window.view"
+ id="act_packing_out_assigned_form_view1">
+ <field name="sequence" eval="1"/>
+ <field name="view" ref="packing_out_view_tree"/>
+ <field name="act_window" ref="act_packing_out_form_assigned"/>
+ </record>
+ <record model="ir.action.act_window.view"
+ id="act_packing_out_assigned_form_view2">
+ <field name="sequence" eval="2"/>
+ <field name="view" ref="packing_out_view_form"/>
+ <field name="act_window" ref="act_packing_out_form_assigned"/>
+ </record>
+ <menuitem parent="menu_packing_out_form" sequence="2"
+ action="act_packing_out_form_assigned"
+ id="menu_packing_out_assigned"/>
+
+ <record model="ir.action.act_window" id="act_packing_out_form_ready">
+ <field name="name">Customer Packings Ready for Shipping</field>
+ <field name="res_model">stock.packing.out</field>
+ <field name="view_type">form</field>
+ <field name="domain">[('state', '=', 'packed')]</field>
+ </record>
+ <record model="ir.action.act_window.view"
+ id="act_packing_out_ready_form_view1">
+ <field name="sequence" eval="1"/>
+ <field name="view" ref="packing_out_view_tree"/>
+ <field name="act_window" ref="act_packing_out_form_ready"/>
+ </record>
+ <record model="ir.action.act_window.view"
+ id="act_packing_out_ready_form_view2">
+ <field name="sequence" eval="2"/>
+ <field name="view" ref="packing_out_view_form"/>
+ <field name="act_window" ref="act_packing_out_form_ready"/>
+ </record>
+ <menuitem parent="menu_packing_out_form" sequence="3"
+ action="act_packing_out_form_ready" id="menu_packing_out_ready"/>
+
+
+
+ <!--Internal Packing view-->
+ <record model="ir.ui.view" id="packing_internal_view_form">
+ <field name="model">stock.packing.internal</field>
+ <field name="type">form</field>
+ <field name="arch" type="xml">
+ <![CDATA[
+ <form string="Internal Packing" col="4" cursor="from_location">
+ <label name="reference"/>
+ <field name="reference"/>
+ <label name="code"/>
+ <field name="code"/>
+ <label name="from_location"/>
+ <field name="from_location"/>
+ <label name="to_location"/>
+ <field name="to_location"/>
+ <label name="planned_date"/>
+ <field name="planned_date"/>
+ <label name="effective_date"/>
+ <field name="effective_date"/>
+ <separator name="moves" colspan="4"/>
+ <field name="moves" colspan="4"/>
+ <label name="state"/>
+ <field name="state"/>
+ <group col="7" colspan="2">
+ <button string="Cancel" name="cancel"
+ states="{'invisible': '''state in ('cancel', 'done') ''', 'readonly': '''%(group_stock)d not in groups'''}"
+ icon="tryton-cancel"/>
+ <button string="Draft" name="draft"
+ states="{'invisible': '''state != 'waiting' ''', 'readonly': '''%(group_stock)d not in groups'''}"
+ icon="tryton-clear"/>
+ <button string="Waiting" name="waiting"
+ states="{'invisible': '''state not in ('assigned', 'draft')''', 'readonly': '''%(group_stock)d not in groups''', 'icon': '''state == 'assigned' and 'tryton-go-previous' or state == 'draft' and 'tryton-go-next' or False'''}"/>
+ <button string="Force Assign" name="force_assign"
+ states="{'invisible': '''state != 'waiting' ''', 'readonly': '''%(group_stock)d not in groups'''}"
+ icon="tryton-go-next"/>
+ <button string="Assign" name="assign"
+ states="{'invisible': '''state != 'waiting' ''', 'readonly': '''%(group_stock)d not in groups'''}"
+ icon="tryton-go-next"/>
+ <button string="Reset to Draft" name="button_draft"
+ type="object" states="{'invisible': '''state != 'cancel' ''', 'readonly': '''%(group_stock)d not in groups'''}"
+ icon="tryton-clear"/>
+ <button string="Done" name="done"
+ states="{'invisible': '''state != 'assigned' ''', 'readonly': '''%(group_stock)d not in groups'''}"
+ icon="tryton-ok"/>
+ </group>
+ </form>
+ ]]>
+ </field>
+ </record>
+ <record model="ir.ui.view" id="packing_internal_view_tree">
+ <field name="model">stock.packing.internal</field>
+ <field name="type">tree</field>
+ <field name="arch" type="xml">
+ <![CDATA[
+ <tree string="Internal Packings">
+ <field name="code" select="1"/>
+ <field name="state" select="1"/>
+ <field name="reference" select="2"/>
+ <field name="planned_date" select="2"/>
+ <field name="effective_date" select="2"/>
+ <field name="from_location" select="2"/>
+ <field name="to_location" select="2"/>
+ </tree>
+ ]]>
+ </field>
+ </record>
+ <record model="ir.action.act_window" id="act_packing_internal_form">
+ <field name="name">Internal Packings</field>
+ <field name="res_model">stock.packing.internal</field>
+ <field name="view_type">form</field>
+ </record>
+ <record model="ir.action.act_window.view"
+ id="act_packing_internal_form_view1">
+ <field name="sequence" eval="1"/>
+ <field name="view" ref="packing_internal_view_tree"/>
+ <field name="act_window" ref="act_packing_internal_form"/>
+ </record>
+ <record model="ir.action.act_window.view"
+ id="act_packing_internal_form_view2">
+ <field name="sequence" eval="2"/>
+ <field name="view" ref="packing_internal_view_form"/>
+ <field name="act_window" ref="act_packing_internal_form"/>
+ </record>
+ <menuitem parent="menu_stock" sequence="35"
+ action="act_packing_internal_form"
+ id="menu_packing_internal_form"/>
+
+ <record model="ir.action.act_window" id="act_packing_internal_draft_form">
+ <field name="name">Draft Internal Packings</field>
+ <field name="res_model">stock.packing.internal</field>
+ <field name="view_type">form</field>
+ <field name="domain">[('state', '=', 'draft')]</field>
+ </record>
+ <record model="ir.action.act_window.view"
+ id="act_packing_internal_draft_form_view1">
+ <field name="sequence" eval="1"/>
+ <field name="view" ref="packing_internal_view_tree"/>
+ <field name="act_window" ref="act_packing_internal_draft_form"/>
+ </record>
+ <record model="ir.action.act_window.view"
+ id="act_packing_internal_draft_form_view2">
+ <field name="sequence" eval="2"/>
+ <field name="view" ref="packing_internal_view_form"/>
+ <field name="act_window" ref="act_packing_internal_draft_form"/>
+ </record>
+ <menuitem parent="menu_packing_internal_form" sequence="1"
+ action="act_packing_internal_draft_form"
+ id="menu_packing_internal_draft_form"/>
+
+ <record model="ir.action.act_window" id="act_packing_internal_waiting_form">
+ <field name="name">Internal Packings Waiting Assignation</field>
+ <field name="res_model">stock.packing.internal</field>
+ <field name="view_type">form</field>
+ <field name="domain">[('state', '=', 'waiting')]</field>
+ </record>
+ <record model="ir.action.act_window.view"
+ id="act_packing_internal_waiting_form_view1">
+ <field name="sequence" eval="1"/>
+ <field name="view" ref="packing_internal_view_tree"/>
+ <field name="act_window" ref="act_packing_internal_waiting_form"/>
+ </record>
+ <record model="ir.action.act_window.view"
+ id="act_packing_internal_waiting_form_view2">
+ <field name="sequence" eval="2"/>
+ <field name="view" ref="packing_internal_view_form"/>
+ <field name="act_window" ref="act_packing_internal_waiting_form"/>
+ </record>
+ <menuitem parent="menu_packing_internal_form" sequence="2"
+ action="act_packing_internal_waiting_form"
+ id="menu_packing_internal_waiting_form"/>
+
+ <record model="ir.action.act_window" id="act_packing_internal_assigned_form">
+ <field name="name">Assigned Internal Packings</field>
+ <field name="res_model">stock.packing.internal</field>
+ <field name="view_type">form</field>
+ <field name="domain">[('state', '=', 'assigned')]</field>
+ </record>
+ <record model="ir.action.act_window.view"
+ id="act_packing_internal_assigned_form_view1">
+ <field name="sequence" eval="1"/>
+ <field name="view" ref="packing_internal_view_tree"/>
+ <field name="act_window" ref="act_packing_internal_assigned_form"/>
+ </record>
+ <record model="ir.action.act_window.view"
+ id="act_packing_internal_assigned_form_view2">
+ <field name="sequence" eval="2"/>
+ <field name="view" ref="packing_internal_view_form"/>
+ <field name="act_window" ref="act_packing_internal_assigned_form"/>
+ </record>
+ <menuitem parent="menu_packing_internal_form" sequence="3"
+ action="act_packing_internal_assigned_form"
+ id="menu_packing_internal_assigned_form"/>
+
+ <!-- Sequence packing out -->
+ <record model="ir.sequence.type" id="sequence_type_packing_out">
+ <field name="name">Customer Packing</field>
+ <field name="code">stock.packing.out</field>
+ </record>
+
+ <record model="ir.sequence" id="sequence_packing_out">
+ <field name="name">Customer Packing</field>
+ <field name="code">stock.packing.out</field>
+ </record>
+
+ <!-- Workflow packing in -->
+ <record model="workflow" id="wkf_packingin">
+ <field name="name">Supplier Packing</field>
+ <field name="osv">stock.packing.in</field>
+ <field name="on_create">True</field>
+ </record>
+ <record model="workflow.activity" id="packingin_act_draft">
+ <field name="workflow" ref="wkf_packingin"/>
+ <field name="flow_start">True</field>
+ <field name="kind">function</field>
+ <field name="action">set_state_draft()</field>
+ <field name="name">Draft</field>
+ </record>
+ <record model="workflow.activity" id="packingin_act_cancel">
+ <field name="workflow" ref="wkf_packingin"/>
+ <field name="flow_stop">True</field>
+ <field name="name">Cancel</field>
+ <field name="kind">function</field>
+ <field name="action">set_state_cancel()</field>
+ </record>
+ <record model="workflow.activity" id="packingin_act_done">
+ <field name="workflow" ref="wkf_packingin"/>
+ <field name="flow_stop">True</field>
+ <field name="name">Done</field>
+ <field name="kind">function</field>
+ <field name="action">set_state_done()</field>
+ </record>
+ <record model="workflow.activity" id="packingin_act_received">
+ <field name="name">Received</field>
+ <field name="kind">function</field>
+ <field name="workflow" ref="wkf_packingin"/>
+ <field name="action">set_state_received()
create_inventory_moves()</field>
+ </record>
+
+ <record model="workflow.transition"
+ id="packingin_trans_draft_received">
+ <field name="act_from" ref="packingin_act_draft"/>
+ <field name="act_to" ref="packingin_act_received"/>
+ <field name="group" ref="group_stock"/>
+ <field name="signal">received</field>
+ </record>
+ <record model="workflow.transition"
+ id="packingin_trans_received_draft">
+ <field name="act_from" ref="packingin_act_received"/>
+ <field name="act_to" ref="packingin_act_draft"/>
+ <field name="group" ref="group_stock"/>
+ <field name="signal">draft</field>
+ </record>
+ <record model="workflow.transition" id="packingin_trans_received_done">
+ <field name="act_from" ref="packingin_act_received"/>
+ <field name="act_to" ref="packingin_act_done"/>
+ <field name="group" ref="group_stock"/>
+ <field name="signal">done</field>
+ </record>
+ <record model="workflow.transition" id="packingin_trans_draft_cancel">
+ <field name="act_from" ref="packingin_act_draft"/>
+ <field name="act_to" ref="packingin_act_cancel"/>
+ <field name="group" ref="group_stock"/>
+ <field name="signal">cancel</field>
+ </record>
+ <record model="workflow.transition"
+ id="packingin_trans_received_cancel">
+ <field name="act_from" ref="packingin_act_received"/>
+ <field name="act_to" ref="packingin_act_cancel"/>
+ <field name="group" ref="group_stock"/>
+ <field name="signal">cancel</field>
+ </record>
+
+
+ <!-- Workflow packing out -->
+ <record model="workflow" id="wkf_packingout">
+ <field name="name">Customer Packing</field>
+ <field name="osv">stock.packing.out</field>
+ <field name="on_create">True</field>
+ </record>
+ <record model="workflow.activity" id="packingout_act_draft">
+ <field name="workflow" ref="wkf_packingout"/>
+ <field name="flow_start">True</field>
+ <field name="name">Draft</field>
+ <field name="kind">function</field>
+ <field name="action">set_state_draft()</field>
+ </record>
+ <record model="workflow.activity" id="packingout_act_cancel">
+ <field name="workflow" ref="wkf_packingout"/>
+ <field name="flow_stop">True</field>
+ <field name="name">Cancel</field>
+ <field name="kind">function</field>
+ <field name="action">set_state_cancel()</field>
+ </record>
+ <record model="workflow.activity" id="packingout_act_done">
+ <field name="workflow" ref="wkf_packingout"/>
+ <field name="flow_stop">True</field>
+ <field name="name">Done</field>
+ <field name="kind">function</field>
+ <field name="action">set_state_done()</field>
+ </record>
+ <record model="workflow.activity" id="packingout_act_waiting">
+ <field name="name">Waiting</field>
+ <field name="kind">function</field>
+ <field name="workflow" ref="wkf_packingout"/>
+ <field name="action">set_state_waiting()</field>
+ </record>
+ <record model="workflow.activity" id="packingout_act_assigned">
+ <field name="name">Assigned</field>
+ <field name="kind">function</field>
+ <field name="workflow" ref="wkf_packingout"/>
+ <field name="action">set_state_assigned()</field>
+ </record>
+ <record model="workflow.activity" id="packingout_act_packed">
+ <field name="name">Packed</field>
+ <field name="kind">function</field>
+ <field name="workflow" ref="wkf_packingout"/>
+ <field name="action">set_state_packed()</field>
+ </record>
+
+ <record model="workflow.transition"
+ id="packingout_trans_waiting_assigned">
+ <field name="act_from" ref="packingout_act_waiting"/>
+ <field name="act_to" ref="packingout_act_assigned"/>
+ <field name="group" ref="group_stock"/>
+ <field name="signal">assign</field>
+ <field name="condition">assign_try()</field>
+ </record>
+ <record model="workflow.transition"
+ id="packingout_trans_assigned_waiting">
+ <field name="act_from" ref="packingout_act_assigned"/>
+ <field name="act_to" ref="packingout_act_waiting"/>
+ <field name="group" ref="group_stock"/>
+ <field name="signal">waiting</field>
+ </record>
+ <record model="workflow.transition"
+ id="packingout_trans_waiting_assigned_force">
+ <field name="act_from" ref="packingout_act_waiting"/>
+ <field name="act_to" ref="packingout_act_assigned"/>
+ <field name="group" ref="group_stock"/>
+ <field name="signal">force_assign</field>
+ <field name="condition">assign_force()</field>
+ </record>
+ <record model="workflow.transition"
+ id="packingout_trans_draft_waiting">
+ <field name="act_from" ref="packingout_act_draft"/>
+ <field name="act_to" ref="packingout_act_waiting"/>
+ <field name="group" ref="group_stock"/>
+ <field name="signal">waiting</field>
+ </record>
+ <record model="workflow.transition"
+ id="packingout_trans_waiting_draft">
+ <field name="act_from" ref="packingout_act_waiting"/>
+ <field name="act_to" ref="packingout_act_draft"/>
+ <field name="group" ref="group_stock"/>
+ <field name="signal">draft</field>
+ </record>
+ <record model="workflow.transition"
+ id="packingout_trans_waiting_cancel">
+ <field name="act_from" ref="packingout_act_waiting"/>
+ <field name="act_to" ref="packingout_act_cancel"/>
+ <field name="group" ref="group_stock"/>
+ <field name="signal">cancel</field>
+ </record>
+ <record model="workflow.transition"
+ id="packingout_trans_draft_cancel">
+ <field name="act_from" ref="packingout_act_draft"/>
+ <field name="act_to" ref="packingout_act_cancel"/>
+ <field name="group" ref="group_stock"/>
+ <field name="signal">cancel</field>
+ </record>
+ <record model="workflow.transition"
+ id="packingout_trans_assigned_packed">
+ <field name="act_from" ref="packingout_act_assigned"/>
+ <field name="act_to" ref="packingout_act_packed"/>
+ <field name="group" ref="group_stock"/>
+ <field name="signal">packed</field>
+ </record>
+ <record model="workflow.transition"
+ id="packingout_trans_packed_assigned">
+ <field name="act_from" ref="packingout_act_packed"/>
+ <field name="act_to" ref="packingout_act_assigned"/>
+ <field name="group" ref="group_stock"/>
+ <field name="signal">assign</field>
+ </record>
+ <record model="workflow.transition"
+ id="packingout_trans_packed_done">
+ <field name="act_from" ref="packingout_act_packed"/>
+ <field name="act_to" ref="packingout_act_done"/>
+ <field name="group" ref="group_stock"/>
+ <field name="signal">done</field>
+ </record>
+ <record model="workflow.transition"
+ id="packingout_trans_assigned_cancel">
+ <field name="act_from" ref="packingout_act_assigned"/>
+ <field name="act_to" ref="packingout_act_cancel"/>
+ <field name="group" ref="group_stock"/>
+ <field name="signal">cancel</field>
+ </record>
+ <record model="workflow.transition"
+ id="packingout_trans_packed_cancel">
+ <field name="act_from" ref="packingout_act_packed"/>
+ <field name="act_to" ref="packingout_act_cancel"/>
+ <field name="group" ref="group_stock"/>
+ <field name="signal">cancel</field>
+ </record>
+
+
+ <record model="ir.action.report" id="report_packing_out">
+ <field name="name">Customer Packing</field>
+ <field name="model">stock.packing.out</field>
+ <field name="report_name">stock.packing.out</field>
+ <field name="report">stock/packing_out.odt</field>
+ <field name="style">company/header_A4.odt</field>
+ </record>
+ <record model="ir.action.keyword"
+ id="report_packing_out_keyword">
+ <field name="keyword">form_print</field>
+ <field name="model">stock.packing.out,0</field>
+ <field name="action" ref="report_packing_out"/>
+ </record>
+
+
+ <!-- Workflow internal packing -->
+ <record model="workflow" id="wkf_packinginternal">
+ <field name="name">Internal Packing</field>
+ <field name="osv">stock.packing.internal</field>
+ <field name="on_create">True</field>
+ </record>
+ <record model="workflow.activity" id="packinginternal_act_draft">
+ <field name="workflow" ref="wkf_packinginternal"/>
+ <field name="flow_start">True</field>
+ <field name="kind">function</field>
+ <field name="action">set_state_draft()</field>
+ <field name="name">Draft</field>
+ </record>
+ <record model="workflow.activity" id="packinginternal_act_cancel">
+ <field name="workflow" ref="wkf_packinginternal"/>
+ <field name="flow_stop">True</field>
+ <field name="name">Cancel</field>
+ <field name="kind">function</field>
+ <field name="action">set_state_cancel()</field>
+ </record>
+ <record model="workflow.activity" id="packinginternal_act_done">
+ <field name="workflow" ref="wkf_packinginternal"/>
+ <field name="flow_stop">True</field>
+ <field name="name">Done</field>
+ <field name="kind">function</field>
+ <field name="action">set_state_done()</field>
+ </record>
+ <record model="workflow.activity" id="packinginternal_act_waiting">
+ <field name="name">Waiting</field>
+ <field name="kind">function</field>
+ <field name="workflow" ref="wkf_packinginternal"/>
+ <field name="action">set_state_waiting()</field>
+ </record>
+ <record model="workflow.activity" id="packinginternal_act_assigned">
+ <field name="name">Assigned</field>
+ <field name="kind">function</field>
+ <field name="workflow" ref="wkf_packinginternal"/>
+ <field name="action">set_state_assigned()</field>
+ </record>
+
+ <record model="workflow.transition"
+ id="packinginternal_trans_draft_waiting">
+ <field name="act_from" ref="packinginternal_act_draft"/>
+ <field name="act_to" ref="packinginternal_act_waiting"/>
+ <field name="group" ref="group_stock"/>
+ <field name="signal">waiting</field>
+ </record>
+ <record model="workflow.transition"
+ id="packinginternal_trans_waiting_draft">
+ <field name="act_from" ref="packinginternal_act_waiting"/>
+ <field name="act_to" ref="packinginternal_act_draft"/>
+ <field name="group" ref="group_stock"/>
+ <field name="signal">draft</field>
+ </record>
+ <record model="workflow.transition"
+ id="packinginternal_trans_waiting_assigned">
+ <field name="act_from" ref="packinginternal_act_waiting"/>
+ <field name="act_to" ref="packinginternal_act_assigned"/>
+ <field name="group" ref="group_stock"/>
+ <field name="signal">assign</field>
+ <field name="condition">assign_try()</field>
+ </record>
+ <record model="workflow.transition"
+ id="packinginternal_trans_assigned_waiting">
+ <field name="act_from" ref="packinginternal_act_assigned"/>
+ <field name="act_to" ref="packinginternal_act_waiting"/>
+ <field name="group" ref="group_stock"/>
+ <field name="signal">waiting</field>
+ </record>
+ <record model="workflow.transition"
+ id="packinginternal_trans_waiting_assigned_force">
+ <field name="act_from" ref="packinginternal_act_waiting"/>
+ <field name="act_to" ref="packinginternal_act_assigned"/>
+ <field name="group" ref="group_stock"/>
+ <field name="signal">force_assign</field>
+ <field name="condition">assign_force()</field>
+ </record>
+ <record model="workflow.transition" id="packinginternal_trans_assigned_done">
+ <field name="act_from" ref="packinginternal_act_assigned"/>
+ <field name="act_to" ref="packinginternal_act_done"/>
+ <field name="group" ref="group_stock"/>
+ <field name="signal">done</field>
+ </record>
+ <record model="workflow.transition" id="packinginternal_trans_draft_cancel">
+ <field name="act_from" ref="packinginternal_act_draft"/>
+ <field name="act_to" ref="packinginternal_act_cancel"/>
+ <field name="group" ref="group_stock"/>
+ <field name="signal">cancel</field>
+ </record>
+ <record model="workflow.transition"
+ id="packinginternal_trans_waiting_cancel">
+ <field name="act_from" ref="packinginternal_act_waiting"/>
+ <field name="act_to" ref="packinginternal_act_cancel"/>
+ <field name="group" ref="group_stock"/>
+ <field name="signal">cancel</field>
+ </record>
+ <record model="workflow.transition"
+ id="packinginternal_trans_assigned_cancel">
+ <field name="act_from" ref="packinginternal_act_assigned"/>
+ <field name="act_to" ref="packinginternal_act_cancel"/>
+ <field name="group" ref="group_stock"/>
+ <field name="signal">cancel</field>
+ </record>
+
+
+ <!-- Add delivery field on address -->
+ <record model="ir.ui.view" id="address_view_tree">
+ <field name="model">party.address</field>
+ <field name="inherit" ref="party.address_view_tree"/>
+ <field name="arch" type="xml">
+ <![CDATA[
+ <data>
+ <xpath
+ expr="/tree/field[@name="active"]" position="after">
+ <field name="delivery" select="2"/>
+ </xpath>
+ </data>
+ ]]>
+ </field>
+ </record>
+ <record model="ir.ui.view" id="address_view_form">
+ <field name="model">party.address</field>
+ <field name="inherit" ref="party.address_view_form"/>
+ <field name="arch" type="xml">
+ <![CDATA[
+ <data>
+ <xpath
+ expr="/form/group/field[@name="active"]"
+ position="after">
+ <label name="delivery"/>
+ <field name="delivery" xexpand="0" width="25"/>
+ </xpath>
+ </data>
+ ]]>
+ </field>
+ </record>
+ <!-- Model Access -->
+ <record model="ir.model.access" id="access_packing_in">
+ <field name="model" search="[('model', '=', 'stock.packing.in')]"/>
+ <field name="perm_read" eval="True"/>
+ <field name="perm_write" eval="False"/>
+ <field name="perm_create" eval="False"/>
+ <field name="perm_delete" eval="False"/>
+ </record>
+ <record model="ir.model.access" id="access_packing_in_group_stock">
+ <field name="model" search="[('model', '=', 'stock.packing.in')]"/>
+ <field name="group" ref="group_stock"/>
+ <field name="perm_read" eval="True"/>
+ <field name="perm_write" eval="True"/>
+ <field name="perm_create" eval="True"/>
+ <field name="perm_delete" eval="False"/>
+ </record>
+ <record model="ir.model.access" id="access_packing_in_group_stock_admin">
+ <field name="model" search="[('model', '=', 'stock.packing.in')]"/>
+ <field name="group" ref="group_stock_admin"/>
+ <field name="perm_read" eval="True"/>
+ <field name="perm_write" eval="True"/>
+ <field name="perm_create" eval="True"/>
+ <field name="perm_delete" eval="True"/>
+ </record>
+
+ <record model="ir.model.access" id="access_packing_out">
+ <field name="model" search="[('model', '=', 'stock.packing.out')]"/>
+ <field name="perm_read" eval="True"/>
+ <field name="perm_write" eval="False"/>
+ <field name="perm_create" eval="False"/>
+ <field name="perm_delete" eval="False"/>
+ </record>
+ <record model="ir.model.access" id="access_packing_out_group_stock">
+ <field name="model" search="[('model', '=', 'stock.packing.out')]"/>
+ <field name="group" ref="group_stock"/>
+ <field name="perm_read" eval="True"/>
+ <field name="perm_write" eval="True"/>
+ <field name="perm_create" eval="True"/>
+ <field name="perm_delete" eval="False"/>
+ </record>
+ <record model="ir.model.access" id="access_packing_out_group_stock_admin">
+ <field name="model" search="[('model', '=', 'stock.packing.out')]"/>
+ <field name="group" ref="group_stock_admin"/>
+ <field name="perm_read" eval="True"/>
+ <field name="perm_write" eval="True"/>
+ <field name="perm_create" eval="True"/>
+ <field name="perm_delete" eval="True"/>
+ </record>
+
+ <record model="ir.model.access" id="access_packing_internal">
+ <field name="model" search="[('model', '=', 'stock.packing.internal')]"/>
+ <field name="perm_read" eval="True"/>
+ <field name="perm_write" eval="False"/>
+ <field name="perm_create" eval="False"/>
+ <field name="perm_delete" eval="False"/>
+ </record>
+ <record model="ir.model.access" id="access_packing_internal_group_stock">
+ <field name="model" search="[('model', '=', 'stock.packing.internal')]"/>
+ <field name="group" ref="group_stock"/>
+ <field name="perm_read" eval="True"/>
+ <field name="perm_write" eval="True"/>
+ <field name="perm_create" eval="True"/>
+ <field name="perm_delete" eval="False"/>
+ </record>
+ <record model="ir.model.access" id="access_packing_internal_group_stock_admin">
+ <field name="model" search="[('model', '=', 'stock.packing.internal')]"/>
+ <field name="group" ref="group_stock_admin"/>
+ <field name="perm_read" eval="True"/>
+ <field name="perm_write" eval="True"/>
+ <field name="perm_create" eval="True"/>
+ <field name="perm_delete" eval="True"/>
+ </record>
+
+ </data>
+</tryton>
diff --git a/packing_out.odt b/packing_out.odt
new file mode 100644
index 0000000..b774e2f
Binary files /dev/null and b/packing_out.odt differ
diff --git a/product.py b/product.py
new file mode 100644
index 0000000..d8b7165
--- /dev/null
+++ b/product.py
@@ -0,0 +1,546 @@
+#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 trytond.osv import fields, OSV
+from trytond.wizard import Wizard, WizardOSV
+import datetime
+
+
+class Template(OSV):
+ _name = "product.template"
+
+ quantity = fields.Function('get_quantity', type='float', string='Quantity')
+ forecast_quantity = fields.Function('get_quantity', type='float',
+ string='Forecast Quantity')
+
+ def get_quantity(self, cursor, user, ids, name, args, context=None):
+ res = {}
+ if name not in ('quantity', 'forecast_quantity'):
+ raise Exception('Bad argument')
+
+ for template in self.browse(cursor, user, ids, context=context):
+ res[template.id] = 0.0
+ for product in template.products:
+ res[template.id] += product[name]
+ return res
+
+Template()
+
+class Product(OSV):
+ _name = "product.product"
+
+ quantity = fields.Function('get_quantity', type='float', string='Quantity',
+ fnct_search='search_quantity')
+ forecast_quantity = fields.Function('get_quantity', type='float',
+ string='Forecast Quantity', fnct_search='search_quantity')
+
+ def get_quantity(self, cursor, user, ids, name, args, context=None):
+ date_obj = self.pool.get('ir.date')
+
+ if not (context and context.get('locations')):
+ return dict([(id, 0.0) for id in ids])
+
+ if name == 'quantity' and \
+ context.get('stock_date_end') > \
+ date_obj.today(cursor, user, context=context):
+
+ context = context.copy()
+ context['stock_date_end'] = date_obj.today(
+ cursor, user, context=context)
+
+ if name == 'forecast_quantity':
+ context = context.copy()
+ context['forecast'] = True
+ if not context.get('stock_date_end'):
+ context['stock_date_end'] = datetime.date.max
+ pbl = self.products_by_location(cursor, user,
+ location_ids=context['locations'], product_ids=ids,
+ with_childs=True, context=context)
+
+ res = {}.fromkeys(ids, 0.0)
+ for location in context['locations']:
+ for product in ids:
+ res[product] += pbl.get((location, product), 0.0)
+ return res
+
+ def _search_quantity_eval_domain(self, line, domain):
+ res = True
+ for field, operator, operand in domain:
+ value = line.get(field)
+ if value == None:
+ return False
+ if operator not in ("=", ">=", "<=", ">", "<", "!="):
+ return False
+ if operator == "=":
+ operator= "=="
+ res = res and (eval(str(value) + operator + str(operand)))
+ return res
+
+ def search_quantity(self, cursor, user, name, domain=None, context=None):
+ date_obj = self.pool.get('ir.date')
+
+ if not (context and context.get('locations') and domain):
+ return []
+ if (name != 'forecast_quantity') and context.get('stock_date_end'):
+ if context['stock_date_end'] != date_obj.today(cursor, user,
+ context=context):
+ context = context.copy()
+ del context['stock_date_end']
+
+ if name == 'forecast_quantity' and not context.get('stock_date_end'):
+ context = context.copy()
+ context['stock_date_end'] = datetime.date.max
+
+ pbl = self.products_by_location(
+ cursor, user, location_ids=context['locations'], with_childs=True,
+ skip_zero=False, context=context).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 self._search_quantity_eval_domain(line, domain)]
+ return [('id', 'in', res)]
+
+
+
+ def products_by_location(self, cursor, user, location_ids,
+ product_ids=None, with_childs=False, skip_zero=True, context=None):
+ """
+ Compute for each location and product the stock quantity in the default
+ uom of the product.
+
+ :param cursor: the database cursor
+ :param user: the user id
+ :param location_ids: the ids of locations
+ :param product_ids: the ids of the products
+ if None all products are used
+ :param with_childs: a boolean to compute also for child locations
+ :param skip_zero: a boolean to list also items with zero quantity
+ :param context: the context with keys:
+ stock_date_end: if set the date of the stock computation
+ stock_date_start: if set return the delta of the stock
+ between the two dates
+ stock_assign: if set compute also the assigned moves as done
+ forecast: if set compute the forecast quantity
+ :return: a dictionary with (location id, product id) as key
+ and quantity as value
+ """
+ uom_obj = self.pool.get("product.uom")
+ product_obj = self.pool.get("product.product")
+ rule_obj = self.pool.get('ir.rule')
+ location_obj = self.pool.get('stock.location')
+ date_obj = self.pool.get('ir.date')
+
+ if not location_ids:
+ return []
+ if context is None:
+ context= {}
+ # 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.
+ location_ids = set(location_ids)
+ storage_to_remove = set()
+ wh_to_add= {}
+ for location in location_obj.browse(
+ cursor, user, location_ids, context=context):
+ if location.type == 'warehouse':
+ location_ids.remove(location.id)
+ if location.storage_location.id not in location_ids:
+ storage_to_remove.add(location.storage_location.id)
+ location_ids.add(location.storage_location.id)
+ wh_to_add[location.id] = location.storage_location.id
+ location_ids = list(location_ids)
+
+ move_query, move_val = rule_obj.domain_get(cursor, user, 'stock.move',
+ context=context)
+
+ if not context.get('stock_date_end'):
+ context = context.copy()
+ context['stock_date_end'] = datetime.date.max
+
+ # date end in the past or today: filter on state done
+ if context['stock_date_end'] < date_obj.today(cursor, user,
+ context=context) or \
+ (context['stock_date_end'] == \
+ date_obj.today(cursor, user, context=context) \
+ and not context.get('forecast')):
+ state_date_clause = '(state in (%s, %s)) AND ('\
+ '(effective_date IS NULL '\
+ 'AND ( planned_date <= %s or planned_date IS NULL)) '\
+ 'OR effective_date <= %s'\
+ ')'
+ state_date_vals = ["done",
+ context.get('stock_assign') and 'assigned' or 'done',
+ context['stock_date_end'],
+ context['stock_date_end'],
+ ]
+ # infinite date end: take all states for the moves
+ elif context['stock_date_end'] == datetime.date.max:
+ state_date_clause = 'state in (%s, %s, %s)'
+ state_date_vals = ['done', 'assigned', 'draft']
+ # 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 planned_date IS NULL)) '\
+ 'OR effective_date <= %s)' \
+ + \
+ ') OR (' + \
+ '(state in (%s, %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)'\
+ ')'\
+ ')'
+ today = date_obj.today(cursor, user, context=context)
+ state_date_vals = [
+ 'done', 'assigned', today, today,
+ 'done', 'assigned', 'draft',
+ context['stock_date_end'], today,
+ context['stock_date_end'], today,
+ ]
+
+ if context.get('stock_date_start'):
+ if context['stock_date_start'] > date_obj.today(cursor, user,
+ context=context):
+ 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']])
+ else:
+ tmp_clause = '(state in (%s, %s, %s)) AND ('\
+ '(effective_date IS NULL '\
+ 'AND ( planned_date >= %s or planned_date IS NULL)) '\
+ 'OR effective_date >= %s'\
+ ')'
+ today = date_obj.today(cursor, user, context=context)
+ state_date_vals.extend(
+ ['done', 'assigned', 'draft', today, today])
+
+ state_date_clause += ' AND (' + tmp_clause + \
+ ') 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',
+ context.get('stock_assign') and 'assigned' or 'done',
+ context['stock_date_start'], today,
+ context['stock_date_start'], today,
+ ])
+
+ if with_childs:
+ query, args = location_obj.search(cursor, user, [
+ ('parent', 'child_of', location_ids),
+ ], context=context, query_string=True)
+ where_clause = " IN (" + query + ") "
+ where_vals = args
+ else:
+ where_clause = " IN (" + \
+ ",".join(["%s" for i in location_ids]) + ") "
+ where_vals = location_ids[:]
+
+ where_clause += " AND " + move_query + " "
+ where_vals += move_val
+
+ if product_ids:
+ where_clause += "AND product in (" + \
+ ",".join(["%s" for i in product_ids]) + ")"
+ where_vals += product_ids
+
+ select_clause = \
+ "SELECT location, product, uom, sum(quantity) AS quantity "\
+ "FROM ( "\
+ "SELECT to_location AS location, product, uom, "\
+ "sum(quantity) AS quantity "\
+ "FROM stock_move "\
+ "WHERE (%s) " \
+ "AND to_location %s "\
+ "GROUP BY to_location, product ,uom "\
+ "UNION "\
+ "SELECT from_location AS location, product, uom, "\
+ "-sum(quantity) AS quantity "\
+ "FROM stock_move "\
+ "WHERE (%s) " \
+ "AND from_location %s "\
+ "GROUP BY from_location, product, uom "\
+ ") AS T GROUP BY T.location, T.product, T.uom"
+
+ cursor.execute(select_clause % (state_date_clause, where_clause,
+ state_date_clause, where_clause),
+ state_date_vals + where_vals + \
+ state_date_vals + where_vals)
+ raw_lines = cursor.fetchall()
+
+ res = {}
+ res_location_ids = []
+ uom_ids = []
+ res_product_ids = []
+ for line in raw_lines:
+ for id_list, position in ((res_location_ids, 0), (uom_ids, 2),
+ (res_product_ids, 1)):
+ if line[position] not in id_list:
+ id_list.append(line[position])
+
+ if not product_ids:
+ product_ids = self.pool.get("product.product").search(
+ cursor, user, [], context=context)
+ uom_by_id = dict([(x.id, x) for x in uom_obj.browse(
+ cursor, user, uom_ids, context=context)])
+ default_uom = dict((x.id, x.default_uom) for x in product_obj.browse(
+ cursor, user, product_ids, context=context))
+
+ for line in raw_lines:
+ location, product, uom, quantity = line
+ key = (location, product)
+ res.setdefault(key, 0.0)
+ res[key] += uom_obj.compute_qty(cursor, user, uom_by_id[uom],
+ quantity, default_uom[product], round=False,
+ context=context)
+
+ # Propagate quantities on from child locations to their parents
+ if with_childs:
+ # Fetch all child locations
+ all_location_ids = location_obj.search(
+ cursor, user, [('parent', 'child_of', location_ids)],
+ context=context)
+ locations = location_obj.browse(cursor, user, all_location_ids,
+ context=context)
+ # Generate a set of locations without childs and a dict
+ # giving the parent of each location.
+ leafs = set(all_location_ids)
+ parent = {}
+ for location in locations:
+ if not location.parent: continue
+ if location.parent.id in leafs:
+ leafs.remove(location.parent.id)
+ parent[location.id] = location.parent.id
+
+ while leafs:
+ next_leafs = set()
+ for l in leafs:
+ if l not in parent:
+ continue
+ next_leafs.add(parent[l])
+ for product in res_product_ids:
+ res.setdefault((parent[l], product), 0)
+ res[(parent[l], product)] += res.get((l,product), 0)
+ leafs = next_leafs
+
+ # clean result
+ for location, product in res.keys():
+ if location not in location_ids:
+ del res[(location, product)]
+
+ # Round quantities
+ for location, product in res:
+ key = (location, product)
+ res[key] = uom_obj.compute_qty(cursor, user, default_uom[product],
+ res[key], default_uom[product], round=True,
+ context=context)
+
+ # Complete result with missing products if asked
+ if not skip_zero:
+ keys = ((l,p) for l in location_ids for p in 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:
+ if (storage, product) in res:
+ res[(wh, product)] = res[(storage, product)]
+ if storage in storage_to_remove:
+ del res[(storage, product)]
+
+ return res
+
+ def view_header_get(self, cursor, user, value, view_type='form',
+ context=None):
+ if not context.get('locations'):
+ return False
+ location_obj = self.pool.get('stock.location')
+ locations = location_obj.browse(cursor, user, context.get('locations'),
+ context=context)
+ return value + " (" + ",".join([l.name for l in locations]) + ")"
+
+ def pick_product(self, cursor, user, move, location_quantities, context=None):
+ """
+ Pick the product across the location. Naive (fast)
+ implementation.
+ :param move is a browse record with the product and the quantity to pick.
+ :param location_quantities a list of tuple (location, available_qty)
+ where location is a browse record.
+ """
+ to_pick = []
+ needed_qty = move.quantity
+ for location, available_qty in location_quantities.iteritems():
+ # Ignore available_qty when too small
+ if available_qty < move.uom.rounding:
+ continue
+ if needed_qty <= available_qty:
+ to_pick.append((location, needed_qty))
+ return to_pick
+ else:
+ to_pick.append((location, available_qty))
+ needed_qty -= available_qty
+ # Force assignation for consumables:
+ if move.product.type == "consumable":
+ to_pick.append((move.from_location.id, needed_qty))
+ return to_pick
+ return None
+
+ def assign_try(self, cursor, user, moves, context=None):
+ move_obj = self.pool.get('stock.move')
+ product_obj = self.pool.get('product.product')
+ uom_obj = self.pool.get('product.uom')
+ date_obj = self.pool.get('ir.date')
+
+ if context is None:
+ context = {}
+
+ cursor.execute('LOCK TABLE stock_move')
+
+ local_ctx = context and context.copy() or {}
+ local_ctx['stock_date_end'] = date_obj.today(cursor, user,
+ context=context)
+ local_ctx['stock_assign'] = True
+ pbl = product_obj.products_by_location(cursor, user,
+ location_ids=[m.from_location.id for m in moves],
+ product_ids=[m.product.id for m in moves],
+ context=local_ctx)
+
+ success = True
+ for move in moves:
+ if move.state != 'draft':
+ continue
+ to_location = move.to_location
+ location_qties = {}
+ childs = [m for m in move.from_location.childs] + [move.from_location]
+ for location in childs:
+ if (location.id, move.product.id) in pbl:
+ location_qties[location] = uom_obj.compute_qty(
+ cursor, user, move.product.default_uom,
+ pbl[(location.id, move.product.id)], move.uom,
+ round=False, context=context)
+
+ to_pick = self.pick_product(
+ cursor, user, move, location_qties, context=context)
+
+ if to_pick is None:
+ success = False
+ continue
+ first = True
+ for from_location, qty in to_pick:
+ values = {
+ 'from_location': from_location.id,
+ 'to_location': to_location.id,
+ 'product': move.product.id,
+ 'uom': move.uom.id,
+ 'quantity': qty,
+ 'state': 'assigned',
+ 'company': move.company.id,
+ }
+ for field in ('packing_out', 'packing_in', 'packing_internal'):
+ if move[field]:
+ values.update({field: move[field].id})
+ break
+
+ if first:
+ move_obj.write(cursor, user, move.id, values,
+ context=context)
+ first = False
+ else:
+ move_obj.create(cursor, user, values, context=context)
+
+ qty_defaut_uom = uom_obj.compute_qty(
+ cursor, user, move.uom, qty, move.product.default_uom,
+ round=False, context=context)
+
+ pbl[(from_location.id, move.product.id)] = \
+ pbl.get((from_location.id, move.product.id), 0.0) - qty_defaut_uom
+ pbl[(to_location.id, move.product.id)]= \
+ pbl.get((to_location.id, move.product.id), 0.0) + qty_defaut_uom
+ return success
+
+Product()
+
+
+class ChooseStockDateInit(WizardOSV):
+ _name = 'stock.product_stock_date.init'
+ _description = "Compute stock quantities"
+ forecast_date = fields.Date(
+ 'At Date', help='Allow to compute expected '\
+ 'stock quantities for this date.\n'\
+ '* An empty value is an infinite date in the future.\n'\
+ '* A date in the past will provide historical values.')
+
+ def default_forecast_date(self, cursor, user, context=None):
+ date_obj = self.pool.get('ir.date')
+ return date_obj.today(cursor, user, context=context)
+
+ChooseStockDateInit()
+
+class OpenLocation(Wizard):
+ 'Products by Locations'
+ _name = 'stock.location.open'
+ states = {
+ 'init': {
+ 'result': {
+ 'type': 'form',
+ 'object': 'stock.product_stock_date.init',
+ 'state': [
+ ('end', 'Cancel', 'tryton-cancel'),
+ ('open', 'Open', 'tryton-ok', True),
+ ],
+ },
+ },
+ 'open': {
+ 'result': {
+ 'type': 'action',
+ 'action': '_action_open_location',
+ 'state': 'end',
+ },
+ },
+ }
+
+ def _action_open_location(self, cursor, user, data, context=None):
+ model_data_obj = self.pool.get('ir.model.data')
+ act_window_obj = self.pool.get('ir.action.act_window')
+
+ model_data_ids = model_data_obj.search(cursor, user, [
+ ('fs_id', '=', 'act_location_quantity_tree'),
+ ('module', '=', 'stock'),
+ ('inherit', '=', False),
+ ], limit=1, context=context)
+ model_data = model_data_obj.browse(cursor, user, model_data_ids[0],
+ context=context)
+ res = act_window_obj.read(cursor, user, model_data.db_id, context=context)
+
+ if context == None: context = {}
+ context['product'] = data['id']
+ if data['form']['forecast_date']:
+ context['stock_date_end'] = data['form']['forecast_date']
+ else:
+ context['stock_date_end'] = datetime.date.max
+ res['context'] = str(context)
+
+ return res
+
+OpenLocation()
diff --git a/product.xml b/product.xml
new file mode 100644
index 0000000..4469bdb
--- /dev/null
+++ b/product.xml
@@ -0,0 +1,76 @@
+<?xml version="1.0"?>
+<!-- This file is part of Tryton. The COPYRIGHT file at the top level of this repository contains the full copyright notices and license terms. -->
+<tryton>
+ <data>
+ <record model="ir.ui.view" id="product_view_tree_qty">
+ <field name="model">product.product</field>
+ <field name="type">tree</field>
+ <field name="priority">20</field>
+ <field name="arch" type="xml">
+ <![CDATA[
+ <tree string="Products">
+ <field name="name" select="1"/>
+ <field name="code" select="1"/>
+ <field name="quantity" select="2"/>
+ <field name="forecast_quantity" select="2"/>
+ <field name="default_uom" select="2"/>
+ <field name="active" select="2"/>
+ </tree>
+ ]]>
+ </field>
+ </record>
+
+ <record model="ir.ui.view" id="location_quantity_view_tree">
+ <field name="model">stock.location</field>
+ <field name="type">tree</field>
+ <field name="field_childs">childs</field>
+ <field name="arch" type="xml">
+ <![CDATA[
+ <tree string="Product Stock">
+ <field name="name"/>
+ <field name="quantity"/>
+ <field name="forecast_quantity"/>
+ </tree>
+ ]]>
+ </field>
+ </record>
+ <record model="ir.action.act_window" id="act_location_quantity_tree">
+ <field name="name">Product Stock</field>
+ <field name="src_model">product.product</field>
+ <field name="res_model">stock.location</field>
+ <field name="view_type">tree</field>
+ <field name="domain">[('parent', '=', False)]</field>
+ <field name="window_name" eval="False"/>
+ </record>
+ <record model="ir.action.act_window.view" id="act_location_quantity_tree_view">
+ <field name="sequence" eval="10"/>
+ <field name="view" ref="location_quantity_view_tree"/>
+ <field name="act_window" ref="act_location_quantity_tree"/>
+ </record>
+ <record model="ir.action.wizard" id="wizard_location_open">
+ <field name="name">Product by Location</field>
+ <field name="wiz_name">stock.location.open</field>
+ <field name="model">product.product</field>
+ </record>
+ <record model="ir.action.keyword"
+ id="act_location_quantity_keyword1">
+ <field name="keyword">form_relate</field>
+ <field name="model">product.product,0</field>
+ <field name="action" ref="wizard_location_open"/>
+ </record>
+
+ <record model="ir.ui.view" id="product_stock_date_init_view_form">
+ <field name="model">stock.product_stock_date.init</field>
+ <field name="type">form</field>
+ <field name="arch" type="xml">
+ <![CDATA[
+ <form string="Product Quantity.">
+ <label name="forecast_date"/>
+ <field name="forecast_date"/>
+ </form>
+ ]]>
+ </field>
+ </record>
+
+ </data>
+</tryton>
diff --git a/setup.cfg b/setup.cfg
new file mode 100644
index 0000000..861a9f5
--- /dev/null
+++ b/setup.cfg
@@ -0,0 +1,5 @@
+[egg_info]
+tag_build =
+tag_date = 0
+tag_svn_revision = 0
+
diff --git a/setup.py b/setup.py
new file mode 100644
index 0000000..aa566ac
--- /dev/null
+++ b/setup.py
@@ -0,0 +1,57 @@
+#!/usr/bin/env python
+#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 setuptools import setup, find_packages
+import re
+
+info = eval(file('__tryton__.py').read())
+
+requires = []
+for dep in info.get('depends', []):
+ match = re.compile(
+ '(ir|res|workflow|webdav)((\s|$|<|>|<=|>=|==|!=).*?$)').match(dep)
+ if match:
+ continue
+ else:
+ dep = 'trytond_' + dep
+ requires.append(dep)
+
+major_version, minor_version, _ = info.get('version', '0.0.1').split('.', 2)
+requires.append('trytond >= %s.%s' % (major_version, minor_version))
+requires.append('trytond < %s.%s' % (major_version, str(int(minor_version) + 1)))
+
+setup(name='trytond_stock',
+ version=info.get('version', '0.0.1'),
+ description=info.get('description', ''),
+ author=info.get('author', ''),
+ author_email=info.get('email', ''),
+ url=info.get('website', ''),
+ package_dir={'trytond.modules.stock': '.'},
+ packages=[
+ 'trytond.modules.stock',
+ ],
+ package_data={
+ 'trytond.modules.stock': info.get('xml', []) \
+ + info.get('translation', []) \
+ + ['packing_out.odt'],
+ },
+ classifiers=[
+ 'Development Status :: 5 - Production/Stable',
+ 'Environment :: Plugins',
+ 'Intended Audience :: Developers',
+ 'Intended Audience :: Financial and Insurance Industry',
+ 'Intended Audience :: Legal Industry',
+ 'Intended Audience :: Manufacturing',
+ 'License :: OSI Approved :: GNU General Public License (GPL)',
+ 'Natural Language :: English',
+ 'Natural Language :: French',
+ 'Natural Language :: German',
+ 'Natural Language :: Spanish',
+ 'Operating System :: OS Independent',
+ 'Programming Language :: Python',
+ 'Topic :: Office/Business',
+ ],
+ license='GPL-3',
+ install_requires=requires,
+)
diff --git a/stock.xml b/stock.xml
new file mode 100644
index 0000000..12620dc
--- /dev/null
+++ b/stock.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0"?>
+<!-- This file is part of Tryton. The COPYRIGHT file at the top level of this repository contains the full copyright notices and license terms. -->
+<tryton>
+ <data>
+ <record model="res.group" id="group_stock_admin">
+ <field name="name">Stock Administration</field>
+ </record>
+ <record model="res.group" id="group_stock">
+ <field name="name">Stock</field>
+ </record>
+ <record model="res.user" id="res.user_admin">
+ <field name="groups" eval="[('add', ref('group_stock_admin')), ('add', ref('group_stock'))]"/>
+ </record>
+
+ <menuitem name="Inventory Management" sequence="3" id="menu_stock"
+ icon="tryton-package"/>
+ <menuitem name="Configuration" parent="menu_stock"
+ id="menu_configuration" groups="group_stock_admin"
+ sequence="0" icon="tryton-preferences"/>
+ </data>
+</tryton>
diff --git a/tests/__init__.py b/tests/__init__.py
new file mode 100644
index 0000000..9f5f534
--- /dev/null
+++ b/tests/__init__.py
@@ -0,0 +1,3 @@
+#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 test_stock import *
diff --git a/tests/test_stock.py b/tests/test_stock.py
new file mode 100644
index 0000000..b9925cb
--- /dev/null
+++ b/tests/test_stock.py
@@ -0,0 +1,54 @@
+#!/usr/bin/env python
+#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 sys, os
+DIR = os.path.abspath(os.path.normpath(os.path.join(__file__,
+ '..', '..', '..', '..', '..', 'trytond')))
+if os.path.isdir(DIR):
+ sys.path.insert(0, os.path.dirname(DIR))
+
+import unittest
+import trytond.tests
+from trytond.tests import RPCProxy, CONTEXT, SOCK
+
+class StockTestCase(unittest.TestCase):
+ '''
+ Test Stock module.
+ '''
+
+ def setUp(self):
+ trytond.tests.install_module('stock')
+ self.location = RPCProxy('stock.location')
+
+ def test0990location(self):
+ '''
+ Create locations.
+ '''
+ storage_id = self.location.search([
+ ('code', '=', 'STO'),
+ ], CONTEXT)[0]
+
+ new_locations = [storage_id]
+
+ for j in range(5):
+ parent_locations = new_locations
+ new_locations = []
+ for parent_location in parent_locations:
+ for i in range(4):
+ location_id = self.location.create({
+ 'name': 'Test ' + str(j) + ' ' + str(i),
+ 'parent': parent_location,
+ 'type': 'storage',
+ }, CONTEXT)
+ new_locations.append(location_id)
+
+
+def suite():
+ return unittest.TestLoader().loadTestsFromTestCase(StockTestCase)
+
+if __name__ == '__main__':
+ suiteTrytond = trytond.tests.suite()
+ suiteStock = suite()
+ alltests = unittest.TestSuite([suiteTrytond, suiteStock])
+ unittest.TextTestRunner(verbosity=2).run(alltests)
+ SOCK.disconnect()
diff --git a/trytond_stock.egg-info/PKG-INFO b/trytond_stock.egg-info/PKG-INFO
new file mode 100644
index 0000000..1faa74c
--- /dev/null
+++ b/trytond_stock.egg-info/PKG-INFO
@@ -0,0 +1,33 @@
+Metadata-Version: 1.0
+Name: trytond-stock
+Version: 1.0.0
+Summary: Stock Management and Inventory Control with:
+ - Location definition
+ - Stock move
+ - Packing Supplier / Customer / Internal
+ - Stock Inventory
+
+And with reports:
+ - Customer Packing
+ - Products by Locations
+
+Home-page: http://www.tryton.org/
+Author: B2CK
+Author-email: info at b2ck.com
+License: GPL-3
+Description: UNKNOWN
+Platform: UNKNOWN
+Classifier: Development Status :: 5 - Production/Stable
+Classifier: Environment :: Plugins
+Classifier: Intended Audience :: Developers
+Classifier: Intended Audience :: Financial and Insurance Industry
+Classifier: Intended Audience :: Legal Industry
+Classifier: Intended Audience :: Manufacturing
+Classifier: License :: OSI Approved :: GNU General Public License (GPL)
+Classifier: Natural Language :: English
+Classifier: Natural Language :: French
+Classifier: Natural Language :: German
+Classifier: Natural Language :: Spanish
+Classifier: Operating System :: OS Independent
+Classifier: Programming Language :: Python
+Classifier: Topic :: Office/Business
diff --git a/trytond_stock.egg-info/SOURCES.txt b/trytond_stock.egg-info/SOURCES.txt
new file mode 100644
index 0000000..7cd3be6
--- /dev/null
+++ b/trytond_stock.egg-info/SOURCES.txt
@@ -0,0 +1,33 @@
+CHANGELOG
+COPYRIGHT
+INSTALL
+LICENSE
+MANIFEST.in
+README
+TODO
+de_DE.csv
+es_ES.csv
+fr_FR.csv
+inventory.xml
+location.xml
+move.xml
+packing.xml
+packing_out.odt
+product.xml
+setup.py
+stock.xml
+./__init__.py
+./__tryton__.py
+./inventory.py
+./location.py
+./move.py
+./packing.py
+./product.py
+doc/index_en.rst
+tests/__init__.py
+tests/test_stock.py
+trytond_stock.egg-info/PKG-INFO
+trytond_stock.egg-info/SOURCES.txt
+trytond_stock.egg-info/dependency_links.txt
+trytond_stock.egg-info/requires.txt
+trytond_stock.egg-info/top_level.txt
\ No newline at end of file
diff --git a/trytond_stock.egg-info/dependency_links.txt b/trytond_stock.egg-info/dependency_links.txt
new file mode 100644
index 0000000..8b13789
--- /dev/null
+++ b/trytond_stock.egg-info/dependency_links.txt
@@ -0,0 +1 @@
+
diff --git a/trytond_stock.egg-info/requires.txt b/trytond_stock.egg-info/requires.txt
new file mode 100644
index 0000000..2bc3e8b
--- /dev/null
+++ b/trytond_stock.egg-info/requires.txt
@@ -0,0 +1,6 @@
+trytond_party
+trytond_product
+trytond_company
+trytond_currency
+trytond >= 1.0
+trytond < 1.1
\ No newline at end of file
diff --git a/trytond_stock.egg-info/top_level.txt b/trytond_stock.egg-info/top_level.txt
new file mode 100644
index 0000000..93df119
--- /dev/null
+++ b/trytond_stock.egg-info/top_level.txt
@@ -0,0 +1 @@
+trytond
--
tryton-modules-stock
More information about the tryton-debian-vcs
mailing list