瀏覽代碼

commit inicial

Rodney Enciso Arias 8 年之前
當前提交
691a91add2
共有 21 個文件被更改,包括 1453 次插入0 次删除
  1. 18 0
      README.rst
  2. 3 0
      __init__.py
  3. 二進制
      __init__.pyc
  4. 41 0
      __openerp__.py
  5. 223 0
      i18n/es.po
  6. 222 0
      i18n/fr.po
  7. 222 0
      i18n/pt_BR.po
  8. 222 0
      i18n/ro.po
  9. 223 0
      i18n/sl.po
  10. 2 0
      models/__init__.py
  11. 二進制
      models/__init__.pyc
  12. 86 0
      models/stock_inventory.py
  13. 二進制
      models/stock_inventory.pyc
  14. 2 0
      security/.directory
  15. 2 0
      security/ir.model.access.csv
  16. 40 0
      views/inventory_view.xml
  17. 2 0
      wizard/__init__.py
  18. 二進制
      wizard/__init__.pyc
  19. 103 0
      wizard/import_inventory.py
  20. 二進制
      wizard/import_inventory.pyc
  21. 42 0
      wizard/import_inventory_view.xml

+ 18 - 0
README.rst

@@ -0,0 +1,18 @@
+Stock Inventory Import from CSV file
+====================================
+
+Wizard to import Inventory from a CSV file
+The file must have at least 2 columns with "code" and "quantity" Head Keys.
+You can also add a third column with Key "location" to add product location
+(if not defined, default inventory location will be used)
+You can also add a fourth column with Key "lot" to add a product lot.
+
+Credits
+=======
+
+Contributors
+------------
+* Daniel Campos <danielcampos@avanzosc.es>
+* Pedro M. Baeza <pedro.baeza@serviciosbaeza.com>
+* Ana Juaristi <ajuaristio@gmail.com>
+* Oihane Crucelaegui <oihanecrucelaegi@avanzosc.es>

+ 3 - 0
__init__.py

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

二進制
__init__.pyc


+ 41 - 0
__openerp__.py

@@ -0,0 +1,41 @@
+# -*- encoding: utf-8 -*-
+##############################################################################
+#
+#    This program is free software: you can redistribute it and/or modify
+#    it under the terms of the GNU Affero General Public License as published
+#    by the Free Software Foundation, either version 3 of the License, or
+#    (at your option) any later version.
+#
+#    This program is distributed in the hope that it will be useful,
+#    but WITHOUT ANY WARRANTY; without even the implied warranty of
+#    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+#    GNU General Public License for more details.
+#
+#    You should have received a copy of the GNU Affero General Public License
+#    along with this program.  If not, see http://www.gnu.org/licenses/.
+#
+##############################################################################
+{
+    "name": "Stock Inventory Import from CSV file",
+    "version": "8.0.1.0.0",
+    "category": "Generic Modules",
+    "author": "OdooMRP team, "
+              "AvanzOSC, "
+              "Serv. Tecnol. Avanzados - Pedro M. Baeza",
+    "contributors": [
+        "Daniel Campos <danielcampos@avanzosc.es>",
+        "Pedro M. Baeza <pedro.baeza@serviciosbaeza.com>",
+        "Ana Juaristi <ajuaristio@gmail.com>",
+        "Oihane Crucelaegui <oihanecrucelaegi@avanzosc.es>",
+    ],
+    "website": "http://www.odoomrp.com",
+    "depends": [
+        "stock",
+    ],
+    "data": [
+        "security/ir.model.access.csv",
+        "wizard/import_inventory_view.xml",
+        "views/inventory_view.xml",
+    ],
+    "installable": True,
+}

+ 223 - 0
i18n/es.po

@@ -0,0 +1,223 @@
+# Translation of Odoo Server.
+# This file contains the translation of the following modules:
+# * stock_inventory_import
+# 
+# Translators:
+# Ismael Calvo <ismaelcj@gmail.com>, 2015
+msgid ""
+msgstr ""
+"Project-Id-Version: odoomrp-wip (8.0)\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2015-11-20 18:11+0000\n"
+"PO-Revision-Date: 2015-11-13 15:51+0000\n"
+"Last-Translator: OCA Transbot <transbot@odoo-community.org>\n"
+"Language-Team: Spanish (http://www.transifex.com/oca/odoomrp-wip-8-0/language/es/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: \n"
+"Language: es\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#. module: stock_inventory_import
+#: code:addons/stock_inventory_import/models/stock_inventory.py:14
+#, python-format
+msgid "By File"
+msgstr "Por archivo"
+
+#. module: stock_inventory_import
+#: view:import.inventory:stock_inventory_import.view_import_inventory
+msgid "Cancel"
+msgstr "Cancelar"
+
+#. module: stock_inventory_import
+#: field:import.inventory,create_uid:0
+#: field:stock.inventory.import.line,create_uid:0
+msgid "Created by"
+msgstr "Creado por"
+
+#. module: stock_inventory_import
+#: field:import.inventory,create_date:0
+#: field:stock.inventory.import.line,create_date:0
+msgid "Created on"
+msgstr "Creado el"
+
+#. module: stock_inventory_import
+#: field:import.inventory,location:0
+msgid "Default Location"
+msgstr "Ubicación por defecto"
+
+#. module: stock_inventory_import
+#: help:import.inventory,delimeter:0
+msgid "Default delimeter is \",\""
+msgstr "El delimitador por defecto es \",\""
+
+#. module: stock_inventory_import
+#: field:import.inventory,delimeter:0
+msgid "Delimeter"
+msgstr "Delimitador"
+
+#. module: stock_inventory_import
+#: field:stock.inventory.import.line,fail:0
+msgid "Fail"
+msgstr "Fallo"
+
+#. module: stock_inventory_import
+#: field:stock.inventory.import.line,fail_reason:0
+msgid "Fail Reason"
+msgstr "Motivo del fallo"
+
+#. module: stock_inventory_import
+#: field:import.inventory,data:0
+msgid "File"
+msgstr "Archivo"
+
+#. module: stock_inventory_import
+#: field:import.inventory,name:0
+msgid "Filename"
+msgstr "Nombre del archivo"
+
+#. module: stock_inventory_import
+#: field:stock.inventory.import.line,product:0
+msgid "Found Product"
+msgstr "Producto encontrado"
+
+#. module: stock_inventory_import
+#: field:import.inventory,id:0 field:stock.inventory.import.line,id:0
+msgid "ID"
+msgstr "ID"
+
+#. module: stock_inventory_import
+#: view:import.inventory:stock_inventory_import.view_import_inventory
+msgid "Import"
+msgstr "Importar"
+
+#. module: stock_inventory_import
+#: view:import.inventory:stock_inventory_import.view_import_inventory
+#: model:ir.actions.act_window,name:stock_inventory_import.action_import_inventory
+msgid "Import Inventory"
+msgstr "Importar inventario"
+
+#. module: stock_inventory_import
+#: model:ir.model,name:stock_inventory_import.model_import_inventory
+msgid "Import inventory"
+msgstr "Importar inventario"
+
+#. module: stock_inventory_import
+#: field:stock.inventory,imported:0
+msgid "Imported"
+msgstr "Importado"
+
+#. module: stock_inventory_import
+#: view:stock.inventory:stock_inventory_import.view_inventory_form_inherit
+#: field:stock.inventory,import_lines:0
+msgid "Imported Lines"
+msgstr "Líneas importadas"
+
+#. module: stock_inventory_import
+#: model:ir.model,name:stock_inventory_import.model_stock_inventory
+#: field:stock.inventory.import.line,inventory_id:0
+msgid "Inventory"
+msgstr "Inventario"
+
+#. module: stock_inventory_import
+#: field:import.inventory,write_uid:0
+#: field:stock.inventory.import.line,write_uid:0
+msgid "Last Updated by"
+msgstr "Última actualización por"
+
+#. module: stock_inventory_import
+#: field:import.inventory,write_date:0
+#: field:stock.inventory.import.line,write_date:0
+msgid "Last Updated on"
+msgstr "Última actualización el"
+
+#. module: stock_inventory_import
+#: view:stock.inventory:stock_inventory_import.view_inventory_form_inherit
+msgid "Load File"
+msgstr "Cargar archivo"
+
+#. module: stock_inventory_import
+#: code:addons/stock_inventory_import/models/stock_inventory.py:84
+#, python-format
+msgid "Loaded lines must be processed at least one time for inventory : %s"
+msgstr "Las líneas cargadas han de ser procesadas al menos una vez por inventario : %s"
+
+#. module: stock_inventory_import
+#: field:stock.inventory.import.line,location_id:0
+msgid "Location"
+msgstr "Ubicación"
+
+#. module: stock_inventory_import
+#: code:addons/stock_inventory_import/models/stock_inventory.py:25
+#: code:addons/stock_inventory_import/wizard/import_inventory.py:87
+#, python-format
+msgid "No processed"
+msgstr "No procesado"
+
+#. module: stock_inventory_import
+#: code:addons/stock_inventory_import/models/stock_inventory.py:56
+#, python-format
+msgid "No product code found"
+msgstr "Código de producto no encontrado\""
+
+#. module: stock_inventory_import
+#: code:addons/stock_inventory_import/wizard/import_inventory.py:59
+#, python-format
+msgid "Not 'code' or 'quantity' keys found"
+msgstr "No se encontraron las claves 'code' ó 'quantity'"
+
+#. module: stock_inventory_import
+#: code:addons/stock_inventory_import/wizard/import_inventory.py:53
+#, python-format
+msgid "Not a valid file!"
+msgstr "¡No es un archivo válido!"
+
+#. module: stock_inventory_import
+#: view:stock.inventory:stock_inventory_import.view_inventory_form_inherit
+msgid "Process File Lines"
+msgstr "Procesar las líneas del archivo"
+
+#. module: stock_inventory_import
+#: code:addons/stock_inventory_import/models/stock_inventory.py:76
+#, python-format
+msgid "Processed"
+msgstr "Procesado"
+
+#. module: stock_inventory_import
+#: field:stock.inventory.import.line,code:0
+msgid "Product Code"
+msgstr "Código de producto"
+
+#. module: stock_inventory_import
+#: field:stock.inventory.import.line,lot:0
+msgid "Product Lot"
+msgstr "Lote de producto"
+
+#. module: stock_inventory_import
+#: field:stock.inventory.import.line,quantity:0
+msgid "Quantity"
+msgstr "Cantidad"
+
+#. module: stock_inventory_import
+#: model:ir.model,name:stock_inventory_import.model_stock_inventory_import_line
+msgid "Stock Inventory Import Line"
+msgstr "Línea del importador de inventario de existencias"
+
+#. module: stock_inventory_import
+#: view:import.inventory:stock_inventory_import.view_import_inventory
+msgid ""
+"The file must have 2 column keys:                 'code' => for product "
+"reference                 'quantity' => for product quantity"
+msgstr ""
+
+#. module: stock_inventory_import
+#: code:addons/stock_inventory_import/models/stock_inventory.py:43
+#, python-format
+msgid "There must be one line at least to process"
+msgstr "Debe haber al menos una línea a procesar"
+
+#. module: stock_inventory_import
+#: code:addons/stock_inventory_import/wizard/import_inventory.py:37
+#, python-format
+msgid "You need to select a file!"
+msgstr "¡Es necesario seleccionar un archivo!"

+ 222 - 0
i18n/fr.po

@@ -0,0 +1,222 @@
+# Translation of Odoo Server.
+# This file contains the translation of the following modules:
+# * stock_inventory_import
+# 
+# Translators:
+msgid ""
+msgstr ""
+"Project-Id-Version: odoomrp-wip (8.0)\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2015-10-07 10:45+0000\n"
+"PO-Revision-Date: 2015-09-10 16:42+0000\n"
+"Last-Translator: <>\n"
+"Language-Team: French (http://www.transifex.com/oca/odoomrp-wip-8-0/language/fr/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: \n"
+"Language: fr\n"
+"Plural-Forms: nplurals=2; plural=(n > 1);\n"
+
+#. module: stock_inventory_import
+#: code:addons/stock_inventory_import/models/stock_inventory.py:11
+#, python-format
+msgid "By File"
+msgstr ""
+
+#. module: stock_inventory_import
+#: view:import.inventory:stock_inventory_import.view_import_inventory
+msgid "Cancel"
+msgstr "Annuler"
+
+#. module: stock_inventory_import
+#: field:import.inventory,create_uid:0
+#: field:stock.inventory.import.line,create_uid:0
+msgid "Created by"
+msgstr "Créé par"
+
+#. module: stock_inventory_import
+#: field:import.inventory,create_date:0
+#: field:stock.inventory.import.line,create_date:0
+msgid "Created on"
+msgstr "Créé le"
+
+#. module: stock_inventory_import
+#: field:import.inventory,location:0
+msgid "Default Location"
+msgstr ""
+
+#. module: stock_inventory_import
+#: help:import.inventory,delimeter:0
+msgid "Default delimeter is \",\""
+msgstr ""
+
+#. module: stock_inventory_import
+#: field:import.inventory,delimeter:0
+msgid "Delimeter"
+msgstr ""
+
+#. module: stock_inventory_import
+#: field:stock.inventory.import.line,fail:0
+msgid "Fail"
+msgstr ""
+
+#. module: stock_inventory_import
+#: field:stock.inventory.import.line,fail_reason:0
+msgid "Fail Reason"
+msgstr ""
+
+#. module: stock_inventory_import
+#: field:import.inventory,data:0
+msgid "File"
+msgstr ""
+
+#. module: stock_inventory_import
+#: field:import.inventory,name:0
+msgid "Filename"
+msgstr ""
+
+#. module: stock_inventory_import
+#: field:stock.inventory.import.line,product:0
+msgid "Found Product"
+msgstr ""
+
+#. module: stock_inventory_import
+#: field:import.inventory,id:0 field:stock.inventory.import.line,id:0
+msgid "ID"
+msgstr "Id."
+
+#. module: stock_inventory_import
+#: view:import.inventory:stock_inventory_import.view_import_inventory
+msgid "Import"
+msgstr ""
+
+#. module: stock_inventory_import
+#: view:import.inventory:stock_inventory_import.view_import_inventory
+#: model:ir.actions.act_window,name:stock_inventory_import.action_import_inventory
+msgid "Import Inventory"
+msgstr ""
+
+#. module: stock_inventory_import
+#: model:ir.model,name:stock_inventory_import.model_import_inventory
+msgid "Import inventory"
+msgstr ""
+
+#. module: stock_inventory_import
+#: field:stock.inventory,imported:0
+msgid "Imported"
+msgstr ""
+
+#. module: stock_inventory_import
+#: view:stock.inventory:stock_inventory_import.view_inventory_form_inherit
+#: field:stock.inventory,import_lines:0
+msgid "Imported Lines"
+msgstr ""
+
+#. module: stock_inventory_import
+#: model:ir.model,name:stock_inventory_import.model_stock_inventory
+#: field:stock.inventory.import.line,inventory_id:0
+msgid "Inventory"
+msgstr ""
+
+#. module: stock_inventory_import
+#: field:import.inventory,write_uid:0
+#: field:stock.inventory.import.line,write_uid:0
+msgid "Last Updated by"
+msgstr "Mis à jour par"
+
+#. module: stock_inventory_import
+#: field:import.inventory,write_date:0
+#: field:stock.inventory.import.line,write_date:0
+msgid "Last Updated on"
+msgstr "Mis à jour le"
+
+#. module: stock_inventory_import
+#: view:stock.inventory:stock_inventory_import.view_inventory_form_inherit
+msgid "Load File"
+msgstr ""
+
+#. module: stock_inventory_import
+#: code:addons/stock_inventory_import/models/stock_inventory.py:77
+#, python-format
+msgid "Loaded lines must be processed at least one time for inventory : %s"
+msgstr ""
+
+#. module: stock_inventory_import
+#: field:stock.inventory.import.line,location_id:0
+msgid "Location"
+msgstr ""
+
+#. module: stock_inventory_import
+#: code:addons/stock_inventory_import/models/stock_inventory.py:20
+#: code:addons/stock_inventory_import/wizard/import_inventory.py:88
+#, python-format
+msgid "No processed"
+msgstr ""
+
+#. module: stock_inventory_import
+#: code:addons/stock_inventory_import/models/stock_inventory.py:50
+#, python-format
+msgid "No product code found"
+msgstr ""
+
+#. module: stock_inventory_import
+#: code:addons/stock_inventory_import/wizard/import_inventory.py:59
+#, python-format
+msgid "Not 'code' or 'quantity' keys found"
+msgstr ""
+
+#. module: stock_inventory_import
+#: code:addons/stock_inventory_import/wizard/import_inventory.py:53
+#, python-format
+msgid "Not a valid file!"
+msgstr ""
+
+#. module: stock_inventory_import
+#: view:stock.inventory:stock_inventory_import.view_inventory_form_inherit
+msgid "Process File Lines"
+msgstr ""
+
+#. module: stock_inventory_import
+#: code:addons/stock_inventory_import/models/stock_inventory.py:69
+#, python-format
+msgid "Processed"
+msgstr ""
+
+#. module: stock_inventory_import
+#: field:stock.inventory.import.line,code:0
+msgid "Product Code"
+msgstr ""
+
+#. module: stock_inventory_import
+#: field:stock.inventory.import.line,lot:0
+msgid "Product Lot"
+msgstr ""
+
+#. module: stock_inventory_import
+#: field:stock.inventory.import.line,quantity:0
+msgid "Quantity"
+msgstr ""
+
+#. module: stock_inventory_import
+#: model:ir.model,name:stock_inventory_import.model_stock_inventory_import_line
+msgid "Stock Inventory Import Line"
+msgstr ""
+
+#. module: stock_inventory_import
+#: view:import.inventory:stock_inventory_import.view_import_inventory
+msgid ""
+"The file must have 2 column keys:                 'code' => for product "
+"referente                 'quantity' => for product quantity"
+msgstr ""
+
+#. module: stock_inventory_import
+#: code:addons/stock_inventory_import/models/stock_inventory.py:37
+#, python-format
+msgid "There must be one line at least to process"
+msgstr ""
+
+#. module: stock_inventory_import
+#: code:addons/stock_inventory_import/wizard/import_inventory.py:37
+#, python-format
+msgid "You need to select a file!"
+msgstr ""

+ 222 - 0
i18n/pt_BR.po

@@ -0,0 +1,222 @@
+# Translation of Odoo Server.
+# This file contains the translation of the following modules:
+# * stock_inventory_import
+# 
+# Translators:
+msgid ""
+msgstr ""
+"Project-Id-Version: odoomrp-wip (8.0)\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2015-10-07 10:45+0000\n"
+"PO-Revision-Date: 2015-10-09 03:44+0000\n"
+"Last-Translator: danimaribeiro <danimaribeiro@gmail.com>\n"
+"Language-Team: Portuguese (Brazil) (http://www.transifex.com/oca/odoomrp-wip-8-0/language/pt_BR/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: \n"
+"Language: pt_BR\n"
+"Plural-Forms: nplurals=2; plural=(n > 1);\n"
+
+#. module: stock_inventory_import
+#: code:addons/stock_inventory_import/models/stock_inventory.py:11
+#, python-format
+msgid "By File"
+msgstr ""
+
+#. module: stock_inventory_import
+#: view:import.inventory:stock_inventory_import.view_import_inventory
+msgid "Cancel"
+msgstr "Cancelar"
+
+#. module: stock_inventory_import
+#: field:import.inventory,create_uid:0
+#: field:stock.inventory.import.line,create_uid:0
+msgid "Created by"
+msgstr "Criado por"
+
+#. module: stock_inventory_import
+#: field:import.inventory,create_date:0
+#: field:stock.inventory.import.line,create_date:0
+msgid "Created on"
+msgstr "Criado em"
+
+#. module: stock_inventory_import
+#: field:import.inventory,location:0
+msgid "Default Location"
+msgstr ""
+
+#. module: stock_inventory_import
+#: help:import.inventory,delimeter:0
+msgid "Default delimeter is \",\""
+msgstr ""
+
+#. module: stock_inventory_import
+#: field:import.inventory,delimeter:0
+msgid "Delimeter"
+msgstr ""
+
+#. module: stock_inventory_import
+#: field:stock.inventory.import.line,fail:0
+msgid "Fail"
+msgstr ""
+
+#. module: stock_inventory_import
+#: field:stock.inventory.import.line,fail_reason:0
+msgid "Fail Reason"
+msgstr ""
+
+#. module: stock_inventory_import
+#: field:import.inventory,data:0
+msgid "File"
+msgstr ""
+
+#. module: stock_inventory_import
+#: field:import.inventory,name:0
+msgid "Filename"
+msgstr ""
+
+#. module: stock_inventory_import
+#: field:stock.inventory.import.line,product:0
+msgid "Found Product"
+msgstr ""
+
+#. module: stock_inventory_import
+#: field:import.inventory,id:0 field:stock.inventory.import.line,id:0
+msgid "ID"
+msgstr "ID"
+
+#. module: stock_inventory_import
+#: view:import.inventory:stock_inventory_import.view_import_inventory
+msgid "Import"
+msgstr ""
+
+#. module: stock_inventory_import
+#: view:import.inventory:stock_inventory_import.view_import_inventory
+#: model:ir.actions.act_window,name:stock_inventory_import.action_import_inventory
+msgid "Import Inventory"
+msgstr ""
+
+#. module: stock_inventory_import
+#: model:ir.model,name:stock_inventory_import.model_import_inventory
+msgid "Import inventory"
+msgstr ""
+
+#. module: stock_inventory_import
+#: field:stock.inventory,imported:0
+msgid "Imported"
+msgstr ""
+
+#. module: stock_inventory_import
+#: view:stock.inventory:stock_inventory_import.view_inventory_form_inherit
+#: field:stock.inventory,import_lines:0
+msgid "Imported Lines"
+msgstr ""
+
+#. module: stock_inventory_import
+#: model:ir.model,name:stock_inventory_import.model_stock_inventory
+#: field:stock.inventory.import.line,inventory_id:0
+msgid "Inventory"
+msgstr ""
+
+#. module: stock_inventory_import
+#: field:import.inventory,write_uid:0
+#: field:stock.inventory.import.line,write_uid:0
+msgid "Last Updated by"
+msgstr "Última atualização por"
+
+#. module: stock_inventory_import
+#: field:import.inventory,write_date:0
+#: field:stock.inventory.import.line,write_date:0
+msgid "Last Updated on"
+msgstr "Última atualização em"
+
+#. module: stock_inventory_import
+#: view:stock.inventory:stock_inventory_import.view_inventory_form_inherit
+msgid "Load File"
+msgstr ""
+
+#. module: stock_inventory_import
+#: code:addons/stock_inventory_import/models/stock_inventory.py:77
+#, python-format
+msgid "Loaded lines must be processed at least one time for inventory : %s"
+msgstr ""
+
+#. module: stock_inventory_import
+#: field:stock.inventory.import.line,location_id:0
+msgid "Location"
+msgstr ""
+
+#. module: stock_inventory_import
+#: code:addons/stock_inventory_import/models/stock_inventory.py:20
+#: code:addons/stock_inventory_import/wizard/import_inventory.py:88
+#, python-format
+msgid "No processed"
+msgstr ""
+
+#. module: stock_inventory_import
+#: code:addons/stock_inventory_import/models/stock_inventory.py:50
+#, python-format
+msgid "No product code found"
+msgstr ""
+
+#. module: stock_inventory_import
+#: code:addons/stock_inventory_import/wizard/import_inventory.py:59
+#, python-format
+msgid "Not 'code' or 'quantity' keys found"
+msgstr ""
+
+#. module: stock_inventory_import
+#: code:addons/stock_inventory_import/wizard/import_inventory.py:53
+#, python-format
+msgid "Not a valid file!"
+msgstr ""
+
+#. module: stock_inventory_import
+#: view:stock.inventory:stock_inventory_import.view_inventory_form_inherit
+msgid "Process File Lines"
+msgstr ""
+
+#. module: stock_inventory_import
+#: code:addons/stock_inventory_import/models/stock_inventory.py:69
+#, python-format
+msgid "Processed"
+msgstr ""
+
+#. module: stock_inventory_import
+#: field:stock.inventory.import.line,code:0
+msgid "Product Code"
+msgstr ""
+
+#. module: stock_inventory_import
+#: field:stock.inventory.import.line,lot:0
+msgid "Product Lot"
+msgstr ""
+
+#. module: stock_inventory_import
+#: field:stock.inventory.import.line,quantity:0
+msgid "Quantity"
+msgstr ""
+
+#. module: stock_inventory_import
+#: model:ir.model,name:stock_inventory_import.model_stock_inventory_import_line
+msgid "Stock Inventory Import Line"
+msgstr ""
+
+#. module: stock_inventory_import
+#: view:import.inventory:stock_inventory_import.view_import_inventory
+msgid ""
+"The file must have 2 column keys:                 'code' => for product "
+"referente                 'quantity' => for product quantity"
+msgstr ""
+
+#. module: stock_inventory_import
+#: code:addons/stock_inventory_import/models/stock_inventory.py:37
+#, python-format
+msgid "There must be one line at least to process"
+msgstr ""
+
+#. module: stock_inventory_import
+#: code:addons/stock_inventory_import/wizard/import_inventory.py:37
+#, python-format
+msgid "You need to select a file!"
+msgstr ""

+ 222 - 0
i18n/ro.po

@@ -0,0 +1,222 @@
+# Translation of Odoo Server.
+# This file contains the translation of the following modules:
+# * stock_inventory_import
+# 
+# Translators:
+msgid ""
+msgstr ""
+"Project-Id-Version: odoomrp-wip (8.0)\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2015-11-20 18:11+0000\n"
+"PO-Revision-Date: 2015-11-13 15:51+0000\n"
+"Last-Translator: OCA Transbot <transbot@odoo-community.org>\n"
+"Language-Team: Romanian (http://www.transifex.com/oca/odoomrp-wip-8-0/language/ro/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: \n"
+"Language: ro\n"
+"Plural-Forms: nplurals=3; plural=(n==1?0:(((n%100>19)||((n%100==0)&&(n!=0)))?2:1));\n"
+
+#. module: stock_inventory_import
+#: code:addons/stock_inventory_import/models/stock_inventory.py:14
+#, python-format
+msgid "By File"
+msgstr ""
+
+#. module: stock_inventory_import
+#: view:import.inventory:stock_inventory_import.view_import_inventory
+msgid "Cancel"
+msgstr "Anulare"
+
+#. module: stock_inventory_import
+#: field:import.inventory,create_uid:0
+#: field:stock.inventory.import.line,create_uid:0
+msgid "Created by"
+msgstr "Creat de"
+
+#. module: stock_inventory_import
+#: field:import.inventory,create_date:0
+#: field:stock.inventory.import.line,create_date:0
+msgid "Created on"
+msgstr "Creat în"
+
+#. module: stock_inventory_import
+#: field:import.inventory,location:0
+msgid "Default Location"
+msgstr ""
+
+#. module: stock_inventory_import
+#: help:import.inventory,delimeter:0
+msgid "Default delimeter is \",\""
+msgstr ""
+
+#. module: stock_inventory_import
+#: field:import.inventory,delimeter:0
+msgid "Delimeter"
+msgstr ""
+
+#. module: stock_inventory_import
+#: field:stock.inventory.import.line,fail:0
+msgid "Fail"
+msgstr ""
+
+#. module: stock_inventory_import
+#: field:stock.inventory.import.line,fail_reason:0
+msgid "Fail Reason"
+msgstr ""
+
+#. module: stock_inventory_import
+#: field:import.inventory,data:0
+msgid "File"
+msgstr ""
+
+#. module: stock_inventory_import
+#: field:import.inventory,name:0
+msgid "Filename"
+msgstr ""
+
+#. module: stock_inventory_import
+#: field:stock.inventory.import.line,product:0
+msgid "Found Product"
+msgstr ""
+
+#. module: stock_inventory_import
+#: field:import.inventory,id:0 field:stock.inventory.import.line,id:0
+msgid "ID"
+msgstr "ID"
+
+#. module: stock_inventory_import
+#: view:import.inventory:stock_inventory_import.view_import_inventory
+msgid "Import"
+msgstr ""
+
+#. module: stock_inventory_import
+#: view:import.inventory:stock_inventory_import.view_import_inventory
+#: model:ir.actions.act_window,name:stock_inventory_import.action_import_inventory
+msgid "Import Inventory"
+msgstr ""
+
+#. module: stock_inventory_import
+#: model:ir.model,name:stock_inventory_import.model_import_inventory
+msgid "Import inventory"
+msgstr ""
+
+#. module: stock_inventory_import
+#: field:stock.inventory,imported:0
+msgid "Imported"
+msgstr ""
+
+#. module: stock_inventory_import
+#: view:stock.inventory:stock_inventory_import.view_inventory_form_inherit
+#: field:stock.inventory,import_lines:0
+msgid "Imported Lines"
+msgstr ""
+
+#. module: stock_inventory_import
+#: model:ir.model,name:stock_inventory_import.model_stock_inventory
+#: field:stock.inventory.import.line,inventory_id:0
+msgid "Inventory"
+msgstr ""
+
+#. module: stock_inventory_import
+#: field:import.inventory,write_uid:0
+#: field:stock.inventory.import.line,write_uid:0
+msgid "Last Updated by"
+msgstr "Ultima actualizare de"
+
+#. module: stock_inventory_import
+#: field:import.inventory,write_date:0
+#: field:stock.inventory.import.line,write_date:0
+msgid "Last Updated on"
+msgstr "Ultima actualizare în"
+
+#. module: stock_inventory_import
+#: view:stock.inventory:stock_inventory_import.view_inventory_form_inherit
+msgid "Load File"
+msgstr ""
+
+#. module: stock_inventory_import
+#: code:addons/stock_inventory_import/models/stock_inventory.py:84
+#, python-format
+msgid "Loaded lines must be processed at least one time for inventory : %s"
+msgstr ""
+
+#. module: stock_inventory_import
+#: field:stock.inventory.import.line,location_id:0
+msgid "Location"
+msgstr ""
+
+#. module: stock_inventory_import
+#: code:addons/stock_inventory_import/models/stock_inventory.py:25
+#: code:addons/stock_inventory_import/wizard/import_inventory.py:87
+#, python-format
+msgid "No processed"
+msgstr ""
+
+#. module: stock_inventory_import
+#: code:addons/stock_inventory_import/models/stock_inventory.py:56
+#, python-format
+msgid "No product code found"
+msgstr ""
+
+#. module: stock_inventory_import
+#: code:addons/stock_inventory_import/wizard/import_inventory.py:59
+#, python-format
+msgid "Not 'code' or 'quantity' keys found"
+msgstr ""
+
+#. module: stock_inventory_import
+#: code:addons/stock_inventory_import/wizard/import_inventory.py:53
+#, python-format
+msgid "Not a valid file!"
+msgstr ""
+
+#. module: stock_inventory_import
+#: view:stock.inventory:stock_inventory_import.view_inventory_form_inherit
+msgid "Process File Lines"
+msgstr ""
+
+#. module: stock_inventory_import
+#: code:addons/stock_inventory_import/models/stock_inventory.py:76
+#, python-format
+msgid "Processed"
+msgstr ""
+
+#. module: stock_inventory_import
+#: field:stock.inventory.import.line,code:0
+msgid "Product Code"
+msgstr ""
+
+#. module: stock_inventory_import
+#: field:stock.inventory.import.line,lot:0
+msgid "Product Lot"
+msgstr ""
+
+#. module: stock_inventory_import
+#: field:stock.inventory.import.line,quantity:0
+msgid "Quantity"
+msgstr "Cantitate"
+
+#. module: stock_inventory_import
+#: model:ir.model,name:stock_inventory_import.model_stock_inventory_import_line
+msgid "Stock Inventory Import Line"
+msgstr ""
+
+#. module: stock_inventory_import
+#: view:import.inventory:stock_inventory_import.view_import_inventory
+msgid ""
+"The file must have 2 column keys:                 'code' => for product "
+"reference                 'quantity' => for product quantity"
+msgstr ""
+
+#. module: stock_inventory_import
+#: code:addons/stock_inventory_import/models/stock_inventory.py:43
+#, python-format
+msgid "There must be one line at least to process"
+msgstr ""
+
+#. module: stock_inventory_import
+#: code:addons/stock_inventory_import/wizard/import_inventory.py:37
+#, python-format
+msgid "You need to select a file!"
+msgstr ""

+ 223 - 0
i18n/sl.po

@@ -0,0 +1,223 @@
+# Translation of Odoo Server.
+# This file contains the translation of the following modules:
+# * stock_inventory_import
+# 
+# Translators:
+# Matjaž Mozetič <m.mozetic@matmoz.si>, 2015
+msgid ""
+msgstr ""
+"Project-Id-Version: odoomrp-wip (8.0)\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2015-11-20 18:11+0000\n"
+"PO-Revision-Date: 2015-11-14 04:45+0000\n"
+"Last-Translator: Matjaž Mozetič <m.mozetic@matmoz.si>\n"
+"Language-Team: Slovenian (http://www.transifex.com/oca/odoomrp-wip-8-0/language/sl/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: \n"
+"Language: sl\n"
+"Plural-Forms: nplurals=4; plural=(n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 || n%100==4 ? 2 : 3);\n"
+
+#. module: stock_inventory_import
+#: code:addons/stock_inventory_import/models/stock_inventory.py:14
+#, python-format
+msgid "By File"
+msgstr "Po datoteki"
+
+#. module: stock_inventory_import
+#: view:import.inventory:stock_inventory_import.view_import_inventory
+msgid "Cancel"
+msgstr "Preklic"
+
+#. module: stock_inventory_import
+#: field:import.inventory,create_uid:0
+#: field:stock.inventory.import.line,create_uid:0
+msgid "Created by"
+msgstr "Ustvaril"
+
+#. module: stock_inventory_import
+#: field:import.inventory,create_date:0
+#: field:stock.inventory.import.line,create_date:0
+msgid "Created on"
+msgstr "Ustvarjeno"
+
+#. module: stock_inventory_import
+#: field:import.inventory,location:0
+msgid "Default Location"
+msgstr "Privzeta lokacija"
+
+#. module: stock_inventory_import
+#: help:import.inventory,delimeter:0
+msgid "Default delimeter is \",\""
+msgstr "Privzeto ločilo je \",\""
+
+#. module: stock_inventory_import
+#: field:import.inventory,delimeter:0
+msgid "Delimeter"
+msgstr "Ločilo"
+
+#. module: stock_inventory_import
+#: field:stock.inventory.import.line,fail:0
+msgid "Fail"
+msgstr "Neuspeh"
+
+#. module: stock_inventory_import
+#: field:stock.inventory.import.line,fail_reason:0
+msgid "Fail Reason"
+msgstr "Vzrok neuspeha"
+
+#. module: stock_inventory_import
+#: field:import.inventory,data:0
+msgid "File"
+msgstr "Datoteka"
+
+#. module: stock_inventory_import
+#: field:import.inventory,name:0
+msgid "Filename"
+msgstr "Naziv datoteke"
+
+#. module: stock_inventory_import
+#: field:stock.inventory.import.line,product:0
+msgid "Found Product"
+msgstr "Najdeni proizvod"
+
+#. module: stock_inventory_import
+#: field:import.inventory,id:0 field:stock.inventory.import.line,id:0
+msgid "ID"
+msgstr "ID"
+
+#. module: stock_inventory_import
+#: view:import.inventory:stock_inventory_import.view_import_inventory
+msgid "Import"
+msgstr "Uvoz"
+
+#. module: stock_inventory_import
+#: view:import.inventory:stock_inventory_import.view_import_inventory
+#: model:ir.actions.act_window,name:stock_inventory_import.action_import_inventory
+msgid "Import Inventory"
+msgstr "Uvoz inventure"
+
+#. module: stock_inventory_import
+#: model:ir.model,name:stock_inventory_import.model_import_inventory
+msgid "Import inventory"
+msgstr "Uvoz inventure"
+
+#. module: stock_inventory_import
+#: field:stock.inventory,imported:0
+msgid "Imported"
+msgstr "Uvoženo"
+
+#. module: stock_inventory_import
+#: view:stock.inventory:stock_inventory_import.view_inventory_form_inherit
+#: field:stock.inventory,import_lines:0
+msgid "Imported Lines"
+msgstr "Uvožene postavke"
+
+#. module: stock_inventory_import
+#: model:ir.model,name:stock_inventory_import.model_stock_inventory
+#: field:stock.inventory.import.line,inventory_id:0
+msgid "Inventory"
+msgstr "Inventar"
+
+#. module: stock_inventory_import
+#: field:import.inventory,write_uid:0
+#: field:stock.inventory.import.line,write_uid:0
+msgid "Last Updated by"
+msgstr "Zadnji posodobil"
+
+#. module: stock_inventory_import
+#: field:import.inventory,write_date:0
+#: field:stock.inventory.import.line,write_date:0
+msgid "Last Updated on"
+msgstr "Zadnjič posodobljeno"
+
+#. module: stock_inventory_import
+#: view:stock.inventory:stock_inventory_import.view_inventory_form_inherit
+msgid "Load File"
+msgstr "Naloži datoteko"
+
+#. module: stock_inventory_import
+#: code:addons/stock_inventory_import/models/stock_inventory.py:84
+#, python-format
+msgid "Loaded lines must be processed at least one time for inventory : %s"
+msgstr "Naložene postavke morajo biti za inventuro vsaj enkrat procesirane: %s"
+
+#. module: stock_inventory_import
+#: field:stock.inventory.import.line,location_id:0
+msgid "Location"
+msgstr "Lokacija"
+
+#. module: stock_inventory_import
+#: code:addons/stock_inventory_import/models/stock_inventory.py:25
+#: code:addons/stock_inventory_import/wizard/import_inventory.py:87
+#, python-format
+msgid "No processed"
+msgstr "Ne procesirano"
+
+#. module: stock_inventory_import
+#: code:addons/stock_inventory_import/models/stock_inventory.py:56
+#, python-format
+msgid "No product code found"
+msgstr "Ni kode proizvoda"
+
+#. module: stock_inventory_import
+#: code:addons/stock_inventory_import/wizard/import_inventory.py:59
+#, python-format
+msgid "Not 'code' or 'quantity' keys found"
+msgstr "Ni ključev 'koda' ali 'količina'"
+
+#. module: stock_inventory_import
+#: code:addons/stock_inventory_import/wizard/import_inventory.py:53
+#, python-format
+msgid "Not a valid file!"
+msgstr "Ni veljavna datoteka!"
+
+#. module: stock_inventory_import
+#: view:stock.inventory:stock_inventory_import.view_inventory_form_inherit
+msgid "Process File Lines"
+msgstr "Procesiranje postavk datoteke"
+
+#. module: stock_inventory_import
+#: code:addons/stock_inventory_import/models/stock_inventory.py:76
+#, python-format
+msgid "Processed"
+msgstr "Procesirano"
+
+#. module: stock_inventory_import
+#: field:stock.inventory.import.line,code:0
+msgid "Product Code"
+msgstr "Koda proizvoda"
+
+#. module: stock_inventory_import
+#: field:stock.inventory.import.line,lot:0
+msgid "Product Lot"
+msgstr "Proizvodni lot"
+
+#. module: stock_inventory_import
+#: field:stock.inventory.import.line,quantity:0
+msgid "Quantity"
+msgstr "Količina"
+
+#. module: stock_inventory_import
+#: model:ir.model,name:stock_inventory_import.model_stock_inventory_import_line
+msgid "Stock Inventory Import Line"
+msgstr "Postavka uvoza inventure zaloge"
+
+#. module: stock_inventory_import
+#: view:import.inventory:stock_inventory_import.view_import_inventory
+msgid ""
+"The file must have 2 column keys:                 'code' => for product "
+"reference                 'quantity' => for product quantity"
+msgstr "Datoteka mora imeti 2 ključa stolpcev: 'koda' => za sklic proizvoda, 'količina' => za količino proizvoda"
+
+#. module: stock_inventory_import
+#: code:addons/stock_inventory_import/models/stock_inventory.py:43
+#, python-format
+msgid "There must be one line at least to process"
+msgstr "Vsaj ena postavka mora biti procesirana"
+
+#. module: stock_inventory_import
+#: code:addons/stock_inventory_import/wizard/import_inventory.py:37
+#, python-format
+msgid "You need to select a file!"
+msgstr "Izberite datoteko!"

+ 2 - 0
models/__init__.py

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

二進制
models/__init__.pyc


+ 86 - 0
models/stock_inventory.py

@@ -0,0 +1,86 @@
+# -*- coding: utf-8 -*-
+# (c) 2015 Oihane Crucelaegui - AvanzOSC
+# License AGPL-3 - See http://www.gnu.org/licenses/agpl-3.0.html
+
+from openerp import models, fields, api, exceptions, _
+
+
+class StockInventory(models.Model):
+    _inherit = "stock.inventory"
+
+    @api.model
+    def _get_available_filters(self):
+        res = super(StockInventory, self)._get_available_filters()
+        res.append(('file', _('By File')))
+        return res
+
+    @api.multi
+    @api.depends('import_lines')
+    def _file_lines_processed(self):
+        for record in self:
+            processed = True
+            if record.import_lines:
+                processed = any((not line.fail or
+                                 (line.fail and
+                                  line.fail_reason != _('No processed')))
+                                for line in record.import_lines)
+            record.processed = processed
+
+    imported = fields.Boolean('Imported')
+    import_lines = fields.One2many('stock.inventory.import.line',
+                                   'inventory_id', string='Imported Lines')
+    filter = fields.Selection(_get_available_filters,
+                              string='Selection Filter',
+                              required=True)
+    processed = fields.Boolean(string='Has been processed at least once?',
+                               compute='_file_lines_processed')
+
+    @api.multi
+    def process_import_lines(self):
+        """Process Inventory Load lines."""
+        import_lines = self.mapped('import_lines')
+        if not import_lines:
+            raise exceptions.Warning(_("There must be one line at least to "
+                                       "process"))
+        inventory_line_obj = self.env['stock.inventory.line']
+        stk_lot_obj = self.env['stock.production.lot']
+        product_obj = self.env['product.product']
+        for line in import_lines:
+            if line.fail:
+                if not line.product:
+                    prod_lst = product_obj.search([('default_code', '=',
+                                                    line.code)])
+                    if prod_lst:
+                        product = prod_lst[0]
+                    else:
+                        line.fail_reason = _('No product code found')
+                        continue
+                else:
+                    product = line.product
+                lot_id = None
+                if line.lot:
+                    lot_lst = stk_lot_obj.search([('name', '=', line.lot)])
+                    if lot_lst:
+                        lot_id = lot_lst[0].id
+                    else:
+                        lot = stk_lot_obj.create({'name': line.lot,
+                                                  'product_id': product.id})
+                        lot_id = lot.id
+                inventory_line_obj.create({
+                    'product_id': product.id,
+                    'product_uom_id': product.uom_id.id,
+                    'product_qty': line.quantity,
+                    'inventory_id': line.inventory_id.id,
+                    'location_id': line.location_id.id,
+                    'prod_lot_id': lot_id})
+                line.write({'fail': False, 'fail_reason': _('Processed')})
+        return True
+
+    @api.multi
+    def action_done(self):
+        for inventory in self:
+            if not inventory.processed:
+                raise exceptions.Warning(
+                    _("Loaded lines must be processed at least one time for "
+                      "inventory : %s") % (inventory.name))
+        return super(StockInventory, self).action_done()

二進制
models/stock_inventory.pyc


+ 2 - 0
security/.directory

@@ -0,0 +1,2 @@
+[Dolphin]
+Timestamp=2014,10,8,15,22,35

+ 2 - 0
security/ir.model.access.csv

@@ -0,0 +1,2 @@
+id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink
+access_stock_inventory_import_line,access_stock_inventory_import_line,model_stock_inventory_import_line,stock.group_stock_manager,1,1,1,1

+ 40 - 0
views/inventory_view.xml

