deisy 5 rokov pred
rodič
commit
1d407469ce

+ 1 - 0
__openerp__.py

@@ -7,6 +7,7 @@
     'author': 'Eiru Software',
     'data': [
         'views/stock_transfer_order.xml',
+        'views/stock_move.xml',
         'wizard/wizard_transfer_details.xml'],
     'depends': ['base','sale','stock','sale_stock'],
     'installable':True,

+ 1 - 0
models/__init__.py

@@ -1,3 +1,4 @@
 # -*- coding : utf-8 -*-
 import stock_transfer_order
 import sale_order
+import stock_move

+ 3 - 0
models/sale_order.py

@@ -9,8 +9,11 @@ from openerp.tools import float_compare
 class sale_order(models.Model):
     _inherit = 'sale.order'
 
+    transfered = fields.Boolean(string="Transferido", readonly=True)
+
     @api.one
     def action_wait(self):
         res = super(sale_order, self).action_wait()
         self.write({'state': 'progress'})
         return res
+        

+ 34 - 0
models/stock_move.py

@@ -0,0 +1,34 @@
+# -*- encoding: utf-8 -*-
+from openerp import models, fields, api, _
+from openerp.exceptions import Warning
+from openerp.tools import float_compare
+
+
+class stock_move(models.Model):
+    _inherit = "stock.move"
+
+    @api.multi
+    def action_done_button(self):
+        for move in self:
+            if move.product_id.type == 'product':
+                uom_record = move.product_id.uom_id
+                qty_available = self.get_location_qty(move.product_id.id, move.location_id.id)
+                compare_qty = float_compare(qty_available, move.product_uom_qty, precision_rounding=uom_record.rounding)
+
+                if compare_qty == -1:
+                    warn_msg = _('Estas intentando transferir %.2f %s de %s pero el almacén de origen posee %.2f %s disponible!') % \
+                        (move.product_uom_qty, uom_record.name,
+                        move.product_id.name,
+                        max(0,qty_available), uom_record.name)
+                    raise Warning(_("No hay stock suficiente: "),_(warn_msg))
+
+            return super(stock_move, self).action_done()
+
+    @api.multi
+    def get_location_qty(self, product_id, location_id):
+        suma = 0
+        quant_ids = self.env['stock.quant'].search([('product_id','=', product_id),('location_id','=',location_id)])
+        if quant_ids:
+            for quant_id in quant_ids:
+                suma = suma + quant_id.qty
+        return suma

+ 13 - 18
models/stock_transfer_order.py

@@ -99,18 +99,16 @@ class stock_transfer_details(models.TransientModel):
             move_id = self.env['stock.move'].create(move)
             move_id.action_done()
             sale = self.env['sale.order'].search([('id','=',self.sale_id.id)])
-            sale.write({'state': 'manual'})
+            sale.write({'state': 'manual','transfered':True})
         return True
 
     @api.multi
     def get_location_qty(self, product_id, location_id):
-        location_ids = self.env['stock.location'].search([('active','=',True),('usage','=','internal'),('id','!=',self.picking_type_id.default_location_dest_id.id)])
-        for id in location_ids:
-            suma = 0
-            quant_ids = self.env['stock.quant'].search([('product_id','=', product_id),('location_id','=',location_id)])
-            if quant_ids:
-                for quant_id in quant_ids:
-                    suma = suma + quant_id.qty
+        suma = 0
+        quant_ids = self.env['stock.quant'].search([('product_id','=', product_id),('location_id','=',location_id)])
+        if quant_ids:
+            for quant_id in quant_ids:
+                suma = suma + quant_id.qty
         return suma
 
 class stock_transfer_details_items(models.TransientModel):
@@ -201,7 +199,7 @@ class stock_picking(models.Model):
             for move in item.move_lines:
                 if move.product_id.type == 'product':
                     uom_record = move.product_id.uom_id
-                    qty_available = self.get_location_qty(move.product_id.id, move.location_id.id, move.picking_type_id.id)
+                    qty_available = self.get_location_qty(move.product_id.id, move.location_id.id)
                     compare_qty = float_compare(qty_available, move.product_uom_qty, precision_rounding=uom_record.rounding)
 
                     if compare_qty == -1:
@@ -214,13 +212,10 @@ class stock_picking(models.Model):
         return True
 
     @api.multi
-    def get_location_qty(self, product_id, location_id, picking_type_id):
-        picking_type = self.env['stock.picking.type'].browse(picking_type_id)
-        location_ids = self.env['stock.location'].search([('active','=',True),('usage','=','internal'),('id','!=',picking_type.default_location_dest_id.id)])
-        for id in location_ids:
-            suma = 0
-            quant_ids = self.env['stock.quant'].search([('product_id','=', product_id),('location_id','=',location_id)])
-            if quant_ids:
-                for quant_id in quant_ids:
-                    suma = suma + quant_id.qty
+    def get_location_qty(self, product_id, location_id):
+        suma = 0
+        quant_ids = self.env['stock.quant'].search([('product_id','=', product_id),('location_id','=',location_id)])
+        if quant_ids:
+            for quant_id in quant_ids:
+                suma = suma + quant_id.qty
         return suma

+ 16 - 0
views/stock_move.xml

@@ -0,0 +1,16 @@
+<?xml version="1.0" encoding="utf-8"?>
+<openerp>
+  <data>
+    <record id="stock_move_form" model="ir.ui.view">
+      <field name="name">stock_move_form</field>
+      <field name="model">stock.move</field>
+      <field name="inherit_id" ref="stock.view_move_form"/>
+      <field name="arch" type="xml">
+        <button name="action_done"  position="replace">
+          <button name="action_done_button" states="draft,assigned,confirmed" string="Procesar" type="object" class="oe_highlight"/>        
+        </button>
+
+      </field>
+    </record>
+  </data>
+</openerp>

+ 8 - 0
views/stock_transfer_order.xml

@@ -8,6 +8,12 @@
       <field name="act_to" ref="sale.act_wait_invoice"/>
     </record>
 
+    <record id="sale.trans_wait_ship_ship" model="workflow.transition">
+        <field name="act_from" ref="sale.act_wait_ship"/>
+        <field name="act_to" ref="sale.act_ship"/>
+        <field name="condition">procurement_needed() and (transfered == True) and ((order_policy!='prepaid') or invoiced)</field>
+    </record>
+
     <record id="sale_order_form_invoice_credit" model="ir.ui.view">
       <field name="name">sale_order_form_invoice_credit</field>
       <field name="model">sale.order</field>
@@ -19,6 +25,8 @@
       </field>
     </record>
 
+
+
     <record id="inherit_view_picking_form" model="ir.ui.view">
       <field name="name">inherit_view_picking_form</field>
       <field name="model">stock.picking</field>