Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #!/usr/bin/env python
- # coding: utf8
- # Script de validation des sale Orders
- #
- # Script Serveur Socket : à exécuter coté serveur
- # Job Talend envoie la liste des code partner via le port:15557
- # Le script serveur envoie le statut vers le seveur Talend via le port:15556
- #
- # version 1." @ 10 Octobre 2016
- # rajout des parametres de connexion via les variables d'environnement
- #import library OddoXMLRPC
- from os.path import abspath
- import csv
- import odoorpc
- import argparse
- import socket
- ## set ODOO_SERVER="10.254.2.7"
- ## set ODOO_PORT="8069"
- ## set ODOO_DB="odoo"
- ## set ODOO_USER="admin"
- ## set ODOO_PASSWORD="OneERP2016!"
- ## set SCRIPT="0"
- ## python create_employee_users.py %ODOO_SERVER% %ODOO_PORT% %ODOO_DB% %ODOO_USER% %ODOO_PASSWORD% %SCRIPT%
- ## set SCRIPT = "0" res_user_generation
- ## set SCRIPT = "1" : validation_sale_oder
- socketSRV = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
- socketSRV.bind(('', 15557))
- hoteSocket = "localhost"
- portSocket = 15556
- socketReturnMaxBuffer=200000000
- #socketReturn = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
- parser = argparse.ArgumentParser()
- parser.add_argument("ODOO_SERVER")
- parser.add_argument("ODOO_PORT")
- parser.add_argument("ODOO_DB")
- parser.add_argument("ODOO_USER")
- parser.add_argument("ODOO_PASSWORD")
- parser.add_argument("SCRIPT")
- args = parser.parse_args()
- print "Parametres de connexion:"
- print args.SCRIPT +" "+args.ODOO_SERVER +":"+ args.ODOO_PORT+"/"+ args.ODOO_DB+"@"+ args.ODOO_USER
- #+":"+args.ODOO_PASSWORD
- db = args.ODOO_DB
- user = args.ODOO_USER
- pwd = args.ODOO_PASSWORD
- OdooServer=args.ODOO_SERVER
- Oport=args.ODOO_PORT
- Script=args.SCRIPT
- result=u"true"
- odoo = odoorpc.ODOO(OdooServer, port=Oport)
- odoo.login(db, user, pwd)
- ########Validation Sale order : intervient après avoir migré sale.engagement, sale.order, sale.order.line, sale.order.lot
- while True:
- socketReturn = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
- socketSRV.listen(5)
- client, address = socketSRV.accept()
- print("{} connected".format( address ))
- response = client.recv(200000000)
- print("Response before : " + response)
- # Retirer les guillemets
- response = response.replace('"','').replace('\r\n','')
- print("Response after : " + response)
- order_xml_ids = []
- xml_ids = response.split(';')
- print("Len : " + str(len(xml_ids)))
- imd_ids = []
- orders_not_found = []
- for xml_id in xml_ids:
- if not xml_id:
- continue
- try:
- module, xml_id = xml_id.split('.')
- except Exception:
- print("ERRORR !!! : " + str(xml_id))
- # Get the ids in ir.model.data
- print("xml_id : " + str(xml_id) + " - module : " + str(module))
- imd_id = odoo.execute('ir.model.data', 'search', [('module', '=', module),('name', '=', xml_id)])
- if imd_id:
- imd_ids.extend(imd_id)
- else:
- orders_not_found.append((module, xml_id))
- # Get the real ids of the sale orders
- print("Orders not found : " + str(orders_not_found))
- order_ids = [imd_info['res_id'] for imd_info in odoo.execute('ir.model.data', 'read', imd_ids, ['res_id'])]
- print("order_ids : " + str(order_ids))
- #print("Orders Not Found : " + str(orders_not_found))
- # Confirm the sale orders
- for order_id in order_ids:
- try:
- odoo.execute('sale.order', 'action_confirm', order_id)
- except Exception:
- print("Problem with the sale order {}".format(order_id))
- result=u"false"
- #order_names = [order['name'] for order in odoo.execute('sale.order', 'read', order_ids, ['name'])]
- #print("Orders Validated : " + str(order_names))
- if result == "true":
- ### Generation de XMLID pour les sale.order, project.project, et les comptes analytiques
- aaa_imd_ids = odoo.execute('ir.model.data', 'search', [('model', '=', 'account.analytic.account')])
- aaa_with_xml_ids = [aaa_id['res_id'] for aaa_id in odoo.execute('ir.model.data', 'read', aaa_imd_ids, ['res_id'])]
- aaa_ids = odoo.execute('account.analytic.account', 'search', [('id', 'not in', aaa_with_xml_ids)])
- aaa_with_problems = []
- for aaa_id in aaa_ids:
- project_id = odoo.execute('project.project', 'search', [('analytic_account_id', '=', aaa_id)])
- if not project_id:
- aaa_with_problems.append(aaa_id)
- continue
- sale_order_id = odoo.execute('sale.order', 'search', [('project_id', '=', project_id)])
- if not sale_order_id:
- aaa_with_problems.append(aaa_id)
- continue
- sale_order_imd_id = odoo.execute('ir.model.data', 'search', [('model', '=', 'sale.order'), ('res_id', '=', sale_order_id)])
- if not sale_order_imd_id:
- aaa_with_problems.append(aaa_id)
- continue
- sale_order_xml_id = odoo.execute('ir.model.data', 'read', sale_order_imd_id, ['name'])[0]['name']
- odoo.execute('ir.model.data', 'create', {'name': 'analytic_' + sale_order_xml_id, 'module': 'A6', 'model': 'account.analytic.account', 'res_id': aaa_id})
- odoo.execute('ir.model.data', 'create', {'name': 'project_project_' + sale_order_xml_id, 'module': 'A6', 'model': 'project.project', 'res_id': project_id})
- tasks_infos = odoo.execute('project.task', 'search_read', [('project_id', '=', project_id)], ['sale_line_id'])
- tasks_sol_link = {task['id']: task['sale_line_id'] and task['sale_line_id'][0] for task in task_infos}
- # task_sol_link = {task_id : sale_order_line_id, ...}
- order_lines = odoo.execute('sale.order', 'read', sale_order_id, ['order_line'])
- task_vals = {}
- if order_lines:
- line_ids = order_lines[0].get('order_line', [])
- line_xml_infos = odoo.execute('ir.model.data', 'search_read', [('model', '=', 'sale.order.line'), ('res_id', 'in', line_ids)], ['res_id', 'name'])
- line_xml_ids = {line['res_id']: line['name'].split('sale_order_line')[1] for line in line_xml_infos}
- # line_xml_ids = {line_id : line_xml_number}
- for line in line_xml_infos:
- line_id =
- task_vals.update({'name': 'project_task' + })
- if aaa_with_problems:
- aaa_names = [aaa['name'] for aaa in odoo.execute('account.analytic.account', 'read', aaa_with_problems, ['name'])]
- print("Accounts with problems : " + str(aaa_names))
- # client de communication avec le serveur socket de Talend via le port 15556
- socketReturn.connect((hoteSocket, portSocket))
- socketReturn.send(result)
- socketReturn.close()
- print "Connection on {}".format(portSocket)
- #print "Close"
- #client.send(True)
- #client.close()
- #socketSRV.close()
- #print "Close SocketReturn"
- #socketReturn.close()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement