Ejemplo n.º 1
0
    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
Ejemplo n.º 2
0
 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)
Ejemplo n.º 3
0
    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
Ejemplo n.º 4
0
    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
Ejemplo n.º 5
0
    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
Ejemplo n.º 6
0
    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
Ejemplo n.º 7
0
    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
        }
Ejemplo n.º 8
0
 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)