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
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
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))
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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 }
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
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
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
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
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
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
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
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": {}}
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
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
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
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
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