Created
October 20, 2015 20:57
-
-
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
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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