Josias Pérez
2018-02-01 03:57:51 UTC
Hola,
Tengo el siguiente método de table_query y las siguientes tablas:
class Gp:
name
class Reporte
fecha_inicio
fecha_fin
distrito
class ReporteLine
reporte many2one Reporte
gp many2one Gp
cantidad
Deseo encontrar los grupos que no generan reportes, es decir sean NULL o
cero. Si existe un registro en la clase ReporteLine se puede sumar (aunque
sea 0), pero si no existe un registro no sé como obtener el nombre del
grupo (Gp) que no está registrado en ReporteLine.
Tengo el siguiente table_query pero devuelve un valor de error al realizar
la consulta y devuelve el siguiente error
ProgrammingError: syntax error at or near ")"
Cualquier comentario será de mucha ayuda.
def table_query():
pool = Pool()
context = Transaction().context
Gp = pool.get('disc.gp')
gp = Gp.__table__()
Reporte = pool.get('disc.reporte')
reporte = Reporte.__table__()
ReporteLinea = pool.get('disc.reporte.linea')
reporte_linea = ReporteLinea.__table__()
where = Literal(True)
if Transaction().context.get('fecha_inicio'):
where &= reporte.fecha_inicio >=
Transaction().context['fecha_inicio']
if Transaction().context.get('fecha_fin'):
where &= reporte.fecha_fin <= Transaction().context['fecha_fin']
where &= gp.id == None
query1 = reporte.join(reporte_linea,
condition=reporte_linea.reporte == reporte.id).select(
Max(reporte_linea.id * 1000).as_('id'),
Max(reporte.create_uid).as_('create_uid'),
Max(reporte.create_date).as_('create_date'),
Max(reporte.write_uid).as_('write_uid'),
Max(reporte.write_date).as_('write_date'),
Max(reporte.distrito).as_('distrito'),
(reporte_linea.gp).as_('gp'),
Sum(reporte_linea.cantidad).as_('total'),
group_by=(reporte_linea.gp),
)
query2 = gp.join(query1,'LEFT').select(
Max(gp.id * 1001).as_('id'),
Max(gp.create_uid).as_('create_uid'),
Max(gp.create_date).as_('create_date'),
Max(gp.write_uid).as_('write_uid'),
Max(gp.write_date).as_('write_date'),
Max(query1.distrito).as_('distrito'),
(reporte_linea.gp).as_('gp'),
where = where,
group_by=(query1.gp),
)
Tengo el siguiente método de table_query y las siguientes tablas:
class Gp:
name
class Reporte
fecha_inicio
fecha_fin
distrito
class ReporteLine
reporte many2one Reporte
gp many2one Gp
cantidad
Deseo encontrar los grupos que no generan reportes, es decir sean NULL o
cero. Si existe un registro en la clase ReporteLine se puede sumar (aunque
sea 0), pero si no existe un registro no sé como obtener el nombre del
grupo (Gp) que no está registrado en ReporteLine.
Tengo el siguiente table_query pero devuelve un valor de error al realizar
la consulta y devuelve el siguiente error
ProgrammingError: syntax error at or near ")"
Cualquier comentario será de mucha ayuda.
def table_query():
pool = Pool()
context = Transaction().context
Gp = pool.get('disc.gp')
gp = Gp.__table__()
Reporte = pool.get('disc.reporte')
reporte = Reporte.__table__()
ReporteLinea = pool.get('disc.reporte.linea')
reporte_linea = ReporteLinea.__table__()
where = Literal(True)
if Transaction().context.get('fecha_inicio'):
where &= reporte.fecha_inicio >=
Transaction().context['fecha_inicio']
if Transaction().context.get('fecha_fin'):
where &= reporte.fecha_fin <= Transaction().context['fecha_fin']
where &= gp.id == None
query1 = reporte.join(reporte_linea,
condition=reporte_linea.reporte == reporte.id).select(
Max(reporte_linea.id * 1000).as_('id'),
Max(reporte.create_uid).as_('create_uid'),
Max(reporte.create_date).as_('create_date'),
Max(reporte.write_uid).as_('write_uid'),
Max(reporte.write_date).as_('write_date'),
Max(reporte.distrito).as_('distrito'),
(reporte_linea.gp).as_('gp'),
Sum(reporte_linea.cantidad).as_('total'),
group_by=(reporte_linea.gp),
)
query2 = gp.join(query1,'LEFT').select(
Max(gp.id * 1001).as_('id'),
Max(gp.create_uid).as_('create_uid'),
Max(gp.create_date).as_('create_date'),
Max(gp.write_uid).as_('write_uid'),
Max(gp.write_date).as_('write_date'),
Max(query1.distrito).as_('distrito'),
(reporte_linea.gp).as_('gp'),
where = where,
group_by=(query1.gp),
)