79
79
# Retrieve some data
80
80
res = super(purchase_order, self).action_invoice_create(cr, uid, ids, *args) # invoice_id
81
# Set analytic distribution from purchase order to invoice
82
invl_obj = self.pool.get('account.invoice.line') # invoice line object
83
81
ana_obj = self.pool.get('analytic.distribution')
84
82
for po in self.browse(cr, uid, ids):
85
83
if po.from_yml_test:
88
86
for line in po.order_line:
89
87
if not line.analytic_distribution_id:
90
88
raise osv.except_osv(_('Error'), _("No analytic distribution found on purchase order '%s'.") % po.name)
91
inv_ids = po.invoice_ids
93
# First set invoice global distribution
94
if po.analytic_distribution_id:
95
new_distrib_id = ana_obj.copy(cr, uid, po.analytic_distribution_id.id, {})
96
if not new_distrib_id:
97
raise osv.except_osv(_('Error'), _('An error occured for analytic distribution copy for invoice.'))
98
# create default funding pool lines
99
ana_obj.create_funding_pool_lines(cr, uid, [new_distrib_id])
100
self.pool.get('account.invoice').write(cr, uid, [inv.id], {'analytic_distribution_id': new_distrib_id,})
101
# Search all invoice lines
102
invl_ids = invl_obj.search(cr, uid, [('invoice_id', '=', inv.id)])
103
# Then set distribution on invoice line regarding purchase order line distribution
104
for invl in invl_obj.browse(cr, uid, invl_ids):
105
if invl.order_line_id and invl.order_line_id.analytic_distribution_id:
106
new_invl_distrib_id = ana_obj.copy(cr, uid, invl.order_line_id.analytic_distribution_id.id, {})
107
if not new_invl_distrib_id:
108
raise osv.except_osv(_('Error'), _('An error occured for analytic distribution copy for invoice.'))
109
# create default funding pool lines
110
ana_obj.create_funding_pool_lines(cr, uid, [new_invl_distrib_id])
111
invl_obj.write(cr, uid, [invl.id], {'analytic_distribution_id': new_invl_distrib_id})
89
# Copy analytic_distribution
90
self.pool.get('account.invoice').fetch_analytic_distribution(cr, uid, po.invoice_ids)
114
93
def button_analytic_distribution(self, cr, uid, ids, context={}):