~unifield-team/unifield-wm/us-826

« back to all changes in this revision

Viewing changes to analytic_distribution_supply/purchase.py

UF-675 [ADD] Copy analytic distribution from PO to PO generated invoice and shipment generated invoice

- add link between invoice line and po line for invoice that come from a shipment
- copy distribution from po to invoice

Show diffs side-by-side

added added

removed removed

Lines of Context:
78
78
        """
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
92
 
            for inv in inv_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)
112
91
        return res
113
92
 
114
93
    def button_analytic_distribution(self, cr, uid, ids, context={}):