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.
		
		
		
		
		
			
		
			
				
					
					
						
							125 lines
						
					
					
						
							5.8 KiB
						
					
					
				
			
		
		
		
			
			
			
		
		
	
	
							125 lines
						
					
					
						
							5.8 KiB
						
					
					
				| from odoo import fields, models, api | |
| from odoo.exceptions import ValidationError | |
| import requests | |
| import json | |
| 
 | |
| 
 | |
| class InheritContacts(models.Model): | |
|     _inherit = 'res.partner' | |
| 
 | |
|     partner_type = fields.Char(string='partner_type', | |
|                                compute='_compute_partner_type') | |
|     mailer_cloud_id = fields.Char() | |
| 
 | |
|     def _compute_partner_type(self): | |
|         # computing partner type based on sale_order_count and purchase_order_count | |
|         for rec in self: | |
|             if rec.sale_order_count > 0 and rec.purchase_order_count > 0: | |
|                 rec.partner_type = "Vendor and Customer" | |
|             elif rec.sale_order_count > 0: | |
|                 rec.partner_type = "Customer" | |
|             elif rec.purchase_order_count > 0: | |
|                 rec.partner_type = "Vendor" | |
|             else: | |
|                 rec.partner_type = None | |
| 
 | |
|     @api.model | |
|     def create(self, vals_list): | |
|         res = super(InheritContacts, self).create(vals_list) | |
|         contact_sync = self.env['mailer.cloud.api.sync'].search( | |
|             [('contact_sync_active', '=', True)], | |
|             order='contact_sync_time desc', limit=1) | |
|         if contact_sync: | |
|             try: | |
|                 for rec in contact_sync: | |
|                     contact_details_dict = {} | |
|                     contact_details_dict.clear() | |
|                     for i in range( | |
|                             len(rec.contact_mapping_ids.mapped( | |
|                                 'property_id.name'))): | |
|                         if self.env['mailer.cloud.properties'].search( | |
|                                 [('id', '=', | |
|                                   rec.contact_mapping_ids.mapped( | |
|                                       'property_id')[ | |
|                                       i].id)]).mailer_cloud_id != False: | |
|                             contact_details_dict['custom_fields'] = { | |
|                                 rec.contact_mapping_ids.mapped( | |
|                                     'property_id.mailer_cloud_id')[i]: | |
|                                     res.read([ | |
|                                         rec.contact_mapping_ids.mapped( | |
|                                             'contact_fields')[i]])[0][ | |
|                                         rec.contact_mapping_ids.mapped( | |
|                                             'contact_fields')[i]] or ' '} | |
|                             for key, value in contact_details_dict[ | |
|                                 'custom_fields'].items(): | |
|                                 if isinstance(value, float): | |
|                                     contact_details_dict[ | |
|                                         'custom_fields'].update( | |
|                                         {key: round(value)}) | |
| 
 | |
|                         else: | |
|                             contact_details_dict[ | |
|                                 rec.contact_mapping_ids.mapped( | |
|                                     'property_id.name')[ | |
|                                     i]] = res.read([ | |
|                                 rec.contact_mapping_ids.mapped( | |
|                                     'contact_fields')[i]])[0][ | |
|                                               rec.contact_mapping_ids.mapped( | |
|                                                   'contact_fields')[i]] or ' ' | |
|                             for key, value in contact_details_dict.items(): | |
|                                 if isinstance(value, float): | |
|                                     contact_details_dict.update( | |
|                                         {key: round(value)}) | |
|                     contact_details_dict[ | |
|                         'list_id'] = rec.list_id.mailer_cloud_id | |
|                     url = "https://cloudapi.mailercloud.com/v1/contacts" | |
|                     payload = json.dumps(contact_details_dict) | |
|                     headers = { | |
|                         'Authorization': rec.api_key, | |
|                         'Content-Type': 'application/json' | |
|                     } | |
| 
 | |
|                     response = requests.request("POST", url, headers=headers, | |
|                                                 data=payload) | |
|                     if response.status_code in (400, 401): | |
|                         raise ValidationError( | |
|                             response.json()['errors'][0]['message']) | |
|             except Exception as e: | |
|                 raise ValidationError(e) | |
|         return res | |
| 
 | |
|     def write(self, vals): | |
|         res = super(InheritContacts, self).write(vals) | |
|         contact_sync = self.env['mailer.cloud.api.sync'].search( | |
|             [('contact_sync_active', '=', True)], | |
|             order='contact_sync_time desc', limit=1) | |
|         if contact_sync: | |
|             update_dict = {} | |
|             for key, vals in vals.items(): | |
|                 for rec in contact_sync.contact_mapping_ids: | |
|                     if key == rec.contact_fields and rec.property_id.mailer_cloud_id != False: | |
|                         update_dict['custom_fields'] = { | |
|                             rec.property_id.mailer_cloud_id: round( | |
|                                 vals) if type(vals) == float else vals} | |
|                     elif key == rec.contact_fields: | |
|                         update_dict[key] = round(vals) if type( | |
|                             vals) == float else vals | |
|                     else: | |
|                         continue | |
|             if len(update_dict) > 0: | |
|                 try: | |
|                     url = "https://cloudapi.mailercloud.com/v1/contacts/" + self.email | |
|                     payload = json.dumps(update_dict) | |
|                     headers = { | |
|                         'Authorization': contact_sync.api_key, | |
|                         'Content-Type': 'application/json' | |
|                     } | |
| 
 | |
|                     response = requests.request("PUT", url, headers=headers, | |
|                                                 data=payload) | |
| 
 | |
|                 except Exception as e: | |
|                     raise ValidationError(e) | |
|             else: | |
|                 pass | |
|         return res
 | |
| 
 |