diff --git a/partner_gogocarto_export_api/README.rst b/partner_gogocarto_export_api/README.rst new file mode 100644 index 000000000..d7f8f00ab --- /dev/null +++ b/partner_gogocarto_export_api/README.rst @@ -0,0 +1 @@ +This file is going to be generated by oca-gen-addon-readme. diff --git a/partner_gogocarto_export_api/__init__.py b/partner_gogocarto_export_api/__init__.py new file mode 100644 index 000000000..19240f4ea --- /dev/null +++ b/partner_gogocarto_export_api/__init__.py @@ -0,0 +1,2 @@ +from . import controllers +from . import models \ No newline at end of file diff --git a/partner_gogocarto_export_api/__manifest__.py b/partner_gogocarto_export_api/__manifest__.py new file mode 100644 index 000000000..0af32c668 --- /dev/null +++ b/partner_gogocarto_export_api/__manifest__.py @@ -0,0 +1,26 @@ +{ + 'name': 'partner_gogocarto_export_api', + 'summary': '''HTTP JSON api to send partner data for Gogocarto import''', + 'license': 'AGPL-3', + 'author': ( + 'Lokavaluto,' + 'Odoo Community Association (OCA)' + ), + 'website': 'https://lokavaluto.fr', + 'category': 'Localization', + 'version': '12.0.1.0.0', + 'depends': [ + 'base', + 'contacts', + 'base_geolocalize', + 'base_jsonify', + ], + 'data': [ + 'views/gogocarto_partner.xml', + 'views/gogocarto_config_settings_view.xml', + 'views/res_company_view.xml', + ], + 'demo': [], + 'installable': True, + 'auto_install': False, +} diff --git a/partner_gogocarto_export_api/controllers/__init__.py b/partner_gogocarto_export_api/controllers/__init__.py new file mode 100644 index 000000000..deec4a8b8 --- /dev/null +++ b/partner_gogocarto_export_api/controllers/__init__.py @@ -0,0 +1 @@ +from . import main \ No newline at end of file diff --git a/partner_gogocarto_export_api/controllers/main.py b/partner_gogocarto_export_api/controllers/main.py new file mode 100644 index 000000000..b52d53da4 --- /dev/null +++ b/partner_gogocarto_export_api/controllers/main.py @@ -0,0 +1,19 @@ +import json, logging + +from odoo import http, models, fields, api +from odoo.http import Response, request + +_logger = logging.getLogger(__name__) + +class PartnerGogocartojs(http.Controller): + + @http.route('/web//get_http_gogocarto_elements',methods=['GET'], type='http', csrf=False, auth="public", website=True) + def get_gogocarto_elements_http(self, company_id): + data = self._jsonify_get_partner(company_id) + return Response(json.dumps(data) ) + + def _jsonify_get_partner(self, company_id): + PartnerSudo = request.env['res.partner'].sudo() + parser = PartnerSudo._get_gogocarto_parser(company_id) + partners = PartnerSudo.with_context(force_company=company_id).search(PartnerSudo._get_gogocarto_domain(company_id)) + return partners.jsonify(parser) diff --git a/partner_gogocarto_export_api/models/__init__.py b/partner_gogocarto_export_api/models/__init__.py new file mode 100644 index 000000000..edf05171b --- /dev/null +++ b/partner_gogocarto_export_api/models/__init__.py @@ -0,0 +1,3 @@ +from . import res_partner +from . import res_config_settings +from . import company diff --git a/partner_gogocarto_export_api/models/company.py b/partner_gogocarto_export_api/models/company.py new file mode 100644 index 000000000..0909471ea --- /dev/null +++ b/partner_gogocarto_export_api/models/company.py @@ -0,0 +1,13 @@ +from odoo import api, models, fields + + +class Company(models.Model): + _inherit = "res.company" + + export_gogocarto_fields = fields.Many2many( + 'ir.model.fields', + domain=[ + ('model_id', '=', 'res.partner'), + ('name', 'not in', ['id', 'name','partner_longitude','partner_latitude']) + ] + ) diff --git a/partner_gogocarto_export_api/models/res_config_settings.py b/partner_gogocarto_export_api/models/res_config_settings.py new file mode 100644 index 000000000..9afef3970 --- /dev/null +++ b/partner_gogocarto_export_api/models/res_config_settings.py @@ -0,0 +1,19 @@ +import logging +from ast import literal_eval +from odoo import api, fields, models + +_logger = logging.getLogger(__name__) + +class ResConfigSettings(models.TransientModel): + _inherit = 'res.config.settings' + + export_gogocarto_fields = fields.Many2many( + related='company_id.export_gogocarto_fields', + relation='ir.model.fields', + string='GogoCarto Exported fields', + readonly=False, + domain=[ + ('model_id', '=', 'res.partner'), + ('name', 'not in', ['name','partner_longitude','partner_latitude','id']) + ] + ) diff --git a/partner_gogocarto_export_api/models/res_partner.py b/partner_gogocarto_export_api/models/res_partner.py new file mode 100644 index 000000000..1b476ae4f --- /dev/null +++ b/partner_gogocarto_export_api/models/res_partner.py @@ -0,0 +1,37 @@ +from odoo import models, fields, api +from ast import literal_eval +from datetime import date, datetime +import logging +_logger = logging.getLogger(__name__) + + +class ResPartner(models.Model): + """ Inherits partner, adds Gogocarto fields in the partner form, and functions""" + _inherit = 'res.partner' + + in_gogocarto = fields.Boolean('In gogocarto') + + def _get_gogocarto_domain(self, company_id): # To OVERRIDE in sub_modules to customize the partner selection + return [('in_gogocarto','=',True)] + + def _get_gogocarto_parser(self, company_id): + parser = [] + for field in self._get_export_fields(company_id): + if field.ttype in ["boolean", "char", "integer", "monetary", "text", "selection", "float", "date_time", "date"]: + parser.append(field.name) + elif field.ttype in ["many2one", "one2many", "many2many"]: + parser.append((field.name, ['id', 'name'])) + elif field.ttype == "binary": + continue + # use /web/image?model=res.partner&id=&field=image_medium in gogocarto template + elif field.ttype == "html": + continue # Not developped so far + else: + continue + return parser + + def _get_export_fields(self, company_id): + CompanySudo = self.env['res.company'].sudo() + default_fields = self.env['ir.model.fields'].sudo().search([('model_id', '=', 'res.partner'),('name', 'in', ['id', 'name','partner_longitude','partner_latitude'])]) + export_fields = default_fields | CompanySudo.search([('id', '=', company_id)]).export_gogocarto_fields + return export_fields diff --git a/partner_gogocarto_export_api/readme/CONFIGURE.rst b/partner_gogocarto_export_api/readme/CONFIGURE.rst new file mode 100644 index 000000000..e4b039e59 --- /dev/null +++ b/partner_gogocarto_export_api/readme/CONFIGURE.rst @@ -0,0 +1,8 @@ +Just install partner_gogocarto_export_api, all dependencies will be installed by default. + +To export partners data: + +#. Set the fields you want to export in Settings / Gogocarto. +#. Check the field *"In Gogocarto"* in the partner form view. + +And use the link *https://yourodoo.com/web//get_http_gogocarto_elements* in Gogocarto server import configuration (*https://video.colibris-outilslibres.org/videos/watch/c74fc469-c822-4ab8-82a7-a2555e49e576*) diff --git a/partner_gogocarto_export_api/readme/CONTRIBUTORS.rst b/partner_gogocarto_export_api/readme/CONTRIBUTORS.rst new file mode 100644 index 000000000..06edb80a5 --- /dev/null +++ b/partner_gogocarto_export_api/readme/CONTRIBUTORS.rst @@ -0,0 +1,13 @@ +* Stéphan SAINLEGER +* Chloé Migayrou +* Nicolas Jeudy +* Lokavaluto Teams + +Funders +------- + +The development of this module has been financially supported by: + +* Lokavaluto (https://lokavaluto.fr) +* Mycéliandre (https://myceliandre.fr) +* Elabore (https://elabore.coop) diff --git a/partner_gogocarto_export_api/readme/CREDITS.rst b/partner_gogocarto_export_api/readme/CREDITS.rst new file mode 100644 index 000000000..40a5511dc --- /dev/null +++ b/partner_gogocarto_export_api/readme/CREDITS.rst @@ -0,0 +1 @@ +* Lokavaluto: `Icon ` diff --git a/partner_gogocarto_export_api/readme/DESCRIPTION.rst b/partner_gogocarto_export_api/readme/DESCRIPTION.rst new file mode 100644 index 000000000..0c284caf3 --- /dev/null +++ b/partner_gogocarto_export_api/readme/DESCRIPTION.rst @@ -0,0 +1,6 @@ +Gogocarto Export module, to export the partner data needed for a Gogocarto map. + +This module allow the users to decide: + +* the partner to be exported +* the fields exported for each partner (*name*, *partner_longitude* and *partner_lattitude* automatically exported) diff --git a/partner_gogocarto_export_api/static/description/icon.png b/partner_gogocarto_export_api/static/description/icon.png new file mode 100644 index 000000000..1092a370f Binary files /dev/null and b/partner_gogocarto_export_api/static/description/icon.png differ diff --git a/partner_gogocarto_export_api/views/gogocarto_config_settings_view.xml b/partner_gogocarto_export_api/views/gogocarto_config_settings_view.xml new file mode 100644 index 000000000..9455d94e9 --- /dev/null +++ b/partner_gogocarto_export_api/views/gogocarto_config_settings_view.xml @@ -0,0 +1,30 @@ + + + + res.config.settings.view.form.inherit.gogocarto + res.config.settings + + + + +
+

Gogocarto export configuration

+
+
+
+
+ Partner fields to export for Gogocarto map. Check the export on /web/get_http_gogocarto_elements. +
+
+
+ +
+
+
+
+
+
+
+
+
+
diff --git a/partner_gogocarto_export_api/views/gogocarto_partner.xml b/partner_gogocarto_export_api/views/gogocarto_partner.xml new file mode 100644 index 000000000..61747bbd0 --- /dev/null +++ b/partner_gogocarto_export_api/views/gogocarto_partner.xml @@ -0,0 +1,14 @@ + + + + partner.gogocarto.form + res.partner + + 99 + + + + + + + diff --git a/partner_gogocarto_export_api/views/res_company_view.xml b/partner_gogocarto_export_api/views/res_company_view.xml new file mode 100644 index 000000000..29fdc6bd4 --- /dev/null +++ b/partner_gogocarto_export_api/views/res_company_view.xml @@ -0,0 +1,18 @@ + + + + res_company.gogocarto.form + res.company + + 99 + + + + + + + + + + +