Skip to Content
0
Jun 11, 2020 at 07:58 AM

SAP HCI groovy groupby hotel, date

159 Views Last edit Jun 11, 2020 at 07:59 AM 2 rev

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!