예제 #1
0
    def elganso_sync_unificartarjetas(self, params):
        try:
            bdparams = self.params
            if "auth" not in bdparams:
                bdparams = syncppal.iface.get_param_sincro('apipass')
            if "passwd" in params and params['passwd'] == bdparams['auth']:
                if "emailOrigen" not in params:
                    return {"Error": "Formato Incorrecto", "status": -1}
                if "emailDestino" not in params:
                    return {"Error": "Formato Incorrecto", "status": -1}

                saldoPuntosOrigen = qsatype.FLUtil.sqlSelect("tpv_tarjetaspuntos", "saldopuntos", "email = '" + str(params['emailOrigen']) + "'")

                if not self.quitarPuntosTarjetaOrigen(params):
                    return False

                if not self.acumularPuntosTarjetaDestino(params, saldoPuntosOrigen):
                    return False

                if not qsatype.FLUtil.execSql(ustr(u"UPDATE tpv_tarjetaspuntos SET saldopuntos = CASE WHEN (SELECT SUM(canpuntos) FROM tpv_movpuntos WHERE codtarjetapuntos = tpv_tarjetaspuntos.codtarjetapuntos) IS NULL THEN 0 ELSE (SELECT SUM(canpuntos) FROM tpv_movpuntos WHERE codtarjetapuntos = tpv_tarjetaspuntos.codtarjetapuntos) END WHERE email = '", str(params['emailOrigen']), "'")):
                    return False

                if not qsatype.FLUtil.execSql(ustr(u"UPDATE tpv_tarjetaspuntos SET saldopuntos = CASE WHEN (SELECT SUM(canpuntos) FROM tpv_movpuntos WHERE codtarjetapuntos = tpv_tarjetaspuntos.codtarjetapuntos) IS NULL THEN 0 ELSE (SELECT SUM(canpuntos) FROM tpv_movpuntos WHERE codtarjetapuntos = tpv_tarjetaspuntos.codtarjetapuntos) END WHERE email = '", str(params['emailDestino']), "'")):
                    return False

                return True
        except Exception as e:
            qsatype.debug(ustr(u"Error inesperado unificartarjetas: ", e))
            return {"Error": "Petición Incorrecta", "status": 0}

        return True
예제 #2
0
    def elganso_sync_generarmovimentopuntosoperacionesmagento(self, params):
        try:
            bdparams = self.params
            if "auth" not in bdparams:
                bdparams = syncppal.iface.get_param_sincro('apipass')

            if "passwd" in params and params['passwd'] == bdparams['auth']:

                if "email" not in params:
                    return {"Error": "Formato Incorrecto. Falta el email en los parametros", "status": -1}
                if "operacion" not in params:
                    return {"Error": "Formato Incorrecto. Falta la operacion en los parametros", "status": -1}
                if "canpuntos" not in params:
                    return {"Error": "Formato Incorrecto. Falta la cantidad de puntos en los parametros", "status": -1}

                params['saldo'] = 0
                if not self.acumularPuntosOperacionesMagento(params):
                    return False
                    
                saldo = parseFloat(params['saldo'])
                email = str(params['email'])

                if not qsatype.FLSqlQuery().execSql(ustr(u"UPDATE tpv_tarjetaspuntos SET saldopuntos = " , saldo , " WHERE email = '" , email , "'")):
                    return False

                return True
        except Exception as e:
            qsatype.debug(ustr(u"Error inesperado generarmovimentopuntosoperacionesmagento: ", e))
            return {"Error": "Petición Incorrecta", "status": 0}

        return True
예제 #3
0
    def diagnosis_checkDiag(self, cliente, proceso):
        _i = self.iface
        response = {}

        hSync = datetime.datetime.now() - _i.dameTiempoSincro(proceso)
        sincronizados = qsatype.FLUtil.sqlSelect(
            "yb_log", "COUNT(*)",
            "cliente = '" + cliente + "' AND timestamp >= '" + str(hSync) +
            "' AND tipo = '" + proceso + "'")
        errores = qsatype.FLUtil.sqlSelect(
            "yb_log", "texto LIKE '%Error%'", "cliente = '" + cliente +
            "' AND tipo = '" + proceso + "' ORDER BY timestamp DESC LIMIT 1")

        if sincronizados == 0 or errores:
            response = {"status": "ok"}
            # Function notificados
            status = notifications.sendNotification(
                proceso + " - " + cliente, "Error sincronización",
                _i.dameNotificadosSincro(proceso))
            if status:
                response = {"status": "ok"}
            else:
                response = {"status": "error"}
        else:
            response = {"status": "ok"}
        qsatype.debug(ustr(proceso, response))
예제 #4
0
    def elganso_sync_consultapuntos(self, params):
        try:
            if "passwd" in params and params["passwd"] == self.params['auth']:

                if "email" not in params:
                    return {"Error": "Formato Incorrecto", "status": 0}
                email = params['email']

                existe_tarjeta = qsatype.FLUtil.sqlSelect(u"tpv_tarjetaspuntos", u"codtarjetapuntos", ustr(u"email = '", email, u"'"))

                if not existe_tarjeta:
                    return {"Error": "No se ha encontrado la tarjeta.", "status": 1}

                es_empleado = qsatype.FLUtil.sqlSelect(u"tpv_tarjetaspuntos", u"deempleado", ustr(u"email = '", email, u"'"))
                es_dtoespecial = qsatype.FLUtil.sqlSelect(u"tpv_tarjetaspuntos", u"dtoespecial", ustr(u"email = '", email, u"'"))
                dtopor = ""
                if es_dtoespecial:
                    dtopor = qsatype.FLUtil.sqlSelect(u"tpv_tarjetaspuntos", u"dtopor", ustr(u"email = '", email, u"'"))

                saldopuntos = qsatype.FLUtil.sqlSelect(u"tpv_tarjetaspuntos", u"saldopuntos", ustr(u"email = '", email, u"'"))
                return {"saldoPuntos": saldopuntos, "email": email, "codtarjetapuntos": existe_tarjeta, "esempleado": es_empleado, "esdtoespecial": es_dtoespecial, "dtopor": dtopor}
            else:
                return {"Error": "Petición Incorrecta", "status": -1}
        except Exception as e:
            qsatype.debug(ustr(u"Error inesperado consulta de puntos: ", e))
            return {"Error": params, "status": -2}
        return False
예제 #5
0
    def guanabana_sync_creaLineaPedido(self, linea, curPedido, increment):
        _i = self.iface

        try:
            curLinea = qsatype.FLSqlCursor("lineaspedidoscli")
            curLinea.setModeAccess(curLinea.Insert)
            curLinea.refreshBuffer()

            idpedido = curPedido.valueBuffer("idpedido")
            nl = _i.obtenerNumLineaComanda(idpedido)
            iva = linea["iva"]
            if not iva or iva == "":
                iva = 0

            ref = _i.obtenerReferencia(linea["sku"], linea["size"])
            desc = _i.obtenerDescripcion(ref)
            qsatype.debug("Descripcion: " + str(desc))
            talla = _i.obtenerTalla(linea["size"])
            bc = _i.obtenerBarcode(ref, linea["size"])
            color = _i.obtenerColor(ref, linea["size"])
            codiva = _i.obtenerCodImpuesto(linea["iva"])

            curLinea.setValueBuffer("idpedido", idpedido)
            # curLinea.setValueBuffer("codtienda", "AWEB")
            curLinea.setValueBuffer("cantidad", linea["cantidad"])
            curLinea.setValueBuffer("pvpunitarioiva", linea["pvpunitarioiva"])
            curLinea.setValueBuffer("pvpsindtoiva", linea["pvpsindtoiva"])
            curLinea.setValueBuffer("pvptotaliva", linea["pvptotaliva"])
            curLinea.setValueBuffer(
                "pvpunitario",
                parseFloat(linea["pvpunitarioiva"] / ((100 + iva) / 100)))
            curLinea.setValueBuffer(
                "pvpsindto",
                parseFloat(linea["pvpsindtoiva"] / ((100 + iva) / 100)))
            curLinea.setValueBuffer(
                "pvptotal",
                parseFloat(linea["pvptotaliva"] / ((100 + iva) / 100)))
            curLinea.setValueBuffer("iva", iva)
            curLinea.setValueBuffer("descripcion",
                                    desc[:100] if desc else desc)
            curLinea.setValueBuffer("referencia", ref[:18] if ref else ref)
            curLinea.setValueBuffer("barcode", bc[:20] if bc else bc)
            curLinea.setValueBuffer("numlinea", nl)
            curLinea.setValueBuffer("talla", talla[:50] if talla else talla)
            curLinea.setValueBuffer("color", color[:50] if color else color)
            curLinea.setValueBuffer("ivaincluido", True)
            curLinea.setValueBuffer("codimpuesto",
                                    codiva[:10] if codiva else codiva)

            if not curLinea.commitBuffer():
                syncppal.iface.log(
                    ustr("Error. No se pudo guardar la línea ", str(nl),
                         " de la venta ", str(idpedido)), "gbsyncorders")
                return False

            return True

        except Exception as e:
            qsatype.debug(e)
            return False
예제 #6
0
    def guanabana_sync_creaLineaGastosComanda(self, curPedido, gastos):
        try:
            tieneIva = curPedido.valueBuffer("totaliva")
            idComanda = curPedido.valueBuffer("idtpv_comanda")
            codigo = curPedido.valueBuffer("codigo")

            if not idComanda or idComanda == 0:
                return False
            if not gastos or gastos == 0:
                return True

            curLGastos = qsatype.FLSqlCursor("tpv_lineascomanda")
            curLGastos.setModeAccess(curLGastos.Insert)
            curLGastos.refreshBuffer()

            curLGastos.setValueBuffer("idtpv_comanda", idComanda)
            curLGastos.setValueBuffer("codcomanda",
                                      codigo[:12] if codigo else codigo)
            curLGastos.setValueBuffer("referencia", "0000ATEMP00001")
            curLGastos.setValueBuffer("barcode", "8433613403654")
            curLGastos.setValueBuffer("descripcion", "MANIPULACIÓN Y ENVIO")

            gastosSinIva = None

            if tieneIva and tieneIva != 0:
                curLGastos.setValueBuffer("codimpuesto", "GEN")
                curLGastos.setValueBuffer("iva", 21)
                gastosSinIva = gastos / (1 + (parseFloat(21) / 100))
            else:
                curLGastos.setValueBuffer("codimpuesto", "EXT")
                curLGastos.setValueBuffer("iva", 0)
                gastosSinIva = gastos

            curLGastos.setValueBuffer("ivaincluido", True)
            curLGastos.setValueBuffer("pvpunitarioiva", gastos)
            curLGastos.setValueBuffer("pvpunitario", gastosSinIva)
            curLGastos.setValueBuffer("pvpsindto", gastosSinIva)
            curLGastos.setValueBuffer("pvptotal", gastosSinIva)
            curLGastos.setValueBuffer("pvptotaliva", gastos)
            curLGastos.setValueBuffer("pvpsindtoiva", gastos)
            curLGastos.setValueBuffer("codtienda", "AWEB")

            idsincro = qsatype.FactoriaModulos.get(
                'formRecordtpv_lineascomanda').iface.pub_commonCalculateField(
                    "idsincro", curLGastos)
            curLGastos.setValueBuffer("idsincro",
                                      idsincro[:30] if idsincro else idsincro)

            if not curLGastos.commitBuffer():
                syncppal.iface.log(
                    ustr(
                        "Error. No se pudo crear la línea de gastos de la venta ",
                        str(codigo)), "gbsyncorders")
                return False

            return True

        except Exception as e:
            qsatype.debug(e)
            return False
예제 #7
0
    def diagnosis_get_url(self,
                          cliente,
                          proceso,
                          syncapi=None,
                          in_production=None):
        try:
            server_url = self.get_server_url(cliente,
                                             syncapi=syncapi,
                                             in_production=in_production)
            if not server_url:
                return False

            if syncapi:
                q = qsatype.FLSqlQuery()
                q.setSelect("url")
                q.setFrom("yb_procesos")
                q.setWhere("cliente = '{}' AND proceso = '{}'".format(
                    cliente, proceso))

                if not q.exec_():
                    return False

                if not q.first():
                    return False

                return "{}/{}".format(server_url, q.value("url"))
            else:
                return "{}/{}".format(server_url, proceso)

        except Exception as e:
            qsatype.debug(e)
            return False
예제 #8
0
 def elganso_sync_tienebonoregistro(self, params):
     try:
         # Cambio pruebas Xavi 2
         # bdparams = self.params
         # if "auth" not in bdparams:
         #     bdparams = syncppal.iface.get_param_sincro('apipass')
         # if "passwd" in params and params['passwd'] == bdparams['auth']:
         if "auth" not in self.params:
             self.params = syncppal.iface.get_param_sincro('apipass')
         if "passwd" in params and params['passwd'] == self.params['auth']:
             if "email" not in params:
                 return {"Error": "Formato Incorrecto", "status": 0}
             q = qsatype.FLSqlQuery()
             q.setTablesList(u"eg_bonos")
             q.setSelect(u"codbono, venta, email")
             q.setFrom(u"eg_bonos")
             q.setWhere("venta like '%FIDELIZACION%' AND email = '" +
                        params["email"].lower() + "'")
             if not q.exec_():
                 return {"Error": "Bono incorrecto", "status": -1}
             if q.size() == 0:
                 return False
             else:
                 return True
         else:
             return {"Error": "Petición Incorrecta", "status": 10}
     except Exception as e:
         print(e)
         qsatype.debug(ustr(u"Error inesperado consulta de bono: ", e))
         return {"Error": "Petición Incorrecta", "status": 0}
     return False
예제 #9
0
    def sanhigia_sync_cerrarVentaWeb(self, curPedido):
        _i = self.iface

        try:
            idComanda = curPedido.valueBuffer("idtpv_comanda")

            codArqueo = _i.crearArqueoVentaWeb(curPedido)
            if not codArqueo:
                syncppal.iface.log(ustr("Error. No se pudo crear el arqueo"), "shsyncorders")
                return False

            if not _i.crearPagoVentaWeb(curPedido, codArqueo):
                syncppal.iface.log(ustr("Error. No se pudo crear el pago para el arqueo ", str(codArqueo)), "shsyncorders")
                return False

            if not qsatype.FLSqlQuery().execSql(u"UPDATE tpv_comandas SET estado = 'Cerrada', editable = true, pagado = total WHERE idtpv_comanda = " + str(idComanda)):
                syncppal.iface.log(ustr("Error. No se pudo cerrar la venta ", str(idComanda)), "shsyncorders")
                return False

            d = qsatype.Date()
            if not qsatype.FactoriaModulos.get('formtpv_tiendas').iface.marcaFechaSincroTienda("AWEB", "VENTAS_TPV", d):
                return False

            return True

        except Exception as e:
            qsatype.debug(e)
            return False
예제 #10
0
    def elganso_sync_eglogtarjetasweb(self, params):
        try:
            if "auth" not in self.params:
                self.params = syncppal.iface.get_param_sincro('apipass')
            if "passwd" in params and params['passwd'] == self.params['auth']:

                if "customer" not in params:
                    return {"Error": "Formato Incorrecto. No viene informado el parametro customer", "status": 0}

                if "email" not in params["customer"]:
                    return {"Error": "Formato Incorrecto. No viene informado el parametro email", "status": 0}

                curLogTarjetasWeb = qsatype.FLSqlCursor("eg_logtarjetasweb")
                curLogTarjetasWeb.setModeAccess(curLogTarjetasWeb.Insert)
                curLogTarjetasWeb.refreshBuffer()
                curLogTarjetasWeb.setValueBuffer("procesado", False)
                curLogTarjetasWeb.setValueBuffer("fechaalta", str(qsatype.Date())[:10])
                curLogTarjetasWeb.setValueBuffer("horaalta", str(qsatype.Date())[-8:])
                curLogTarjetasWeb.setValueBuffer("email", str(params["customer"]["email"]))
                curLogTarjetasWeb.setValueBuffer("website", "magento2")
                curLogTarjetasWeb.setValueBuffer("cuerpolog", str(params["customer"]))
                if not curLogTarjetasWeb.commitBuffer():
                    return False
                return True
            else:
                return {"Error": "Petición Incorrecta", "status": 10}
        except Exception as e:
            print(e)
            qsatype.debug(ustr(u"Error inesperado", e))
            return {"Error": "Petición Incorrecta", "status": 0}
        return False
예제 #11
0
 def sanhigia_calculaCodBarrasProv(self, lectura = None):
     _i = self.iface
     d = _i.datosLecturaCodBarras(lectura)
     if not d:
         return u""
     qsatype.debug(ustr( u"Lectura " , lectura , u" = codbarras " , d.codbarras , u" lote " , d.lote ))
     return d.codbarras
예제 #12
0
    def diagnosis_checkContinuos(self, cliente, proceso):
        _i = self.iface
        response = {}

        hSyncCont = datetime.datetime.now() - _i.dameTiempoSincro("continuo")
        sincronizadosCont = qsatype.FLUtil.sqlSelect(
            "yb_log", "COUNT(*)",
            "cliente = '" + cliente + "' AND timestamp >= '" + str(hSyncCont) +
            "' AND tipo = '" + proceso + "' AND texto NOT LIKE 'Info.%'")

        hSyncHora = datetime.datetime.now() - datetime.timedelta(hours=1)
        sincronizadosHora = qsatype.FLUtil.sqlSelect(
            "yb_log", "COUNT(*)",
            "cliente = '" + cliente + "' AND timestamp >= '" + str(hSyncHora) +
            "' AND tipo = '" + proceso + "' AND texto NOT LIKE 'Info.%'")

        errores = qsatype.FLUtil.sqlSelect(
            "yb_log", "texto LIKE '%Error%'", "cliente = '" + cliente +
            "' AND tipo = '" + proceso + "' ORDER BY timestamp DESC LIMIT 1")

        if sincronizadosCont == 0:
            curProc = qsatype.FLSqlCursor("yb_procesos")
            curProc.select("proceso = '" + proceso + "' AND cliente = '" +
                           cliente + "'")
            if not curProc.first():
                return False
            if not curProc.valueBuffer("activo"):
                return {"status": "ok"}
            qsatype.FLSqlQuery().execSql(
                "INSERT INTO yb_log (texto, cliente, tipo, timestamp) VALUES ('Info. Detectado bloqueo', '"
                + cliente + "', '" + proceso + "', '" + qsatype.Date().now() +
                "')")
            # yb_procesos.stop(None, curProc)
            # curProc.setValueBuffer("activo", False)
            # time.sleep(200)
            # yb_procesos.start(None, curProc)

            response = {"status": "ok"}
            status = notifications.sendNotification(
                "Error. " + proceso + " - " + cliente, "Reinicie proceso",
                _i.dameNotificadosSincro("continuo"))
            if status:
                response = {"status": "ok"}
            else:
                response = {"status": "error"}
        elif errores or sincronizadosHora == 0:
            response = {"status": "ok"}
            status = notifications.sendNotification(
                proceso + " - " + cliente, "Error sincronización",
                _i.dameNotificadosSincro("continuo"))
            if status:
                response = {"status": "ok"}
            else:
                response = {"status": "error"}
        else:
            response = {"status": "ok"}
        qsatype.debug(ustr(proceso, response))

        return response
예제 #13
0
    def guanabana_sync_crearPagoVentaWeb(self, curPedido, idArqueo):
        try:
            if not idArqueo or not curPedido:
                return False

            fecha = curPedido.valueBuffer("fecha")
            codTienda = "AWEB"
            idComanda = curPedido.valueBuffer("idtpv_comanda")
            codComanda = curPedido.valueBuffer("codigo")
            codTpvPuntoVenta = curPedido.valueBuffer("codtpv_puntoventa")
            codPago = curPedido.valueBuffer("codpago")
            importe = curPedido.valueBuffer("total")

            if not importe:
                importe = 0

            curPago = qsatype.FLSqlCursor("tpv_pagoscomanda")
            curPago.setModeAccess(curPago.Insert)
            curPago.refreshBuffer()

            curPago.setValueBuffer("idtpv_comanda", idComanda)
            curPago.setValueBuffer(
                "codcomanda", codComanda[:12] if codComanda else codComanda)
            curPago.setValueBuffer("idtpv_arqueo",
                                   idArqueo[:8] if idArqueo else idArqueo)
            curPago.setValueBuffer("fecha", fecha)
            curPago.setValueBuffer("editable", True)
            curPago.setValueBuffer("nogenerarasiento", True)
            curPago.setValueBuffer("anulado", False)
            curPago.setValueBuffer("importe", importe)
            curPago.setValueBuffer("estado", "Pagado")
            curPago.setValueBuffer("codpago",
                                   codPago[:10] if codPago else codPago)
            curPago.setValueBuffer(
                "codtpv_puntoventa",
                codTpvPuntoVenta[:6] if codTpvPuntoVenta else codTpvPuntoVenta)
            curPago.setValueBuffer("codtpv_agente", "0350")
            curPago.setValueBuffer("codtienda", codTienda)

            idsincro = qsatype.FactoriaModulos.get(
                "formRecordtpv_pagoscomanda").iface.commonCalculateField(
                    "idsincro", curPago)
            curPago.setValueBuffer("idsincro",
                                   idsincro[:30] if idsincro else idsincro)

            if not curPago.commitBuffer():
                return False

            return True

        except Exception as e:
            qsatype.debug(e)
            return False
예제 #14
0
 def elganso_sync_consultabonoventa(self, params):
     try:
         # Cambio pruebas Xavi 2
         # bdparams = self.params
         # if "auth" not in bdparams:
         #     bdparams = syncppal.iface.get_param_sincro('apipass')
         # if "passwd" in params and params['passwd'] == bdparams['auth']:
         if "auth" not in self.params:
             self.params = syncppal.iface.get_param_sincro('apipass')
         if "passwd" in params and params['passwd'] == self.params['auth']:
             if "codigoVenta" not in params:
                 return {"Error": "Formato Incorrecto", "status": 0}
             q = qsatype.FLSqlQuery()
             q.setTablesList(u"eg_bonos")
             q.setSelect(
                 u"codbono, saldoinicial, saldopendiente, coddivisa, venta, activo"
             )
             q.setFrom(u"eg_bonos")
             q.setWhere(ustr(u"venta = '", params['codigoVenta'], u"'"))
             if not q.exec_():
                 return {"Error": "Bono incorrecto", "status": -1}
             if q.size() > 1:
                 return {
                     "Error": "Bono asociado a mas de una venta",
                     "status": -2
                 }
             if not q.next():
                 return {"Error": "Bono incorrecto", "status": -3}
             activo = q.value("activo")
             if q.value("activo") is False:
                 return {"Error": "El bono no esta activo", "status": 1}
             codbono = q.value("codbono")
             saldopendiente = q.value("saldopendiente")
             saldoinicial = q.value("saldoinicial")
             coddivisa = q.value("coddivisa")
             venta = q.value("venta")
             return {
                 "saldoBono": saldoinicial,
                 "saldoPendiente": saldopendiente,
                 "codigoBono": codbono,
                 "divisa": coddivisa,
                 "venta": venta,
                 "activo": activo
             }
         else:
             return {"Error": "Petición Incorrecta", "status": 0}
     except Exception as e:
         print(e)
         qsatype.debug(ustr(u"Error inesperado consulta de bono: ", e))
         return {"Error": "Petición Incorrecta", "status": 0}
     return False
예제 #15
0
    def guanabana_sync_crearArqueoVentaWeb(self, curPedido):
        _i = self.iface

        try:
            codTienda = "AWEB"
            fecha = curPedido.valueBuffer("fecha")

            idArqueo = qsatype.FLUtil.sqlSelect(
                "tpv_arqueos", "idtpv_arqueo", "codtienda = '" + codTienda +
                "' AND diadesde = '" + str(fecha) + "'")
            if idArqueo:
                return idArqueo

            codTpvPuntoVenta = qsatype.FLUtil.sqlSelect(
                "tpv_puntosventa", "codtpv_puntoventa",
                "codtienda = '" + codTienda + "'")

            curArqueo = qsatype.FLSqlCursor("tpv_arqueos")
            curArqueo.setActivatedCommitActions(False)
            curArqueo.setActivatedCheckIntegrity(False)
            curArqueo.setModeAccess(curArqueo.Insert)
            curArqueo.refreshBuffer()

            curArqueo.setValueBuffer("abierta", True)
            curArqueo.setValueBuffer("sincronizado", False)
            curArqueo.setValueBuffer("idfactura", 0)
            curArqueo.setValueBuffer("diadesde", fecha)
            curArqueo.setValueBuffer("horadesde", "00:00:01")
            curArqueo.setValueBuffer(
                "ptoventa",
                codTpvPuntoVenta[:6] if codTpvPuntoVenta else codTpvPuntoVenta)
            curArqueo.setValueBuffer("codtpv_agenteapertura", "0350")
            curArqueo.setValueBuffer("codtienda", codTienda)

            if not _i.masDatosArqueo(curArqueo, curPedido):
                return False

            idArqueo = qsatype.FactoriaModulos.get(
                "formRecordtpv_arqueos").iface.codigoArqueo(curArqueo)
            curArqueo.setValueBuffer("idtpv_arqueo",
                                     idArqueo[:8] if idArqueo else idArqueo)

            if not curArqueo.commitBuffer():
                return False

            return idArqueo

        except Exception as e:
            qsatype.debug(e)
            return False
예제 #16
0
    def diagnosis_checkDiagnosisElganso(self, cliente, params):
        _i = self.iface

        response = {}
        proceso = params['proceso']

        procContinuos = [
            "mgsyncstock", "mgsyncpoints", "mgsyncorders", "mgsynccust",
            "mgsyncprices"
        ]
        procDiag = [
            "diagegpda", "diagsincroventasobjeto", "diagidlerroneos",
            "diagventastiendaficticia", "diagventassinlineas",
            "diagventassinpagos", "diagdirectordersnoidl", "diagfacturaseci",
            "diagcontabilidad", "diagventaseci", "diagventassinfacturar",
            "diagfacturacionsii", "diagfichprocesados",
            "diagmovimientosviajes", "diagpedidosservidoseditables",
            "diagarticulosidl", "diagclientesidl", "diagproveedoresidl",
            "diagpedidoscliidl", "diagpedidoscdidl", "diagpedidosprovidl",
            "diagviajesorigenidl", "diagviajesdestinoidl", "diagviajescdidl",
            "diagpedidosecommerceidl", "diagdevecorecibidas",
            "diagdevecomagento", "diagarticulosactivosmirakl",
            "diagurlsimagenessinprocesar", "diagsincromovistockweb"
        ]

        if proceso in procContinuos:
            response = _i.checkContinuos(cliente, proceso)
        elif proceso in procDiag:
            response = _i.checkDiag(cliente, proceso)

        elif proceso == "tiendaSM":
            fComprobacion = datetime.datetime.now() - datetime.timedelta(
                days=2)
            fComprobacion = str(fComprobacion)[:10]
            ultimasincro = qsatype.FLUtil.sqlSelect(
                "flsettings", "valor", "flkey = 'fechaSincroTiendasSM'")
            ultimasincro = json.loads((ultimasincro))['fecha']
            if fComprobacion > ultimasincro:
                status = notifications.sendNotification(
                    "tiendaSM", "Error sincronización", "juanma")
                if status:
                    response = {"status": "ok"}
                else:
                    response = {"status": "error"}
                qsatype.debug(ustr("Error sincroTiendaSM", fComprobacion))

        return response
예제 #17
0
    def sanhigia_sync_obtenerCodFactura(self):
        try:
            prefijo = "AWEBX"
            ultimaFact = None

            idUltima = qsatype.FLUtil.sqlSelect("tpv_comandas", "egcodfactura", "egcodfactura LIKE '" + prefijo + "%' ORDER BY egcodfactura DESC")
            if idUltima:
                ultimaFact = parseInt(str(idUltima)[-(12 - len(prefijo)):])
            else:
                ultimaFact = 0
            ultimaFact = ultimaFact + 1

            return prefijo + qsatype.FactoriaModulos.get("flfactppal").iface.cerosIzquierda(str(ultimaFact), 12 - len(prefijo))

        except Exception as e:
            qsatype.debug(e)
            return False
예제 #18
0
    def get_bono_data(self):
        self.bono = False

        descripcion_bono = False
        json_bono = False
        # codbono = False

        try:
            strbono = qsatype.FLUtil.sqlSelect("tpv_gestionparametros",
                                               "valor",
                                               "param = 'GASTAR_BONOS'")
            json_bono = json.loads(strbono)
        except Exception:
            pass

        if json_bono and "fechahasta" in json_bono and json_bono[
                "fechahasta"] and json_bono["fechahasta"] != "":
            if qsatype.FLUtil.daysTo(qsatype.Date(),
                                     json_bono["fechahasta"]) >= 0:
                descripcion_bono = True

        if descripcion_bono:
            coddescuento = str(self.init_data["discount_description"])

            if str(coddescuento)[:2] == "KN":
                self.bono = {"descripcion": "CUPON {}".format(coddescuento)}
            if str(coddescuento)[:2] == "BX":
                dto = qsatype.FLUtil.sqlSelect(
                    "eg_movibono", "importe",
                    "codbono = '{}' AND venta = '{}'".format(
                        coddescuento, self.init_data["codcomanda"]))
                qsatype.debug(
                    ustr(
                        u"---------------------------------------------- dto 1: ",
                        str(dto)))
                if dto:
                    if float(dto) != 0:
                        # if self.init_data["codcomanda"][:4] == "WEC7":
                        # dto = dto / 0.8

                        self.bono = {
                            "referencia": json_bono["referenciabono"],
                            "barcode": json_bono["barcodebono"],
                            "descripcion": "BONO {}".format(coddescuento),
                            "discount": dto
                        }
예제 #19
0
    def insertarMovBono(self):
        try:
            existeBono = str(
                qsatype.FLUtil.sqlSelect(
                    "eg_bonos", "codbono",
                    "codbono = '" + str(self.init_data["cupon_bono"]) + "'"))
            print("existeBono: ", existeBono)
            if existeBono == "None":
                return True

            importeMovBono = parseFloat(
                self.init_data["discount_refunded"]) * (-1)

            if str(self.init_data["tipo_linea"]) == "BonoPositivo":
                importeMovBono = parseFloat(
                    self.init_data["discount_refunded"])

            curMoviBono = qsatype.FLSqlCursor("eg_movibono")
            curMoviBono.setModeAccess(curMoviBono.Insert)
            curMoviBono.refreshBuffer()
            curMoviBono.setValueBuffer("codbono",
                                       str(self.init_data["cupon_bono"]))
            curMoviBono.setValueBuffer("fecha", str(qsatype.Date())[:10])
            curMoviBono.setValueBuffer("venta", self.init_data["codcomanda"])
            curMoviBono.setValueBuffer("importe", importeMovBono)
            if not curMoviBono.commitBuffer():
                return True

            if not qsatype.FLUtil.execSql(
                    ustr(
                        u"UPDATE eg_bonos SET saldoconsumido = (-1) * (SELECT SUM(importe) FROM eg_movibono WHERE codbono = '",
                        str(self.init_data["cupon_bono"]),
                        "'), saldopendiente = saldoinicial + (SELECT SUM(importe) FROM eg_movibono WHERE codbono = '",
                        str(self.init_data["cupon_bono"]),
                        "') WHERE codbono = '",
                        str(self.init_data["cupon_bono"]), "'")):
                return True

            return True

        except Exception as e:
            qsatype.debug(e)
            return False
예제 #20
0
    def diagnosis_start(self, model, cursor):
        try:
            if cursor.valueBuffer("syncrecieve"):
                return {"status": 1, "msg": "Proceso de recepción"}
            if cursor.valueBuffer("activo"):
                return True

            resul = diagppal.iface.single_start(
                cursor, in_production=qsatype.FLUtil.isInProd())
            if resul and "msg" in resul and resul[
                    "msg"] == "Tarea encolada correctamente":
                diagppal.iface.log("Info. Proceso arrancado",
                                   cursor.valueBuffer("proceso"),
                                   cursor.valueBuffer("cliente"))
            return resul

        except Exception as e:
            qsatype.debug(e)
            return False

        return True
예제 #21
0
    def sanhigia_sync_creaLineaDescuento(self, curPedido, dto, descripcion):
        try:
            codigo = curPedido.valueBuffer("codigo")
            idpedido = curPedido.valueBuffer("idpedido")

            if not codigo or codigo == 0 or not dto or dto == 0 or dto == "0.0000" or dto == "0.00":
                return True

            ref = "DTOWEB"
            desc = "DESCUENTO: " + descripcion

            curLDesc = qsatype.FLSqlCursor("lineaspedidoscli")
            curLDesc.setModeAccess(curLDesc.Insert)
            curLDesc.refreshBuffer()
            curLDesc.setValueBuffer("idpedido", idpedido)
            curLDesc.setValueBuffer("referencia", ref[:18] if ref else ref)
            #curLDesc.setValueBuffer("barcode", bC[:20] if bC else bC)
            curLDesc.setValueBuffer("descripcion", desc[:100] if desc else desc)
            curLDesc.setValueBuffer("codimpuesto", "IVA21")
            curLDesc.setValueBuffer("iva", 21)
            dtoSinIva = dto
            dto = dto * (1 + (parseFloat(21) / 100))
            # curLDesc.setValueBuffer("ivaincluido", True)
            curLDesc.setValueBuffer("pvpunitarioiva", dto)
            curLDesc.setValueBuffer("pvpunitario", dtoSinIva)
            curLDesc.setValueBuffer("pvpsindto", dtoSinIva)
            curLDesc.setValueBuffer("pvptotal", dtoSinIva)
            curLDesc.setValueBuffer("pvptotaliva", dto)
            curLDesc.setValueBuffer("pvpsindtoiva", dto)
            curLDesc.setValueBuffer("totalenalbaran", 0)

            if not curLDesc.commitBuffer():
                syncppal.iface.log(ustr("Error. No se pudo crear la línea de descuento de la venta ", str(codigo)), "shsyncorders")
                return False

            return True

        except Exception as e:
            qsatype.debug(e)
            return False
예제 #22
0
    def diagnosis_revoke(self, model, cursor, oParam):
        try:
            customer = cursor.valueBuffer("cliente")

            syncapi = False
            if qsatype.FLUtil.sqlSelect("yb_procesos", "id", "cliente = '{}' AND syncapi LIMIT 1".format(customer)):
                syncapi = True

            url = ybprocesos.iface.get_server_url(customer, syncapi)
            if not url:
                return False

            if syncapi:
                url = "{}/celery/tasks/revoke/{}".format(url, oParam["id"])

                response = requests.get(url)
                if response and response.status_code == 200:
                    return response.json()
                else:
                    raise Exception("Mala respuesta")

            url = "{}/revoke".format(url)

            header = {"Content-Type": "application/json"}
            data = {
                "passwd": qsatype.FLUtil.sqlSelect("yb_procesos", "passwd", "cliente = 'admin' AND proceso = 'admin' LIMIT 1"),
                "id": oParam["id"]
            }

            response = notifications.post_request(url, header, data)
            if response and response.status_code == 200:
                return response.json()
            else:
                raise Exception("Mala respuesta")

        except Exception as e:
            qsatype.debug(e)
            return False

        return True
예제 #23
0
    def elganso_sync_desuscribesm(self, params):
        try:
            bdparams = self.params
            if "auth" not in bdparams:
                bdparams = syncppal.iface.get_param_sincro('apipass')
            if "passwd" in params and params['passwd'] == bdparams['auth']:
                if "email" not in params:
                    return {"Error": "Formato Incorrecto", "status": -1}
                qsatype.debug(ustr(u"desuscribesm: ", params['email']))
                curTpvTarjetas = qsatype.FLSqlCursor(u"tpv_tarjetaspuntos")

                q = qsatype.FLSqlQuery()
                q.setSelect(u"codtarjetapuntos")
                q.setFrom(u"tpv_tarjetaspuntos")
                q.setWhere(ustr(u"email = '", params['email'], "'"))
                if not q.exec_():
                    return False

                while q.next():
                    curTpvTarjetas.select(ustr(u"codtarjetapuntos = '", q.value(u"codtarjetapuntos"), "'"))
                    if not curTpvTarjetas.first():
                        return False
                    curTpvTarjetas.setModeAccess(curTpvTarjetas.Edit)
                    curTpvTarjetas.refreshBuffer()
                    curTpvTarjetas.setValueBuffer("fechamod", str(qsatype.Date())[:10])
                    curTpvTarjetas.setValueBuffer("horamod", str(qsatype.Date())[-8:])
                    curTpvTarjetas.setValueBuffer("sincronizada", False)
                    curTpvTarjetas.setValueBuffer("suscritocrm", False)
                    if not curTpvTarjetas.commitBuffer():
                        return False

                return True
            else:
                return {"Error": "Formato Incorrecto", "status": -1}
        except Exception as e:
            qsatype.debug(ustr(u"Error inesperado desuscribesm: ", e))
            return {"Error": "Petición Incorrecta", "status": 0}
        return False
예제 #24
0
    def elganso_sync_consultamovimientospuntos(self, params):
        try:
            if "passwd" in params and params["passwd"] == self.params['auth']:

                if "email" not in params:
                    return {"Error": "Formato Incorrecto", "status": 0}
                email = params['email']

                existe_tarjeta = qsatype.FLUtil.sqlSelect(u"tpv_tarjetaspuntos", u"codtarjetapuntos", ustr(u"email = '", email, u"'"))

                if not existe_tarjeta:
                    return {"Error": "No se ha encontrado la tarjeta.", "status": 1}

                q = qsatype.FLSqlQuery()
                q.setSelect("m.idmovpuntos, m.operacion, m.fecha, m.canpuntos")
                q.setFrom("tpv_tarjetaspuntos t inner join tpv_movpuntos m on t.codtarjetapuntos = m.codtarjetapuntos")
                q.setWhere("t.email = '" + email + "' order by fecha,idmovpuntos")

                if not q.exec_():
                    return False

                movi_puntos = []
                while q.next():
                    movi_puntos.append({
                        "idmovpuntos": q.value("m.idmovpuntos"),
                        "operacion": q.value("m.operacion"),
                        "fecha": q.value("m.fecha"),
                        "importe": round(float(q.value("m.canpuntos")), 2)
                    })
                return movi_puntos
            else:
                return {"Error": "Petición Incorrecta", "status": -1}
        except Exception as e:
            qsatype.debug(ustr(u"Error inesperado consulta de puntos: ", e))
            return {"Error": params, "status": -2}
        return False
예제 #25
0
    def elganso_sync_mg2customer(self, params):
        try:
            if "auth" not in self.params:
                self.params = syncppal.iface.get_param_sincro('apipass')
            if "passwd" in params and params['passwd'] == self.params['auth']:

                if "email" not in params:
                    return {
                        "Error":
                        "Formato Incorrecto. No viene informado el parametro customer",
                        "status": 0
                    }

                if not self.crearClienteMagento2(params):
                    return False

                return True
            else:
                return {"Error": "Petición Incorrecta", "status": 10}
        except Exception as e:
            print(e)
            qsatype.debug(ustr(u"Error inesperado", e))
            return {"Error": "Petición Incorrecta", "status": 0}
        return False
예제 #26
0
    def diagnosis_get_activity(self, customer):
        try:
            syncapi = False
            if qsatype.FLUtil.sqlSelect("yb_procesos", "id", "cliente = '{}' AND syncapi LIMIT 1".format(customer)):
                syncapi = True

            url = diagppal.iface.get_server_url(customer, syncapi, in_production=qsatype.FLUtil.isInProd())
            if not url:
                return {"active": {}, "reserved": {}, "scheduled": {}}

            if syncapi:
                url = "{}/celery/activity/get".format(url)
            else:
                url = "{}/getactivity".format(url)

            response = requests.get(url)
            if response and response.status_code == 200:
                return response.json()
            else:
                raise Exception("Mala respuesta")

        except Exception as e:
            qsatype.debug(e)
            return {"active": {}, "reserved": {}, "scheduled": {}}
예제 #27
0
    def sanhigia_sync_creaLineaPedido(self, linea, curPedido, increment):
        _i = self.iface

        try:
            qsatype.debug("\n\n----------sanhigia_sync_creaLineaPedido")
            curLinea = qsatype.FLSqlCursor("lineaspedidoscli")
            curLinea.setModeAccess(curLinea.Insert)
            curLinea.refreshBuffer()

            idpedido = curPedido.valueBuffer("idpedido")
            nl = _i.obtenerNumLineaComanda(idpedido)
            iva = linea["iva"]
            if not iva or iva == "":
                iva = 0

            # ref = _i.obtenerReferencia(linea["sku"], linea["size"])
            ref = linea["sku"]
            qsatype.debug("\n\n----------sanhigia_sync_creaLineaPedido ref: " + ref)
            desc = _i.obtenerDescripcion(ref)
            qsatype.debug("Descripcion: " + str(desc))
            codiva = _i.obtenerCodImpuesto(linea["iva"])

            curLinea.setValueBuffer("idpedido", idpedido)
            curLinea.setValueBuffer("cantidad", linea["cantidad"])
            # curLinea.setValueBuffer("pvpunitarioiva", linea["pvpunitarioiva"])
            # curLinea.setValueBuffer("pvpsindtoiva", linea["pvpsindtoiva"])
            # curLinea.setValueBuffer("pvptotaliva", linea["pvptotaliva"])
            curLinea.setValueBuffer("pvpunitario", parseFloat(linea["pvpunitarioiva"] / ((100 + iva) / 100)))
            curLinea.setValueBuffer("pvpsindto", parseFloat(linea["pvpsindtoiva"] / ((100 + iva) / 100)))
            curLinea.setValueBuffer("pvptotal", parseFloat(linea["pvptotaliva"] / ((100 + iva) / 100)))
            curLinea.setValueBuffer("iva", iva)
            curLinea.setValueBuffer("descripcion", desc[:100] if desc else desc)
            curLinea.setValueBuffer("referencia", ref[:18] if ref else ref)
            curLinea.setValueBuffer("numlinea", nl)
			#Si hay dtopor aplico este como en abanq, si no hay dtopor pero hay dto_lineal reparto el descuento entre las lineas aplicandolo equitativamente al precio
            #A petición de Jesús Senar 14-05-2020
            if parseFloat(linea["dtopor"]) == 0 and  parseFloat(linea["descuento_lineal"]) > 0 :
                curLinea.setValueBuffer("pvpunitario", curLinea.valueBuffer("pvpunitario") - (parseFloat(linea["descuento_lineal"])/linea["cantidad"]))
                curLinea.setValueBuffer("pvpsindto", curLinea.valueBuffer("pvpsindto") - parseFloat(linea["descuento_lineal"]))
            curLinea.setValueBuffer("dtolineal", 0)
            curLinea.setValueBuffer("dtopor", parseFloat(linea["dtopor"]))
            curLinea.setValueBuffer("codimpuesto", codiva[:10] if codiva else codiva)
            curLinea.setValueBuffer("canpedidorect", 0)
            curLinea.setValueBuffer("totalenalbaran", 0)

            if not curLinea.commitBuffer():
                qsatype.debug("Error guardando la linea al hacer el commit. Referencia")
                syncppal.iface.log(ustr("Error. No se pudo guardar la línea ", str(nl), " de la venta ", str(idpedido)), "shsyncorders")
                return False

            return True

        except Exception as e:
            qsatype.debug("\n\n----------sanhigia_sync_creaLineaPedido e: ")
            qsatype.debug(e)
            return False
예제 #28
0
    def sanhigia_sync_creaLineaEnvio(self, order, curPedi):
        _i = self.iface

        try:

            tracking = order["tracking_number"] if order["tracking_number"] and order["tracking_number"] != "" else ""
            #street = order["shipping_address"]["street"].split(" ")
            dirtipoviaenv = ""
            direccionenv = order["shipping_address"]["street"]
            dirnumenv = ""
            dirotrosenv = ""

            numcliente = order["customer_id"]
            email = order["email"]
            metodopago = order["payment_method"]
            metodoenvio = order["shipping_description"]
            nombreenv = order["shipping_address"]["firstname"]
            apellidosenv = order["shipping_address"]["lastname"]
            codpostalenv = str(order["shipping_address"]["postcode"])
            ciudad = order["shipping_address"]["city"]
            region = order["shipping_address"]["region"]
            pais = _i.damePaisMg(order["shipping_address"]["country_id"])
            telefonoenv = order["shipping_address"]["telephone"]

            curPedi.setValueBuffer("mg_numcliente", numcliente[:15] if numcliente else numcliente)
            curPedi.setValueBuffer("mg_email", email[:200] if email else email)
            curPedi.setValueBuffer("mg_metodopago", metodopago[:30] if metodopago else metodopago)
            curPedi.setValueBuffer("mg_confac", _i.conFac(False))
            curPedi.setValueBuffer("mg_metodoenvio", metodoenvio[:50] if metodoenvio else metodoenvio)
            curPedi.setValueBuffer("mg_unidadesenv", order["units"])
            curPedi.setValueBuffer("mg_numseguimiento", tracking[:50] if tracking else tracking)
            curPedi.setValueBuffer("mg_nombreenv", nombreenv[:100] if nombreenv else nombreenv)
            curPedi.setValueBuffer("mg_apellidosenv", apellidosenv[:200] if apellidosenv else apellidosenv)
            curPedi.setValueBuffer("mg_dirtipoviaenv", dirtipoviaenv[:100] if dirtipoviaenv else dirtipoviaenv)
            curPedi.setValueBuffer("mg_direccionenv", direccionenv[:200] if direccionenv else direccionenv)
            curPedi.setValueBuffer("mg_dirnumenv", dirnumenv[:100] if dirnumenv else dirnumenv)
            curPedi.setValueBuffer("mg_dirotrosenv", dirotrosenv[:100] if dirotrosenv else dirotrosenv)
            curPedi.setValueBuffer("mg_codpostalenv", codpostalenv[:10] if codpostalenv else codpostalenv)
            curPedi.setValueBuffer("mg_ciudadenv", ciudad[:100] if ciudad else ciudad)
            curPedi.setValueBuffer("mg_provinciaenv", region[:100] if region else region)
            curPedi.setValueBuffer("mg_paisenv", pais[:100] if pais else pais)
            curPedi.setValueBuffer("mg_telefonoenv", telefonoenv[:30] if telefonoenv else telefonoenv)
            curPedi.setValueBuffer("mg_gastosenv", order["shipping_price"])
            # Facturacion
            #street = order["billing_address"]["street"].split(" ")
            dirtipoviafac = ""
            direccionfac = order["billing_address"]["street"]
            dirnumfac = ""
            dirotrosfac = ""
            nombrefac = order["billing_address"]["firstname"]
            apellidosfac = order["billing_address"]["lastname"]
            codpostalfac = str(order["billing_address"]["postcode"])
            ciudad = order["billing_address"]["city"]
            region = order["billing_address"]["region"]
            pais = _i.damePaisMg(order["billing_address"]["country_id"])
            telefonofac = order["billing_address"]["telephone"]
            curPedi.setValueBuffer("mg_nombrefac", nombrefac[:100] if nombrefac else nombrefac)
            curPedi.setValueBuffer("mg_apellidosfac", apellidosfac[:200] if apellidosfac else apellidosfac)
            curPedi.setValueBuffer("mg_dirtipoviafac", dirtipoviafac[:100] if dirtipoviafac else dirtipoviafac)
            curPedi.setValueBuffer("mg_direccionfac", direccionfac[:200] if direccionfac else direccionfac)
            curPedi.setValueBuffer("mg_dirnumfac", dirnumfac[:100] if dirnumfac else dirnumfac)
            curPedi.setValueBuffer("mg_dirotrosfac", dirotrosfac[:100] if dirotrosfac else dirotrosfac)
            curPedi.setValueBuffer("mg_codpostalfac", codpostalfac[:10] if codpostalfac else codpostalfac)
            curPedi.setValueBuffer("mg_ciudadfac", ciudad[:100] if ciudad else ciudad)
            curPedi.setValueBuffer("mg_provinciafac", region[:100] if region else region)
            curPedi.setValueBuffer("mg_paisfac", pais[:100] if pais else pais)
            curPedi.setValueBuffer("mg_telefonofac", telefonofac[:30] if telefonofac else telefonofac)
            curPedi.setValueBuffer("mg_gastosfac", order["shipping_price"])

            return True

        except Exception as e:
            qsatype.debug(e)
            return False
예제 #29
0
    def sanhigia_sync_creaCabeceraPedido(self, order, codigo):
        _i = self.iface

        try:
            curPedido = qsatype.FLSqlCursor("pedidoscli")
            # curPedido.setActivatedCommitActions(False)
            curPedido.setModeAccess(curPedido.Insert)
            curPedido.refreshBuffer()
            curPedido.setValueBuffer("codigo", codigo[:15])

            cif = order["cif"][:20] if order["cif"] and order["cif"] != "" else ""
            if not cif or cif == "":
                cif = "-"
            nombrecliente = str(order["shipping_address"]["firstname"]) + " " + str(order["shipping_address"]["lastname"])

            #street = order["shipping_address"]["street"].split(" ")
            dirtipovia = ""
            direccion = order["shipping_address"]["street"]
            dirnum = ""
            dirotros = ""

            codpostal = str(order["shipping_address"]["postcode"])
            city = order["shipping_address"]["city"]
            region = order["shipping_address"]["region"]
            codpais = _i.damePaisMg(order["shipping_address"]["country_id"])
            telefonofac = order["shipping_address"]["telephone"]
            codpago = _i.obtenerCodPago(order["payment_method"])
            email = order["email"]

            idprovincia = None
            if order["shipping_address"]["region_id"] is not None:
                provincias = qsatype.FLSqlQuery().execSql(u"select idprovincia from provincias where mg_idprovincia='"+str(order["shipping_address"]["region_id"])+"'")
                if len(provincias) > 0:
                    idprovincia = str(provincias[0][0])

            curPedido.setValueBuffer("codserie", "W")
            curPedido.setValueBuffer("codejercicio", _i.obtenerEjercicio(order["created_at"]))
            curPedido.setValueBuffer("codalmacen", "ALM")
            curPedido.setValueBuffer("fecha", order["created_at"][:10])
            curPedido.setValueBuffer("fechasalida", order["created_at"][:10])
            curPedido.setValueBuffer("hora", _i.obtenerHora(order["created_at"]))
            curPedido.setValueBuffer("nombrecliente", nombrecliente[:100] if nombrecliente else nombrecliente)
            curPedido.setValueBuffer("codcliente", _i.obtenerCodCliente(cif))
            curPedido.setValueBuffer("cifnif", cif)
            curPedido.setValueBuffer("dirtipovia", dirtipovia[:100] if dirtipovia else dirtipovia)
            curPedido.setValueBuffer("direccion", direccion[:100] if direccion else direccion)
            curPedido.setValueBuffer("dirnum", dirnum[:100] if dirnum else dirnum)
            curPedido.setValueBuffer("dirotros", dirotros[:100] if dirotros else dirotros)
            curPedido.setValueBuffer("codpostal", codpostal[:10] if codpostal else codpostal)
            curPedido.setValueBuffer("ciudad", city[:100] if city else city)
            curPedido.setValueBuffer("provincia", region[:100] if region else region)
            curPedido.setValueBuffer("idprovincia", idprovincia)
            curPedido.setValueBuffer("telefono1", telefonofac[:30] if telefonofac else telefonofac)
            curPedido.setValueBuffer("codpais", codpais[:20] if codpais else codpais)
            curPedido.setValueBuffer("codpago", codpago[:10] if codpago else codpago)
            curPedido.setValueBuffer("coddivisa", "EUR")
            curPedido.setValueBuffer("tasaconv", 1)
            curPedido.setValueBuffer("email", email[:100] if email else email)
            curPedido.setValueBuffer("total", order["grand_total"])
            curPedido.setValueBuffer("totaleuros", order["grand_total"])
            curPedido.setValueBuffer("neto", order["subtotal"])
            curPedido.setValueBuffer("totaliva", order["tax_amount"])
            curPedido.setValueBuffer("mg_increment_id", str(order["increment_id"]))
            curPedido.setValueBuffer("regimeniva", _i.obtenerRegimenIva(order))
            curPedido.setValueBuffer("codagente", "NO")
            #Gastos de envio
            if int(order["shipping_price"]) > 0:
                curPedido.setValueBuffer("totalportes", order["shipping_price"])
                curPedido.setValueBuffer("netoportes", order["shipping_price"]/1.21)
                curPedido.setValueBuffer("ivaportes", 21)
                curPedido.setValueBuffer("codimpuestoportes", 'IVA21')
                curPedido.setValueBuffer("totalivaportes", order["shipping_price"]-(order["shipping_price"]/1.21))
            #Si es una domiciliacion, pongo el numero de cuenta en sh_iban
            if(order["bank_account"] != None and order["payment_method"] == 'direct_debit'):
                curPedido.setValueBuffer("sh_iban", order["bank_account"][:34])
            if(order["payment_method"] == 'banktransfer' or order["payment_method"] == 'direct_debit'):
                curPedido.setValueBuffer("sh_estadopago", "Pte. Validacion pago")
                curPedido.setValueBuffer("pda", "Suspendido")

            if not _i.creaLineaEnvio(order, curPedido):
                return False

            if not curPedido.commitBuffer():
                syncppal.iface.log(ustr("Error. No se pudo guardar la cabecera de la venta ", str(codigo)), "shsyncorders")
                return False
            codigo = curPedido.valueBuffer("codigo")
            curPedido.select("codigo = '" + str(codigo) + "'")
            if not curPedido.first():
                syncppal.iface.log(ustr("Error. No se pudo recuperar la cabecera guardada para ", str(codigo)), "shsyncorders")
                return False

            curPedido.setModeAccess(curPedido.Edit)
            curPedido.refreshBuffer()

            return curPedido

        except Exception as e:
            qsatype.debug(e)
            return False
예제 #30
0
    def guanabana_sync_updateProductStock(self):
        _i = self.iface

        cdSmall = 10
        cdLarge = 120

        params_b2c = syncppal.iface.get_param_sincro('b2c')
        params_stock = syncppal.iface.get_param_sincro('b2cStockUpload')

        headers = None
        if qsatype.FLUtil.isInProd():
            headers = {
                "Content-Type": "application/json",
                "Authorization": params_b2c['auth']
            }
        else:
            headers = {
                "Content-Type": "application/json",
                "Authorization": params_b2c['test_auth']
            }

        try:
            body = []
            codTienda = "AL2"

            q = qsatype.FLSqlQuery()
            q.setSelect("idssw, datossincro")
            q.setFrom("mg_colasincroweb")
            q.setWhere("tipo = 'gbsyncstock' AND codalmacen = '" + codTienda + "' AND sincronizado = false ORDER BY idssw ASC LIMIT 20")

            if not q.exec_():
                qsatype.debug("Error. La consulta falló.")
                qsatype.debug(q.sql())
                syncppal.iface.log("Error. La consulta falló.", "gbsyncstock")
                return cdLarge

            ids_enviados = []
            stock = {}
            while q.next():
                if q.isNull('datossincro'):
                    ids_enviados.append(str(q.value('idssw')))
                    body.append(stock)
                    continue

                stock = json.loads(q.value('datossincro'))
                if stock['error'] == "" or stock['error'] is None:
                    ids_enviados.append(str(q.value('idssw')))
                    body.append(stock)

            if not len(body):
                syncppal.iface.log("Éxito. No hay stocks que sincronizar.", "gbsyncstock")
                return cdLarge

            url = params_stock['url'] if qsatype.FLUtil.isInProd() else params_stock['test_url']

            qsatype.debug(ustr("Llamando a ", url, " ", json.dumps(body)))
            response = requests.post(url, data=json.dumps(body), headers=headers)
            stCode = response.status_code
            jsonres = None
            if response and stCode == int(params_stock['success_code']):
                jsonres = response.json()

                if jsonres and "request_id" in jsonres:
                    ids_enviados = ','.join(ids_enviados)
                    qsatype.FLSqlQuery().execSql("UPDATE mg_colasincroweb SET sincronizado = true WHERE idssw in (" + ids_enviados + ")")
                    syncppal.iface.log("Éxito. Stock sincronizado correctamente (id: " + str(jsonres["request_id"]) + ")", "gbsyncstock")
                    return cdSmall
                else:
                    syncppal.iface.log("Error. No se pudo actualizar el stock.", "gbsyncstock")
                    return cdSmall
            else:
                syncppal.iface.log("Error. No se pudo actualizar el stock. Código: " + str(stCode), "gbsyncstock")
                return cdSmall

        except Exception as e:
            qsatype.debug(e)
            syncppal.iface.log("Error. No se pudo establecer la conexión con el servidor.", "gbsyncstock")
            return cdSmall

        return cdSmall
예제 #31
0
    def get_data(self):
        qsatype.debug(u"+++++++++++++++++++++++++++++++++++++++ 1")
        if not self.control_tallas_devolucion():
            return False

        if str(self.init_data["status"]) == "creditmemo":
            if not self.control_creditmemo():
                return False
        qsatype.debug(u"+++++++++++++++++++++++++++++++++++++++ 2")

        codigo = "WDV2" + qsatype.FactoriaModulos.get(
            "flfactppal").iface.cerosIzquierda(str(self.init_data["rma_id"]),
                                               8)
        qsatype.debug(u"+++++++++++++++++++++++++++++++++++++++ 3")

        now = str(qsatype.Date())
        self.start_date = now[:10]
        self.start_time = now[-(8):]

        if self.init_data[
                "status"] != "Complete" or "items_requested" in self.init_data:
            qsatype.debug(u"+++++++++++++++++++++++++++++++++++++++ 1")

            idComanda = qsatype.FLUtil.sqlSelect(
                "tpv_comandas", "idtpv_comanda",
                "codigo = '" + str(codigo) + "'")
            if idComanda:
                return False
            qsatype.debug(u"+++++++++++++++++++++++++++++++++++++++ 5")

            tasaconv = 1
            divisa = str(self.init_data["currency"])

            if divisa:
                if divisa != "None" and divisa != "EUR" and divisa != "CLP":
                    tasaconv = qsatype.FLUtil.quickSqlSelect(
                        "divisas", "tasaconv",
                        "coddivisa = '{}'".format(divisa))
                    if not tasaconv:
                        tasaconv = 1

            self.init_data["tasaconv"] = tasaconv

            self.crear_cabecera_comanda_devolucionweb(codigo)
            qsatype.debug(u"+++++++++++++++++++++++++++++++++++++++ 6")

            if "lines" not in self.data["children"]:
                self.data["children"]["lines"] = []
            qsatype.debug(u"+++++++++++++++++++++++++++++++++++++++ 7")

            if "payments" not in self.data["children"]:
                self.data["children"]["payments"] = []
            qsatype.debug(u"+++++++++++++++++++++++++++++++++++++++ 8")

            if "items_refunded" not in self.init_data:
                raise NameError(
                    "Error. No viene el nodo items_refunded en el JSON")
            qsatype.debug(u"+++++++++++++++++++++++++++++++++++++++ 9")

            iva = 0
            qsatype.debug(u"+++++++++++++++++++++++++++++++++++++++ 10")

            for line in self.init_data["items_refunded"]:
                line.update({
                    "codcomanda": codigo,
                    "tipo_linea": "refounded",
                    "tasaconv": tasaconv
                })

                if "codtiendaentrega" in self.init_data:
                    if str(self.init_data["codtiendaentrega"]) != "AWEB":
                        line.update({
                            "codtiendaentrega":
                            self.init_data["codtiendaentrega"]
                        })

                line_data = Mg2RefoundLineSerializer().serialize(line)
                self.data["children"]["lines"].append(line_data)
                iva = line["tax_percent"]

            qsatype.debug(u"+++++++++++++++++++++++++++++++++++++++ 11")
            if "items_requested" in self.init_data:
                for linea in self.init_data["items_requested"]:
                    linea.update({
                        "codcomanda": codigo,
                        "tipo_linea": "requested",
                        "tasaconv": tasaconv
                    })
                    line_data = Mg2RefoundLineSerializer().serialize(linea)
                    self.data["children"]["lines"].append(line_data)
            qsatype.debug(u"+++++++++++++++++++++++++++++++++++++++ 12")

            self.crear_registros_descuentos(iva)
            qsatype.debug(u"+++++++++++++++++++++++++++++++++++++++ 13")
            self.crear_registros_puntos(iva)
            qsatype.debug(u"+++++++++++++++++++++++++++++++++++++++ 14")
            self.crear_registros_vales(iva)
            qsatype.debug(u"+++++++++++++++++++++++++++++++++++++++ 15")
            self.crear_registros_gastosenvio(iva)
            qsatype.debug(u"+++++++++++++++++++++++++++++++++++++++ 16")

            self.data["children"]["cashcount"] = False
            self.data["children"]["creditmemo"] = False
            if str(self.init_data["status"]) == "creditmemo":
                self.data["children"]["creditmemo"] = True
            qsatype.debug(u"+++++++++++++++++++++++++++++++++++++++ 17")
        else:

            tasaconv = 1
            divisa = str(self.init_data["currency"])
            if divisa:
                if divisa != "None" and divisa != "EUR" and divisa != "CLP":
                    tasaconv = qsatype.FLUtil.quickSqlSelect(
                        "divisas", "tasaconv",
                        "coddivisa = '{}'".format(divisa))
                    if not tasaconv:
                        tasaconv = 1

            self.init_data["tasaconv"] = tasaconv

            if "lines" not in self.data["children"]:
                self.data["children"]["lines"] = []

            if "payments" not in self.data["children"]:
                self.data["children"]["payments"] = []

            idComanda = qsatype.FLUtil.sqlSelect(
                "tpv_comandas", "idtpv_comanda",
                "codigo = '" + str(codigo) + "'")
            if not idComanda:
                return False

        if self.init_data[
                "status"] == "Complete" or "items_requested" in self.init_data or self.init_data[
                    "status"] == "creditmemo":
            self.cerrar_devolucionweb(codigo)

        if self.init_data[
                "status"] != "Complete" or "items_requested" in self.init_data:
            for linea in self.init_data["items_refunded"]:
                linea.update({"codcomanda": codigo})
                if not self.crear_motivos_devolucion(linea):
                    return False
                if not self.crear_registros_ecommerce():
                    return False
        qsatype.debug(u"+++++++++++++++++++++++++++++++++++++++ OK")

        return True