[I18N] all: re-exported translation templates after latest translation improvements
[odoo/odoo.git] / addons / subscription / subscription.py
index f2df494..9361548 100644 (file)
+# -*- coding: utf-8 -*-
 ##############################################################################
+#    
+#    OpenERP, Open Source Management Solution
+#    Copyright (C) 2004-2010 Tiny SPRL (<http://tiny.be>).
 #
-# Copyright (c) 2004-2006 TINY SPRL. (http://tiny.be) All Rights Reserved.
+#    This program is free software: you can redistribute it and/or modify
+#    it under the terms of the GNU Affero General Public License as
+#    published by the Free Software Foundation, either version 3 of the
+#    License, or (at your option) any later version.
 #
-# $Id: subscription.py 1005 2005-07-25 08:41:42Z nicoe $
+#    This program is distributed in the hope that it will be useful,
+#    but WITHOUT ANY WARRANTY; without even the implied warranty of
+#    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+#    GNU Affero General Public License for more details.
 #
-# WARNING: This program as such is intended to be used by professional
-# programmers who take the whole responsability of assessing all potential
-# consequences resulting from its eventual inadequacies and bugs
-# End users who are looking for a ready-to-use solution with commercial
-# garantees and support are strongly adviced to contract a Free Software
-# Service Company
-#
-# This program is Free Software; you can redistribute it and/or
-# modify it under the terms of the GNU General Public License
-# as published by the Free Software Foundation; either version 2
-# of the License, or (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
+#    You should have received a copy of the GNU Affero General Public License
+#    along with this program.  If not, see <http://www.gnu.org/licenses/>.     
 #
 ##############################################################################
 
 # TODO:
-#      Error treatment: exception, request, ... -> send request to user_id
+#   Error treatment: exception, request, ... -> send request to user_id
 
-from mx import DateTime
 import time
 from osv import fields,osv
+from tools.translate import _
 
 class subscription_document(osv.osv):
-       _name = "subscription.document"
-       _description = "Subscription document"
-       _columns = {
-               'name': fields.char('Name', size=60, required=True),
-               'active': fields.boolean('Active'),
-               'model': fields.many2one('ir.model', 'Model', required=True),
-               'field_ids': fields.one2many('subscription.document.fields', 'document_id', 'Fields')
-       }
-       _defaults = {
-               'active' : lambda *a: True,
-       }
+    _name = "subscription.document"
+    _description = "Subscription Document"
+    _columns = {
+        'name': fields.char('Name', size=60, required=True),
+        'active': fields.boolean('Active', help="If the active field is set to False, it will allow you to hide the subscription document without removing it."),
+        'model': fields.many2one('ir.model', 'Object', required=True),
+        'field_ids': fields.one2many('subscription.document.fields', 'document_id', 'Fields')
+    }
+    _defaults = {
+        'active' : lambda *a: True,
+    }
+    
+    def write(self, cr, uid, ids, vals, context=None):
+        if 'model' in vals:
+            raise osv.except_osv(_('Error !'),_('You cannot modify the Object linked to the Document Type!\nCreate another Document instead !'))
+        return super(subscription_document, self).write(cr, uid, ids, vals, context=context)
+    
 subscription_document()
 
 class subscription_document_fields(osv.osv):
-       _name = "subscription.document.fields"
-       _description = "Subscription document fields"
-       _rec_name = 'field'
-       _columns = {
-               'field': fields.many2one('ir.model.fields', 'Field', domain="[('model_id', '=', parent.model)]", required=True),
-               'value': fields.selection([('false','False'),('date','Current Date')], 'Default Value', size=40),
-               'document_id': fields.many2one('subscription.document', 'Subscription Document', ondelete='cascade'),
-       }
-       _defaults = {}
+    _name = "subscription.document.fields"
+    _description = "Subscription Document Fields"
+    _rec_name = 'field'
+    _columns = {
+        'field': fields.many2one('ir.model.fields', 'Field', domain="[('model_id', '=', parent.model)]", required=True),
+        'value': fields.selection([('false','False'),('date','Current Date')], 'Default Value', size=40, help="Default value is considered for field when new document is generated."),
+        'document_id': fields.many2one('subscription.document', 'Subscription Document', ondelete='cascade'),
+    }
+    _defaults = {}
 subscription_document_fields()
 
 def _get_document_types(self, cr, uid, context={}):
-       cr.execute('select m.model, s.name from subscription_document s, ir_model m WHERE s.model = m.id order by s.name')
-       return cr.fetchall()
+    cr.execute('select m.model, s.name from subscription_document s, ir_model m WHERE s.model = m.id order by s.name')
+    return cr.fetchall()
 
 class subscription_subscription(osv.osv):
-       _name = "subscription.subscription"
-       _description = "Subscription"
-       _columns = {
-               'name': fields.char('Name', size=60, required=True),
-               'active': fields.boolean('Active'),
-               'partner_id': fields.many2one('res.partner', 'Partner'),
-               'notes': fields.text('Notes'),
-               'user_id': fields.many2one('res.users', 'User', required=True),
-               'interval_number': fields.integer('Interval Qty'),
-               'interval_type': fields.selection([('days', 'Days'), ('weeks', 'Weeks'), ('months', 'Months')], 'Interval Unit'),
-               'exec_init': fields.integer('Number of documents'),
-               'date_init': fields.datetime('First Date'),
-               'state': fields.selection([('draft','Draft'),('running','Running'),('done','Done')], 'State'),
-               'doc_source': fields.reference('Source Document', required=True, selection=_get_document_types, size=128),
-               'doc_lines': fields.one2many('subscription.subscription.history', 'subscription_id', 'Documents created', readonly=True),
-               'cron_id': fields.many2one('ir.cron', 'Cron Job')
-       }
-       _defaults = {
-               'date_init': lambda *a: time.strftime('%Y-%m-%d %H:%M:%S'),
-               'user_id': lambda obj,cr,uid,context: uid,
-               'active': lambda *a: True,
-               'interval_number': lambda *a: 1,
-               'interval_type': lambda *a: 'months',
-               'doc_source': lambda *a: False,
-               'state': lambda *a: 'draft'
-       }
-
-       def set_process(self, cr, uid, ids, context={}):
-               for row in self.read(cr, uid, ids):
-                       mapping = {'name':'name','interval_number':'interval_number','interval_type':'interval_type','exec_init':'numbercall','date_init':'nextcall'}
-                       res = {'model':'subscription.subscription', 'args': repr([[row['id']]]), 'function':'model_copy', 'priority':6, 'user_id':row['user_id'] and row['user_id'][0]}
-                       for key,value in mapping.items():
-                               res[value] = row[key]
-                       id = self.pool.get('ir.cron').create(cr, uid, res)
-                       self.write(cr, uid, [row['id']], {'cron_id':id, 'state':'running'})
-               return True
-
-       def model_copy(self, cr, uid, ids, context={}):
-               for row in self.read(cr, uid, ids):
-                       cron_ids = [row['cron_id'][0]]
-                       remaining = self.pool.get('ir.cron').read(cr, uid, cron_ids, ['numbercall'])[0]['numbercall']
-                       try:
-                               (model_name, id) = row['doc_source'].split(',')
-                               id = int(id)
-                               model = self.pool.get(model_name)
-                       except:
-                               raise osv.except_osv('Wrong Source Document !', 'Please provide another source document.\nThis one does not exist !')
-
-                       default = {'state':'draft'}
-                       doc_obj = self.pool.get('subscription.document')
-                       document_ids = doc_obj.search(cr, uid, [('model.model','=',model_name)])
-                       doc = doc_obj.browse(cr, uid, document_ids)[0]
-                       for f in doc.field_ids:
-                               if f.value=='date':
-                                       value = time.strftime('%Y-%m-%d')
-                               else:
-                                       value = False
-                               default[f.field] = value
-
-                       state = 'running'
-
-                       # if there was only one remaining document to generate
-                       # the subscription is over and we mark it as being done
-                       if remaining == 1:
-                               state = 'done'
-                       id = self.pool.get(model_name).copy(cr, uid, id, default, context)
-                       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)})
-                       self.write(cr, uid, [row['id']], {'state':state})
-               return True
-
-       def set_done(self, cr, uid, ids, context={}):
-               res = self.read(cr,uid, ids, ['cron_id'])
-               ids2 = [x['cron_id'][0] for x in res if x['id']]
-               self.pool.get('ir.cron').write(cr, uid, ids2, {'active':False})
-               self.write(cr, uid, ids, {'state':'done'})
-               return True
-
-       def set_draft(self, cr, uid, ids, context={}):
-               self.write(cr, uid, ids, {'state':'draft'})
-               return True
+    _name = "subscription.subscription"
+    _description = "Subscription"
+    _columns = {
+        'name': fields.char('Name', size=60, required=True),
+        'active': fields.boolean('Active', help="If the active field is set to False, it will allow you to hide the subscription without removing it."),
+        'partner_id': fields.many2one('res.partner', 'Partner'),
+        'notes': fields.text('Notes'),
+        'user_id': fields.many2one('res.users', 'User', required=True),
+        'interval_number': fields.integer('Interval Qty'),
+        'interval_type': fields.selection([('days', 'Days'), ('weeks', 'Weeks'), ('months', 'Months')], 'Interval Unit'),
+        'exec_init': fields.integer('Number of documents'),
+        'date_init': fields.datetime('First Date'),
+        'state': fields.selection([('draft','Draft'),('running','Running'),('done','Done')], 'State'),
+        'doc_source': fields.reference('Source Document', required=True, selection=_get_document_types, size=128, help="User can choose the source document on which he wants to create documents"),
+        'doc_lines': fields.one2many('subscription.subscription.history', 'subscription_id', 'Documents created', readonly=True),
+        'cron_id': fields.many2one('ir.cron', 'Cron Job', help="Scheduler which runs on subscription"),
+        'note': fields.text('Notes', help="Description or Summary of Subscription"),
+    }
+    _defaults = {
+        'date_init': lambda *a: time.strftime('%Y-%m-%d %H:%M:%S'),
+        'user_id': lambda obj,cr,uid,context: uid,
+        'active': lambda *a: True,
+        'interval_number': lambda *a: 1,
+        'interval_type': lambda *a: 'months',
+        'doc_source': lambda *a: False,
+        'state': lambda *a: 'draft'
+    }
+
+    def set_process(self, cr, uid, ids, context={}):
+        for row in self.read(cr, uid, ids):
+            mapping = {'name':'name','interval_number':'interval_number','interval_type':'interval_type','exec_init':'numbercall','date_init':'nextcall'}
+            res = {'model':'subscription.subscription', 'args': repr([[row['id']]]), 'function':'model_copy', 'priority':6, 'user_id':row['user_id'] and row['user_id'][0]}
+            for key,value in mapping.items():
+                res[value] = row[key]
+            id = self.pool.get('ir.cron').create(cr, uid, res)
+            self.write(cr, uid, [row['id']], {'cron_id':id, 'state':'running'})
+        return True
+
+    def model_copy(self, cr, uid, ids, context={}):
+        for row in self.read(cr, uid, ids):
+            if not row.get('cron_id',False):
+                continue
+            cron_ids = [row['cron_id'][0]]
+            remaining = self.pool.get('ir.cron').read(cr, uid, cron_ids, ['numbercall'])[0]['numbercall']
+            try:
+                (model_name, id) = row['doc_source'].split(',')
+                id = int(id)
+                model = self.pool.get(model_name)
+            except:
+                raise osv.except_osv(_('Wrong Source Document !'), _('Please provide another source document.\nThis one does not exist !'))
+
+            default = {'state':'draft'}
+            doc_obj = self.pool.get('subscription.document')
+            document_ids = doc_obj.search(cr, uid, [('model.model','=',model_name)])
+            doc = doc_obj.browse(cr, uid, document_ids)[0]
+            for f in doc.field_ids:
+                if f.value=='date':
+                    value = time.strftime('%Y-%m-%d')
+                else:
+                    value = False
+                default[f.field.name] = value
+
+            state = 'running'
+
+            # if there was only one remaining document to generate
+            # the subscription is over and we mark it as being done
+            if remaining == 1:
+                state = 'done'
+            id = self.pool.get(model_name).copy(cr, uid, id, default, context)
+            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)})
+            self.write(cr, uid, [row['id']], {'state':state})
+        return True
+
+    def set_done(self, cr, uid, ids, context={}):
+        res = self.read(cr,uid, ids, ['cron_id'])
+        ids2 = [x['cron_id'][0] for x in res if x['id']]
+        self.pool.get('ir.cron').write(cr, uid, ids2, {'active':False})
+        self.write(cr, uid, ids, {'state':'done'})
+        return True
+
+    def set_draft(self, cr, uid, ids, context={}):
+        self.write(cr, uid, ids, {'state':'draft'})
+        return True
 subscription_subscription()
 
 class subscription_subscription_history(osv.osv):
-       _name = "subscription.subscription.history"
-       _description = "Subscription history"
-       _rec_name = 'date'
-       _columns = {
-               'date': fields.datetime('Date'),
-               'subscription_id': fields.many2one('subscription.subscription', 'Subscription', ondelete='cascade'),
-               'document_id': fields.reference('Source Document', required=True, selection=[('account.invoice','Invoice'),('sale.order','Sale Order')], size=128),
-       }
+    _name = "subscription.subscription.history"
+    _description = "Subscription history"
+    _rec_name = 'date'
+    _columns = {
+        'date': fields.datetime('Date'),
+        'subscription_id': fields.many2one('subscription.subscription', 'Subscription', ondelete='cascade'),
+        'document_id': fields.reference('Source Document', required=True, selection=[('account.invoice','Invoice'),('sale.order','Sale Order')], size=128),
+    }
 subscription_subscription_history()
 
+
+# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
+