Skip to content

Instantly share code, notes, and snippets.

@eLBati
Created August 12, 2015 09:01
Show Gist options
  • Save eLBati/448cfdeaa3438dc24448 to your computer and use it in GitHub Desktop.
Save eLBati/448cfdeaa3438dc24448 to your computer and use it in GitHub Desktop.
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