Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package org.jleaf.erp.sls.bo.invoice;
- import org.jleaf.core.AbstractBusinessFunction;
- import org.jleaf.core.BusinessFunction;
- import org.jleaf.core.Dto;
- import org.jleaf.core.annotation.ErrorList;
- import org.jleaf.core.annotation.Info;
- import org.jleaf.core.annotation.InfoIn;
- import org.jleaf.core.annotation.InfoOut;
- import org.jleaf.core.dao.QueryBuilder;
- import org.jleaf.erp.cb.entity.MappingCashBankInSoBalanceItem;
- import org.jleaf.erp.sls.SalesConstants;
- import org.jleaf.erp.sls.dao.SalesInvoiceDao;
- import org.jleaf.erp.sls.dao.SalesInvoiceItemDao;
- import org.jleaf.erp.sls.entity.*;
- import org.jleaf.util.ValidationUtil;
- import org.slf4j.Logger;
- import org.slf4j.LoggerFactory;
- import org.springframework.beans.factory.annotation.Autowired;
- import org.springframework.stereotype.Service;
- import javax.persistence.Query;
- import java.util.List;
- /**
- * Is InvoiceAdvance exists by id
- * @author Fredi, Sep 19, 2014
- * @version 1.0
- */
- //@ formatter:off
- @Service
- @InfoIn(value = {
- @Info(name = "invoiceId", description = "invoiceId", type = Long.class, required = true)
- })
- @InfoOut(value = {
- @Info(name = "exists", description = "exists", type = Boolean.class, required = true),
- })
- @ErrorList(errorKeys = {
- })
- //@ formatter:on
- public class IsInvoiceAlreadyPaidByMappingCashBankInOthersToSo extends AbstractBusinessFunction implements BusinessFunction {
- private static Logger log = LoggerFactory.getLogger(IsInvoiceAlreadyPaidByMappingCashBankInOthersToSo.class);
- @Autowired
- private SalesInvoiceDao salesInvoiceDao;
- @Autowired
- private SalesInvoiceItemDao salesInvoiceItemDao;
- @Override
- public Dto execute(Dto inputDto) throws Exception {
- ValidationUtil.valDtoContainsKey(inputDto, "invoiceId");
- log.debug("inputDto :"+inputDto);
- Dto outputDto = new Dto();
- List<Object[]> result = null;
- // Ambil Total Payment
- QueryBuilder builderTotalPayment = new QueryBuilder();
- builderTotalPayment.add(" SELECT CASE WHEN COALESCE(C.amount, 0) = 0 THEN 0 ELSE A.gross_amount END AS payment" )
- .add(" FROM ") .add(SalesInvoice.TABLE_NAME) .add(" A ")
- .add(" INNER JOIN ") .add(SalesOrder.TABLE_NAME) .add(" B ON A.ref_id = B.so_id ")
- .add(" LEFT JOIN ") .add(MappingCashBankInSoBalanceItem.TABLE_NAME) .add(" C ON B.so_id = C.so_id AND B.doc_no = C.doc_no")
- .add(" WHERE A.invoice_id = :invoiceId ");
- Query queryTotalPayment = salesInvoiceDao.createNativeQuery(builderTotalPayment.toString());
- queryTotalPayment.setParameter("invoiceId", inputDto.getLong("invoiceId"));
- Double totalPayment = 0D;
- Object resultTotalPayment = queryTotalPayment.getSingleResult();
- if (resultTotalPayment != null ) {
- totalPayment = Double.valueOf(resultTotalPayment.toString());
- }
- log.debug("totalPayment : "+totalPayment);
- // Ambil Total Tax
- QueryBuilder builderTotalTax = new QueryBuilder();
- builderTotalTax.add(" SELECT SUM(L.tax_amount) AS total_amount " )
- .add(" FROM ") .add(SalesInvoiceItem.TABLE_NAME) .add(" Z ")
- .add(" INNER JOIN ") .add(SalesInvoice.TABLE_NAME) .add(" A ON Z.invoice_id = A.invoice_id ")
- .add(" INNER JOIN ") .add(SalesOrder.TABLE_NAME) .add(" B ON A.ref_id = B.so_id AND A.ref_doc_type_id = B.doc_type_id ")
- .add(" INNER JOIN ") .add(DeliveryOrder.TABLE_NAME) .add(" C ON B.so_id = C.ref_id ")
- .add(" INNER JOIN ") .add(SalesOrderBalanceInvoice.TABLE_NAME) .add(" F ON A.tenant_id = F.tenant_id AND F.ou_id = A.ou_id AND F.ref_doc_type_id = :DoDocTypeId ")
- .add(" AND F.ref_id = C.do_id AND F.so_id = C.ref_id AND F.ref_item_id = Z.ref_item_id ")
- .add(" AND F.do_receipt_item_id = Z.do_receipt_item_id ")
- .add(" INNER JOIN ") .add(SalesOrderBalanceInvoiceTax.TABLE_NAME) .add(" L ON L.tenant_id = F.tenant_id ")
- .add(" AND L.ou_id = F.ou_id AND L.partner_id = F.partner_id AND L.ref_doc_type_id = F.ref_doc_type_id ")
- .add(" AND L.ref_id = F.ref_id AND L.ref_item_id = F.ref_item_id AND L.do_receipt_item_id = F.do_receipt_item_id ")
- .add(" WHERE A.invoice_id = :invoiceId ");
- Query queryTotalTax = salesInvoiceItemDao.createNativeQuery(builderTotalTax.toString());
- queryTotalTax.setParameter("invoiceId", inputDto.getLong("invoiceId"));
- queryTotalTax.setParameter("DoDocTypeId", SalesConstants.DOCUMENT_DELIVERY_ORDER);
- Double totalTax = 0D;
- Object resultTotalTax = queryTotalTax.getSingleResult();
- if (resultTotalTax != null ) {
- totalTax = Double.valueOf(resultTotalTax.toString());
- }
- log.debug("totalTax : "+totalTax);
- // Ambil Total Amount
- QueryBuilder builderTotalAmount = new QueryBuilder();
- builderTotalAmount.add(" SELECT SUM(F.qty_dlv_so * F.price_so) AS total_amount " )
- .add(" FROM ") .add(SalesInvoiceItem.TABLE_NAME) .add(" Z ")
- .add(" INNER JOIN ") .add(SalesInvoice.TABLE_NAME) .add(" A ON Z.invoice_id = A.invoice_id ")
- .add(" INNER JOIN ") .add(SalesOrder.TABLE_NAME) .add(" B ON A.ref_id = B.so_id AND A.ref_doc_type_id = B.doc_type_id ")
- .add(" INNER JOIN ") .add(DeliveryOrder.TABLE_NAME) .add(" C ON B.so_id = C.ref_id ")
- .add(" INNER JOIN ") .add(SalesOrderBalanceInvoice.TABLE_NAME) .add(" F ON A.tenant_id = F.tenant_id AND F.ou_id = A.ou_id AND F.ref_doc_type_id = :DoDocTypeId ")
- .add(" AND F.ref_id = C.do_id AND F.so_id = C.ref_id AND F.ref_item_id = Z.ref_item_id ")
- .add(" AND F.do_receipt_item_id = Z.do_receipt_item_id ")
- .add(" WHERE A.invoice_id = :invoiceId ");
- Query queryTotalAmount = salesInvoiceItemDao.createNativeQuery(builderTotalAmount.toString());
- queryTotalAmount.setParameter("invoiceId", inputDto.getLong("invoiceId"));
- queryTotalAmount.setParameter("DoDocTypeId", SalesConstants.DOCUMENT_DELIVERY_ORDER);
- Double totalAmount = 0D;
- Object resultTotalAmount = queryTotalAmount.getSingleResult();
- if (resultTotalAmount != null ) {
- totalAmount = Double.valueOf(resultTotalAmount.toString());
- }
- log.debug("totalAmount : "+totalAmount);
- // Hitung Total Due
- Double totalDue = totalAmount + totalTax - totalPayment;
- log.debug("totalDue : "+totalDue);
- boolean isExists = false;
- if (totalDue == 0 && totalDue != null) {
- isExists = true;
- }
- outputDto.put("exists", isExists);
- log.debug("outputDtoEmailTemplate >> "+outputDto);
- return outputDto;
- }
- @Override
- public String getDescription() {
- return "Is Invoice Already Paid By Mapping CashBank In Others To So";
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement