Created
August 12, 2015 09:01
-
-
Save eLBati/448cfdeaa3438dc24448 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
diff --git a/sale_order_revision/model/sale_order.py b/sale_order_revision/model/sale_order.py | |
index 16eb121..8270d5e 100644 | |
--- a/sale_order_revision/model/sale_order.py | |
+++ b/sale_order_revision/model/sale_order.py | |
@@ -69,21 +69,64 @@ class sale_order(models.Model): | |
@api.returns('self', lambda value: value.id) | |
@api.multi | |
def copy(self, defaults=None): | |
+ | |
if not defaults: | |
defaults = {} | |
if self.env.context.get('new_sale_revision'): | |
+ | |
+ latest_rev_no = 0 | |
+ | |
+ # Update current record with new revision id (postfix) and insert | |
+ # new record as (old revision) and set active false and state | |
+ # cancel | |
+ # Get current name and store in prev_name so after updating current | |
+ # record with latest revision number we can insert old revision | |
prev_name = self.name | |
+ | |
+ # Hold the current revision number so it can be used in | |
+ # revision/history record | |
revno = self.revision_number | |
- self.write({'revision_number': revno + 1, | |
+ | |
+ # Get name prefix so we can find the latest revision number | |
+ name_prefix = prev_name.split('-')[0] | |
+ | |
+ # Find record contains latest revision number | |
+ active_record = self.env['sale.order'].search([ | |
+ '&', | |
+ ('name', 'like', name_prefix + '-'), | |
+ ('active', '=', True) | |
+ ], order='revision_number desc', limit=1) | |
+ inactive_record = self.env['sale.order'].search([ | |
+ '&', | |
+ ('name', 'like', name_prefix + '-'), | |
+ ('active', '=', False) | |
+ ], order='revision_number desc', limit=1) | |
+ | |
+ latest_record = active_record if ( | |
+ active_record.revision_number > inactive_record.revision_number | |
+ ) else inactive_record | |
+ | |
+ # Check if its not the first revision | |
+ if latest_record: | |
+ latest_rev_no = int(latest_record.name.split('-')[-1]) | |
+ | |
+ # Update values in current record with latest revision number and | |
+ # name(unique) | |
+ self.write({'revision_number': latest_rev_no + 1, | |
'name': '%s-%02d' % (self.unrevisioned_name, | |
- revno + 1) | |
+ latest_rev_no + 1), | |
+ 'active': True, | |
}) | |
+ | |
+ # Update default values so it can be insert as new record as a | |
+ # history/revision of current record | |
defaults.update({'name': prev_name, | |
'revision_number': revno, | |
'active': False, | |
'state': 'cancel', | |
'current_revision_id': self.id, | |
}) | |
+ | |
return super(sale_order, self).copy(defaults) | |
@api.model |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment