Join the social network of Tech Nerds, increase skill rank, get work, manage projects...
 
  • How to use a unique cron job for all subscriptions system ?

    • 0
    • 0
    • 0
    • 0
    • 0
    • 0
    • 0
    • 0
    • 339
    Comment on it

    If you want to use a unique cron job for all subscriptions system then follow the following code in your subscription module in .py file.

    1. def set_process(self, cr, uid, ids, context=None):
    2. for row in self.read(cr, uid, ids, context=context):
    3. mapping = {'name':'name','interval_number':'interval_number','interval_type':'interval_type','exec_init':'numbercall','date_init':'nextcall'}
    4. res = {'model':'subscription.subscription', 'args': repr([[row['id']]]), 'function':'model_copy', 'priority':6, 'user_id':row['user_id'] and row['user_id'][0]}
    5. for key,value in mapping.items():
    6. res[value] = row[key]
    7. id = self.pool.get('ir.cron').create(cr, uid, res)
    8. self.write(cr, uid, [row['id']], {'cron_id':id, 'state':'running'})
    9. return True
    10.  
    11. def model_copy(self, cr, uid, ids, context=None):
    12. for row in self.read(cr, uid, ids, context=context):
    13. if not row.get('cron_id',False):
    14. continue
    15. cron_ids = [row['cron_id'][0]]
    16. remaining = self.pool.get('ir.cron').read(cr, uid, cron_ids, ['numbercall'])[0]['numbercall']
    17. try:
    18. (model_name, id) = row['doc_source'].split(',')
    19. id = int(id)
    20. model = self.pool.get(model_name)
    21. except:
    22. raise osv.except_osv(_('Wrong Source Document!'), _('Please provide another source document.\nThis one does not exist!'))
    23.  
    24. default = {'state':'draft'}
    25. doc_obj = self.pool.get('subscription.document')
    26. document_ids = doc_obj.search(cr, uid, [('model.model','=',model_name)])
    27. doc = doc_obj.browse(cr, uid, document_ids)[0]
    28. for f in doc.field_ids:
    29. if f.value=='date':
    30. value = time.strftime('%Y-%m-%d')
    31. else:
    32. value = False
    33. default[f.field.name] = value
    34.  
    35. state = 'running'
    36.  
    37. # if there was only one remaining document to generate
    38. # the subscription is over and we mark it as being done
    39. if remaining == 1:
    40. state = 'done'
    41. id = self.pool.get(model_name).copy(cr, uid, id, default, context)
    42. self.pool.get('subscription.subscription.history').create(cr, uid, {'subscription_id': row['id'], 'date':time.strftime('%Y-%m-%d %H:%M:%S'), 'document_id': model_name+','+str(id)})
    43. self.write(cr, uid, [row['id']], {'state':state})
    44. return True
    45.  
    46. def unlink(self, cr, uid, ids, context=None):
    47. for record in self.browse(cr, uid, ids, context or {}):
    48. if record.state=="running":
    49. raise osv.except_osv(_('Error!'),_('You cannot delete an active subscription!'))
    50. return super(subscription_subscription, self).unlink(cr, uid, ids, context)
    51.  
    52. def set_done(self, cr, uid, ids, context=None):
    53. res = self.read(cr,uid, ids, ['cron_id'])
    54. ids2 = [x['cron_id'][0] for x in res if x['id']]
    55. self.pool.get('ir.cron').write(cr, uid, ids2, {'active':False})
    56. self.write(cr, uid, ids, {'state':'done'})
    57. return True
    58.  
    59. def set_draft(self, cr, uid, ids, context=None):
    60. self.write(cr, uid, ids, {'state':'draft'})
    61. return True
    62. subscription_subscription()
    63.  
    64. class subscription_subscription_history(osv.osv):
    65. _name = "subscription.subscription.history"
    66. _description = "Subscription history"
    67. _rec_name = 'date'
    68. _columns = {
    69. 'date': fields.datetime('Date'),
    70. 'subscription_id': fields.many2one('subscription.subscription', 'Subscription', ondelete='cascade'),
    71. 'document_id': fields.reference('Source Document', required=True, selection=_get_document_types, size=128),
    72. }
    73. subscription_subscription_history()
    74.  

     

 0 Comment(s)

Sign In
                           OR                           
                           OR                           
Register

Sign up using

                           OR                           
Forgot Password
Reset Password
Fill out the form below and reset your password: