def sanhigia_pedidos_visibility(self, model, oParam): visible = cacheController.getSessionVariable(ustr(u"visibeLRS_", qsatype.FLUtil.nameUser())) if not visible: cacheController.setSessionVariable(ustr(u"visibeLRS_", qsatype.FLUtil.nameUser()), True) elif visible: cacheController.setSessionVariable(ustr(u"visibeLRS_", qsatype.FLUtil.nameUser()), False) return True
def sanhigia_pedidos_checkPDAButton(self, cursor): arrProveedores = cacheController.getSessionVariable(ustr(u"grupoPedidos_", qsatype.FLUtil.nameUser())).split(u",") for p in arrProveedores: np = qsatype.FLUtil.sqlSelect(u"pedidosprov", u"pda", ustr(u"idpedido = '", str(p), u"'")) if np != "Preparado": return "disabled" return "enabled"
def vbarba_cabrera_actualizarDisponible(self, model): fincaUsr = cacheController.getSessionVariable(ustr(u"fincaUsr_", qsatype.FLUtil.nameUser())) q = qsatype.FLSqlQuery() q.setTablesList(u"vb_fincas") q.setSelect(u"codproveedor") q.setFrom(u"vb_fincas") q.setWhere(ustr(u"codfinca = ('", fincaUsr, u"')")) if q.exec_(): if q.next(): codprov = q.value(0) print("____", codprov) if not codprov: response = {} response['status'] = 1 response['msg'] = "No se encuentra proveedor asociado" return response else: return False else: return False cursor = qsatype.FLSqlCursor("articulosprov") cursor.select(ustr(u"codproveedor = ('", codprov, u"') AND referencia = '", model.referencia, "'")) cursor.setModeAccess(cursor.Edit) cursor.refreshBuffer() if cursor.first(): if cursor.valueBuffer("disponible"): cursor.setValueBuffer("disponible", False) else: cursor.setValueBuffer("disponible", True) else: q = qsatype.FLSqlQuery() q.setTablesList(u"ariculos") q.setSelect(u"pvp, codbarras") q.setFrom(u"articulos") q.setWhere(ustr(u"referencia = ('", model.referencia, u"')")) if q.exec_(): if q.next(): pvpart = q.value(0) codbarrasart = q.value(1) else: return False else: return False cursor = qsatype.FLSqlCursor("articulosprov") cursor.setModeAccess(cursor.Insert) cursor.refreshBuffer() cursor.setValueBuffer("referencia", model.referencia) cursor.setActivatedBufferChanged(True) cursor.setValueBuffer("disponible", True) cursor.setValueBuffer("codproveedor", codprov) cursor.setValueBuffer("coste", pvpart) cursor.setValueBuffer("codbarras", codbarrasart) cursor.setActivatedBufferChanged(False) if not cursor.commitBuffer(): return False return True
def diagnosis_get_estado(self): estado = cacheController.getSessionVariable("estado_gruposprocesos", None) if not estado: self.iface.set_estado("procesos") estado = "procesos" return estado
def diagnosis_get_estado_master(self): estado = cacheController.getSessionVariable("estado_master_clientessincro", None) if not estado: self.iface.set_estado_master("clientes") estado = "clientes" return estado
def vbarba_cabrera_initValidation(self, name, data): response = True if name == 'articulosStock': fincaUsr = cacheController.getSessionVariable(ustr(u"fincaUsr_", qsatype.FLUtil.nameUser())) if not fincaUsr: return False return response return response
def vbarba_cabrera_iniciaValoresLabel(self, model=None, template=None, cursor=None, data=None): labels = {} labels[u"fincaActual"] = cacheController.getSessionVariable( ustr(u"fincaUsr_", qsatype.FLUtil.nameUser())) return labels
def vbarba_cabrera_getFilters(self, model, name, template=None): if name == 'almacenesUsuario': fincaUsr = cacheController.getSessionVariable(ustr(u"fincaUsr_", qsatype.FLUtil.nameUser())) aAlmacenes = [] for almacen in almacenes.objects.filter(codfinca__exact=fincaUsr): aAlmacenes.append(almacen.codalmacen) return [{'criterio': 'codalmacen__in', 'valor': aAlmacenes}] return []
def gesttare_get_estado(self): estado = cacheController.getSessionVariable("estado_timetracking", None) if not estado: self.iface.set_estado("noagrupado") estado = "noagrupado" return estado
def gesttare_get_estado(self): estado = cacheController.getSessionVariable("estado_controlhorario", None) if not estado: self.iface.set_estado("diario") estado = "diario" return estado
def vbarba_cabrera_initValidation(self, model, name, data): response = True if name == 'inventariosAlmacen': fincaUsr = cacheController.getSessionVariable( ustr(u"fincaUsr_", qsatype.FLUtil.nameUser())) if not fincaUsr: return False return response return response
def sanhigia_pedidos_getFilters(self, model, name, template=None): filters = [] if name == 'soloAbiertas': visible = cacheController.getSessionVariable(ustr(u"visibeLRS_", qsatype.FLUtil.nameUser())) if visible is None: cacheController.setSessionVariable(ustr(u"visibeLRS_", qsatype.FLUtil.nameUser()), False) if visible: return [{'criterio': 'sh_estado__in', 'valor': ["Abierta", "Cerrada"]}] else: return [{'criterio': 'sh_estado__exact', 'valor': "Abierta"}] return filters
def YB_exception_handler(exc, context): # print("________________YBEXCEPTIONHANDLER________________") errorMsg = exc.__str__() or None try: milog.info("Excepcion capturada de alto nivel: %s", errorMsg) # if settings.DEBUG: # milog.exception(exc) except Exception: pass miresp = {} code = status.HTTP_400_BAD_REQUEST # tratamiento de errores de validacion if isinstance(exc, ValidationError): miresp['tipo'] = 3 miresp['msg'] = [ _('Error en los datos recibidos. Revise mensajes adicionales.') ] miresp['data'] = exc.detail elif isinstance(exc, PermissionDenied) or isinstance( exc, NotAuthenticated) or isinstance(exc, AuthenticationFailed): return HttpResponseRedirect("/") # Cuando falle el login por no tener permisos o no estar autenficiado redirigira a / # raise djPermissionDenied else: cacheError = cacheController.getSessionVariable("ErrorHandler") if cacheError: response = exception_handler(exc, context) print(context['view']._prefix) errorMsg = YB_error_handler(cacheError, exc) cacheController.dropSessionVariable("ErrorHandler") else: # Comportamiento por defecto response = exception_handler(exc, context) if not (response is None): # Pasamos a nuestro estandar miresp['tipo'] = 1 miresp['msg'] = [response.data.get('detail', None)] response.data = miresp return response else: # Tratamiento de excepciones propias y no controladas por API if isinstance(exc, excepcionAplicacion): if isinstance(exc, excepcionAplicacionRollBack): # set_rollback() pass miresp['tipo'] = 2 miresp['msg'] = [force_text(errorMsg)] else: # set_rollback() miresp['tipo'] = 4 miresp['msg'] = [force_text(errorMsg)] return Response(data=miresp, status=code)
def diagnosis_field_activas(self, model): try: if self.get_estado() == "activity": activity = self.iface.get_activity(model.cliente) cacheController.setSessionVariable("activity", activity) else: cacheController.setSessionVariable("activity", {"active": {}, "reserved": {}, "scheduled": {}}) return {} return cacheController.getSessionVariable("activity")["active"] except Exception: return {}
def vbarba_cabrera_getFilters(self, model, name, template): if name == 'fincaUsuario': fincaUsr = cacheController.getSessionVariable( ustr(u"fincaUsr_", qsatype.FLUtil.nameUser())) aAlmacenes = [] curAlmacenes = qsatype.FLSqlCursor("almacenes") curAlmacenes.select("codfinca = '" + str(fincaUsr) + "'") while curAlmacenes.next(): curAlmacenes.setModeAccess(curAlmacenes.Browse) curAlmacenes.refreshBuffer() aAlmacenes.append(curAlmacenes.valueBuffer("codalmacen")) return [{'criterio': 'codalmacen__in', 'valor': aAlmacenes}] return []
def sanhigia_pedidos_queryGrid_grupoPedidosCli(self, model): preparacion = cacheController.getSessionVariable( ustr(u"grupoPedidoscli_", qsatype.FLUtil.nameUser())) query = {} query[ "tablesList"] = "lineaspedidoscli, ubicacionesarticulo, pedidoscli, articulosprov" query[ "select"] = "lineaspedidoscli.idlinea, lineaspedidoscli.idpedido, lineaspedidoscli.shcantalbaran, lineaspedidoscli.cantidad, lineaspedidoscli.descripcion, lineaspedidoscli.referencia, lineaspedidoscli.totalenalbaran, lineaspedidoscli.cerradapda, stocks.disponible, stocks.cantidad, ubicacionesarticulo.codubicacion, pedidoscli.codigo, articulosprov.refproveedor, lineaspedidoscli.cantidad - lineaspedidoscli.totalenalbaran, lineaspedidoscli.codpreparaciondepedido, pedidoscli.pda" query[ "from"] = "lineaspedidoscli INNER JOIN pedidoscli ON lineaspedidoscli.idpedido = pedidoscli.idpedido INNER JOIN ubicacionesarticulo ON lineaspedidoscli.referencia = ubicacionesarticulo.referencia INNER JOIN stocks on lineaspedidoscli.referencia = stocks.referencia AND pedidoscli.codalmacen = stocks.codalmacen LEFT OUTER JOIN articulosprov ON (lineaspedidoscli.referencia = articulosprov.referencia AND articulosprov.pordefecto)" query[ "where"] = "lineaspedidoscli.codpreparaciondepedido = '" + preparacion + "' AND lineaspedidoscli.sh_preparacion = 'En Curso' AND ubicacionesarticulo.pordefecto" # query["where"] = "lineaspedidoscli.codpreparaciondepedido = '" + preparacion + "'" query[ "orderby"] = "ubicacionesarticulo.codubicacion, lineaspedidoscli.referencia, lineaspedidoscli.idlinea" return query
def sanhigia_pedidos_grupopedidosListoPDA(self, model, oParam): pedidos = cacheController.getSessionVariable(ustr(u"grupoPedidos_", qsatype.FLUtil.nameUser())) pedidos = pedidos.split(u",") curPedido = qsatype.FLSqlCursor(u"pedidosprov") codgrupo = qsatype.FLUtil.sqlSelect(u"pedidosprov", u"max(sh_codgrupopedido)", "1=1") or 0 for p in pedidos: curPedido.select("idpedido = " + str(p)) if not curPedido.first(): raise ValueError("Error no se encuentra el pedido ") return False curPedido.setModeAccess(curPedido.Edit) curPedido.refreshBuffer() curPedido.setValueBuffer("pda", 'Listo PDA') curPedido.setValueBuffer("sh_codgrupopedido", codgrupo + 1) if not curPedido.commitBuffer(): return False return True
def sanhigia_pedidos_procesaCodBarrasGrupo(self, model, oParam): # print("Procesa codbarrasgrupo") arridPedido = "(" pedidos = cacheController.getSessionVariable(ustr(u"grupoPedidos_", qsatype.FLUtil.nameUser())) oParam["selecteds"] = pedidos pedidos = pedidos.split(u",") for p in pedidos: arridPedido = arridPedido + "'" + str(p) + "'," arridPedido = arridPedido[:-1] arridPedido = arridPedido + ")" # pedido = pedidosprov.objects.filter(idpedido__exact=str(pedidos[0])) pedido = {} pedido["idpedido"] = pedidos[0] pedido["codalmacen"] = qsatype.FLUtil.sqlSelect("pedidosprov", "codalmacen", "idpedido = {}".format(pedido["idpedido"])) oParam['grupoPedidos'] = arridPedido # return pedidosprov_def.form.iface.procesaCodBarras(pedido[0], oParam) return pedidosprov_def.form.iface.procesaCodBarras(pedido, oParam)
def vbarba_cabrera_fieldartdisponible(self, model): fincaUsr = cacheController.getSessionVariable(ustr(u"fincaUsr_", qsatype.FLUtil.nameUser())) q = qsatype.FLSqlQuery() q.setTablesList(u"vb_fincas, articulosprov") q.setSelect(u"a.disponible") q.setFrom(u"vb_fincas f INNER JOIN articulosprov a ON f.codproveedor = a.codproveedor") q.setWhere(ustr(u"f.codfinca = ('", fincaUsr, u"') AND referencia = '", model.referencia, "'")) if q.exec_(): if q.size() == 0: return 'No' elif q.next(): if q.value(0): return 'Sí' else: return 'No' else: print("error raro") return 'No'
def vbarba_cabrera_almacenesUsuario(self, model, oParam): data = [] print(oParam) fincaUsr = cacheController.getSessionVariable( ustr(u"fincaUsr_", qsatype.FLUtil.nameUser())) q = qsatype.FLSqlQuery() q.setTablesList(u"almacenes") q.setSelect(u"codalmacen, nombre") q.setFrom(u"almacenes") q.setWhere(u"(UPPER(nombre) LIKE '%" + oParam["val"].upper() + "%' or UPPER(codalmacen) LIKE '%" + oParam["val"].upper() + "%') AND codfinca = '" + fincaUsr + "'") if not q.exec_(): print("Error inesperado") return [] if q.size() > 200: return [] while q.next(): descripcion = str(q.value(0)) data.append({"codalmacen": descripcion, "nombre": str(q.value(1))}) return data
def save(self): if self.skip_record: return self.dump_to_cursor() pk_name = self.cursor._model._meta.pk.name if not self.cursor.commitBuffer(): error = cacheController.getSessionVariable("ErrorHandler") raise NameError( "No se pudo guardar el registro {} de la tabla {}. {}".format( self.data[pk_name], self.table, error)) for child in self.children: if child.skip_record: continue child.get_parent_data(self.cursor) child.save()
def sanhigia_pedidos_getRerenciasInventario(self, model, oParam, cursor): data = [] codinventario = cacheController.getSessionVariable( ustr(u"inventarios_", qsatype.FLUtil.nameUser())) q = qsatype.FLSqlQuery() q.setTablesList(u"articulos, lineasregstocks") q.setSelect(u"distinct(a.referencia),a.descripcion") q.setFrom( u"articulos a INNER JOIN lineasregstocks l ON a.referencia = l.referencia" ) q.setWhere( u"l.codinventario = '{0}' AND (UPPER(a.referencia) LIKE '%{1}%' OR UPPER(a.descripcion) LIKE '%{1}%')" .format(codinventario, oParam['val'].upper())) if not q.exec_(): # print("Error inesperado") return [] if q.size() > 200: return [] while q.next(): descripcion = str(q.value(0)) + " " + q.value(1) data.append({"descripcion": descripcion, "referencia": q.value(0)}) return data
def diagnosis_field_programadas(self, model): try: return cacheController.getSessionVariable("activity")["scheduled"] except Exception: return {}
def diagnosis_field_reservadas(self, model): try: return cacheController.getSessionVariable("activity")["reserved"] except Exception: return {}
def firma_albaranescli_comprobarPuesto(self, cursor): puesto = cacheController.getSessionVariable(ustr(u"puestodefirma_", qsatype.FLUtil.nameUser())) print("firma_albaranescli_comprobarPuesto: ", puesto) if puesto: return False return True
def vbarba_cabrera_iniciaValoresLabel(self, model=None, template=None, cursor=None, data=None): labels = {} fincaUsr = cacheController.getSessionVariable(ustr(u"fincaUsr_", qsatype.FLUtil.nameUser())) if template == 'stock': almacenes = [] query = qsatype.FLSqlQuery() query.setTablesList(u"almacenes") query.setSelect(u"codalmacen") query.setFrom(u"almacenes") query.setWhere(ustr(u"codfinca = '", fincaUsr, u"'")) if query.exec_(): while query.next(): almacenes.append(query.value("codalmacen")) stocksAlmacenes = "" for alma in almacenes: stocksAlmacenes += alma + ":" q = qsatype.FLSqlQuery() q.setTablesList(u"stocks") q.setSelect(u"sum(cantidad)") q.setFrom(u"stocks") q.setWhere(ustr(u"codalmacen IN ('", alma, u"') AND referencia = '", str(cursor.valueBuffer("referencia")), "'")) if q.exec_(): if q.next(): if(q.value(0)): stocksAlmacenes += " " + str(int(q.value(0))) + "\n" almaStr = "', '".join(almacenes) totalStockFinca = "" q = qsatype.FLSqlQuery() q.setTablesList(u"stocks") q.setSelect(u"sum(cantidad)") q.setFrom(u"stocks") q.setWhere(ustr(u"codalmacen IN ('", almaStr, u"') AND referencia = '", str(cursor.valueBuffer("referencia")), "'")) if q.exec_(): if q.next(): totalStockFinca = q.value(0) q = qsatype.FLSqlQuery() q.setTablesList(u"vb_fincas, articulosprov") q.setSelect(u"a.disponible") q.setFrom(u"vb_fincas f INNER JOIN articulosprov a ON f.codproveedor = a.codproveedor") q.setWhere(ustr(u"f.codfinca = ('", fincaUsr, u"') AND referencia = '", str(cursor.valueBuffer("referencia")), "'")) disponible = 'No' if q.exec_(): if q.size() == 0: disponible = 'No' elif q.next(): if q.value(0): disponible = 'Sí' else: disponible = 'No' else: disponible = 'No' labels[u"totalStockFinca"] = totalStockFinca labels[u"stocksAlmacenes"] = stocksAlmacenes labels[u"disponibleProv"] = disponible if template == "stock" or template == "formRecord": tienefoto = 'No' if cursor.valueBuffer("tienefoto"): tienefoto = 'Sí' labels[u"tieneFoto"] = tienefoto labels[u"fincaActual"] = fincaUsr return labels
def sanhigia_pedidos_getFilters(self, model, name, template=None): filters = [] if name == 'grupopedidos': pedidos = cacheController.getSessionVariable(ustr(u"grupoPedidos_", qsatype.FLUtil.nameUser())) return [{'criterio': 'idpedido__in', 'valor': pedidos.split(u",")}] return filters
def sanhigia_pedidos_procesaCodBarrasGrupo(self, model, oParam): cantidad = 1 if "preparacion" not in oParam: preparacion = cacheController.getSessionVariable( ustr(u"grupoPedidoscli_", qsatype.FLUtil.nameUser())) oParam['preparacion'] = preparacion if "idlinea" in oParam and "codlote" in oParam: idPedido = qsatype.FLUtil.sqlSelect( u"lineaspedidoscli", u"idpedido", u"idlinea = {}".format(oParam["idlinea"])) oParam["codalmacen"] = qsatype.FLUtil.sqlSelect( u"pedidoscli", u"codalmacen", u"idpedido = {}".format(idPedido)) # codLote = qsatype.FLUtil.sqlSelect(u"lotes", u"codlote", ustr(u"codigo = '", oParam['codlote'], u"' AND referencia = '", oParam['referencia'], "' AND enalmacen > 0 ")) codLote = oParam["codlote"] val = pedidoscli.form.iface.insertarMovilote( oParam['idlinea'], oParam['referencia'], cantidad, oParam["codalmacen"], codLote) if val['status'] == 0: return True return val else: datos = flfactalma_def.iface.datosLecturaCodBarras( oParam['codbarras']) codBarras = datos['codbarras'] # Ver si existe alguna referencia para ese codigo de barras referencia = qsatype.FLUtil.sqlSelect( u"articulosprov", u"referencia", u"codbarrasprov = '{}' AND referencia IN (select referencia from lineaspedidoscli where codpreparaciondepedido = '{}')" .format(codBarras, oParam['preparacion'])) if referencia: oParam["referencia"] = referencia oParam["idlinea"] = pedidoscli.form.iface.dameIdLinea(oParam) if oParam["idlinea"] == -1: resul = {} resul['status'] = -1 resul[ 'msg'] = "El estado de preparación del artículo con código de barras {} no está 'En curso'".format( codBarras) return resul idPedido = qsatype.FLUtil.sqlSelect( u"lineaspedidoscli", u"idpedido", u"idlinea = {}".format(oParam["idlinea"])) oParam["codalmacen"] = qsatype.FLUtil.sqlSelect( u"pedidoscli", u"codalmacen", u"idpedido = {}".format(idPedido)) else: resul = {} resul['status'] = -1 resul[ 'msg'] = "No se encuentra artículo con código: " + codBarras return resul # Analizar si el articulo va por lotes y si es asi comprobar si tenemos lote o necesitamos pedir porLotes = qsatype.FLUtil.sqlSelect( u"articulos", u"porlotes", u"referencia = '{}'".format(referencia)) if not porLotes and "lote" in datos: datos['lote'] = None if not porLotes: # Actualizo línea shcantidad = qsatype.FLUtil.sqlSelect( u"lineaspedidoscli", u"shcantalbaran", u"idlinea = {}".format(oParam["idlinea"])) or 0 shcantidad = shcantidad + 1 if not qsatype.FLUtil.sqlUpdate( u"lineaspedidoscli", u"shcantalbaran", shcantidad, u"idlinea = {}".format(oParam["idlinea"])): resul['status'] = -3 resul['msg'] = "Error al actualizar línea del pedido" resul['param'] = idLinea return resul else: if "lote" in datos and datos["lote"]: codLote = qsatype.FLUtil.sqlSelect( u"lotes", u"codlote", u"codigo = '{}' AND referencia = '{}' AND enalmacen > 0 " .format(datos["lote"], oParam['referencia'])) # print("_____codlote3____", codLote) val = pedidoscli.form.iface.insertarMovilote( oParam['idlinea'], oParam['referencia'], cantidad, oParam["codalmacen"], codLote) if val['status'] == 0: return True return val else: # No tengo codlote hay que pedirlo val = pedidoscli.form.iface.analizaCodBarras( idPedido, oParam['codbarras'], cantidad, oParam["codalmacen"], oParam['idlinea']) return pedidoscli.form.iface.respuestaAnalizaCodBarras( None, oParam, val) return True