You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

310 lines
12 KiB

  1. # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
  2. from odoo.addons.website_form.controllers import main as parent_controller
  3. from odoo import http
  4. from odoo.http import request
  5. from odoo.exceptions import ValidationError
  6. from psycopg2 import IntegrityError
  7. import base64
  8. import json
  9. link_data = {}
  10. class ContactByController(http.Controller):
  11. @http.route('/check_user_exists/',type='json',auth="public",methods=['POST'],website=True,csrf=False)
  12. def check_user_exists(self, email_from, company_name, **kwargs):
  13. res_part_rec = request.env['res.partner'].sudo().search([
  14. ('email', '=', email_from),
  15. ('company_name', '=', company_name)])
  16. res_part_email = request.env['res.partner'].sudo().search([
  17. ('email', '=', email_from)])
  18. if len(res_part_rec) > 0 or len(res_part_rec) == 0 and len(res_part_email) > 0:
  19. # if partner:
  20. return True
  21. return False
  22. @http.route('/contact-us-form-review/',
  23. type='http',
  24. auth="public",
  25. methods=['GET'],
  26. website=True)
  27. def contact_us_form_review(self, **kwargs):
  28. # print(kwargs.get("data"))
  29. # link_data =base64.b64decode(kwargs.get("data")).decode("utf-8") \
  30. # print('FD')
  31. # print(request.session['form_data'])
  32. return http.request.render('website_contact_extend.review_form', {'form_data': request.session['form_data'],
  33. 'form_data_dict': request.session['form_data_dict']})
  34. @http.route('/contact_by/<string:data>',
  35. type='http',
  36. auth="public",
  37. methods=['GET'],
  38. website=True)
  39. def contact_by(self, data, **kwargs):
  40. global link_data
  41. print(data)
  42. # print(kwargs.get("data"))
  43. # link_data =base64.b64decode(kwargs.get("data")).decode("utf-8") \
  44. link_data = data
  45. return http.request.render('website_contact_extend.contactby_form')
  46. # return "<center style='color:red'>You are at the right place</center>"
  47. @http.route('/contact_by_send/<string:model_name>',
  48. type='http',
  49. auth="public",
  50. methods=['POST'],
  51. website=True)
  52. def contact_by_send(self, model_name, **kwargs):
  53. global link_data
  54. # form_contact_name = ""
  55. model_record = request.env['ir.model'].sudo().search([
  56. ('model', '=', model_name),
  57. ('website_form_access', '=', True)
  58. ])
  59. print(model_record)
  60. print(request.params)
  61. means_of_cont_dict = request.params
  62. if 'letter_contact' in means_of_cont_dict:
  63. letter_name = "True"
  64. else:
  65. letter_name = "False"
  66. if 'email_contact' in means_of_cont_dict:
  67. email_name = "True"
  68. else:
  69. email_name = "False"
  70. if 'phone_contact' in means_of_cont_dict:
  71. phone_name = "True"
  72. else:
  73. phone_name = "False"
  74. if not model_record:
  75. return json.dumps(False)
  76. # print(link_data)
  77. link_data_split = base64.b64decode(link_data).decode("utf-8").split("####")
  78. # print(link_data_split)
  79. email = link_data_split[0]
  80. contact_name = link_data_split[1]
  81. print(email, contact_name, email_name, phone_name, letter_name)
  82. partner = request.env['res.partner'].sudo().search([
  83. ('email', '=', email),
  84. ('name', '=', contact_name)
  85. ])
  86. if not partner:
  87. partner = request.env['res.partner'].sudo().create({'name': contact_name, 'email': email})
  88. if partner:
  89. for part in partner:
  90. part.is_verified = True
  91. part.last_updated = part.write_date
  92. if email_name == "True":
  93. part.email_contact = True
  94. else:
  95. part.email_contact = False
  96. if phone_name == "True":
  97. part.phone_contact = True
  98. else:
  99. part.phone_contact = False
  100. if letter_name == "True":
  101. part.letter_contact = True
  102. else:
  103. part.letter_contact = False
  104. request.session['form_builder_model_model'] = model_record.model
  105. request.session['form_builder_model'] = model_record.name
  106. request.session['form_builder_id'] = partner[0].id
  107. return json.dumps({'id': partner[0].id})
  108. # return http.request.render('website_contact_extend.disp_msg_template', {'message_success': 'Means of contact changed!'})
  109. # return "<p style='color: green'>Means of contact changed!</p>"
  110. # else:
  111. # # return http.request.render('website_contact_extend.disp_msg_template', {'message_failure': 'Could not change your means of contact. Please request a new link'})
  112. # return "<p style='color: red'>Could not change your means of contact. Please request a new link</p>"
  113. class FormReview(parent_controller.WebsiteForm):
  114. @http.route('/form_review_send/<string:model_name>',
  115. type='http',
  116. auth="public",
  117. methods=['POST'],
  118. website=True)
  119. def form_review_send(self, model_name, **kwargs):
  120. # model_name = 'crm.lead'
  121. print('Send')
  122. res_partner_data = request.session['form_data_dict']
  123. model_record = request.env['ir.model'].sudo().search([
  124. ('model', '=', model_name),
  125. ('website_form_access', '=', True)
  126. ])
  127. res_part_rec = request.env['res.partner'].sudo().search([
  128. ('email', '=', res_partner_data['email_from']),
  129. ('company_name', '=', res_partner_data['partner_name'])])
  130. res_part_email = request.env['res.partner'].sudo().search([
  131. ('email', '=', res_partner_data['email_from'])], limit=1)
  132. # if len(res_part_rec) == 0 and res_part_email:
  133. # print('Company change detected!')
  134. print(res_part_email)
  135. print('Verified?')
  136. print(res_part_email[0].is_verified)
  137. id_record = self.insert_record(
  138. request,
  139. model_record,
  140. res_partner_data,
  141. '',
  142. ''
  143. )
  144. if len(res_part_email) > 0 and len(res_part_rec) == 0 and res_part_email[0].is_verified == True:
  145. print('Company change detected')
  146. res_cat = request.env['res.partner.category'].search([('name', '=', 'New')])
  147. print(res_cat)
  148. cat_id = 0
  149. if len(res_cat) == 0:
  150. print('Hit')
  151. id_part_res_cat = self.insert_record(
  152. request,
  153. request.env['ir.model'].search([('model', '=', 'res.partner.category')]),
  154. {'name': 'New', 'create_uid': request.env.uid},
  155. '',
  156. ''
  157. )
  158. cat_id = id_part_res_cat
  159. print(id_part_res_cat)
  160. else:
  161. cat_id = res_cat[0].id
  162. res_partner_dict = {}
  163. res_partner_dict['name'] = res_partner_data['contact_name']
  164. res_partner_dict['display_name'] = res_partner_data['contact_name']
  165. res_partner_dict['email'] = res_partner_data['email_from']
  166. res_partner_dict['company_name'] = res_partner_data['partner_name']
  167. res_partner_dict['category_id'] = [[6, False, [cat_id]]]
  168. # res_partner_dict['parent_id'] = res_part_email[0].id
  169. if 'phone' in res_partner_data:
  170. res_partner_dict['phone'] = res_partner_data['phone']
  171. print('Here')
  172. update_parent_partner = request.env['res.partner'].sudo().search([
  173. ('id', '=', res_part_email[0].id)])
  174. print(update_parent_partner)
  175. if update_parent_partner and len(update_parent_partner) > 0:
  176. update_parent_partner[0].category_id = False
  177. update_parent_partner_comp = request.env['res.partner'].sudo().search([
  178. ('id', '=', res_part_email[0].parent_id.id)])
  179. if update_parent_partner_comp and len(update_parent_partner_comp) > 0:
  180. update_parent_partner_comp[0].category_id = False
  181. res_partner_company_dict = res_partner_dict.copy()
  182. res_partner_company_dict.pop('email')
  183. res_partner_company_dict.pop('company_name')
  184. # res_partner_company_dict.pop('parent_id')
  185. if 'phone' in res_partner_company_dict:
  186. res_partner_company_dict.pop('phone')
  187. res_partner_company_dict['name'] = res_partner_data['partner_name']
  188. res_partner_company_dict['display_name'] = res_partner_data['partner_name']
  189. res_partner_company_dict['customer'] = False
  190. res_partner_company_dict['is_company'] = True
  191. res_partner_company_dict['company_type'] = 'company'
  192. # res_partner_dict['parent_id'] = id_record_res_company
  193. id_record_res = self.insert_record(
  194. request,
  195. request.env['ir.model'].search([('model', '=', 'res.partner')]),
  196. res_partner_dict,
  197. '',
  198. ''
  199. )
  200. res_partner_company_dict['child_ids'] = [[6, 'virtual_1798', [id_record_res]]]
  201. id_record_res_company = self.insert_record(
  202. request,
  203. request.env['ir.model'].search([('model', '=', 'res.partner')]),
  204. res_partner_company_dict,
  205. '',
  206. ''
  207. )
  208. if update_parent_partner and len(update_parent_partner) > 0:
  209. update_parent_partner[0].child_ids = [[6, 'virtual_1798', [id_record_res]]]
  210. id_record = self.insert_record(
  211. request,
  212. model_record,
  213. res_partner_data,
  214. '',
  215. ''
  216. )
  217. if id_record:
  218. self.insert_attachment(
  219. model_record,
  220. id_record,
  221. ''
  222. )
  223. if id_record and model_name == "crm.lead":
  224. crm_lead_obj = request.env['crm.lead'].sudo().search([
  225. ('id', '=', id_record)]
  226. )
  227. email_data = crm_lead_obj.email_from + "####" +\
  228. crm_lead_obj.contact_name + "####" +\
  229. str('') + "####" +\
  230. str('') + "####" +\
  231. str('')+"####" + \
  232. str(res_partner_data['send_mail']) + "####" + \
  233. str(res_partner_data['request_gdpdr']) + "####" + \
  234. str(id_record) + "####" + \
  235. str(crm_lead_obj.create_date)
  236. ency_email = base64.b64encode(email_data.encode()).decode(
  237. "utf-8"
  238. )
  239. action_url = '%s/verify_email/?data=%s' % (
  240. request.env['ir.config_parameter'].
  241. sudo().get_param('web.base.url'),
  242. ency_email,
  243. )
  244. if crm_lead_obj:
  245. crm_lead_obj.email_link = action_url
  246. request.env.ref(
  247. 'website_contact_extend.verification_email_template'
  248. ).sudo().send_mail(id_record)
  249. request.env.ref('website_contact_extend.email_template_onchange_data').sudo().send_mail(id_record)
  250. request.session['form_builder_model_model'] = model_record.model
  251. request.session['form_builder_model'] = model_record.name
  252. request.session['form_builder_id'] = id_record
  253. return json.dumps({'id': id_record})