Divyesh Makwana(OpenERP) has proposed merging 
lp:~openerp-dev/openobject-addons/trunk-hr_expense-improvement-mdi into 
lp:~openerp-dev/openobject-addons/trunk-hr_expense.

Requested reviews:
  OpenERP R&D Team (openerp-dev)

For more details, see:
https://code.launchpad.net/~openerp-dev/openobject-addons/trunk-hr_expense-improvement-mdi/+merge/114416

Hello Sir,

After the confirmation of the expense, the button should create an 
account.voucher (instead of an invoice) and confirmed it. It must creates the 
accounting entries exactly as the current invoice does.

Thanks,
Divyesh
-- 
https://code.launchpad.net/~openerp-dev/openobject-addons/trunk-hr_expense-improvement-mdi/+merge/114416
Your team OpenERP R&D Team is requested to review the proposed merge of 
lp:~openerp-dev/openobject-addons/trunk-hr_expense-improvement-mdi into 
lp:~openerp-dev/openobject-addons/trunk-hr_expense.
=== modified file 'account_voucher/voucher_sales_purchase_view.xml'
--- account_voucher/voucher_sales_purchase_view.xml	2012-07-14 23:35:25 +0000
+++ account_voucher/voucher_sales_purchase_view.xml	2012-07-16 10:19:20 +0000
@@ -218,7 +218,7 @@
             <field name="model">account.voucher</field>
             <field name="type">form</field>
             <field name="arch" type="xml">
-                <form version="7.0">
+                <form string="Purchase Receipt" version="7.0">
                 <header>
                     <button name="proforma_voucher" string="Validate" states="draft" class="oe_highlight"/>
                     <button name="%(act_pay_bills)d" context="{'narration':narration, 'title':'Bill Payment', 'type':'payment', 'partner_id': partner_id, 'reference':reference}" type="action" string="Pay Bill" attrs="{'invisible':['|',('pay_now','=','pay_now'),'|',('state','=','draft'), ('paid','=',True)]}" class="oe_highlight"/>

=== modified file 'hr_expense/__openerp__.py'
--- hr_expense/__openerp__.py	2012-06-06 08:44:17 +0000
+++ hr_expense/__openerp__.py	2012-07-16 10:19:20 +0000
@@ -33,8 +33,8 @@
     * Draft expense
     * Confirmation of the sheet by the employee
     * Validation by his manager
-    * Validation by the accountant and invoice creation
-    * Payment of the invoice to the employee
+    * Validation by the accountant and receipt creation
+    * Payment of the receipt to the employee
 
 This module also uses the analytic accounting and is compatible with
 the invoice on timesheet module so that you will be able to automatically
@@ -43,7 +43,7 @@
     'author': 'OpenERP SA',
     'website': 'http://www.openerp.com',
     'images': ['images/hr_expenses_analysis.jpeg', 'images/hr_expenses.jpeg'],
-    'depends': ['hr', 'account'],
+    'depends': ['hr', 'account_voucher'],
     'init_xml': [],
     'update_xml': [
         'security/ir.model.access.csv',

=== modified file 'hr_expense/hr_expense.py'
--- hr_expense/hr_expense.py	2012-07-05 09:29:21 +0000
+++ hr_expense/hr_expense.py	2012-07-16 10:19:20 +0000
@@ -40,12 +40,16 @@
         if context is None:
             context = {}
         if not default: default = {}
-        default.update({'invoice_id': False, 'date_confirm': False, 'date_valid': False, 'user_valid': False})
+        default.update({'voucher_id': False, 'date_confirm': False, 'date_valid': False, 'user_valid': False})
         return super(hr_expense_expense, self).copy(cr, uid, id, default, context=context)
 
     def _amount(self, cr, uid, ids, field_name, arg, context=None):
-        cr.execute("SELECT s.id,COALESCE(SUM(l.unit_amount*l.unit_quantity),0) AS amount FROM hr_expense_expense s LEFT OUTER JOIN hr_expense_line l ON (s.id=l.expense_id) WHERE s.id IN %s GROUP BY s.id ", (tuple(ids),))
-        res = dict(cr.fetchall())
+        res= {}
+        for expense in self.browse(cr, uid, ids, context=context):
+            total = 0.0
+            for line in expense.line_ids:
+                total += line.unit_amount * line.unit_quantity
+            res[expense.id] = total
         return res
 
     def _get_currency(self, cr, uid, context=None):
@@ -63,7 +67,7 @@
         'name': fields.char('Description', size=128, required=True),
         'id': fields.integer('Sheet ID', readonly=True),
         'date': fields.date('Date', select=True),
-        'journal_id': fields.many2one('account.journal', 'Force Journal', help = "The journal used when the expense is invoiced"),
+        'journal_id': fields.many2one('account.journal', 'Force Journal', help = "The journal used when the expense is receipted."),
         'employee_id': fields.many2one('hr.employee', "Employee", required=True),
         'user_id': fields.many2one('res.users', 'User', required=True),
         'date_confirm': fields.date('Confirmation Date', select=True, help = "Date of the confirmation of the sheet expense. It's filled when the button Confirm is pressed."),
@@ -73,7 +77,7 @@
         'line_ids': fields.one2many('hr.expense.line', 'expense_id', 'Expense Lines', readonly=True, states={'draft':[('readonly',False)]} ),
         'note': fields.text('Note'),
         'amount': fields.function(_amount, string='Total Amount'),
-        'invoice_id': fields.many2one('account.invoice', "Employee's Invoice"),
+        'voucher_id': fields.many2one('account.voucher', "Employee's Receipt"),
         'currency_id': fields.many2one('res.currency', 'Currency', required=True),
         'department_id':fields.many2one('hr.department','Department'),
         'company_id': fields.many2one('res.company', 'Company', required=True),
@@ -82,11 +86,11 @@
             ('cancelled', 'Refused'),
             ('confirm', 'Waiting Approval'),
             ('accepted', 'Approved'),
-            ('invoiced', 'Invoiced'),
+            ('receipted', 'Receipted'),
             ('paid', 'Reimbursed')
             ],
             'Status', readonly=True, help='When the expense request is created the status is \'Draft\'.\n It is confirmed by the user and request is sent to admin, the status is \'Waiting Confirmation\'.\
-            \nIf the admin accepts it, the status is \'Accepted\'.\n If an invoice is made for the expense request, the status is \'Invoiced\'.\n If the expense is paid to user, the status is \'Reimbursed\'.'),
+            \nIf the admin accepts it, the status is \'Accepted\'.\n If a receipt is made for the expense request, the status is \'Receipted\'.\n If the expense is paid to user, the status is \'Reimbursed\'.'),
     }
     _defaults = {
         'company_id': lambda s, cr, uid, c: s.pool.get('res.company')._company_default_get(cr, uid, 'hr.employee', context=c),
@@ -130,97 +134,107 @@
         self.write(cr, uid, ids, {'state':'paid'})
         return True
 
-    def invoice(self, cr, uid, ids, context=None):
-        wf_service = netsvc.LocalService("workflow")
+    def receipt(self, cr, uid, ids, context=None):
         mod_obj = self.pool.get('ir.model.data')
-        res = mod_obj.get_object_reference(cr, uid, 'account', 'invoice_supplier_form')
-        inv_ids = []
+        wkf_service = netsvc.LocalService("workflow")
+        
+        voucher_ids = []
         for id in ids:
-            wf_service.trg_validate(uid, 'hr.expense.expense', id, 'invoice', cr)
-            inv_ids.append(self.browse(cr, uid, id).invoice_id.id)
+            wkf_service.trg_validate(uid, 'hr.expense.expense', id, 'receipt', cr)
+            voucher_ids.append(self.browse(cr, uid, id, context=context).voucher_id.id)
+        res = mod_obj.get_object_reference(cr, uid, 'account_voucher', 'view_purchase_receipt_form')
         return {
-            'name': _('Supplier Invoices'),
+            'name': _('Expense Receipt'),
             'view_type': 'form',
             'view_mode': 'form',
+            'res_model': 'account.voucher',
             'view_id': [res and res[1] or False],
-            'res_model': 'account.invoice',
-            'context': "{'type':'out_invoice', 'journal_type': 'purchase'}",
             'type': 'ir.actions.act_window',
+            'target': 'new',
             'nodestroy': True,
-            'target': 'current',
-            'res_id': inv_ids and inv_ids[0] or False,
+            'res_id': voucher_ids and voucher_ids[0] or False,
         }
 
-    def action_invoice_create(self, cr, uid, ids):
+    def action_receipt_create(self, cr, uid, ids, context=None):
         res = False
-        invoice_obj = self.pool.get('account.invoice')
         property_obj = self.pool.get('ir.property')
         sequence_obj = self.pool.get('ir.sequence')
         analytic_journal_obj = self.pool.get('account.analytic.journal')
         account_journal = self.pool.get('account.journal')
-        for exp in self.browse(cr, uid, ids):
+        voucher_obj = self.pool.get('account.voucher')
+        
+        for exp in self.browse(cr, uid, ids, context=None):
             company_id = exp.company_id.id
             lines = []
-            for l in exp.line_ids:
-                tax_id = []
-                if l.product_id:
-                    acc = l.product_id.product_tmpl_id.property_account_expense
+            total = 0.0
+            for line in exp.line_ids:
+                if line.product_id:
+                    acc = line.product_id.product_tmpl_id.property_account_expense
                     if not acc:
-                        acc = l.product_id.categ_id.property_account_expense_categ
-                    tax_id = [x.id for x in l.product_id.supplier_taxes_id]
+                        acc = line.product_id.categ_id.property_account_expense_categ
                 else:
                     acc = property_obj.get(cr, uid, 'property_account_expense_categ', 'product.category', context={'force_company': company_id})
                     if not acc:
                         raise osv.except_osv(_('Error !'), _('Please configure Default Expense account for Product purchase, `property_account_expense_categ`'))
+                
                 lines.append((0, False, {
-                    'name': l.name,
+                    'name': line.name,
                     'account_id': acc.id,
-                    'price_unit': l.unit_amount,
-                    'quantity': l.unit_quantity,
-                    'uos_id': l.uom_id.id,
-                    'product_id': l.product_id and l.product_id.id or False,
-                    'invoice_line_tax_id': tax_id and [(6, 0, tax_id)] or False,
-                    'account_analytic_id': l.analytic_account.id,
+                    'account_analytic_id': line.analytic_account.id,
+                    'amount': line.total_amount,
+                    'type': 'dr'
                 }))
+                total += line.total_amount
             if not exp.employee_id.address_home_id:
                 raise osv.except_osv(_('Error !'), _('The employee must have a Home address.'))
             acc = exp.employee_id.address_home_id.property_account_payable.id
-            payment_term_id = exp.employee_id.address_home_id.property_payment_term.id
-            inv = {
+            voucher = {
                 'name': exp.name,
                 'reference': sequence_obj.get(cr, uid, 'hr.expense.invoice'),
                 'account_id': acc,
-                'type': 'in_invoice',
+                'type': 'purchase',
                 'partner_id': exp.employee_id.address_home_id.id,
                 'company_id': company_id,
-                'origin': exp.name,
-                'invoice_line': lines,
-                'currency_id': exp.currency_id.id,
-                'payment_term': payment_term_id,
-                'fiscal_position': exp.employee_id.address_home_id.property_account_position.id
+                'line_ids': lines,
+                'amount': total
             }
-            if payment_term_id:
-                to_update = invoice_obj.onchange_payment_term_date_invoice(cr, uid, [], payment_term_id, None)
-                if to_update:
-                    inv.update(to_update['value'])
             journal = False
             if exp.journal_id:
-                inv['journal_id']=exp.journal_id.id
+                voucher['journal_id'] = exp.journal_id.id
                 journal = exp.journal_id
             else:
-                journal_id = invoice_obj._get_journal(cr, uid, context={'type': 'in_invoice', 'company_id': company_id})
+                journal_id = voucher_obj._get_journal(cr, uid, context={'type': 'purchase', 'company_id': company_id})
                 if journal_id:
-                    inv['journal_id'] = journal_id
-                    journal = account_journal.browse(cr, uid, journal_id)
+                    voucher['journal_id'] = journal_id
+                    journal = account_journal.browse(cr, uid, journal_id, context=context)
             if journal and not journal.analytic_journal_id:
-                analytic_journal_ids = analytic_journal_obj.search(cr, uid, [('type','=','purchase')])
+                analytic_journal_ids = analytic_journal_obj.search(cr, uid, [('type','=','purchase')], context=context)
                 if analytic_journal_ids:
-                    account_journal.write(cr, uid, [journal.id],{'analytic_journal_id':analytic_journal_ids[0]})
-            inv_id = invoice_obj.create(cr, uid, inv, {'type': 'in_invoice'})
-            invoice_obj.button_compute(cr, uid, [inv_id], {'type': 'in_invoice'}, set_total=True)
-            self.write(cr, uid, [exp.id], {'invoice_id': inv_id, 'state': 'invoiced'})
-            res = inv_id
+                    account_journal.write(cr, uid, [journal.id], {'analytic_journal_id': analytic_journal_ids[0]}, context=context)
+            voucher_id = voucher_obj.create(cr, uid, voucher, context=context)
+            self.write(cr, uid, [exp.id], {'voucher_id': voucher_id, 'state': 'receipted'}, context=context)
+            res = voucher_id
         return res
+    
+    def action_view_receipt(self, cr, uid, ids, context=None):
+        '''
+        This function returns an action that display existing receipt of given expense ids.
+        '''
+        assert len(ids) == 1, 'This option should only be used for a single id at a time'
+        voucher_id = self.browse(cr, uid, ids[0], context=context).voucher_id.id
+        res = self.pool.get('ir.model.data').get_object_reference(cr, uid, 'account_voucher', 'view_purchase_receipt_form')
+        result = {
+            'name': _('Expense Receipt'),
+            'view_type': 'form',
+            'view_mode': 'form',
+            'view_id': res and res[1] or False,
+            'res_model': 'account.voucher',
+            'type': 'ir.actions.act_window',
+            'nodestroy': True,
+            'target': 'current',
+            'res_id': voucher_id,
+        }
+        return result
 
 hr_expense_expense()
 

=== modified file 'hr_expense/hr_expense_view.xml'
--- hr_expense/hr_expense_view.xml	2012-07-13 09:53:41 +0000
+++ hr_expense/hr_expense_view.xml	2012-07-16 10:19:20 +0000
@@ -45,7 +45,7 @@
             <field name="model">hr.expense.expense</field>
             <field name="type">tree</field>
             <field name="arch" type="xml">
-                <tree colors="blue:state == 'draft';black:state in ('confirm','accepted','invoiced','paid');gray:state == 'cancelled'"  string="Expenses" editable="top">
+                <tree colors="blue:state == 'draft';black:state in ('confirm','accepted','receipted','paid');gray:state == 'cancelled'"  string="Expenses" editable="top">
                     <field name="employee_id"/>
                     <field name="date"/>
                     <field name="department_id"/>
@@ -68,7 +68,8 @@
                     <button name="confirm" states="draft" string="Submit to Manager" type="workflow" class="oe_highlight"/>
                     <button name="validate" states="confirm" string="Approve" type="workflow" groups="base.group_hr_user" class="oe_highlight"/>
                     <button name="draft" states="confirm,cancelled" string="Set to Draft" type="workflow" groups="base.group_hr_user" />
-                    <button name="invoice" states="accepted" string="Invoice" type="object" groups="base.group_hr_user" class="oe_highlight"/>
+                    <button name="receipt" states="accepted" string="Issue Receipt" type="object" groups="base.group_hr_user" class="oe_highlight"/>
+                    <button name="action_view_receipt" states="receipted" string="Open Receipt" type="object" class="oe_highlight"/>
                     <button name="refuse" states="confirm,accepted" string="Refuse" type="workflow" groups="base.group_hr_user" />
                     <field name="state" widget="statusbar" statusbar_visible="draft,confirm,accepted" statusbar_colors='{"confirm":"blue","cancelled":"red"}'/>
                 </header>
@@ -109,14 +110,21 @@
                                     </group>
                                 </form>
                             </field>
-                            <separator string="Notes"/>
-                            <field name="note" placeholder="Free Notes"/>
+                            <group>
+                                <div>
+                                    <separator string="Notes"/>
+                                    <field name="note" placeholder="Free Notes"/>
+                                </div>
+                                <group class="oe_subtotal_footer">
+                                    <field name="amount"/>
+                                </group>
+                            </group>
                         </page>
                         <page string="Other Info">
                             <group>
                                 <group string="Accounting Data">
-                                    <field name="journal_id"/>
-                                    <field name="invoice_id" context="{'type':'in_invoice', 'journal_type': 'purchase'}"/>
+                                    <field name="journal_id" widget="selection" domain="[('type', 'in', ('purchase','purchase_refund'))]"/>
+                                    <field name="voucher_id" context="{'form_view_ref': 'account_voucher.view_purchase_receipt_form'}"/>
                                 </group>
                             </group>
                         </page>

=== modified file 'hr_expense/hr_expense_workflow.xml'
--- hr_expense/hr_expense_workflow.xml	2011-11-18 11:44:53 +0000
+++ hr_expense/hr_expense_workflow.xml	2012-07-16 10:19:20 +0000
@@ -47,12 +47,12 @@
             <field name="action">expense_canceled()</field>
         </record>
 
-        <record id="act_invoice" model="workflow.activity">
+        <record id="act_receipt" model="workflow.activity">
             <field name="wkf_id" ref="wkf_expenses"/>
-            <field name="name">invoice</field>
+            <field name="name">receipt</field>
             <field name="kind">subflow</field>
-            <field name="subflow_id" ref="account.wkf"/>
-            <field name="action">action_invoice_create()</field>
+            <field name="subflow_id" ref="account_voucher.wkf"/>
+            <field name="action">action_receipt_create()</field>
         </record>
 
         <record id="t1" model="workflow.transition">
@@ -91,15 +91,15 @@
 
         <record id="t8" model="workflow.transition">
             <field name="act_from" ref="act_accepted"/>
-            <field name="act_to" ref="act_invoice"/>
-            <field name="signal">invoice</field>
+            <field name="act_to" ref="act_receipt"/>
+            <field name="signal">receipt</field>
             <field name="group_id" ref="base.group_hr_user"/>
         </record>
 
         <record id="t9" model="workflow.transition">
-            <field name="act_from" ref="act_invoice"/>
+            <field name="act_from" ref="act_receipt"/>
             <field name="act_to" ref="act_paid"/>
-            <field name="signal">subflow.paid</field>
+            <field name="signal">subflow.done</field>
             <field name="group_id" ref="base.group_hr_user"/>
         </record>
 

=== modified file 'hr_expense/report/hr_expense_report.py'
--- hr_expense/report/hr_expense_report.py	2012-05-04 11:57:48 +0000
+++ hr_expense/report/hr_expense_report.py	2012-07-16 10:19:20 +0000
@@ -39,11 +39,11 @@
         'product_id':fields.many2one('product.product', 'Product', readonly=True),
         'journal_id': fields.many2one('account.journal', 'Force Journal', readonly=True),
         'product_qty':fields.float('Qty', readonly=True),
-        'invoiced':fields.integer('# of Invoiced Lines', readonly=True),
+        'receipted':fields.integer('# of Receipted Lines', readonly=True),
         'employee_id': fields.many2one('hr.employee', "Employee's Name", readonly=True),
         'date_confirm': fields.date('Confirmation Date', readonly=True),
         'date_valid': fields.date('Validation Date', readonly=True),
-        'invoice_id': fields.many2one('account.invoice', 'Invoice', readonly=True),
+        'voucher_id': fields.many2one('account.voucher', 'Receipt', readonly=True),
         'department_id':fields.many2one('hr.department','Department', readonly=True),
         'company_id':fields.many2one('res.company', 'Company', readonly=True),
         'user_id':fields.many2one('res.users', 'Validation User', readonly=True),
@@ -60,7 +60,7 @@
             ('draft', 'Draft'),
             ('confirm', 'Waiting confirmation'),
             ('accepted', 'Accepted'),
-            ('invoiced', 'Invoiced'),
+            ('receipted', 'Receipted'),
             ('paid', 'Reimbursed'),
             ('cancelled', 'Cancelled')],
             'Status', readonly=True),
@@ -78,8 +78,8 @@
                      s.currency_id,
                      to_date(to_char(s.date_confirm, 'dd-MM-YYYY'),'dd-MM-YYYY') as date_confirm,
                      to_date(to_char(s.date_valid, 'dd-MM-YYYY'),'dd-MM-YYYY') as date_valid,
-                     s.invoice_id,
-                     count(s.invoice_id) as invoiced,
+                     s.voucher_id,
+                     count(s.voucher_id) as receipted,
                      s.user_valid as user_id,
                      s.department_id,
                      to_char(date_trunc('day',s.create_date), 'YYYY') as year,
@@ -109,7 +109,7 @@
                      to_date(to_char(s.date_valid, 'dd-MM-YYYY'),'dd-MM-YYYY'),
                      l.product_id,
                      l.analytic_account,
-                     s.invoice_id,
+                     s.voucher_id,
                      s.currency_id,
                      s.user_valid,
                      s.department_id,

=== modified file 'hr_expense/report/hr_expense_report_view.xml'
--- hr_expense/report/hr_expense_report_view.xml	2012-07-03 15:58:43 +0000
+++ hr_expense/report/hr_expense_report_view.xml	2012-07-16 10:19:20 +0000
@@ -7,13 +7,13 @@
         <field name="model">hr.expense.report</field>
         <field name="type">tree</field>
         <field name="arch" type="xml">
-            <tree colors="blue:state == 'draft';black:state in ('confirm','accepted','invoiced','paid');gray:state == 'cancelled'" string="Expenses Analysis">
+            <tree colors="blue:state == 'draft';black:state in ('confirm','accepted','receipted','paid');gray:state == 'cancelled'" string="Expenses Analysis">
                 <field name="employee_id" invisible="1"/>
                 <field name="user_id" invisible="1"/>
                 <field name="year" invisible="1"/>
                 <field name="month" invisible="1"/>
                 <field name="day" invisible="1"/>
-                <field name="invoice_id" invisible="1"/>
+                <field name="voucher_id" invisible="1"/>
                 <field name="analytic_account" invisible="1" groups="analytic.group_analytic_accounting"/>
                 <field name="department_id" invisible="1"/>
                 <field name="company_id" invisible="1"/>
@@ -23,7 +23,7 @@
                 <field name="state" invisible="1"/>
                 <field name="nbr" sum="# of Lines"/>
                 <field name="no_of_products" sum="# of Products"/>
-                <field name="invoiced" sum="Total Invoiced Lines"/>
+                <field name="receipted" sum="Total Receipted Lines"/>
                 <field name="price_average" avg="Average Price"/>
                 <field name="price_total" sum="Total Price"/>
                 <field name="delay_confirm"/>
@@ -56,8 +56,8 @@
                       help = "Confirm Expenses"/>
                     <filter string="Approved" icon="terp-check" domain="[('state','=','accepted')]"
                       help = "Approved Expenses"/>
-                    <filter string="Invoiced" icon="terp-dolar" domain="[('state','in', ('invoiced', 'paid'))]"
-                      help = "Invoiced Expenses"/>
+                    <filter string="Receipted" icon="terp-dolar" domain="[('state','in', ('receipted', 'paid'))]"
+                      help = "Receipted Expenses"/>
                     <separator orientation="vertical"/>
                     <field name="employee_id"/>
                     <field name="department_id"/>

=== modified file 'hr_expense/test/expense_process.yml'
--- hr_expense/test/expense_process.yml	2011-12-19 16:54:40 +0000
+++ hr_expense/test/expense_process.yml	2012-07-16 10:19:20 +0000
@@ -17,23 +17,21 @@
   !assert {model: hr.expense.expense, id: sep_expenses, severity: error, string: Expense should be in Approved state}:
     - state == 'accepted'
 -
-  I make Invoice for the expense.
+  I make Receipt for the expense.
 -
   !python {model: hr.expense.expense}: |
-    self.invoice(cr, uid, [ref('sep_expenses')])
+    self.receipt(cr, uid, [ref('sep_expenses')])
 -
-  I check invoice details.
+  I check receipt details.
 -
   !python {model: hr.expense.expense}: |
     sep_expenses = self.browse(cr, uid, ref("sep_expenses"), context=context)
-    assert sep_expenses.state == 'invoiced', "Expense should be in 'Invoiced' state."
-    assert sep_expenses.invoice_id, "Expense should have link of Invoice."
-    assert sep_expenses.invoice_id.currency_id == sep_expenses.currency_id,"Invoice currency is not correspond with supplier invoice currency"
-    assert sep_expenses.invoice_id.origin == sep_expenses.name,"Invoice origin is not correspond with supplier invoice"
-    assert sep_expenses.invoice_id.type == 'in_invoice', "Invoice type is not supplier invoice"
-    assert sep_expenses.invoice_id.amount_total == sep_expenses.amount,"Invoice total amount is not correspond with supplier invoice total"
-    assert len(sep_expenses.invoice_id.invoice_line) == len(sep_expenses.line_ids),"Lines of Invoice and supplier invoice Line are not correspond"
-    #TODO: check invoice line details with Expenses lines
+    assert sep_expenses.state == 'receipted', "Expense should be in 'Receipted' state."
+    assert sep_expenses.voucher_id.name == sep_expenses.name,"Receipt name is not correspond with expense name."
+    assert sep_expenses.voucher_id.type == 'purchase', "Receipt type is not purchase receipt."
+    assert sep_expenses.voucher_id.amount == sep_expenses.amount,"Receipt total amount is not correspond with expense total."
+    assert len(sep_expenses.voucher_id.line_dr_ids) == len(sep_expenses.line_ids),"Lines of Receipt and expense line are not correspond."
+
 -
   I pay the expenses.
 -

_______________________________________________
Mailing list: https://launchpad.net/~openerp-dev-gtk
Post to     : [email protected]
Unsubscribe : https://launchpad.net/~openerp-dev-gtk
More help   : https://help.launchpad.net/ListHelp

Reply via email to