Advertisement
Guest User

Untitled

a guest
Oct 21st, 2016
70
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 6.32 KB | None | 0 0
  1. #!/usr/bin/env python
  2. # coding: utf8
  3. # Script de validation des sale Orders
  4. #
  5. # Script Serveur Socket : à exécuter coté serveur
  6. # Job Talend envoie la liste des code partner via le port:15557
  7. # Le script serveur envoie le statut vers le seveur Talend via le port:15556
  8. #
  9. # version 1." @ 10 Octobre 2016
  10. # rajout des parametres de connexion via les variables d'environnement
  11. #import library OddoXMLRPC
  12.  
  13. from os.path import abspath
  14. import csv
  15. import odoorpc
  16. import argparse
  17. import socket
  18.  
  19. ## set ODOO_SERVER="10.254.2.7"
  20. ## set ODOO_PORT="8069"
  21. ## set ODOO_DB="odoo"
  22. ## set ODOO_USER="admin"
  23. ## set ODOO_PASSWORD="OneERP2016!"
  24. ## set SCRIPT="0"
  25. ## python create_employee_users.py %ODOO_SERVER% %ODOO_PORT% %ODOO_DB% %ODOO_USER% %ODOO_PASSWORD% %SCRIPT%
  26. ## set SCRIPT = "0" res_user_generation
  27. ## set SCRIPT = "1" : validation_sale_oder
  28.  
  29. socketSRV = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
  30. socketSRV.bind(('', 15557))
  31.  
  32. hoteSocket = "localhost"
  33. portSocket = 15556
  34. socketReturnMaxBuffer=200000000
  35. #socketReturn = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
  36.  
  37. parser = argparse.ArgumentParser()
  38. parser.add_argument("ODOO_SERVER")
  39. parser.add_argument("ODOO_PORT")
  40. parser.add_argument("ODOO_DB")
  41. parser.add_argument("ODOO_USER")
  42. parser.add_argument("ODOO_PASSWORD")
  43. parser.add_argument("SCRIPT")
  44. args = parser.parse_args()
  45. print "Parametres de connexion:"
  46. print args.SCRIPT +" "+args.ODOO_SERVER +":"+ args.ODOO_PORT+"/"+ args.ODOO_DB+"@"+ args.ODOO_USER
  47. #+":"+args.ODOO_PASSWORD
  48.  
  49. db = args.ODOO_DB
  50. user = args.ODOO_USER
  51. pwd = args.ODOO_PASSWORD
  52. OdooServer=args.ODOO_SERVER
  53. Oport=args.ODOO_PORT
  54. Script=args.SCRIPT
  55. result=u"true"
  56.  
  57. odoo = odoorpc.ODOO(OdooServer, port=Oport)
  58. odoo.login(db, user, pwd)
  59.  
  60. ########Validation Sale order : intervient après avoir migré sale.engagement, sale.order, sale.order.line, sale.order.lot
  61.  
  62. while True:
  63. socketReturn = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
  64. socketSRV.listen(5)
  65. client, address = socketSRV.accept()
  66. print("{} connected".format( address ))
  67. response = client.recv(200000000)
  68. print("Response before : " + response)
  69. # Retirer les guillemets
  70. response = response.replace('"','').replace('\r\n','')
  71. print("Response after : " + response)
  72. order_xml_ids = []
  73. xml_ids = response.split(';')
  74. print("Len : " + str(len(xml_ids)))
  75. imd_ids = []
  76. orders_not_found = []
  77. for xml_id in xml_ids:
  78. if not xml_id:
  79. continue
  80. try:
  81. module, xml_id = xml_id.split('.')
  82. except Exception:
  83. print("ERRORR !!! : " + str(xml_id))
  84. # Get the ids in ir.model.data
  85. print("xml_id : " + str(xml_id) + " - module : " + str(module))
  86. imd_id = odoo.execute('ir.model.data', 'search', [('module', '=', module),('name', '=', xml_id)])
  87. if imd_id:
  88. imd_ids.extend(imd_id)
  89. else:
  90. orders_not_found.append((module, xml_id))
  91. # Get the real ids of the sale orders
  92. print("Orders not found : " + str(orders_not_found))
  93. order_ids = [imd_info['res_id'] for imd_info in odoo.execute('ir.model.data', 'read', imd_ids, ['res_id'])]
  94. print("order_ids : " + str(order_ids))
  95. #print("Orders Not Found : " + str(orders_not_found))
  96. # Confirm the sale orders
  97. for order_id in order_ids:
  98. try:
  99. odoo.execute('sale.order', 'action_confirm', order_id)
  100. except Exception:
  101. print("Problem with the sale order {}".format(order_id))
  102. result=u"false"
  103. #order_names = [order['name'] for order in odoo.execute('sale.order', 'read', order_ids, ['name'])]
  104. #print("Orders Validated : " + str(order_names))
  105.  
  106.  
  107. if result == "true":
  108. ### Generation de XMLID pour les sale.order, project.project, et les comptes analytiques
  109. aaa_imd_ids = odoo.execute('ir.model.data', 'search', [('model', '=', 'account.analytic.account')])
  110. aaa_with_xml_ids = [aaa_id['res_id'] for aaa_id in odoo.execute('ir.model.data', 'read', aaa_imd_ids, ['res_id'])]
  111.  
  112. aaa_ids = odoo.execute('account.analytic.account', 'search', [('id', 'not in', aaa_with_xml_ids)])
  113. aaa_with_problems = []
  114. for aaa_id in aaa_ids:
  115. project_id = odoo.execute('project.project', 'search', [('analytic_account_id', '=', aaa_id)])
  116. if not project_id:
  117. aaa_with_problems.append(aaa_id)
  118. continue
  119. sale_order_id = odoo.execute('sale.order', 'search', [('project_id', '=', project_id)])
  120. if not sale_order_id:
  121. aaa_with_problems.append(aaa_id)
  122. continue
  123. sale_order_imd_id = odoo.execute('ir.model.data', 'search', [('model', '=', 'sale.order'), ('res_id', '=', sale_order_id)])
  124. if not sale_order_imd_id:
  125. aaa_with_problems.append(aaa_id)
  126. continue
  127. sale_order_xml_id = odoo.execute('ir.model.data', 'read', sale_order_imd_id, ['name'])[0]['name']
  128. odoo.execute('ir.model.data', 'create', {'name': 'analytic_' + sale_order_xml_id, 'module': 'A6', 'model': 'account.analytic.account', 'res_id': aaa_id})
  129. odoo.execute('ir.model.data', 'create', {'name': 'project_project_' + sale_order_xml_id, 'module': 'A6', 'model': 'project.project', 'res_id': project_id})
  130. tasks_infos = odoo.execute('project.task', 'search_read', [('project_id', '=', project_id)], ['sale_line_id'])
  131. tasks_sol_link = {task['id']: task['sale_line_id'] and task['sale_line_id'][0] for task in task_infos}
  132. # task_sol_link = {task_id : sale_order_line_id, ...}
  133. order_lines = odoo.execute('sale.order', 'read', sale_order_id, ['order_line'])
  134. task_vals = {}
  135. if order_lines:
  136. line_ids = order_lines[0].get('order_line', [])
  137. line_xml_infos = odoo.execute('ir.model.data', 'search_read', [('model', '=', 'sale.order.line'), ('res_id', 'in', line_ids)], ['res_id', 'name'])
  138. line_xml_ids = {line['res_id']: line['name'].split('sale_order_line')[1] for line in line_xml_infos}
  139. # line_xml_ids = {line_id : line_xml_number}
  140. for line in line_xml_infos:
  141. line_id =
  142. task_vals.update({'name': 'project_task' + })
  143.  
  144.  
  145.  
  146. if aaa_with_problems:
  147. aaa_names = [aaa['name'] for aaa in odoo.execute('account.analytic.account', 'read', aaa_with_problems, ['name'])]
  148. print("Accounts with problems : " + str(aaa_names))
  149.  
  150.  
  151. # client de communication avec le serveur socket de Talend via le port 15556
  152. socketReturn.connect((hoteSocket, portSocket))
  153. socketReturn.send(result)
  154. socketReturn.close()
  155. print "Connection on {}".format(portSocket)
  156.  
  157. #print "Close"
  158. #client.send(True)
  159. #client.close()
  160. #socketSRV.close()
  161. #print "Close SocketReturn"
  162. #socketReturn.close()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement