class sale_order(osv.osv):
_name = "sale.order"
_description = "Sale Order"
-
+
def copy(self, cr, uid, id, default=None, context=None):
if context is None:
context = {}
for id in ids:
res[id] = [0.0, 0.0]
cr.execute('''SELECT
- p.sale_id,sum(m.product_qty), mp.state as mp_state
+ p.sale_id, sum(m.product_qty), mp.state as mp_state
FROM
stock_move m
LEFT JOIN
LEFT JOIN
procurement_order mp on (mp.move_id=m.id)
WHERE
- p.sale_id IN %s GROUP BY mp.state, p.sale_id''',(tuple(ids),))
+ p.sale_id IN %s GROUP BY mp.state, p.sale_id''', (tuple(ids),))
for oid, nbr, mp_state in cr.fetchall():
if mp_state == 'cancel':
continue
def action_cancel_draft(self, cr, uid, ids, *args):
if not len(ids):
return False
- cr.execute('select id from sale_order_line where order_id IN %s and state=%s',(tuple(ids),'cancel'))
+ cr.execute('select id from sale_order_line where order_id IN %s and state=%s', (tuple(ids), 'cancel'))
line_ids = map(lambda x: x[0], cr.fetchall())
self.write(cr, uid, ids, {'state': 'draft', 'invoice_ids': [], 'shipped': 0})
self.pool.get('sale.order.line').write(cr, uid, line_ids, {'invoiced': False, 'state': 'draft', 'invoice_lines': [(6, 0, [])]})
def _make_invoice(self, cr, uid, order, lines, context=None):
journal_obj = self.pool.get('account.journal')
inv_obj = self.pool.get('account.invoice')
-
+ obj_invoice_line = self.pool.get('account.invoice.line')
if context is None:
context = {}
- journal_ids = journal_obj.search(cr, uid, [('type', '=','sale'),('company_id', '=', order.company_id.id)], limit=1)
+ journal_ids = journal_obj.search(cr, uid, [('type', '=', 'sale'), ('company_id', '=', order.company_id.id)], limit=1)
if not journal_ids:
raise osv.except_osv(_('Error !'),
_('There is no sale journal defined for this company: "%s" (id:%d)') % (order.company_id.name, order.company_id.id))
for preinv in order.invoice_ids:
if preinv.state not in ('cancel',) and preinv.id not in from_line_invoice_ids:
for preline in preinv.invoice_line:
- inv_line_id = self.pool.get('account.invoice.line').copy(cr, uid, preline.id, {'invoice_id': False, 'price_unit': -preline.price_unit})
+ inv_line_id = obj_invoice_line.copy(cr, uid, preline.id, {'invoice_id': False, 'price_unit': -preline.price_unit})
lines.append(inv_line_id)
inv = {
'name': order.client_order_ref or order.name,
'comment': order.note,
'payment_term': pay_term,
'fiscal_position': order.fiscal_position.id or order.partner_id.property_account_position.id,
- 'date_invoice' : context.get('date_invoice',False),
- 'company_id' : order.company_id.id,
+ 'date_invoice': context.get('date_invoice',False),
+ 'company_id': order.company_id.id,
'user_id':order.user_id and order.user_id.id or False
}
inv.update(self._inv_get(cr, uid, order))
for record in self.pool.get('sale.order').browse(cr, uid, id).invoice_ids:
inv_ids1.add(record.id)
inv_ids = list(inv_ids1.difference(inv_ids))
-
+
result = mod_obj._get_id(cr, uid, 'account', 'invoice_form')
res = mod_obj.read(cr, uid, result, ['res_id'])
result = {
- 'name': 'Invoices',
+ 'name': 'Customer Invoices',
'view_type': 'form',
'view_mode': 'form',
'view_id': [res['res_id']],
invoice_ids = []
picking_obj = self.pool.get('stock.picking')
invoice = self.pool.get('account.invoice')
+ obj_sale_order_line = self.pool.get('sale.order.line')
if context is None:
context = {}
# If date was specified, use it as date invoiced, usefull when invoices are generated this month and put the
continue
elif (line.state in states):
lines.append(line.id)
- created_lines = self.pool.get('sale.order.line').invoice_line_create(cr, uid, lines)
+ created_lines = obj_sale_order_line.invoice_line_create(cr, uid, lines)
if created_lines:
invoices.setdefault(o.partner_id.id, []).append((o, created_lines))
if not invoices:
return i.id
for val in invoices.values():
if grouped:
- res = self._make_invoice(cr, uid, val[0][0], reduce(lambda x,y: x + y, [l for o,l in val], []), context=context)
+ res = self._make_invoice(cr, uid, val[0][0], reduce(lambda x, y: x + y, [l for o, l in val], []), context=context)
invoice_ref = ''
for o, l in val:
invoice_ref += o.name + '|'
# Update the sale order state.
#
if order.state == 'invoice_except':
- self.write(cr, uid, [order.id], {'state' : 'progress'}, context=context)
+ self.write(cr, uid, [order.id], {'state': 'progress'}, context=context)
return True
def action_cancel(self, cr, uid, ids, context=None):
+ wf_service = netsvc.LocalService("workflow")
if context is None:
context = {}
sale_order_line_obj = self.pool.get('sale.order.line')
_('You must first cancel all picking attached to this sale order.'))
for r in self.read(cr, uid, ids, ['picking_ids']):
for pick in r['picking_ids']:
- wf_service = netsvc.LocalService("workflow")
wf_service.trg_validate(uid, 'stock.picking', pick, 'button_cancel', cr)
for inv in sale.invoice_ids:
if inv.state not in ('draft', 'cancel'):
_('You must first cancel all invoices attached to this sale order.'))
for r in self.read(cr, uid, ids, ['invoice_ids']):
for inv in r['invoice_ids']:
- wf_service = netsvc.LocalService("workflow")
wf_service.trg_validate(uid, 'account.invoice', inv, 'invoice_cancel', cr)
sale_order_line_obj.write(cr, uid, [l.id for l in sale.order_line],
{'state': 'cancel'})
return canceled
def action_ship_create(self, cr, uid, ids, *args):
+ wf_service = netsvc.LocalService("workflow")
picking_id = False
company = self.pool.get('res.users').browse(cr, uid, uid).company_id
for order in self.browse(cr, uid, ids, context={}):
val = {}
for proc_id in proc_ids:
- wf_service = netsvc.LocalService("workflow")
wf_service.trg_validate(uid, 'procurement.order', proc_id, 'button_confirm', cr)
if picking_id:
- wf_service = netsvc.LocalService("workflow")
wf_service.trg_validate(uid, 'stock.picking', picking_id, 'button_confirm', cr)
if order.state == 'shipping_except':
'salesman_id':fields.related('order_id', 'user_id', type='many2one', relation='res.users', string='Salesman'),
'company_id': fields.related('order_id', 'company_id', type='many2one', relation='res.company', string='Company', store=True, readonly=True, states={'draft':[('readonly',False)]}),
}
- _order = 'sequence, id'
+ _order = 'sequence, id desc'
_defaults = {
'discount': 0.0,
'delay': 0.0,