DeclarationInvoiceRepositoryImpl.java

package com.tradecloud.repository.impl;

import com.tradecloud.domain.document.Document;
import com.tradecloud.domain.document.invoice.ActualOrder;
import com.tradecloud.domain.document.invoice.DeclarationInvoice;
import com.tradecloud.domain.shipment.clearing.CustomsDeclaration;
import com.tradecloud.dto.invoice.SupplyPaymentSearch;
import com.tradecloud.repository.DeclarationInvoiceRepository;
import org.springframework.stereotype.Repository;
import org.springframework.transaction.annotation.Isolation;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;

import javax.persistence.criteria.CriteriaBuilder;
import javax.persistence.criteria.CriteriaQuery;
import javax.persistence.criteria.Root;
import java.util.List;

@Repository(value = "declarationInvoiceRepositoryImpl")
@Transactional(propagation = Propagation.REQUIRED, isolation = Isolation.DEFAULT)
public class DeclarationInvoiceRepositoryImpl extends CostsInvoiceRepositoryImpl<DeclarationInvoice> implements
        DeclarationInvoiceRepository {
    @Override
    public List<DeclarationInvoice> findAllByReference(String reference) {
        return findAllByReference("declarationInvoice.byReference", reference);
    }

    @Override
    public List<ActualOrder> findActualOrdersByInvoice(DeclarationInvoice invoice) {
        return null;
    }

    @Override
    public long supplyPaymentReportCount(SupplyPaymentSearch search) {
        return 0;
    }

    @Override
    public List<Document> supplyPaymentReportSearch(SupplyPaymentSearch search) {
        return null;
    }

    @Override
    public List<DeclarationInvoice> findByDeclaration(CustomsDeclaration declaration) {
        return findByDeclaration(declaration, null);
    }

    public List<DeclarationInvoice> findByDeclaration(CustomsDeclaration declaration, Integer limitTo) {
        CriteriaBuilder criteriaBuilder = getSession().getCriteriaBuilder();
        CriteriaQuery<DeclarationInvoice> criteriaQuery = criteriaBuilder.createQuery(DeclarationInvoice.class);
        Root<DeclarationInvoice> c = criteriaQuery.from(DeclarationInvoice.class);
        criteriaQuery = criteriaQuery.select(c).where(criteriaBuilder.equal(c.get("customsDeclaration"), declaration));
        org.hibernate.query.Query<DeclarationInvoice> q = getSession().createQuery(criteriaQuery);
        if (limitTo != null)
            q.stream().limit(limitTo);
        return q.list();
    }
}