@@ -0,0 +1,40 @@
+<?xml version="1.0"?>
+<openerp>
+    <data>
+        <record model="ir.ui.view" id="view_inventory_form_inherit">
+            <field name="name">view.inventory.form.inherit</field>
+            <field name="model">stock.inventory</field>
+            <field name="inherit_id" ref="stock.view_inventory_form" />
+            <field name="arch" type="xml">
+                <button name="action_cancel_inventory" position="after">
+                    <button name="%(action_import_inventory)d"
+                        string="Load File"
+                        attrs="{'invisible':['|',('state', '!=',('draft')),('filter', '!=', 'file')]}"
+                        class="oe_highlight" type="action" />
+                    <button name="process_import_lines" string="Process File Lines"
+                        attrs="{'invisible':['|',('state', 'in',('draft','done')),('filter', '!=', 'file')]}"
+                        class="oe_highlight" type="object" />
+                </button>
+                <xpath expr="//page[@string='Inventory Adjustments']"
+                    position="after">
+                    <page string="Imported Lines"
+                        attrs="{'invisible':[('filter', '!=', 'file')]}">
+                        <field name="processed" invisible="1"/>
+                        <field name="import_lines">
+                            <tree colors="red:fail==True;green:fail==False"
+                                editable="bottom">
+                                <field name="product"/>
+                                <field name="code"/>
+                                <field name="quantity"/>
+                                <field name="location_id" />
+                                <field name="lot" />
+                                <field name="fail" />
+                                <field name="fail_reason" />
+                            </tree>
+                        </field>
+                    </page>
+                </xpath>
+            </field>
+        </record>
+    </data>
+</openerp>

+ 2 - 0
wizard/__init__.py

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

二進制
wizard/__init__.pyc


+ 103 - 0
wizard/import_inventory.py

@@ -0,0 +1,103 @@
+
+from openerp import fields, models, exceptions, api, _
+import base64
+import csv
+import cStringIO
+
+
+class ImportInventory(models.TransientModel):
+    _name = 'import.inventory'
+    _description = 'Import inventory'
+
+    def _get_default_location(self):
+        ctx = self._context
+        if 'active_id' in ctx:
+            inventory_obj = self.env['stock.inventory']
+            inventory = inventory_obj.browse(ctx['active_id'])
+        return inventory.location_id
+
+    data = fields.Binary('File', required=True)
+    name = fields.Char('Filename')
+    delimeter = fields.Char('Delimeter', default=',',
+                            help='Default delimeter is ","')
+    location = fields.Many2one('stock.location', 'Default Location',
+                               default=_get_default_location, required=True)
+
+    @api.one
+    def action_import(self):
+        """Load Inventory data from the CSV file."""
+        ctx = self._context
+        stloc_obj = self.env['stock.location']
+        inventory_obj = self.env['stock.inventory']
+        inv_imporline_obj = self.env['stock.inventory.import.line']
+        product_obj = self.env['product.product']
+        if 'active_id' in ctx:
+            inventory = inventory_obj.browse(ctx['active_id'])
+        if not self.data:
+            raise exceptions.Warning(_("You need to select a file!"))
+        # Decode the file data
+        data = base64.b64decode(self.data)
+        file_input = cStringIO.StringIO(data)
+        file_input.seek(0)
+        location = self.location
+        reader_info = []
+        if self.delimeter:
+            delimeter = str(self.delimeter)
+        else:
+            delimeter = ','
+        reader = csv.reader(file_input, delimiter=delimeter,
+                            lineterminator='\r\n')
+        try:
+            reader_info.extend(reader)
+        except Exception:
+            raise exceptions.Warning(_("Not a valid file!"))
+        keys = reader_info[0]
+        # check if keys exist
+        if not isinstance(keys, list) or ('code' not in keys or
+                                          'quantity' not in keys):
+            raise exceptions.Warning(
+                _("Not 'code' or 'quantity' keys found"))
+        del reader_info[0]
+        values = {}
+        actual_date = fields.Date.today()
+        inv_name = self.name + ' - ' + actual_date
+        inventory.write({'name': inv_name,
+                         'date': fields.Datetime.now(),
+                         'imported': True, 'state': 'confirm'})
+        for i in range(len(reader_info)):
+            val = {}
+            field = reader_info[i]
+            values = dict(zip(keys, field))
+            prod_location = location.id
+            if 'location' in values and values['location']:
+                locations = stloc_obj.search([('name', '=',
+                                               values['location'])])
+                prod_location = locations[:1].id
+            prod_lst = product_obj.search([('default_code', '=',
+                                            values['code'])])
+            if prod_lst:
+                val['product'] = prod_lst[0].id
+            if 'lot' in values and values['lot']:
+                val['lot'] = values['lot']
+            val['code'] = values['code']
+            val['quantity'] = values['quantity']
+            val['location_id'] = prod_location
+            val['inventory_id'] = inventory.id
+            val['fail'] = True
+            val['fail_reason'] = _('No processed')
+            inv_imporline_obj.create(val)
+
+
+class StockInventoryImportLine(models.Model):
+    _name = "stock.inventory.import.line"
+    _description = "Stock Inventory Import Line"
+
+    code = fields.Char('Product Code')
+    product = fields.Many2one('product.product', 'Found Product')
+    quantity = fields.Float('Quantity')
+    inventory_id = fields.Many2one('stock.inventory', 'Inventory',
+                                   readonly=True)
+    location_id = fields.Many2one('stock.location', 'Location')
+    lot = fields.Char('Product Lot')
+    fail = fields.Boolean('Fail')
+    fail_reason = fields.Char('Fail Reason')

二進制
wizard/import_inventory.pyc


+ 42 - 0
wizard/import_inventory_view.xml

@@ -0,0 +1,42 @@
+<?xml version="1.0" encoding="utf-8"?>
+<openerp>
+    <data>
+    <!-- Import Inventory Wizard form -->
+        <record id="view_import_inventory" model="ir.ui.view">
+            <field name="name">import.inventory.form</field>
+            <field name="model">import.inventory</field>
+            <field name="type">form</field>
+            <field name="arch" type="xml">
+                <form string="Import Inventory">
+                <label string="The file must have 2 column keys:
+                'code' => for product reference
+                'quantity' => for product quantity" colspan="4"/>
+                    <group colspan="4" col="4">
+                        <field name="name" />
+                        <field name="delimeter"/>
+                        <field name="data" filename="name" colspan="4" />
+                        <field name="location" colspan="4"/>
+                    </group>
+                   <separator string="" colspan="4"/>
+                   <footer>
+                        <button class="oe_highlight" special="cancel" string="Cancel"/>
+                        <button name="action_import" string="Import" type="object"/>
+                   </footer>
+               </form>
+            </field>
+        </record>
+
+    <!--  Action of Import inventory wizard -->
+
+    <record id="action_import_inventory" model="ir.actions.act_window">
+        <field name="name">Import Inventory</field>
+        <field name="res_model">import.inventory</field>
+        <field name="view_type">form</field>
+        <field name="view_mode">tree,form</field>
+       <field name="view_id" ref="view_import_inventory"/>
+       <field name="target">new</field>
+    </record>
+
+<!--     <menuitem  id="menu_import_inventory" name="Import Inventory" action="action_import_inventory" parent="stock.menu_stock_inventory_control"/> -->
+    </data>
+</openerp>