[IMP]: implement new feature, remove invoice_equence_id from the journal
authorMantavya Gajjar <mga@tinyerp.com>
Sat, 14 Aug 2010 13:58:01 +0000 (19:28 +0530)
committerMantavya Gajjar <mga@tinyerp.com>
Sat, 14 Aug 2010 13:58:01 +0000 (19:28 +0530)
now invoice will be relay on the sequence_id only to have the unique number
for the invoice and account move

bzr revid: mga@tinyerp.com-20100814135801-gad7b92s3794yv44

addons/account/account.py
addons/account/account_view.xml
addons/account/invoice.py

index 8dc3f98..90d5051 100644 (file)
@@ -638,8 +638,8 @@ class account_journal(osv.osv):
         'currency': fields.many2one('res.currency', 'Currency', help='The currency used to enter statement'),
         'entry_posted': fields.boolean('Skip \'Draft\' State for Created Entries', help='Check this box if you don\'t want new account moves to pass through the \'draft\' state and instead goes directly to the \'posted state\' without any manual validation.'),
         'company_id': fields.many2one('res.company', 'Company', required=True, select=1, help="Company related to this journal"),
-        'invoice_sequence_id': fields.many2one('ir.sequence', 'Invoice Sequence', \
-            help="The sequence used for invoice numbers in this journal."),
+#        'invoice_sequence_id': fields.many2one('ir.sequence', 'Invoice Sequence', \
+#            help="The sequence used for invoice numbers in this journal."),
         'allow_date':fields.boolean('Check Date not in the Period', help= 'If set to True then do not accept the entry if the entry date is not into the period dates'),
     }
 
@@ -1162,16 +1162,22 @@ class account_move(osv.osv):
     ]
 
     def post(self, cr, uid, ids, context=None):
+        invoice = context.get('invoice')
         if self.validate(cr, uid, ids, context) and len(ids):
             for move in self.browse(cr, uid, ids):
                 if move.name =='/':
                     new_name = False
                     journal = move.journal_id
-                    if journal.sequence_id:
-                        c = {'fiscalyear_id': move.period_id.fiscalyear_id.id}
-                        new_name = self.pool.get('ir.sequence').get_id(cr, uid, journal.sequence_id.id, context=c)
+                    
+                    if invoice.internal_number:
+                        new_name = invoice.internal_number
                     else:
-                        raise osv.except_osv(_('Error'), _('No sequence defined in the journal !'))
+                        if journal.sequence_id:
+                            c = {'fiscalyear_id': move.period_id.fiscalyear_id.id}
+                            new_name = self.pool.get('ir.sequence').get_id(cr, uid, journal.sequence_id.id, context=c)
+                        else:
+                            raise osv.except_osv(_('Error'), _('No sequence defined in the journal !'))
+
                     if new_name:
                         self.write(cr, uid, [move.id], {'name':new_name})
 
index 4eba06c..268cb9b 100644 (file)
                             </group>
                             <group colspan="2" col="2">
                                 <separator string="Invoicing Data" colspan="4"/>
-                                <field name="invoice_sequence_id"/>
+<!--                                <field name="invoice_sequence_id"/>-->
                                 <field name="group_invoice_lines"/>
                             </group>
                             <group colspan="2" col="2" groups="base.group_extended">
index 8fc5ade..940d9cb 100644 (file)
@@ -231,8 +231,8 @@ class account_invoice(osv.osv):
             ('in_refund','Supplier Refund'),
             ],'Type', readonly=True, select=True, change_default=True),
 
-#        'number': fields.related('move_id','name', type='char', readonly=True, size=64, relation='account.move', store=True, string='Number'),
-        'number': fields.char('Invoice Number', size=32, readonly=True, help="Unique number of the invoice, computed automatically when the invoice is created."),
+        'number': fields.related('move_id','name', type='char', readonly=True, size=64, relation='account.move', store=True, string='Number'),
+        'internal_number': fields.char('Invoice Number', size=32, readonly=True, help="Unique number of the invoice, computed automatically when the invoice is created."),
         'reference': fields.char('Invoice Reference', size=64, help="The partner reference of this invoice."),
         'reference_type': fields.selection(_get_reference_type, 'Reference Type',
             required=True, readonly=True, states={'draft':[('readonly',False)]}),
@@ -326,6 +326,7 @@ class account_invoice(osv.osv):
         'company_id': lambda self,cr,uid,c: self.pool.get('res.company')._company_default_get(cr, uid, 'account.invoice', context=c),
         'reference_type': 'none',
         'check_total': 0.0,
+        'internal_number': False,
         'user_id': lambda s, cr, u, c: u,
     }
 
@@ -595,15 +596,22 @@ class account_invoice(osv.osv):
         res = map(itemgetter(0), cr.fetchall())
         return res
 
