Vijaykumar Baladaniya has proposed merging 
lp:~openerp-dev/openobject-addons/trunk-bug-1086051-vba into 
lp:openobject-addons.

Requested reviews:
  OpenERP Core Team (openerp)
Related bugs:
  Bug #1086051 in OpenERP Addons: "Supplier invoice from packing missing 
service product"
  https://bugs.launchpad.net/openobject-addons/+bug/1086051

For more details, see:
https://code.launchpad.net/~openerp-dev/openobject-addons/trunk-bug-1086051-vba/+merge/138718

Hello Sir,

    I have fix the problem when generate the invoice from receive delivery 
time, service attach to the purchase order invoice.

Thanks,
 vba
-- 
https://code.launchpad.net/~openerp-dev/openobject-addons/trunk-bug-1086051-vba/+merge/138718
Your team OpenERP R&D Team is subscribed to branch 
lp:~openerp-dev/openobject-addons/trunk-bug-1086051-vba.
=== modified file 'purchase/purchase.py'
--- purchase/purchase.py	2012-12-06 09:24:12 +0000
+++ purchase/purchase.py	2012-12-07 13:07:12 +0000
@@ -1031,6 +1031,46 @@
         self.write(cr, uid, ids, {'state': 'confirmed'}, context=context)
         return True
 
+    def _prepare_order_line_invoice_line(self, cr, uid, line, account_id=False, context=None):
+        res = {}
+        if not line.invoiced:
+            if not account_id:
+                if line.product_id:
+                    account_id = line.product_id.product_tmpl_id.property_account_income.id
+                    if not account_id:
+                        account_id = line.product_id.categ_id.property_account_income_categ.id
+                    if not account_id:
+                        raise osv.except_osv(_('Error!'),
+                                _('Please define income account for this product: "%s" (id:%d).') % \
+                                    (line.product_id.name, line.product_id.id,))
+                else:
+                    prop = self.pool.get('ir.property').get(cr, uid,
+                            'property_account_income_categ', 'product.category',
+                            context=context)
+                    account_id = prop and prop.id or False
+            uosqty = line.product_qty or False
+            pu = 0.0
+            if uosqty:
+                pu = round(line.price_unit * line.product_qty / uosqty,
+                        self.pool.get('decimal.precision').precision_get(cr, uid, 'Product Price'))
+            fpos = line.order_id.fiscal_position or False
+            account_id = self.pool.get('account.fiscal.position').map_account(cr, uid, fpos, account_id)
+            if not account_id:
+                raise osv.except_osv(_('Error!'),
+                            _('There is no Fiscal Position defined or Income category account defined for default properties of Product categories.'))
+            res = {
+                'name': line.name,
+                'origin': line.order_id.name,
+                'account_id': account_id,
+                'price_unit': pu,
+                'quantity': uosqty,
+                'uos_id': line.product_uom.id or False,
+                'product_id': line.product_id.id or False,
+                'invoice_line_tax_id': [(6, 0, [x.id for x in line.taxes_id])],
+                'account_analytic_id': line.account_analytic_id.id or False,
+            }
+        return res
+
 purchase_order_line()
 
 class procurement_order(osv.osv):

=== modified file 'purchase/stock.py'
--- purchase/stock.py	2012-11-30 17:11:30 +0000
+++ purchase/stock.py	2012-12-07 13:07:12 +0000
@@ -122,6 +122,67 @@
             purchase_obj.write(cursor, user, [picking.purchase_id.id], {'invoice_ids': [(4, invoice_id)]})
         return super(stock_picking, self)._invoice_hook(cursor, user, picking, invoice_id)
 
+    def action_invoice_create(self, cursor, user, ids, journal_id=False,
+            group=False, type='out_invoice', context=None):
+        if context is None:
+            context = {}
+        invoice_obj = self.pool.get('account.invoice')
+        picking_obj = self.pool.get('stock.picking')
+        invoice_line_obj = self.pool.get('account.invoice.line')
+        fiscal_position_obj = self.pool.get('account.fiscal.position')
+        order_line_obj = self.pool.get('purchase.order.line')
+
+        result = super(stock_picking, self).action_invoice_create(cursor, user,
+                ids, journal_id=journal_id, group=group, type=type,
+                context=context)
+        picking_ids = result.keys()
+        invoice_ids = result.values()
+        invoices = {}
+        for invoice in invoice_obj.browse(cursor, user, invoice_ids,
+                context=context):
+            invoices[invoice.id] = invoice
+
+        for picking in picking_obj.browse(cursor, user, picking_ids,
+                context=context):
+            if not picking.purchase_id:
+                continue
+            purchase_lines = picking.purchase_id.order_line
+            invoice_created = invoices[result[picking.id]]
+            if picking.purchase_id.partner_id:
+                invoice_obj.write(cursor, user, [invoice_created.id], {'partner_id': picking.purchase_id.partner_id.id}, context=context)
+
+            if picking.purchase_id.fiscal_position:
+                invoice_obj.write(cursor, user, [invoice_created.id], {'fiscal_position': picking.purchase_id.fiscal_position.id}, context=context)
+            for purchase_line in purchase_lines:
+                account_id = False
+                if not type:
+                    type = context.get('inv_type', False)
+                if group:
+                    name = picking.name + '-' + purchase_line.name
+                else:
+                    name = purchase_line.name
+                if purchase_line.product_id.type == 'service' and purchase_line.invoiced == False:
+                    if type in ('out_invoice', 'out_refund'):
+                        account_id = purchase_line.product_id.product_tmpl_id.\
+                                property_account_income.id
+                        if not account_id:
+                            account_id = purchase_line.product_id.categ_id.\
+                                    property_account_income_categ.id
+                    else:
+                        account_id = purchase_line.product_id.product_tmpl_id.\
+                                property_account_expense.id
+                        if not account_id:
+                            account_id = purchase_line.product_id.categ_id.\
+                                    property_account_expense_categ.id
+                vals = order_line_obj._prepare_order_line_invoice_line(cursor, user, purchase_line, account_id, context)
+                if vals: #note: in some cases we may not want to include all service lines as invoice lines
+                    vals['name'] = name
+                    vals['invoice_id'] = invoices[result[picking.id]].id
+                    invoice_line_id = invoice_line_obj.create(cursor, user, vals, context=context)
+                    purchase_line.write({'invoice_lines': [(4, invoice_line_id)]})
+                    invoice_obj.button_compute(cursor, user, [invoice_created.id], context=context)
+        return result
+
 class stock_partial_picking(osv.osv_memory):
     _inherit = 'stock.partial.picking'
 

_______________________________________________
Mailing list: https://launchpad.net/~openerp-dev-gtk
Post to     : openerp-dev-gtk@lists.launchpad.net
Unsubscribe : https://launchpad.net/~openerp-dev-gtk
More help   : https://help.launchpad.net/ListHelp

Reply via email to