Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- def action_invoice_create(self, cursor, user, ids, journal_id=False,
- group=False, type='out_invoice', context=None):
- '''Return ids of created invoices for the pickings'''
- invoice_obj = self.pool.get('account.invoice')
- invoice_line_obj = self.pool.get('account.invoice.line')
- invoices_group = {}
- res = {}
- for picking in self.browse(cursor, user, ids, context=context):
- if picking.invoice_state != '2binvoiced':
- continue
- payment_term_id = False
- partner = picking.address_id and picking.address_id.partner_id
- if not partner:
- raise osv.except_osv(_('Error, no partner !'),
- _('Please put a partner on the picking list if you want to generate invoice.'))
- if type in ('out_invoice', 'out_refund'):
- account_id = partner.property_account_receivable.id
- payment_term_id = self._get_payment_term(cursor, user, picking)
- else:
- account_id = partner.property_account_payable.id
- address_contact_id, address_invoice_id = \
- self._get_address_invoice(cursor, user, picking).values()
- comment = self._get_comment_invoice(cursor, user, picking)
- if group and partner.id and payment_term_id invoices_group:
- invoice_id = invoices_group[partner.id]
- invoice = invoice_obj.browse(cursor, user, invoice_id)
- invoice_vals = {
- 'name': (invoice.name or '') + ', ' + (picking.name or ''),
- 'origin': (invoice.origin or '') + ', ' + (picking.name or '') + (picking.origin and (':' + picking.origin) or ''),
- 'comment': (comment and (invoice.comment and invoice.comment+"\n"+comment or comment)) or (invoice.comment and invoice.comment or ''),
- }
- invoice_obj.write(cursor, user, [invoice_id], invoice_vals, context=context)
- else:
- invoice_vals = {
- 'name': picking.name,
- 'origin': (picking.name or '') + (picking.origin and (':' + picking.origin) or ''),
- 'type': type,
- 'account_id': account_id,
- 'partner_id': partner.id,
- 'address_invoice_id': address_invoice_id,
- 'address_contact_id': address_contact_id,
- 'comment': comment,
- 'payment_term': payment_term_id,
- 'fiscal_position': partner.property_account_position.id
- }
- cur_id = self.get_currency_id(cursor, user, picking)
- if cur_id:
- invoice_vals['currency_id'] = cur_id
- if journal_id:
- invoice_vals['journal_id'] = journal_id
- invoice_id = invoice_obj.create(cursor, user, invoice_vals,
- context=context)
- invoices_group[partner.id] = invoice_id
- res[picking.id] = invoice_id
- for move_line in picking.move_lines:
- if move_line.state == 'cancel':
- continue
- origin = move_line.picking_id.name
- if move_line.picking_id.origin:
- origin += ':' + move_line.picking_id.origin
- if group:
- name = (picking.name or '') + '-' + move_line.name
- else:
- name = move_line.name
- if type in ('out_invoice', 'out_refund'):
- account_id = move_line.product_id.product_tmpl_id.\
- property_account_income.id
- if not account_id:
- account_id = move_line.product_id.categ_id.\
- property_account_income_categ.id
- else:
- account_id = move_line.product_id.product_tmpl_id.\
- property_account_expense.id
- if not account_id:
- account_id = move_line.product_id.categ_id.\
- property_account_expense_categ.id
- price_unit = self._get_price_unit_invoice(cursor, user,
- move_line, type)
- discount = self._get_discount_invoice(cursor, user, move_line)
- discount1 = self._get_discount1_invoice(cursor, user, move_line)
- discount2 = self._get_discount2_invoice(cursor, user, move_line)
- discount3 = self._get_discount3_invoice(cursor, user, move_line)
- tax_ids = self._get_taxes_invoice(cursor, user, move_line, type)
- account_analytic_id = self._get_account_analytic_invoice(cursor,
- user, picking, move_line)
- #set UoS if it's a sale and the picking doesn't have one
- uos_id = move_line.product_uos and move_line.product_uos.id or False
- if not uos_id and type in ('out_invoice', 'out_refund'):
- uos_id = move_line.product_uom.id
- # print picking.origin
- # print picking.name
- # print move_line.customer_origin
- account_id = self.pool.get('account.fiscal.position').map_account(cursor, user, partner.property_account_position, account_id)
- invoice_line_id = invoice_line_obj.create(cursor, user, {
- 'name': name,
- 'origin': origin,
- 'invoice_id': invoice_id,
- 'uos_id': uos_id,
- 'product_id': move_line.product_id.id,
- 'account_id': account_id,
- 'price_unit': price_unit,
- 'discount': discount,
- 'discount1': discount1,
- 'discount2': discount2,
- 'discount3': discount3,
- 'sale_origin': picking.origin,
- 'ddt_origin': picking.name,
- 'customer_origin': move_line.customer_origin,
- 'quantity': move_line.product_uos_qty or move_line.product_qty,
- 'invoice_line_tax_id': [(6, 0, tax_ids)],
- 'account_analytic_id': account_analytic_id,
- }, context=context)
- self._invoice_line_hook(cursor, user, move_line, invoice_line_id)
- invoice_obj.button_compute(cursor, user, [invoice_id], context=context,
- set_total=(type in ('in_invoice', 'in_refund')))
- self.write(cursor, user, [picking.id], {
- 'invoice_state': 'invoiced',
- }, context=context)
- self._invoice_hook(cursor, user, picking, invoice_id)
- self.write(cursor, user, res.keys(), {
- 'invoice_state': 'invoiced',
- }, context=context)
- return res
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement