From cd02efa318fbcaaf8b3b045bdbc1fbb3603aa953 Mon Sep 17 00:00:00 2001 From: Elvis Date: Tue, 5 Dec 2023 17:34:38 -0500 Subject: [PATCH] a lot changes --- mercado_libre.py | 57 ++++++++++++++++++++++++++++++++++-------------- web.py | 7 ++---- web_channel.py | 1 + 3 files changed, 44 insertions(+), 21 deletions(-) diff --git a/mercado_libre.py b/mercado_libre.py index 48c1b8c..4825bd4 100644 --- a/mercado_libre.py +++ b/mercado_libre.py @@ -747,14 +747,14 @@ class MercadoLibre: dev_sales.append(return_sale) return dev_sales - def create_lines_sale(self, sale, sale_, freight=False): + def create_lines_sale(self, sale, sale_items, sfm_id, freight=False): _pool = Pool() SaleLine = _pool.get('sale.line') Product = _pool.get('product.product') create_lines = [] - sale_items = sale_['order_items'] + # sale_items = sale_['order_items'] ctx = self._get_context() - sfm_id = sale_items[0]['shipping']['id'] + # sfm_id = sale_items[0]['shipping']['id'] # reference = sale.reference.split(',') # reference_order = str(sale_['id']) # if reference_order not in reference: @@ -762,15 +762,14 @@ class MercadoLibre: # sale.save() with Transaction().set_context(ctx): for line in sale_items: - item = line['order_items'][0] - sku_code = item['item']['seller_sku'] + sku_code = line['item']['seller_sku'] if sku_code: generic = False if sku_code.count('+') > 0: codes = sku_code.split('+') line['unit_price'] = Decimal( - round((item['unit_price'] / 2), 2)) + round((line['unit_price'] / 2), 2)) else: codes = [sku_code] @@ -792,15 +791,15 @@ class MercadoLibre: gettext('sale_web_channel.msg_product_not_found', s=self.generic_product.rec_name)) for product in products: Tax = _pool.get('account.tax') - un_price = Tax.reverse_compute(Decimal(item['unit_price']), + un_price = Tax.reverse_compute(Decimal(line['unit_price']), product.customer_taxes_used) create_lines.append({ 'sale': sale.id, 'type': 'line', 'unit': product.default_uom.id, - 'quantity': item['quantity'], + 'quantity': line['quantity'], 'unit_price': round(Decimal(un_price), 3), - 'unit_price_full': Decimal(item['unit_price']), + 'unit_price_full': Decimal(line['unit_price']), 'product': product.id, 'taxes': [('add', product.customer_taxes_used)], 'description': description, @@ -854,9 +853,20 @@ class MercadoLibre: _pool = Pool() Sale = _pool.get('sale.sale') # reference = '%' + str(sale_['id']).split(',')[0] + '%' - ids = [str(order['id']) for order in sale_['orders']] - pack_id = sale_['id'][0] - reference = ', '.join(ids) + try: + ids = [str(order['id']) for order in sale_['orders']] + pack_id = str(sale_['id']).split(',')[0] + reference = ', '.join(ids) + sfm_id = sale_['order_items'][0]['shipping']['id'] + sale_id = str(sale_['id']).split(',')[1] + sale_items = sale_['order_items'][0]['order_items'] + except KeyError: + ids = sale_['id'] + pack_id = None + reference = sale_['id'] + sfm_id = sale_['shipping']['id'] + sale_id = sale_['id'] + sale_items = sale_['order_items'] dom = [ ('reference', 'like', reference) ] @@ -874,10 +884,8 @@ class MercadoLibre: sale_data = sale_['order_items'][0] Party = _pool.get('party.party') User = _pool.get('res.user') - sfm_id = sale_data['shipping']['id'] shipment_ = self.get_shipment_api(sfm_id) if sale_.get('buyer'): - sale_id = str(sale_['id']).split(',')[1] billing_info = self.get_billing_info_api(sale_id) customer = sale_['buyer'] dom_party = [('id_reference', '=', str(customer['id']))] @@ -920,12 +928,12 @@ class MercadoLibre: 'shipment_address': Party.address_get(party, type='delivery'), 'description': 'VENTA WEB ', 'web_shop': self.id, - 'web_id': pack_id, + 'web_id': pack_id if pack_id else sale_id, 'invoice_type': self.invoice_type, 'pack_id': pack_id, }]) generic = self.create_lines_sale( - sale, sale_, freight=True) + sale, sale_items, sfm_id, freight=True) sale.untaxed_amount_cache = sale.untaxed_amount if sale_['status'] == 'cancelled': sale.state = 'cancelled' @@ -967,3 +975,20 @@ class MercadoLibre: ) # return access_token, refresh_token, client_id, client_secret return access_token + + def _validate_number_id(self, number_id, access_token): + URI = 'https://api.mercadolibre.com/packs/%s?access_token=%s' % ( + number_id, access_token) + result = self.get_response(URI).json() + if result['status'] != 404: + return self.validate_sale(result) + else: + URI = 'https://api.mercadolibre.com/orders/%s?access_token=%s' % ( + number_id, access_token) + result = self.get_response(URI).json() + if result['pack_id']: + URI = 'https://api.mercadolibre.com/packs/%s?access_token=%s' % ( + result['pack_id'], access_token) + result2 = self.get_response(URI).json() + return self.validate_sale(result2) + return self._create_sale(result) diff --git a/web.py b/web.py index 907489f..c08b401 100644 --- a/web.py +++ b/web.py @@ -236,14 +236,11 @@ class SynchronizeChannelOrders(Wizard): mercado_libre = MercadoLibre(channel) if operation == 'especific_order': order_id = self.start.order_id - URI = 'https://api.mercadolibre.com/packs/%s?access_token=%s' % ( - order_id, channel.access_token) - result = mercado_libre.get_response(URI).json() + result = mercado_libre._validate_number_id(order_id, channel.access_token) if not result: raise ErrorSynchronizingSale( gettext('sale_web_channel.msg_error_synchronizing_sale', s=result)) - print(result, 'este es el result') - sale_created = mercado_libre.validate_sale(result) + sale_created = result if sale_created: generic_code = self.start.channel.generic_product.code if self.start.channel.generic_product else None product_generic = [ diff --git a/web_channel.py b/web_channel.py index 1e418de..628ebec 100644 --- a/web_channel.py +++ b/web_channel.py @@ -328,6 +328,7 @@ class SynchronizeChannelOrders(Wizard): if not result: raise ErrorSynchronizingSale( gettext('sale_web_channel.msg_error_synchronizing_sale', s=result)) + print(result) sale_created = channel.validate_sale(result) if sale_created: generic_code = self.start.channel.generic_product.code if self.start.channel.generic_product else None