Hi,
Im trying to make a groovy to groupby the xml by hotel and date. Or if there's another way to do it?
This is the xml that im receiving.
<?xml version='1.0' encoding='UTF-8'?>
<Root>
<Element>
<LSDiarioCaja>
<Hotel>H16</Hotel> ***THIS IS THE HOTEL TO GROUP BY***
<Caja></Caja>
<Fecha>2020-05-23T00:00:00</Fecha> ***AND THE DATE TO GROUP BY***
<Empresa></Empresa>
<Contabilizado>false</Contabilizado>
<Lineas>2</Lineas>
<LSMovimientoCaja>
<Hotel></Hotel>
<Caja></Caja>
<Fecha>2020-05-23T00:00:00</Fecha>
<ClaveMovimiento></ClaveMovimiento>
<FechaIngreso>1753-01-01T00:00:00</FechaIngreso>
<TipoCobro></TipoCobro>
<Concepto> </Concepto>
<Descripcion> </Descripcion>
<Cantidad>1.0</Cantidad>
<Importe>600</Importe>
<Divisa>EUR</Divisa>
<TipoCambio>1.00000</TipoCambio>
<TipoMovimiento>0</TipoMovimiento>
<EmpresaDestino></EmpresaDestino>
<Recibo></Recibo>
<Factura></Factura>
<AplicadoEnFactura></AplicadoEnFactura>
<AnticipoOriginal></AnticipoOriginal>
<Reserva></Reserva>
<LineaReserva>0</LineaReserva>
<ImporteACobrarDF>0.000</ImporteACobrarDF>
<Contabilizado>false</Contabilizado>
<LSComisionMovimientoCaja />
</LSMovimientoCaja>
<LSMovimientoCaja>
<Hotel></Hotel>
<Caja></Caja>
<Fecha>2020-05-23T00:00:00</Fecha>
<ClaveMovimiento></ClaveMovimiento>
<FechaIngreso>1753-01-01T00:00:00</FechaIngreso>
<TipoCobro></TipoCobro>
<Concepto> </Concepto>
<Descripcion> </Descripcion>
<Cantidad>1.0</Cantidad>
<Importe>600</Importe>
<Divisa>EUR</Divisa>
<TipoCambio>1.00000</TipoCambio>
<TipoMovimiento>0</TipoMovimiento>
<EmpresaDestino></EmpresaDestino>
<Recibo></Recibo>
<Factura></Factura>
<AplicadoEnFactura></AplicadoEnFactura>
<AnticipoOriginal></AnticipoOriginal>
<Reserva></Reserva>
<LineaReserva>0</LineaReserva>
<ImporteACobrarDF>0.000</ImporteACobrarDF>
<Contabilizado>false</Contabilizado>
<LSComisionMovimientoCaja />
</LSMovimientoCaja>
</LSDiarioCaja>
<LSDiarioCaja>
<Hotel>H16</Hotel>
<Caja></Caja>
<Fecha>2020-05-23T00:00:00</Fecha>
<Empresa></Empresa>
<Contabilizado>false</Contabilizado>
<Lineas>2</Lineas>
<LSMovimientoCaja>
<Hotel></Hotel>
<Caja></Caja>
<Fecha>2020-05-23T00:00:00</Fecha>
<ClaveMovimiento></ClaveMovimiento>
<FechaIngreso>1753-01-01T00:00:00</FechaIngreso>
<TipoCobro></TipoCobro>
<Concepto> </Concepto>
<Descripcion> </Descripcion>
<Cantidad>1.0</Cantidad>
<Importe>600</Importe>
<Divisa>EUR</Divisa>
<TipoCambio>1.000000</TipoCambio>
<TipoMovimiento>0</TipoMovimiento>
<EmpresaDestino></EmpresaDestino>
<Recibo></Recibo>
<Factura></Factura>
<AplicadoEnFactura></AplicadoEnFactura>
<AnticipoOriginal></AnticipoOriginal>
<Reserva></Reserva>
<LineaReserva>0</LineaReserva>
<ImporteACobrarDF>0.000</ImporteACobrarDF>
<Contabilizado>false</Contabilizado>
<LSComisionMovimientoCaja />
</LSMovimientoCaja>
<LSMovimientoCaja>
<Hotel></Hotel>
<Caja></Caja>
<Fecha>2020-05-23T00:00:00</Fecha>
<ClaveMovimiento></ClaveMovimiento>
<FechaIngreso>1753-01-01T00:00:00</FechaIngreso>
<TipoCobro></TipoCobro>
<Concepto> </Concepto>
<Descripcion> </Descripcion>
<Cantidad>1.0</Cantidad>
<Importe>600</Importe>
<Divisa>EUR</Divisa>
<TipoCambio>1.000000</TipoCambio>
<TipoMovimiento>0</TipoMovimiento>
<EmpresaDestino></EmpresaDestino>
<Recibo></Recibo>
<Factura></Factura>
<AplicadoEnFactura></AplicadoEnFactura>
<AnticipoOriginal></AnticipoOriginal>
<Reserva></Reserva>
<LineaReserva>0</LineaReserva>
<ImporteACobrarDF>0.000</ImporteACobrarDF>
<Contabilizado>false</Contabilizado>
<LSComisionMovimientoCaja />
</LSMovimientoCaja>
</LSDiarioCaja>
</Element>
</Root>
And this is the code im trying to do
import com.sap.gateway.ip.core.customdev.util.Message;
import java.util.HashMap;
import java.io.InputStream;
import groovy.xml.MarkupBuilder;
import java.util.Properties;
def Message processData(Message message) {
def body = message.getBody(java.lang.String)
def xml = new XmlSlurper().parseText(body)
def writer = new StringWriter();
def builder = new MarkupBuilder(writer);
def group = xml.Element.children().groupBy({it.Hotel.toString()},{it.Fecha.toString()});
def names = group.collect{entry -> entry.key}
names.each{ nombre ->
builder.hotel {
name(nombre)
def fechas = group[nombre];
fechas.each { porFecha ->
def datesDef = porFecha.collect{entry -> entry.key}
def data = fechas[datesDef[0]]
dates {
date (datesDef[0])
data.each { dataInfo ->
LSDiarioCaja{
Hotel(dataInfo.Hotel)
Caja(dataInfo.Caja)
Fecha(dataInfo.Fecha)
Empresa(dataInfo.Empresa)
Contabilizado(dataInfo.Contabilizado)
Lineas(dataInfo.Lineas)
data.LSMovimientoCaja.each { movimiento ->
LSMovimientoCaja{
Hotel(movimiento.Hotel)
Caja(movimiento.Caja)
Fecha(movimiento.Fecha)
ClaveMovimiento(movimiento.ClaveMovimiento)
FechaIngreso(movimiento.FechaIngreso)
TipoCobro(movimiento.TipoCobro)
Concepto(movimiento.Concepto)
Descripcion(movimiento.Descripcion)
Cantidad(movimiento.Cantidad)
Importe(movimiento.Importe)
Divisa(movimiento.Divisa)
TipoCambio(movimiento.TipoCambio)
TipoMovimiento(movimiento.TipoMovimiento)
EmpresaDestino(movimiento.EmpresaDestino)
Recibo(movimiento.Recibo)
Factura(movimiento.Factura)
AplicadoEnFactura(movimiento.AplicadoEnFactura)
AnticipoOriginal(movimiento.AnticipoOriginal)
Reserva(movimiento.Reserva)
LineaReserva(movimiento.LineaReserva)
ImporteACobrarDF(movimiento.ImporteACobrarDF)
Contabilizado(movimiento.Contabilizado)
LSComisionMovimientoCaja(movimiento.LSComisionMovimientoCaja)
}
}
}
}
}
}
}
}
message.setBody(writer.toString());
return message
}
And this the xml I need to get
<?xml version='1.0' encoding='UTF-8'?>
<Root>
<Element>
<LSDiarioCaja>
<Hotel>H16</Hotel>
<Caja></Caja>
<Fecha>2020-05-23T00:00:00</Fecha>
<Empresa></Empresa>
<Contabilizado>false</Contabilizado>
<Lineas>2</Lineas>
<LSMovimientoCaja>
<Hotel></Hotel>
<Caja></Caja>
<Fecha>2020-05-23T00:00:00</Fecha>
<ClaveMovimiento></ClaveMovimiento>
<FechaIngreso>1753-01-01T00:00:00</FechaIngreso>
<TipoCobro></TipoCobro>
<Concepto> </Concepto>
<Descripcion> </Descripcion>
<Cantidad>1.0</Cantidad>
<Importe>600</Importe>
<Divisa>EUR</Divisa>
<TipoCambio>1.00000</TipoCambio>
<TipoMovimiento>0</TipoMovimiento>
<EmpresaDestino></EmpresaDestino>
<Recibo></Recibo>
<Factura></Factura>
<AplicadoEnFactura></AplicadoEnFactura>
<AnticipoOriginal></AnticipoOriginal>
<Reserva></Reserva>
<LineaReserva>0</LineaReserva>
<ImporteACobrarDF>0.000</ImporteACobrarDF>
<Contabilizado>false</Contabilizado>
<LSComisionMovimientoCaja />
</LSMovimientoCaja>
<LSMovimientoCaja>
<Hotel></Hotel>
<Caja></Caja>
<Fecha>2020-05-23T00:00:00</Fecha>
<ClaveMovimiento></ClaveMovimiento>
<FechaIngreso>1753-01-01T00:00:00</FechaIngreso>
<TipoCobro></TipoCobro>
<Concepto> </Concepto>
<Descripcion> </Descripcion>
<Cantidad>1.0</Cantidad>
<Importe>600</Importe>
<Divisa>EUR</Divisa>
<TipoCambio>1.00000</TipoCambio>
<TipoMovimiento>0</TipoMovimiento>
<EmpresaDestino></EmpresaDestino>
<Recibo></Recibo>
<Factura></Factura>
<AplicadoEnFactura></AplicadoEnFactura>
<AnticipoOriginal></AnticipoOriginal>
<Reserva></Reserva>
<LineaReserva>0</LineaReserva>
<ImporteACobrarDF>0.000</ImporteACobrarDF>
<Contabilizado>false</Contabilizado>
<LSComisionMovimientoCaja />
</LSMovimientoCaja>
<LSMovimientoCaja>
<Hotel></Hotel>
<Caja></Caja>
<Fecha>2020-05-23T00:00:00</Fecha>
<ClaveMovimiento></ClaveMovimiento>
<FechaIngreso>1753-01-01T00:00:00</FechaIngreso>
<TipoCobro></TipoCobro>
<Concepto> </Concepto>
<Descripcion> </Descripcion>
<Cantidad>1.0</Cantidad>
<Importe>600</Importe>
<Divisa>EUR</Divisa>
<TipoCambio>1.000000</TipoCambio>
<TipoMovimiento>0</TipoMovimiento>
<EmpresaDestino></EmpresaDestino>
<Recibo></Recibo>
<Factura></Factura>
<AplicadoEnFactura></AplicadoEnFactura>
<AnticipoOriginal></AnticipoOriginal>
<Reserva></Reserva>
<LineaReserva>0</LineaReserva>
<ImporteACobrarDF>0.000</ImporteACobrarDF>
<Contabilizado>false</Contabilizado>
<LSComisionMovimientoCaja />
</LSMovimientoCaja>
<LSMovimientoCaja>
<Hotel></Hotel>
<Caja></Caja>
<Fecha>2020-05-23T00:00:00</Fecha>
<ClaveMovimiento></ClaveMovimiento>
<FechaIngreso>1753-01-01T00:00:00</FechaIngreso>
<TipoCobro></TipoCobro>
<Concepto> </Concepto>
<Descripcion> </Descripcion>
<Cantidad>1.0</Cantidad>
<Importe>600</Importe>
<Divisa>EUR</Divisa>
<TipoCambio>1.000000</TipoCambio>
<TipoMovimiento>0</TipoMovimiento>
<EmpresaDestino></EmpresaDestino>
<Recibo></Recibo>
<Factura></Factura>
<AplicadoEnFactura></AplicadoEnFactura>
<AnticipoOriginal></AnticipoOriginal>
<Reserva></Reserva>
<LineaReserva>0</LineaReserva>
<ImporteACobrarDF>0.000</ImporteACobrarDF>
<Contabilizado>false</Contabilizado>
<LSComisionMovimientoCaja />
</LSMovimientoCaja>
</LSDiarioCaja>
</Element>
</Root>
Thanks for your help!