def index(self, **codes): cr, uid, context = request.cr, request.uid, request.context company = request.registry.get("res.company").browse(cr, uid, 1) CLIENT_ID = company.mercadolibre_client_id CLIENT_SECRET = company.mercadolibre_secret_key meli = Meli(client_id=CLIENT_ID, client_secret=CLIENT_SECRET) codes.setdefault("code", "none") codes.setdefault("error", "none") codes.setdefault("error_description", "none") if codes["error"] != "none": message = "ERROR: %s" % codes["error"] message += " DESCRIPTION: %s" % codes["error_description"] return "<h1>" + message + "</h1><br/><a href='" + meli.auth_url(redirect_URI=REDIRECT_URI) + "'>Login</a>" if codes["code"] != "none": print "Meli: Authorize: REDIRECT_URI: %s, code: %s" % (REDIRECT_URI, codes["code"]) meli.authorize(codes["code"], REDIRECT_URI) ACCESS_TOKEN = meli.access_token REFRESH_TOKEN = meli.refresh_token company.write( { "mercadolibre_access_token": ACCESS_TOKEN, "mercadolibre_refresh_token": REFRESH_TOKEN, "mercadolibre_code": codes["code"], } ) return ( 'LOGGED WIT CODE: %s <br>ACCESS_TOKEN: %s <br>REFRESH_TOKEN: %s <br>MercadoLibre for Odoo 8 - Moldeo Interactive <br><a href="javascript:window.history.go(-2);">Volver a Odoo</a> <script>window.history.go(-2)</script>' % (codes["code"], ACCESS_TOKEN, REFRESH_TOKEN) ) else: return "<a href='" + meli.auth_url(redirect_URI=REDIRECT_URI) + "'>Login</a>"
def index(self, **codes ): cr, uid, context = request.cr, request.uid, request.context company = request.registry.get('res.company').browse(cr,uid,1) CLIENT_ID = company.mercadolibre_client_id CLIENT_SECRET = company.mercadolibre_secret_key meli = Meli(client_id=CLIENT_ID,client_secret=CLIENT_SECRET) codes.setdefault('code','none') codes.setdefault('error','none') codes.setdefault('error_description', 'none') if codes['error']!='none': message = "ERROR: %s" % codes['error'] message+= " DESCRIPTION: %s" % codes['error_description'] return "<h1>"+message+"</h1><br/><a href='"+meli.auth_url(redirect_URI=REDIRECT_URI)+"'>Login</a>" if codes['code']!='none': print "Meli: Authorize: REDIRECT_URI: %s, code: %s" % ( REDIRECT_URI, codes['code'] ) meli.authorize( codes['code'], REDIRECT_URI) ACCESS_TOKEN = meli.access_token REFRESH_TOKEN = meli.refresh_token company.write({'mercadolibre_access_token': ACCESS_TOKEN, 'mercadolibre_refresh_token': REFRESH_TOKEN, 'mercadolibre_code': codes['code'] } ) return 'LOGGED WIT CODE: %s <br>ACCESS_TOKEN: %s <br>REFRESH_TOKEN: %s <br>MercadoLibre for Odoo 8 - Moldeo Interactive <br><a href="javascript:window.history.go(-2);">Volver a Odoo</a> <script>window.history.go(-2)</script>' % ( codes['code'], ACCESS_TOKEN, REFRESH_TOKEN ) else: return "<a href='"+meli.auth_url(redirect_URI=REDIRECT_URI)+"'>Login</a>"
def product_post(self, cr, uid, ids, context=None): product_ids = context['active_ids'] product_obj = self.pool.get('product.product') user_obj = self.pool.get('res.users').browse(cr, uid, uid) #user_obj.company_id.meli_login() company = user_obj.company_id warningobj = self.pool.get('warning') #company = self.pool.get('res.company').browse(cr,uid,1) CLIENT_ID = company.mercadolibre_client_id CLIENT_SECRET = company.mercadolibre_secret_key ACCESS_TOKEN = company.mercadolibre_access_token REFRESH_TOKEN = company.mercadolibre_refresh_token meli = Meli(client_id=CLIENT_ID,client_secret=CLIENT_SECRET, access_token=ACCESS_TOKEN, refresh_token=REFRESH_TOKEN) if ACCESS_TOKEN=='': meli = Meli(client_id=CLIENT_ID,client_secret=CLIENT_SECRET) url_login_meli = meli.auth_url(redirect_URI=REDIRECT_URI) return { "type": "ir.actions.act_url", "url": url_login_meli, "target": "new", } for product_id in product_ids: product = product_obj.browse(cr,uid,product_id) product.product_meli_post() return {}
def index(self, **codes ): cr, uid, context = request.cr, request.uid, request.context company = request.registry.get('res.company').browse(cr,uid,1) CLIENT_ID = company.mercadolibre_client_id CLIENT_SECRET = company.mercadolibre_secret_key meli = Meli(client_id=CLIENT_ID,client_secret=CLIENT_SECRET) codes.setdefault('code','none') codes.setdefault('error','none') if codes['error']!='none': message = "ERROR: %s" % codes['error'] return "<h1>"+message+"</h1><br/><a href='"+meli.auth_url(redirect_URI=REDIRECT_URI)+"'>Login</a>" if codes['code']!='none': print "Meli: Authorize: REDIRECT_URI: %s, code: %s" % ( REDIRECT_URI, codes['code'] ) meli.authorize( codes['code'], REDIRECT_URI) ACCESS_TOKEN = meli.access_token REFRESH_TOKEN = meli.refresh_token company.write({'mercadolibre_access_token': ACCESS_TOKEN, 'mercadolibre_refresh_token': REFRESH_TOKEN, 'mercadolibre_code': codes['code'] } ) return 'LOGGED WIT CODE: %s <br>ACCESS_TOKEN: %s <br>REFRESH_TOKEN: %s <br>MercadoLibre for Odoo 8 - Moldeo Interactive <br><a href="javascript:window.history.go(-2);">Volver a Odoo</a> <script>window.history.go(-2)</script>' % ( codes['code'], ACCESS_TOKEN, REFRESH_TOKEN ) else: return "<a href='"+meli.auth_url(redirect_URI=REDIRECT_URI)+"'>Login</a>"
def product_meli_get_products( self, cr, uid, context=None ): user_obj = self.pool.get('res.users').browse(cr, uid, uid) company = user_obj.company_id product_obj = self.pool.get('product.product') #product = product_obj.browse(cr, uid, ids[0]) CLIENT_ID = company.mercadolibre_client_id CLIENT_SECRET = company.mercadolibre_secret_key ACCESS_TOKEN = company.mercadolibre_access_token REFRESH_TOKEN = company.mercadolibre_refresh_token meli = Meli(client_id=CLIENT_ID,client_secret=CLIENT_SECRET, access_token=ACCESS_TOKEN, refresh_token=REFRESH_TOKEN) url_login_meli = meli.auth_url(redirect_URI=REDIRECT_URI) #url_login_oerp = "/meli_login" response = meli.get("/users/"+company.mercadolibre_seller_id+"/items/search", {'access_token':meli.access_token}) print "product_meli_get_products: " + response.content rjson = response.json() if 'error' in rjson: if rjson['message']=='invalid_token' or rjson['message']=='expired_token': ACCESS_TOKEN = '' REFRESH_TOKEN = '' company.write({'mercadolibre_access_token': ACCESS_TOKEN, 'mercadolibre_refresh_token': REFRESH_TOKEN, 'mercadolibre_code': '' } ) return { "type": "ir.actions.act_url", "url": url_login_meli, "target": "new", } results = rjson['results'] if (results): for item_id in results: print item_id posting_id = self.pool.get('product.product').search(cr,uid,[('meli_id','=',item_id)]) response = meli.get("/items/"+item_id, {'access_token':meli.access_token}) rjson = response.json() if (posting_id): print "Item already in database: " + str(posting_id[0]) else: idcreated = self.pool.get('product.product').create(cr,uid,{ 'name': rjson['title'], 'meli_id': rjson['id'] }) if (idcreated): product = product_obj.browse(cr, uid, idcreated) product_obj.product_meli_get_product( cr, uid, [idcreated] ) return {}
def product_meli_login(self, cr, uid, ids, context=None): user_obj = self.pool.get('res.users').browse(cr, uid, uid) company = user_obj.company_id CLIENT_ID = company.mercadolibre_client_id CLIENT_SECRET = company.mercadolibre_secret_key meli = Meli(client_id=CLIENT_ID, client_secret=CLIENT_SECRET) url_login_meli = meli.auth_url(redirect_URI=REDIRECT_URI) #url_login_oerp = "/meli_login" return { "type": "ir.actions.act_url", "url": url_login_meli, "target": "new", }
def index(self): cr, uid, context = request.cr, request.uid, request.context company = request.registry.get('res.company').browse(cr,uid,1) CLIENT_ID = company.mercadolibre_client_id CLIENT_SECRET = company.mercadolibre_secret_key ACCESS_TOKEN = company.mercadolibre_access_token REFRESH_TOKEN = company.mercadolibre_refresh_token if (ACCESS_TOKEN==''): meli = Meli(client_id=CLIENT_ID,client_secret=CLIENT_SECRET) return "<a href='"+meli.auth_url(redirect_URI=REDIRECT_URI)+"'>Login</a>" meli = Meli(client_id=CLIENT_ID,client_secret=CLIENT_SECRET, access_token=ACCESS_TOKEN, refresh_token=REFRESH_TOKEN) response = meli.get("/items/MLA533830652") return "MercadoLibre for Odoo 8 - Moldeo Interactive: %s " % response.content
def product_meli_login(self, cr, uid, ids, context=None ): user_obj = self.pool.get('res.users').browse(cr, uid, uid) company = user_obj.company_id CLIENT_ID = company.mercadolibre_client_id CLIENT_SECRET = company.mercadolibre_secret_key meli = Meli(client_id=CLIENT_ID,client_secret=CLIENT_SECRET) url_login_meli = meli.auth_url(redirect_URI=REDIRECT_URI) #url_login_oerp = "/meli_login" return { "type": "ir.actions.act_url", "url": url_login_meli, "target": "new", }
def product_post(self, cr, uid, ids, context=None): import pdb;pdb.set_trace(); # product_ids = context['active_ids'] product_ids = ids product_obj = self.pool.get('product.product') user_obj = self.pool.get('res.users').browse(cr, uid, uid) #user_obj.company_id.meli_login() company = user_obj.company_id warningobj = self.pool.get('warning') #company = self.pool.get('res.company').browse(cr,uid,1) REDIRECT_URI = company.mercadolibre_redirect_uri CLIENT_ID = company.mercadolibre_client_id CLIENT_SECRET = company.mercadolibre_secret_key ACCESS_TOKEN = company.mercadolibre_access_token REFRESH_TOKEN = company.mercadolibre_refresh_token meli = Meli(client_id=CLIENT_ID,client_secret=CLIENT_SECRET, access_token=ACCESS_TOKEN, refresh_token=REFRESH_TOKEN) if ACCESS_TOKEN=='': meli = Meli(client_id=CLIENT_ID,client_secret=CLIENT_SECRET) url_login_meli = meli.auth_url(redirect_URI=REDIRECT_URI) return { "type": "ir.actions.act_url", "url": url_login_meli, "target": "new", } for product_id in product_ids: product = product_obj.browse(cr,uid,product_id) if (product.meli_id): response = meli.get("/items/%s" % product.meli_id, {'access_token':meli.access_token}) # print product.meli_category.meli_category_id if product.meli_title==False: # print 'Assigning title: product.meli_title: %s name: %s' % (product.meli_title, product.name) product.meli_title = product.name if product.meli_price==False: # print 'Assigning price: product.meli_price: %s standard_price: %s' % (product.meli_price, product.standard_price) product.meli_price = product.standard_price body = { "title": product.meli_title or '', "description": product.meli_description or '', "category_id": product.meli_category.meli_category_id or '0', "listing_type_id": product.meli_listing_type or '0', "buying_mode": product.meli_buying_mode or '', "price": product.meli_price or '0', "currency_id": product.meli_currency or '0', "condition": product.meli_condition or '', "available_quantity": product.meli_available_quantity or '0', "warranty": product.meli_warranty or '', #"pictures": [ { 'source': product.meli_imagen_logo} ] , "video_id": product.meli_video or '', } # print body assign_img = False and product.meli_id #publicando imagen cargada en OpenERP if product.image==None: return warningobj.info(cr, uid, title='MELI WARNING', message="Debe cargar una imagen de base en el producto.", message_html="" ) elif product.meli_imagen_id==False: # print "try uploading image..." resim = product.product_meli_upload_image() if "status" in resim: if (resim["status"]=="error" or resim["status"]=="warning"): error_msg = 'MELI: mensaje de error: ', resim _logger.error(error_msg) else: assign_img = True and product.meli_imagen_id #modificando datos si ya existe el producto en MLA if (product.meli_id): body = { "title": product.meli_title or '', #"description": product.meli_description or '', #"category_id": product.meli_category.meli_category_id, #"listing_type_id": product.meli_listing_type, "buying_mode": product.meli_buying_mode or '', "price": product.meli_price or '0', #"currency_id": product.meli_currency, "condition": product.meli_condition or '', "available_quantity": product.meli_available_quantity or '0', "warranty": product.meli_warranty or '', "pictures": [], #"pictures": [ { 'source': product.meli_imagen_logo} ] , "video_id": product.meli_video or '', } #publicando multiples imagenes multi_images_ids = {} if (product.images): # print 'website_multi_images presente: ', product.images #recorrer las imagenes y publicarlas multi_images_ids = product.product_meli_upload_multi_images() #asignando imagen de logo (por source) if product.meli_imagen_logo: if product.meli_imagen_id: if 'pictures' in body.keys(): body["pictures"]+= [ { 'id': product.meli_imagen_id } ] else: body["pictures"] = [ { 'id': product.meli_imagen_id } ] if (multi_images_ids): if 'pictures' in body.keys(): body["pictures"]+= multi_images_ids else: body["pictures"] = multi_images_ids if 'pictures' in body.keys(): body["pictures"]+= [ { 'source': product.meli_imagen_logo} ] else: body["pictures"]+= [ { 'source': product.meli_imagen_logo} ] else: imagen_producto = "" if (product.meli_description!="" and product.meli_description!=False and product.meli_imagen_link!=""): imgtag = "<img style='width: 420px; height: auto;' src='%s'/>" % ( product.meli_imagen_link ) result = product.meli_description.replace( "[IMAGEN_PRODUCTO]", imgtag ) if (result): _logger.info( "result: %s" % (result) ) product.meli_description = result else: result = product.meli_description else: return warningobj.info(cr, uid, title='MELI WARNING', message="Debe completar el campo 'Imagen_Logo' con el url: http://www.nuevohorizonte-sa.com.ar/images/logo1.png", message_html="") #check fields if product.meli_description==False: return warningobj.info(cr, uid, title='MELI WARNING', message="Debe completar el campo 'description' (en html)", message_html="") #put for editing, post for creating if product.meli_id: response = meli.put("/items/"+product.meli_id, body, {'access_token':meli.access_token}) else: assign_img = True and product.meli_imagen_id response = meli.post("/items", body, {'access_token':meli.access_token}) #check response # print response.content rjson = response.json() #check error if "error" in rjson: #print "Error received: %s " % rjson["error"] error_msg = 'MELI: mensaje de error: %s , mensaje: %s, status: %s, cause: %s ' % (rjson["error"], rjson["message"], rjson["status"], rjson["cause"]) _logger.error(error_msg) missing_fields = error_msg #expired token if "message" in rjson and (rjson["message"]=='invalid_token' or rjson["message"]=="expired_token"): meli = Meli(client_id=CLIENT_ID,client_secret=CLIENT_SECRET) url_login_meli = meli.auth_url(redirect_URI=REDIRECT_URI) #print "url_login_meli:", url_login_meli #raise osv.except_osv( _('MELI WARNING'), _('INVALID TOKEN or EXPIRED TOKEN (must login, go to Edit Company and login): error: %s, message: %s, status: %s') % ( rjson["error"], rjson["message"],rjson["status"],)) return warningobj.info(cr, uid, title='MELI WARNING', message="Debe iniciar sesión en MELI. ", message_html="") else: #Any other errors return warningobj.info(cr, uid, title='MELI WARNING', message="Completar todos los campos! ", message_html="<br><br>"+missing_fields ) #last modifications if response is OK if "id" in rjson: product.write( { 'meli_id': rjson["id"]} ) posting_fields = {'posting_date': str(datetime.now()),'meli_id':rjson['id'],'product_id':product.id,'name': 'Post: ' + product.meli_title } posting_id = self.pool.get('mercadolibre.posting').search(cr,uid,[('meli_id','=',rjson['id'])]) if not posting_id: posting_id = self.pool.get('mercadolibre.posting').create(cr,uid,(posting_fields)) return {}
def product_post(self, cr, uid, ids, context=None): product_ids = context['active_ids'] product_obj = self.pool.get('product.product') user_obj = self.pool.get('res.users').browse(cr, uid, uid) #user_obj.company_id.meli_login() company = user_obj.company_id warningobj = self.pool.get('warning') #company = self.pool.get('res.company').browse(cr,uid,1) REDIRECT_URI = company.mercadolibre_redirect_uri CLIENT_ID = company.mercadolibre_client_id CLIENT_SECRET = company.mercadolibre_secret_key ACCESS_TOKEN = company.mercadolibre_access_token REFRESH_TOKEN = company.mercadolibre_refresh_token meli = Meli(client_id=CLIENT_ID,client_secret=CLIENT_SECRET, access_token=ACCESS_TOKEN, refresh_token=REFRESH_TOKEN) if ACCESS_TOKEN=='': meli = Meli(client_id=CLIENT_ID,client_secret=CLIENT_SECRET) url_login_meli = meli.auth_url(redirect_URI=REDIRECT_URI) return { "type": "ir.actions.act_url", "url": url_login_meli, "target": "new", } for product_id in product_ids: product = product_obj.browse(cr,uid,product_id) if (product.meli_id): response = meli.get("/items/%s" % product.meli_id, {'access_token':meli.access_token}) # print product.meli_category.meli_category_id if product.meli_title==False: # print 'Assigning title: product.meli_title: %s name: %s' % (product.meli_title, product.name) product.meli_title = product.name if product.meli_price==False: # print 'Assigning price: product.meli_price: %s standard_price: %s' % (product.meli_price, product.standard_price) product.meli_price = product.standard_price body = { "title": product.meli_title or '', "description": product.meli_description or '', "category_id": product.meli_category.meli_category_id or '0', "listing_type_id": product.meli_listing_type or '0', "buying_mode": product.meli_buying_mode or '', "price": product.meli_price or '0', "currency_id": product.meli_currency or '0', #"condition": product.meli_condition or '', "available_quantity": product.meli_available_quantity or '0', "warranty": product.meli_warranty or '', #"pictures": [ { 'source': product.meli_imagen_logo} ] , "video_id": product.meli_video or '', } #print "product.meli_id before setting condigions ]"+product.meli_id+"[" if (len(product.meli_id)==0): body["condition"] = product.meli_condition; # print body assign_img = False and product.meli_id #publicando imagen cargada en OpenERP if product.image==None: return warningobj.info(cr, uid, title='MELI WARNING', message="Debe cargar una imagen de base en el producto.", message_html="" ) elif product.meli_imagen_id==False: # print "try uploading image..." resim = product.product_meli_upload_image() if "status" in resim: if (resim["status"]=="error" or resim["status"]=="warning"): error_msg = 'MELI: mensaje de error: ', resim _logger.error(error_msg) else: assign_img = True and product.meli_imagen_id #modificando datos si ya existe el producto en MLA if (product.meli_id): body = { "title": product.meli_title or '', #"description": product.meli_description or '', #"category_id": product.meli_category.meli_category_id, #"listing_type_id": product.meli_listing_type, #"buying_mode": product.meli_buying_mode or '', "price": product.meli_price or '0', #"currency_id": product.meli_currency, #"condition": product.meli_condition or '', "available_quantity": product.meli_available_quantity or '0', "warranty": product.meli_warranty or '', "pictures": [], #"pictures": [ { 'source': product.meli_imagen_logo} ] , "video_id": product.meli_video or '', } #publicando multiples imagenes multi_images_ids = {} if (product.images): # print 'website_multi_images presente: ', product.images #recorrer las imagenes y publicarlas multi_images_ids = product.product_meli_upload_multi_images() #asignando imagen de logo (por source) if product.meli_imagen_logo: if product.meli_imagen_id: if 'pictures' in body.keys(): body["pictures"]+= [ { 'id': product.meli_imagen_id } ] else: body["pictures"] = [ { 'id': product.meli_imagen_id } ] if (multi_images_ids): if 'pictures' in body.keys(): body["pictures"]+= multi_images_ids else: body["pictures"] = multi_images_ids if 'pictures' in body.keys(): body["pictures"]+= [ { 'source': product.meli_imagen_logo} ] else: body["pictures"]+= [ { 'source': product.meli_imagen_logo} ] else: imagen_producto = "" if (product.meli_description!="" and product.meli_description!=False and product.meli_imagen_link!=""): imgtag = "<img style='width: 420px; height: auto;' src='%s'/>" % ( product.meli_imagen_link ) result = product.meli_description.replace( "[IMAGEN_PRODUCTO]", imgtag ) if (result): _logger.info( "result: %s" % (result) ) product.meli_description = result else: result = product.meli_description else: return warningobj.info(cr, uid, title='MELI WARNING', message="Debe completar el campo 'Imagen_Logo' con el url: http://www.nuevohorizonte-sa.com.ar/images/logo1.png", message_html="") #check fields if product.meli_description==False: return warningobj.info(cr, uid, title='MELI WARNING', message="Debe completar el campo 'description' (en html)", message_html="") #put for editing, post for creating if product.meli_id: response = meli.put("/items/"+product.meli_id, body, {'access_token':meli.access_token}) else: assign_img = True and product.meli_imagen_id response = meli.post("/items", body, {'access_token':meli.access_token}) #check response # print response.content rjson = response.json() #check error if "error" in rjson: #print "Error received: %s " % rjson["error"] error_msg = 'MELI: mensaje de error: %s , mensaje: %s, status: %s, cause: %s ' % (rjson["error"], rjson["message"], rjson["status"], rjson["cause"]) _logger.error(error_msg) missing_fields = error_msg #expired token if "message" in rjson and (rjson["message"]=='invalid_token' or rjson["message"]=="expired_token"): meli = Meli(client_id=CLIENT_ID,client_secret=CLIENT_SECRET) url_login_meli = meli.auth_url(redirect_URI=REDIRECT_URI) #print "url_login_meli:", url_login_meli #raise osv.except_osv( _('MELI WARNING'), _('INVALID TOKEN or EXPIRED TOKEN (must login, go to Edit Company and login): error: %s, message: %s, status: %s') % ( rjson["error"], rjson["message"],rjson["status"],)) return warningobj.info(cr, uid, title='MELI WARNING', message="Debe iniciar sesión en MELI. ", message_html="") else: #Any other errors return warningobj.info(cr, uid, title='MELI WARNING', message="Completar todos los campos! ", message_html="<br><br>"+missing_fields ) #last modifications if response is OK if "id" in rjson: product.write( { 'meli_id': rjson["id"]} ) posting_fields = {'posting_date': str(datetime.now()),'meli_id':rjson['id'],'product_id':product.id,'name': 'Post: ' + product.meli_title } posting_id = self.pool.get('mercadolibre.posting').search(cr,uid,[('meli_id','=',rjson['id'])]) if not posting_id: posting_id = self.pool.get('mercadolibre.posting').create(cr,uid,(posting_fields)) return {}
def product_meli_get_products(self, cr, uid, context=None): user_obj = self.pool.get('res.users').browse(cr, uid, uid) company = user_obj.company_id product_obj = self.pool.get('product.product') #product = product_obj.browse(cr, uid, ids[0]) CLIENT_ID = company.mercadolibre_client_id CLIENT_SECRET = company.mercadolibre_secret_key ACCESS_TOKEN = company.mercadolibre_access_token REFRESH_TOKEN = company.mercadolibre_refresh_token meli = Meli(client_id=CLIENT_ID, client_secret=CLIENT_SECRET, access_token=ACCESS_TOKEN, refresh_token=REFRESH_TOKEN) url_login_meli = meli.auth_url(redirect_URI=REDIRECT_URI) #url_login_oerp = "/meli_login" results = [] response = meli.get( "/users/" + company.mercadolibre_seller_id + "/items/search", { 'access_token': meli.access_token, 'offset': 0 }) #response = meli.get("/sites/MLA/search?seller_id="+company.mercadolibre_seller_id+"&limit=0", {'access_token':meli.access_token}) rjson = response.json() _logger.info(rjson) results = rjson['results'] if 'error' in rjson: if rjson['message'] == 'invalid_token' or rjson[ 'message'] == 'expired_token': ACCESS_TOKEN = '' REFRESH_TOKEN = '' company.write({ 'mercadolibre_access_token': ACCESS_TOKEN, 'mercadolibre_refresh_token': REFRESH_TOKEN, 'mercadolibre_code': '' }) return { "type": "ir.actions.act_url", "url": url_login_meli, "target": "new", } #download? if (rjson['paging']['total'] > rjson['paging']['limit']): pages = rjson['paging']['total'] / rjson['paging']['limit'] ioff = rjson['paging']['limit'] condition_last_off = False while (condition_last_off != True): response = meli.get( "/users/" + company.mercadolibre_seller_id + "/items/search", { 'access_token': meli.access_token, 'offset': ioff }) rjson2 = response.json() if 'error' in rjson2: if rjson2['message'] == 'invalid_token' or rjson2[ 'message'] == 'expired_token': ACCESS_TOKEN = '' REFRESH_TOKEN = '' company.write({ 'mercadolibre_access_token': ACCESS_TOKEN, 'mercadolibre_refresh_token': REFRESH_TOKEN, 'mercadolibre_code': '' }) condition = True return { "type": "ir.actions.act_url", "url": url_login_meli, "target": "new", } else: results += rjson2['results'] ioff += rjson['paging']['limit'] condition_last_off = (ioff >= rjson['paging']['total']) _logger.info(rjson) _logger.info("(" + str(rjson['paging']['total']) + ") products to check...") iitem = 0 if (results): for item_id in results: print item_id iitem += 1 _logger.info(item_id + "(" + str(iitem) + "/" + str(rjson['paging']['total']) + ")") posting_id = self.pool.get('product.product').search( cr, uid, [('meli_id', '=', item_id)]) response = meli.get("/items/" + item_id, {'access_token': meli.access_token}) rjson3 = response.json() if (posting_id): _logger.info("Item already in database: " + str(posting_id[0])) #print "Item already in database: " + str(posting_id[0]) else: idcreated = self.pool.get('product.product').create( cr, uid, { 'name': rjson3['title'], 'meli_id': rjson3['id'] }) #idcreated = self.pool.get('product.product').create(cr,uid,{ 'name': rjson3['id'], 'description': rjson3['title'], 'meli_id': rjson3['id'] }) if (idcreated): _logger.info("product created: " + str(rjson3['id']) + "-" + str(rjson3['title'])) product = product_obj.browse(cr, uid, idcreated) product_obj.product_meli_get_product( cr, uid, [idcreated]) return {}
def product_post(self, cr, uid, ids, context=None): product_ids = context["active_ids"] product_obj = self.pool.get("product.product") user_obj = self.pool.get("res.users").browse(cr, uid, uid) # user_obj.company_id.meli_login() company = user_obj.company_id warningobj = self.pool.get("warning") # company = self.pool.get('res.company').browse(cr,uid,1) CLIENT_ID = company.mercadolibre_client_id CLIENT_SECRET = company.mercadolibre_secret_key ACCESS_TOKEN = company.mercadolibre_access_token REFRESH_TOKEN = company.mercadolibre_refresh_token meli = Meli( client_id=CLIENT_ID, client_secret=CLIENT_SECRET, access_token=ACCESS_TOKEN, refresh_token=REFRESH_TOKEN ) if ACCESS_TOKEN == "": meli = Meli(client_id=CLIENT_ID, client_secret=CLIENT_SECRET) url_login_meli = meli.auth_url(redirect_URI=REDIRECT_URI) return {"type": "ir.actions.act_url", "url": url_login_meli, "target": "new"} for product_id in product_ids: product = product_obj.browse(cr, uid, product_id) if product.meli_id: response = meli.get("/items/%s" % product.meli_id, {"access_token": meli.access_token}) # print product.meli_category.meli_category_id if product.meli_title == False: # print 'Assigning title: product.meli_title: %s name: %s' % (product.meli_title, product.name) product.meli_title = product.name if product.meli_price == False: # print 'Assigning price: product.meli_price: %s standard_price: %s' % (product.meli_price, product.standard_price) product.meli_price = product.standard_price body = { "title": product.meli_title or "", "description": product.meli_description or "", "category_id": product.meli_category.meli_category_id or "0", "listing_type_id": product.meli_listing_type or "0", "buying_mode": product.meli_buying_mode or "", "price": product.meli_price or "0", "currency_id": product.meli_currency or "0", "condition": product.meli_condition or "", "available_quantity": product.meli_available_quantity or "0", "warranty": product.meli_warranty or "", # "pictures": [ { 'source': product.meli_imagen_logo} ] , "video_id": product.meli_video or "", } # print body assign_img = False and product.meli_id # publicando imagen cargada en OpenERP if product.image == None: return warningobj.info( cr, uid, title="MELI WARNING", message="Debe cargar una imagen de base en el producto.", message_html="", ) elif product.meli_imagen_id == False: # print "try uploading image..." resim = product.product_meli_upload_image() if "status" in resim: if resim["status"] == "error" or resim["status"] == "warning": error_msg = "MELI: mensaje de error: ", resim _logger.error(error_msg) else: assign_img = True and product.meli_imagen_id # modificando datos si ya existe el producto en MLA if product.meli_id: body = { "title": product.meli_title or "", # "description": product.meli_description or '', # "category_id": product.meli_category.meli_category_id, # "listing_type_id": product.meli_listing_type, "buying_mode": product.meli_buying_mode or "", "price": product.meli_price or "0", # "currency_id": product.meli_currency, "condition": product.meli_condition or "", "available_quantity": product.meli_available_quantity or "0", "warranty": product.meli_warranty or "", "pictures": [], # "pictures": [ { 'source': product.meli_imagen_logo} ] , "video_id": product.meli_video or "", } # publicando multiples imagenes multi_images_ids = {} if product.images: # print 'website_multi_images presente: ', product.images # recorrer las imagenes y publicarlas multi_images_ids = product.product_meli_upload_multi_images() # asignando imagen de logo (por source) if product.meli_imagen_logo: if product.meli_imagen_id: if "pictures" in body.keys(): body["pictures"] += [{"id": product.meli_imagen_id}] else: body["pictures"] = [{"id": product.meli_imagen_id}] if multi_images_ids: if "pictures" in body.keys(): body["pictures"] += multi_images_ids else: body["pictures"] = multi_images_ids if "pictures" in body.keys(): body["pictures"] += [{"source": product.meli_imagen_logo}] else: body["pictures"] += [{"source": product.meli_imagen_logo}] else: return warningobj.info( cr, uid, title="MELI WARNING", message="Debe completar el campo 'Imagen_Logo' con el url: http://www.nuevohorizonte-sa.com.ar/images/logo1.png", message_html="", ) # check fields if product.meli_description == False: return warningobj.info( cr, uid, title="MELI WARNING", message="Debe completar el campo 'description' (en html)", message_html="", ) # put for editing, post for creating if product.meli_id: response = meli.put("/items/" + product.meli_id, body, {"access_token": meli.access_token}) else: assign_img = True and product.meli_imagen_id response = meli.post("/items", body, {"access_token": meli.access_token}) # check response # print response.content rjson = response.json() # check error if "error" in rjson: # print "Error received: %s " % rjson["error"] error_msg = "MELI: mensaje de error: %s , mensaje: %s, status: %s, cause: %s " % ( rjson["error"], rjson["message"], rjson["status"], rjson["cause"], ) _logger.error(error_msg) missing_fields = error_msg # expired token if "message" in rjson and (rjson["message"] == "invalid_token" or rjson["message"] == "expired_token"): meli = Meli(client_id=CLIENT_ID, client_secret=CLIENT_SECRET) url_login_meli = meli.auth_url(redirect_URI=REDIRECT_URI) # print "url_login_meli:", url_login_meli # raise osv.except_osv( _('MELI WARNING'), _('INVALID TOKEN or EXPIRED TOKEN (must login, go to Edit Company and login): error: %s, message: %s, status: %s') % ( rjson["error"], rjson["message"],rjson["status"],)) return warningobj.info( cr, uid, title="MELI WARNING", message="Debe iniciar sesión en MELI. ", message_html="" ) else: # Any other errors return warningobj.info( cr, uid, title="MELI WARNING", message="Completar todos los campos! ", message_html="<br><br>" + missing_fields, ) # last modifications if response is OK if "id" in rjson: product.write({"meli_id": rjson["id"]}) posting_id = self.pool.get("mercadolibre.posting").search(cr, uid, [("meli_id", "=", rjson["id"])]) if not posting_id: posting_id = self.pool.get("mercadolibre.posting").create( cr, uid, ({"meli_id": rjson["id"], "product_id": product.id}) ) if product.meli_imagen_id: if len(rjson["pictures"]): # check if ID is already assigned if "id" in rjson["pictures"][0]: if rjson["pictures"][0]["id"] == product.meli_imagen_id: assign_img = False else: assign_img = True else: assign_img = True else: assign_img = True # product.write( { 'meli_url': rjson["url"]} ) # finally assingning uploaded image # if assign_img: # print "Assigning Imagen Id to Product ID: ", response.content # response = meli.post("/items/"+product.meli_id+"/pictures", { 'id': product.meli_imagen_id }, { 'access_token': meli.access_token } ) return {}
def product_meli_get_products( self, cr, uid, context=None ): user_obj = self.pool.get('res.users').browse(cr, uid, uid) company = user_obj.company_id product_obj = self.pool.get('product.product') #product = product_obj.browse(cr, uid, ids[0]) CLIENT_ID = company.mercadolibre_client_id CLIENT_SECRET = company.mercadolibre_secret_key ACCESS_TOKEN = company.mercadolibre_access_token REFRESH_TOKEN = company.mercadolibre_refresh_token meli = Meli(client_id=CLIENT_ID,client_secret=CLIENT_SECRET, access_token=ACCESS_TOKEN, refresh_token=REFRESH_TOKEN) url_login_meli = meli.auth_url(redirect_URI=REDIRECT_URI) #url_login_oerp = "/meli_login" results = [] response = meli.get("/users/"+company.mercadolibre_seller_id+"/items/search", {'access_token':meli.access_token,'offset': 0 }) #response = meli.get("/sites/MLA/search?seller_id="+company.mercadolibre_seller_id+"&limit=0", {'access_token':meli.access_token}) rjson = response.json() _logger.info( rjson ) results = rjson['results'] if 'error' in rjson: if rjson['message']=='invalid_token' or rjson['message']=='expired_token': ACCESS_TOKEN = '' REFRESH_TOKEN = '' company.write({'mercadolibre_access_token': ACCESS_TOKEN, 'mercadolibre_refresh_token': REFRESH_TOKEN, 'mercadolibre_code': '' } ) return { "type": "ir.actions.act_url", "url": url_login_meli, "target": "new",} #download? if (rjson['paging']['total']>rjson['paging']['limit']): pages = rjson['paging']['total']/rjson['paging']['limit'] ioff = rjson['paging']['limit'] condition_last_off = False while (condition_last_off!=True): response = meli.get("/users/"+company.mercadolibre_seller_id+"/items/search", {'access_token':meli.access_token,'offset': ioff }) rjson2 = response.json() if 'error' in rjson2: if rjson2['message']=='invalid_token' or rjson2['message']=='expired_token': ACCESS_TOKEN = '' REFRESH_TOKEN = '' company.write({'mercadolibre_access_token': ACCESS_TOKEN, 'mercadolibre_refresh_token': REFRESH_TOKEN, 'mercadolibre_code': '' } ) condition = True return { "type": "ir.actions.act_url", "url": url_login_meli, "target": "new",} else: results += rjson2['results'] ioff+= rjson['paging']['limit'] condition_last_off = ( ioff>=rjson['paging']['total']) _logger.info( rjson ) _logger.info( "("+str(rjson['paging']['total'])+") products to check...") iitem = 0 if (results): for item_id in results: print item_id iitem+= 1 _logger.info( item_id + "("+str(iitem)+"/"+str(rjson['paging']['total'])+")" ) posting_id = self.pool.get('product.product').search(cr,uid,[('meli_id','=',item_id)]) response = meli.get("/items/"+item_id, {'access_token':meli.access_token}) rjson3 = response.json() if (posting_id): _logger.info( "Item already in database: " + str(posting_id[0]) ) #print "Item already in database: " + str(posting_id[0]) else: idcreated = self.pool.get('product.product').create(cr,uid,{ 'name': rjson3['title'], 'meli_id': rjson3['id'] }) #idcreated = self.pool.get('product.product').create(cr,uid,{ 'name': rjson3['id'], 'description': rjson3['title'], 'meli_id': rjson3['id'] }) if (idcreated): _logger.info( "product created: " + str(rjson3['id']) + "-" + str( rjson3['title']) ) product = product_obj.browse(cr, uid, idcreated) product_obj.product_meli_get_product( cr, uid, [idcreated] ) return {}