-    def copy(self, cr, uid, id, default=None, context=None):
-        if default is None:
-            default = {}
-        default = default.copy()
-        default.update({'state':'draft', 'number':False, 'move_id':False, 'move_name':False,})
+    def copy(self, cr, uid, id, default={}, context=None):
+        default.update({
+            'state':'draft', 
+            'number':False, 
+            'move_id':False, 
+            'move_name':False,
+            'internal_number': False,
+        })
         if 'date_invoice' not in default:
-            default['date_invoice'] = False
+            default.update({
+                'date_invoice':False
+            })
         if 'date_due' not in default:
-            default['date_due'] = False
+            default.update({
+                'date_due':False
+            })
         return super(account_invoice, self).copy(cr, uid, id, default, context)
 
     def test_paid(self, cr, uid, ids, *args):
@@ -773,7 +781,7 @@ class account_invoice(osv.osv):
         cur_obj = self.pool.get('res.currency')
         context = {}
         for inv in self.browse(cr, uid, ids):
-            if not inv.journal_id.invoice_sequence_id:
+            if not inv.journal_id.sequence_id:
                 raise osv.except_osv(_('Error !'), _('Please define sequence on invoice journal'))
             if not inv.invoice_line:
                 raise osv.except_osv(_('No Invoice Lines !'), _('Please create some invoice lines.'))
@@ -931,44 +939,35 @@ class account_invoice(osv.osv):
         }
 
     def action_number(self, cr, uid, ids, *args):
-#        #TODO: not correct fix but required a frech values before reading it.
-#        self.write(cr, uid, ids, {})
-#
-        cr.execute('SELECT id, type, number, move_id, reference ' \
-                'FROM account_invoice ' \
-                'WHERE id IN ('+','.join(map(str,ids))+')')
-        obj_inv = self.browse(cr, uid, ids)[0]
-
-        for (id, invtype, number, move_id, reference) in cr.fetchall():
-            if not number:
-                if obj_inv.journal_id.invoice_sequence_id:
-                    sid = obj_inv.journal_id.invoice_sequence_id.id
-                    number = self.pool.get('ir.sequence').get_id(cr, uid, sid, 'id', {'fiscalyear_id': obj_inv.period_id.fiscalyear_id.id})
-                else:
-                    number = self.pool.get('ir.sequence').get(cr, uid, 'account.invoice.' + invtype)
-
-                if not number:
-                    raise osv.except_osv(_('Warning !'), _('There is no active invoice sequence defined for the journal !'))
-
-                if invtype in ('in_invoice', 'in_refund'):
-                    ref = reference
-                else:
-                    ref = self._convert_ref(cr, uid, number)
-
-                cr.execute('UPDATE account_invoice SET number=%s ' \
-                        'WHERE id=%s', (number, id))
-                cr.execute('UPDATE account_move SET ref=%s ' \
-                        'WHERE id=%s AND (ref is null OR ref = \'\')',
-                        (ref, move_id))
-                cr.execute('UPDATE account_move_line SET ref=%s ' \
-                        'WHERE move_id=%s AND (ref is null OR ref = \'\')',
+        #TODO: not correct fix but required a frech values before reading it.
+        self.write(cr, uid, ids, {})
+        
+        for obj_inv in self.browse(cr, uid, ids):
+            id = obj_inv.id
+            invtype = obj_inv.type
+            number = obj_inv.number
+            move_id = obj_inv.move_id and obj_inv.move_id.id or False
+            reference = obj_inv.reference or ''
+
+            self.write(cr, uid, ids, {'internal_number':number})
+            
+            if invtype in ('in_invoice', 'in_refund'):
+                ref = reference
+            else:
+                ref = self._convert_ref(cr, uid, number)
+
+            cr.execute('UPDATE account_move SET ref=%s ' \
+                    'WHERE id=%s AND (ref is null OR ref = \'\')',
+                    (ref, move_id))
+            cr.execute('UPDATE account_move_line SET ref=%s ' \
+                    'WHERE move_id=%s AND (ref is null OR ref = \'\')',
+                    (ref, move_id))
+            cr.execute('UPDATE account_analytic_line SET ref=%s ' \
+                    'FROM account_move_line ' \
+                    'WHERE account_move_line.move_id = %s ' \
+                        'AND account_analytic_line.move_id = account_move_line.id',
                         (ref, move_id))
-                cr.execute('UPDATE account_analytic_line SET ref=%s ' \
-                        'FROM account_move_line ' \
-                        'WHERE account_move_line.move_id = %s ' \
-                            'AND account_analytic_line.move_id = account_move_line.id',
-                            (ref, move_id))
-
+            
             for inv_id, name in self.name_get(cr, uid, [id]):
                 message = _('Invoice ') + " '" + name + "' "+ _("is validated.")
                 self.log(cr, uid, inv_id, message)