Adding exception state on the purchase requests

issue5107
review16811002
This commit is contained in:
Nicolas Évrard committed 2015-11-17 17:30:42 -03:00
1 parent 318d7bb912
commit 95ec33db65
8 files changed
+200 -4

No files matched your search

+69 -3
View File
@@ -19,7 +19,10 @@ from trytond.tools import grouped_slice
__all__ = ['PurchaseRequest',
'CreatePurchaseRequestStart', 'CreatePurchaseRequest',
'CreatePurchaseAskParty', 'CreatePurchase']
'CreatePurchaseAskParty', 'CreatePurchase',
'HandlePurchaseCancellationException',
'HandlePurchaseCancellationExceptionStart',
]
STATES = {
'readonly': Eval('state') != 'draft',
@@ -70,11 +73,13 @@ class PurchaseRequest(ModelSQL, ModelView):
])
origin = fields.Reference('Origin', selection='get_origin', readonly=True,
required=True)
exception_ignored = fields.Boolean('Ignored Exception')
state = fields.Function(fields.Selection([
('purchased', 'Purchased'),
('done', 'Done'),
('draft', 'Draft'),
('cancel', 'Cancel'),
('exception', 'Exception'),
], 'State'), 'get_state', searcher='search_state')
@classmethod
@@ -87,6 +92,11 @@ class PurchaseRequest(ModelSQL, ModelView):
'delete_purchase_line': ('You can not delete purchased '
'request.'),
})
cls._buttons.update({
'handle_purchase_cancellation_exception': {
'invisible': Eval('state') != 'exception',
},
})
@classmethod
def __register__(cls, module_name):
@@ -124,6 +134,10 @@ class PurchaseRequest(ModelSQL, ModelView):
def default_company():
return Transaction().context.get('company')
@staticmethod
def default_exception_ignored():
return False
def get_purchase(self, name):
if self.purchase_line:
return self.purchase_line.purchase.id
@@ -134,7 +148,10 @@ class PurchaseRequest(ModelSQL, ModelView):
def get_state(self, name):
if self.purchase_line:
if self.purchase_line.purchase.state == 'cancel':
if (self.purchase_line.purchase.state == 'cancel'
and not self.exception_ignored):
return 'exception'
elif self.purchase_line.purchase.state == 'cancel':
return 'cancel'
elif self.purchase_line.purchase.state == 'done':
return 'done'
@@ -155,7 +172,10 @@ class PurchaseRequest(ModelSQL, ModelView):
_, operator_, state = clause
Operator = fields.SQL_OPERATORS[operator_]
state_case = Case(
(purchase.state == 'cancel', 'cancel'),
((purchase.state == 'cancel')
& (request.exception_ignored == False), 'exception'),
((purchase.state == 'cancel')
& (request.exception_ignored == True), 'cancel'),
(purchase.state == 'done', 'done'),
(request.purchase_line != Null, 'purchased'),
else_='draft')
@@ -525,6 +545,12 @@ class PurchaseRequest(ModelSQL, ModelView):
cls.raise_user_error('delete_purchase_line')
super(PurchaseRequest, cls).delete(requests)
@classmethod
@ModelView.button_action(
'stock_supply.wizard_purchase_cancellation_handle_exception')
def handle_purchase_cancellation_exception(cls, purchases):
pass
class CreatePurchaseRequestStart(ModelView):
'Create Purchase Request'
@@ -738,3 +764,43 @@ class CreatePurchase(Wizard):
taxes.append(tax.id)
line.taxes = taxes
return line
class HandlePurchaseCancellationException(Wizard):
'Handle Purchase Cancellation Exception'
__name__ = 'purchase.request.handle.purchase.cancellation'
start = StateView('purchase.request.handle.purchase.cancellation.start',
'stock_supply.handle_purchase_cancellation_start', [
Button('Cancel', 'end', 'tryton-cancel'),
Button('Reset to draft', 'reset', 'tryton-clear'),
Button('Cancel Request', 'cancel_request', 'tryton-delete',
default=True),
])
reset = StateTransition()
cancel_request = StateTransition()
def transition_reset(self):
pool = Pool()
PurchaseRequest = pool.get('purchase.request')
requests = PurchaseRequest.browse(Transaction().context['active_ids'])
PurchaseRequest.write(requests, {
'purchase_line': None,
})
return 'end'
def transition_cancel_request(self):
pool = Pool()
PurchaseRequest = pool.get('purchase.request')
requests = PurchaseRequest.browse(Transaction().context['active_ids'])
PurchaseRequest.write(requests, {
'exception_ignored': True,
})
return 'end'
class HandlePurchaseCancellationExceptionStart(ModelView):
'Handle Purchase Cancellation Exception - Start'
__name__ = 'purchase.request.handle.purchase.cancellation.start'