Add move action.

This commit refs #9722
This commit is contained in:
Sergio Morillo 2019-10-15 09:43:46 +02:00
parent cfd3790359
commit a1692fd65c
6 changed files with 120 additions and 6 deletions

View File

@ -8,6 +8,7 @@ def register():
Pool.register(
sale.SaleLine,
sale.SaleLineQuickActionSplit,
sale.SaleLineQuickActionMove,
module='sale_line_quick_actions', type_='model')
Pool.register(
sale.SaleLineQuickAction,

View File

@ -61,3 +61,27 @@ msgstr "Aceptar"
msgctxt "wizard_button:sale.line.quick_action,split,end:"
msgid "Cancel"
msgstr "Cancelar"
msgctxt "wizard_button:sale.line.quick_action,split,do_move:"
msgid "OK"
msgstr "Aceptar"
msgctxt "wizard_button:sale.line.quick_action,move,end:"
msgid "Cancel"
msgstr "Cancelar"
msgctxt "model:ir.model.button,string:sale_line_move_wizard_button"
msgid "Move"
msgstr "Mover"
msgctxt "model:sale.line.quick_action.move,name:"
msgid "Sale line quick action move"
msgstr "Acción rápida mover línea de venta"
msgctxt "model:ir.action,name:wizard_quick_actions_move"
msgid "Move"
msgstr "Mover"
msgctxt "field:sale.line.quick_action.move,sale:"
msgid "Sale"
msgstr "Venta"

46
sale.py
View File

@ -6,7 +6,8 @@ from trytond.pyson import Eval
from trytond.transaction import Transaction
from trytond.wizard import Wizard, StateTransition, StateView, Button
__all__ = ['SaleLine', 'SaleLineQuickAction', 'SaleLineQuickActionSplit']
__all__ = ['SaleLine', 'SaleLineQuickAction', 'SaleLineQuickActionSplit',
'SaleLineQuickActionMove']
class SaleLine(metaclass=PoolMeta):
@ -23,6 +24,10 @@ class SaleLine(metaclass=PoolMeta):
'split_wizard': {
'invisible': Eval('sale_state') != 'draft',
'depends': ['sale_state']
},
'move_wizard': {
'invisible': Eval('sale_state') != 'draft',
'depends': ['sale_state']
}
})
@ -77,6 +82,12 @@ class SaleLine(metaclass=PoolMeta):
lines.extend(self.copy([self], remainders))
return lines
@classmethod
@ModelView.button_action(
'sale_line_quick_actions.wizard_quick_actions_move')
def move_wizard(cls, records):
pass
class SaleLineQuickActionSplit(ModelView):
'''Sale line quick action split'''
@ -101,6 +112,14 @@ class SaleLineQuickActionSplit(ModelView):
return 2
class SaleLineQuickActionMove(ModelView):
'''Sale line quick action move'''
__name__ = 'sale.line.quick_action.move'
sale = fields.Many2One('sale.sale', 'Sale', required=True,
domain=[('state', '=', 'draft')])
class SaleLineQuickAction(Wizard):
'''Sale line quick action'''
__name__ = 'sale.line.quick_action'
@ -113,6 +132,12 @@ class SaleLineQuickAction(Wizard):
Button('OK', 'do_split', default=True)]
)
do_split = StateTransition()
move = StateView('sale.line.quick_action.move',
'sale_line_quick_actions.line_move_view_form', [
Button('Cancel', 'end'),
Button('OK', 'do_move', default=True)]
)
do_move = StateTransition()
@classmethod
def __setup__(cls):
@ -137,12 +162,13 @@ class SaleLineQuickAction(Wizard):
return {
Modeldata.get_id(
'sale_line_quick_actions',
'wizard_quick_actions_copy'
): 'duplicate',
'wizard_quick_actions_copy'): 'duplicate',
Modeldata.get_id(
'sale_line_quick_actions',
'wizard_quick_actions_split'
): 'split'
'wizard_quick_actions_split'): 'split',
Modeldata.get_id(
'sale_line_quick_actions',
'wizard_quick_actions_move'): 'move'
}
def transition_duplicate(self):
@ -176,3 +202,13 @@ class SaleLineQuickAction(Wizard):
def _get_split_values(self):
return {}
def transition_do_move(self):
pool = Pool()
SaleLine = pool.get('sale.line')
sale_lines = SaleLine.browse(Transaction().context['active_ids'])
SaleLine.copy(sale_lines, default={
'sale': self.move.sale.id
})
SaleLine.delete(sale_lines)
return 'end'

View File

@ -62,5 +62,32 @@
<field name="button" ref="sale_line_split_wizard_button"/>
<field name="group" ref="sale.group_sale"/>
</record>
<!-- Move -->
<record model="ir.action.wizard" id="wizard_quick_actions_move">
<field name="name">Move</field>
<field name="wiz_name">sale.line.quick_action</field>
<field name="model">sale.line</field>
</record>
<record model="ir.action.keyword" id="act_sale_line_move_keyword">
<field name="keyword">form_action</field>
<field name="model">sale.line,-1</field>
<field name="action" ref="wizard_quick_actions_move"/>
</record>
<record model="ir.ui.view" id="line_move_view_form">
<field name="model">sale.line.quick_action.move</field>
<field name="type">form</field>
<field name="name">line_move_form</field>
</record>
<record model="ir.model.button" id="sale_line_move_wizard_button">
<field name="name">move_wizard</field>
<field name="string">Move</field>
<field name="model" search="[('model', '=', 'sale.line')]"/>
</record>
<record model="ir.model.button-res.group"
id="sale_line_move_wizard_button_group_sale">
<field name="button" ref="sale_line_move_wizard_button"/>
<field name="group" ref="sale.group_sale"/>
</record>
</data>
</tryton>

View File

@ -161,4 +161,23 @@ Check split method::
4
>>> line1, _, _, line4 = sale.lines
>>> line1.quantity == line4.quantity == 1.0
True
True
Check move method::
>>> sale2 = Sale()
>>> sale2.party = customer
>>> sale2.payment_term = payment_term
>>> sale2.save()
>>> data, = Modeldata.find([
... ('module', '=', 'sale_line_quick_actions'),
... ('fs_id', '=', 'wizard_quick_actions_move')])
>>> move_line = Wizard('sale.line.quick_action', [sale_line], action={'id': data.db_id})
>>> move_line.form.sale = sale2
>>> move_line.execute('do_move')
>>> sale.reload()
>>> len(sale.lines)
3
>>> sale2.reload()
>>> len(sale2.lines)
1

7
view/line_move_form.xml Normal file
View File

@ -0,0 +1,7 @@
<?xml version="1.0"?>
<!-- The COPYRIGHT file at the top level of this repository contains the full
copyright notices and license terms. -->
<form>
<label name="sale"/>
<field name="sale"/>
</form>