Skip to content

Instantly share code, notes, and snippets.

@ruiztulio
Created October 20, 2015 20:57
Show Gist options
  • Save ruiztulio/f4be5f76cc8b4c6e9e06 to your computer and use it in GitHub Desktop.
Save ruiztulio/f4be5f76cc8b4c6e9e06 to your computer and use it in GitHub Desktop.
Create sale orders in odoo with the specified line count and random products
import odoorpc
import click
import random
import sys
@click.command()
@click.option('-po', default='admin',
prompt="Password Origin", help='Password Origin')
@click.option('-dbo', default='test_speed',
prompt="Database Origin", help='DB Origin')
@click.option('-uo', default='admin',
prompt='User name Origin', help='your email or login')
@click.option('-l', '--line_count', default=1, prompt='Line count to be generated',
help='IF of the sale order that you want to duplicate')
def duplicate_sale_order(po, dbo, uo, line_count):
"""
If you dont know how to execute this script use
python generate_sale.py --help
Example:
python generate_sale.py -po passwordorigin -uo userorigin -dbo
dborigin -si sale_id
you still need to modify the IP, Protocol, and Portparameters.
"""
#import pdb;pdb.set_trace()
con = odoorpc.ODOO(
'localhost',
timeout=9999,
port=8069)
con.login(dbo, uo, po, )
pids = con.execute('product.product',
'search',
[('type', '<>', 'service'), ('type', '<>', 'consu')])
# pids = con.execute('product.product',
# 'search',
# [('type', '<>', 'consu')])
print len(pids)
stock = con.execute('stock.location', 'search', [('name', '=', 'Stock')])
for pi in pids:
wiz_id = con.execute('stock.change.product.qty', 'create', {
'location_id': stock[0],
'new_quantity': 10,
'product_id': pi
})
con.execute('stock.change.product.qty', 'change_product_qty', wiz_id)
sale_order_id = con.execute('sale.order', 'create', {
'partner_id': 20,
})
click.echo('+ Created order : {}'.format(sale_order_id))
for linec in range(0, line_count):
pid = random.choice(pids)
product = con.env['product.product'].browse(pid)
sale_line_id = con.execute(
'sale.order.line',
'create',
{
'order_id': sale_order_id,
'product_id': pid,
'product_uom_qty': 1,
'name': 'Random product line {}'.format(linec),
# 'price_unit': product.lst_price * random.uniform(0.1, 1.9),
}
)
click.echo('+- Added {} lines to order {}'.format(line_count, sale_order_id))
sale_order = con.env['sale.order']
sys.exit(0)
order = sale_order.browse(sale_order_id)
order.action_button_confirm()
res_order = order.manual_invoice()
click.echo('+- Validated sale order')
invoice = con.env['account.invoice']
sale_invoice = invoice.browse(res_order['res_id'])
sale_invoice.invoice_validate()
# sale_invoice.invoice_pay_customer()
click.echo('+- Validated invoice : {}'.format(res_order['res_id']))
validated = 0
context = {}
while validated != 2:
click.echo('+- Validating pickings')
for pick in order.picking_ids:
click.echo('+-- {id} state: {state}'.format(id=pick.id, state=pick.state))
pick.write({'move_type': 'one'})
if pick.state in ('confirmed', 'assigned'):
click.echo('+-- Validating picking {}'.format(pick.id))
pick.force_assign()
context.update({
'active_model': 'stock.picking',
'active_ids': [pick.id],
'active_id': pick.id
})
created_id = con.execute('stock.transfer_details',
'create',
{'picking_id': pick.id},
context)
try:
con.execute('stock.transfer_details',
'do_detailed_transfer', [created_id])
except odoorpc.error.RPCError as error:
click.echo(error.info.get('data').get('debug'))
continue
else:
validated += 1
click.echo('+-- Validated {}'.format(validated))
# elif pick.state == 'waiting':
# click.echo('+-- Rereserve {}'.format(pick.id))
# pick.rereserve_pick()
click.echo('+ Process Completed')
moves_obj = con.env['stock.picking']
res = moves_obj.search([('origin', 'like', '{name}%'.format(name=order.name))])
print res
if __name__ == '__main__':
duplicate_sale_order()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment