def after_sync(self, response_data=None): print(response_data) response = xml2dict(response_data) info = response.SubmitFeedResult.FeedSubmissionInfo if info.FeedProcessingStatus == '_SUBMITTED_': amazon_id = info.FeedSubmissionId qsatype.FLSqlQuery().execSql( "INSERT INTO az_logamazon (idamazon, tipo, fecha, hora, procesadoaq, procesadoaz, peticion) VALUES ('{}', '{}', '{}', '{}', false, false, '{}')" .format(amazon_id, self.get_msgtype(), str(datetime.now())[:10], str(datetime.now())[11:19], self.request_data)) self.log( "Exito", "Esquema '{}' sincronizado correctamente (referencias: {})". format(self.get_msgtype(), self.referencias)) return amazon_id else: self.log( "Error", "Esquema '{}' no se ha podido sincronizar correctamente (referencias: {})" .format(self.get_msgtype(), self.referencias)) return False
def procesar_peticion_request_report(self, request_report): response = xml2dict(bytes(request_report, 'utf-8')) if not hasattr(response.RequestReportResult.ReportRequestInfo, 'ReportRequestId'): self.log("Exito", "No hay datos que sincronizar") return False return str( response.RequestReportResult.ReportRequestInfo.ReportRequestId)
def process_all_data(self, all_data): if all_data == []: self.log("Exito", "No hay datos que sincronizar") if not self.guarda_fechasincrotienda(self.esquema, self.codtienda): self.log("Error", "Fallo al guardar fecha última sincro") return self.small_sleep return False response = xml2dict(bytes(all_data, 'utf-8')) if not hasattr(response.Message.return_details, 'amazon_rma_id'): self.log("Exito", "No hay datos que sincronizar") if not self.guarda_fechasincrotienda(self.esquema, self.codtienda): self.log("Error", "Fallo al guardar fecha última sincro") return self.small_sleep return False for devolucion in response.Message.return_details: idAmazon = qsatype.FLUtil.sqlSelect( "az_ventasamazon", "idamazon", "idamazon = '{}'".format(devolucion.order_id)) if not idAmazon: raise NameError( "No se ha localizado el pedido original {}".format( idAmazon)) return False existeDevolucion = qsatype.FLUtil.sqlSelect( "az_devolucionesamazon", "iddevolucionamazon", "iddevolucionamazon = '{}'".format(devolucion.amazon_rma_id)) if not existeDevolucion: qsatype.FLSqlQuery().execSql( "INSERT INTO az_devolucionesamazon (fechaalta, horaalta, idventaamazon, iddevolucionamazon, datosdevolucion) VALUES (CURRENT_DATE,CURRENT_TIME,'{}','{}','{}')" .format(idAmazon, devolucion.amazon_rma_id, etree.tostring(devolucion).decode('utf-8'))) idComandaDevol = self.process_data(devolucion) if idComandaDevol: self.success_data.append(devolucion) qsatype.FLSqlQuery().execSql( "UPDATE az_devolucionesamazon SET idtpv_comanda = {} WHERE iddevolucionamazon = '{}'" .format(idComandaDevol, devolucion.amazon_rma_id)) if not self.idamazon: self.idamazon = str(devolucion.amazon_rma_id) else: self.idamazon = ',' + (devolucion.amazon_rma_id) return True
def process_all_data(self, all_data): if all_data == []: self.log("Exito", "No hay datos que sincronizar") return False response = xml2dict(bytes(all_data, 'utf-8')) if not hasattr(response.ListOrderItemsResult, 'AmazonOrderId'): self.log("Exito", "No hay datos que sincronizar") return False idAmazon = response.ListOrderItemsResult.AmazonOrderId for orderItem in response.ListOrderItemsResult.OrderItems: qsatype.FLSqlQuery().execSql( "UPDATE az_ventasamazon SET lineassincronizadas = TRUE, datoslineas = '{}' WHERE idamazon = '{}'" .format(etree.tostring(orderItem).decode('utf-8'), idAmazon)) self.idamazon = idAmazon return True
def after_sync(self, response_data=None): response = xml2dict(bytes(response_data, 'utf-8')) if response.Message[0].ProcessingReport.StatusCode == 'Complete': qsatype.FLSqlQuery().execSql( "UPDATE az_logamazon SET procesadoaz = true, respuesta = '{}' WHERE idamazon = '{}'" .format(response_data, self.idamazon)) self.log( "Exito", "Esquema '{}' sincronizado correctamente (idamazon: {})". format(self.get_msgtype(), self.idamazon)) return self.small_sleep else: self.log( "Error", "El esquema no se ha podido sincronizar correctamente o no se ha procesado todavía (idamazon: {})" .format(self.idamazon)) return self.large_sleep
def process_all_data(self, all_data): response = xml2dict(bytes(all_data, 'utf-8')) if not hasattr(response.ListOrdersResult.Orders, 'Order'): self.log("Exito", "No hay datos que sincronizar") if not self.guarda_fechasincrotienda(self.esquema, self.codtienda): self.log("Error", "Fallo al guardar fecha última sincro") return self.small_sleep return False for order in response.ListOrdersResult.Orders.Order: idAmazon = qsatype.FLUtil.sqlSelect("az_ventasamazon", "idamazon", "idamazon = '{}'".format(order.AmazonOrderId)) print(idAmazon) if not idAmazon: qsatype.FLSqlQuery().execSql("INSERT INTO az_ventasamazon (fechaalta, horaalta, lineassincronizadas, datoscabecera, idamazon, pedidoinformado, envioinformado) VALUES (CURRENT_DATE,CURRENT_TIME,false,'{}','{}', false, false)".format(etree.tostring(order).decode('utf-8'), order.AmazonOrderId)) if not self.idamazon: self.idamazon = order.AmazonOrderId else: self.idamazon = ',' + order.AmazonOrderId return True
def process_data(self, data): idlog = data['id'] idamazon = data['idamazon'] tipo = data['tipo'] response = xml2dict(bytes(data['respuesta'], 'utf-8')) barcode_error = {} referencia_error = {} if hasattr(response.Message.ProcessingReport, 'Result'): for result in response.Message.ProcessingReport.Result: error = result.ResultCode == 'Error' desc = result.ResultDescription sku = False if hasattr(result, 'AdditionalInfo'): sku = str(result.AdditionalInfo.SKU) if error and desc is not None and sku: if sku not in barcode_error: barcode_error[sku] = [] barcode_error[sku].append(desc) else: if error and hasattr( result, 'MessageID') and result.MessageID == '0': q = qsatype.FLSqlQuery() q.setSelect("referencia") q.setFrom("az_articulosamazon") q.setWhere("{} = {}".format(self.get_idlog_field(tipo), idlog)) q.exec_() body = self.fetch_query(q) for row in body: referencia = row['referencia'] if referencia not in referencia_error: referencia_error[referencia] = [] referencia_error[referencia].append( "{} -> {}".format(referencia, desc)) q = qsatype.FLSqlQuery() q.setSelect("referencia, barcode") q.setFrom("atributosarticulos") q.setWhere("barcode IN ('{}')".format("','".join( [str(barcode) for barcode in barcode_error]))) q.exec_() body = self.fetch_query(q) for row in body: referencia = row['referencia'] barcode = row['barcode'] if referencia not in referencia_error: referencia_error[referencia] = [] if referencia in barcode_error: for error in barcode_error[referencia]: referencia_error[referencia].append("{} -> {}".format( referencia, error)) if barcode in barcode_error: for error in barcode_error[barcode]: referencia_error[referencia].append("{} -> {}".format( barcode, error)) self.procesamientos[idlog] = { 'idamazon': idamazon, 'tipo': tipo, 'errores': referencia_error }
def procesar_peticion_get_report_list(self, request_get_report_list): response = xml2dict(bytes(request_get_report_list, 'utf-8')) if not hasattr(response.GetReportListResult, 'ReportInfo'): return False return str(response.GetReportListResult.ReportInfo.ReportId)