All Downloads are FREE. Search and download functionalities are using the official Maven repository.

io.github.carlosthe19916.webservices.managers.BillServiceManager Maven / Gradle / Ivy

package io.github.carlosthe19916.webservices.managers;

import io.github.carlosthe19916.webservices.exceptions.SUNATWebServiceException;
import io.github.carlosthe19916.webservices.managers.errorhandler.BillServiceErrorHandler;
import io.github.carlosthe19916.webservices.managers.errorhandler.BillServiceErrorHandlerManager;
import io.github.carlosthe19916.webservices.models.BillServiceResult;
import io.github.carlosthe19916.webservices.wrappers.BillServiceWrapper;
import io.github.carlosthe19916.webservices.wrappers.ServiceConfig;
import jodd.io.ZipBuilder;

import javax.xml.ws.soap.SOAPFaultException;
import java.io.File;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.util.Set;

public class BillServiceManager {

    private BillServiceManager() {
        // Just static methods
    }

    /**
     * @param file   archivo a ser enviado
     * @param config Credenciales y URL de destino de la petición
     */
    public static BillServiceResult sendBill(File file, ServiceConfig config) throws IOException {
        return sendBill(file.toPath(), config);
    }

    /**
     * @param path   ubicacion del archivo a ser enviado
     * @param config Credenciales y URL de destino de la petición
     */
    public static BillServiceResult sendBill(Path path, ServiceConfig config) throws IOException {
        return sendBill(path.getFileName().toString(), Files.readAllBytes(path), config);
    }

    /**
     * @param fileName nombre del archivo a ser enviado. Si el archivo es un xml, este sera comprimido en un archivo .zip automaticamente
     * @param file     archivo a ser enviado
     * @param config   Credenciales y URL de destino de la petición
     */
    public static BillServiceResult sendBill(String fileName, byte[] file, ServiceConfig config) throws IOException {
        if (fileName.endsWith(".xml")) {
            file = ZipBuilder.createZipInMemory()
                    .add(file)
                    .path(fileName)
                    .save()
                    .toBytes();
            fileName = fileName.substring(0, fileName.lastIndexOf(".")) + ".zip";
        }

        try {
            byte[] bytes = BillServiceWrapper.sendBill(fileName, file, null, config);
            return new BillServiceResult(BillServiceResult.Status.ACEPTADO, bytes, null);
        } catch (SOAPFaultException e) {
            Set billServiceErrorHandlers = BillServiceErrorHandlerManager.getInstance().getApplicableErrorHandlers(e);
            for (BillServiceErrorHandler errorHandler : billServiceErrorHandlers) {
                BillServiceResult result = errorHandler.sendBill(fileName, file, null, config);
                if (result != null) {
                    return result;
                }
            }
            throw new SUNATWebServiceException(e);
        }
    }

    /**
     * @param ticket numero de ticket a ser consultado
     * @param config Credenciales y URL de destino de la petición
     */
    public static service.sunat.gob.pe.billservice.StatusResponse getStatus(String ticket, ServiceConfig config) {
        try {
            return BillServiceWrapper.getStatus(ticket, config);
        } catch (SOAPFaultException e) {
            Set billServiceErrorHandlers = BillServiceErrorHandlerManager.getInstance().getApplicableErrorHandlers(e);
            for (BillServiceErrorHandler errorHandler : billServiceErrorHandlers) {
                service.sunat.gob.pe.billservice.StatusResponse statusResponse = errorHandler.getStatus(ticket, config);
                if (statusResponse != null) {
                    return statusResponse;
                }
            }
            throw new SUNATWebServiceException(e);
        }
    }

    /**
     * @param file   archivo a ser enviado
     * @param config Credenciales y URL de destino de la petición
     */
    public static String sendSummary(File file, ServiceConfig config) throws IOException {
        return sendSummary(file.toPath(), config);
    }

    /**
     * @param path   ubicacion del archivo a ser enviado
     * @param config Credenciales y URL de destino de la petición
     */
    public static String sendSummary(Path path, ServiceConfig config) throws IOException {
        return sendSummary(path.getFileName().toString(), Files.readAllBytes(path), config);
    }

    /**
     * @param fileName nombre del archivo a ser enviado. Si el archivo es un xml, este sera comprimido en un archivo .zip automaticamente
     * @param file     archivo a ser enviado
     * @param config   Credenciales y URL de destino de la petición
     */
    public static String sendSummary(String fileName, byte[] file, ServiceConfig config) throws IOException {
        if (fileName.endsWith(".xml")) {
            file = ZipBuilder.createZipInMemory()
                    .add(file)
                    .path(fileName)
                    .save()
                    .toBytes();
            fileName = fileName.substring(0, fileName.lastIndexOf(".")) + ".zip";
        }

        try {
            return BillServiceWrapper.sendSummary(fileName, file, null, config);
        } catch (SOAPFaultException e) {
            Set billServiceErrorHandlers = BillServiceErrorHandlerManager.getInstance().getApplicableErrorHandlers(e);
            for (BillServiceErrorHandler errorHandler : billServiceErrorHandlers) {
                String ticket = errorHandler.sendSummary(fileName, file, null, config);
                if (ticket != null) {
                    return ticket;
                }
            }
            throw new SUNATWebServiceException(e);
        }
    }

    /**
     * @param file   archivo a ser enviado
     * @param config Credenciales y URL de destino de la petición
     */
    public static String sendPack(File file, ServiceConfig config) throws IOException {
        return sendPack(file.toPath(), config);
    }

    /**
     * @param path   ubicacion del archivo a ser enviado
     * @param config Credenciales y URL de destino de la petición
     */
    public static String sendPack(Path path, ServiceConfig config) throws IOException {
        return sendPack(path.getFileName().toString(), Files.readAllBytes(path), config);
    }

    /**
     * @param fileName nombre del archivo a ser enviado. El archivo deberá ser un archivo .zip
     * @param file     archivo a ser enviado
     * @param config   Credenciales y URL de destino de la petición
     */
    public static String sendPack(String fileName, byte[] file, ServiceConfig config) {
        try {
            return BillServiceWrapper.sendPack(fileName, file, null, config);
        } catch (SOAPFaultException e) {
            Set billServiceErrorHandlers = BillServiceErrorHandlerManager.getInstance().getApplicableErrorHandlers(e);
            for (BillServiceErrorHandler errorHandler : billServiceErrorHandlers) {
                String ticket = errorHandler.sendPack(fileName, file, null, config);
                if (ticket != null) {
                    return ticket;
                }
            }
            throw new SUNATWebServiceException(e);
        }
    }

}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy