/*
 jBilling - The Enterprise Open Source Billing System
 Copyright (C) 2003-2011 Enterprise jBilling Software Ltd. and Emiliano Conde

 This file is part of jbilling.

 jbilling is free software: you can redistribute it and/or modify
 it under the terms of the GNU Affero General Public License as published by
 the Free Software Foundation, either version 3 of the License, or
 (at your option) any later version.

 jbilling is distributed in the hope that it will be useful,
 but WITHOUT ANY WARRANTY; without even the implied warranty of
 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 GNU Affero General Public License for more details.

 You should have received a copy of the GNU Affero General Public License
 along with jbilling.  If not, see <http://www.gnu.org/licenses/>.
 */

package com.sapienter.jbilling.server.payment.db;

import com.sapienter.jbilling.server.invoice.db.InvoiceDAS;
import com.sapienter.jbilling.server.invoice.db.InvoiceDTO;
import com.sapienter.jbilling.server.util.db.AbstractDAS;
import org.hibernate.Criteria;
import org.hibernate.criterion.Restrictions;

import java.math.BigDecimal;
import java.util.Calendar;
import java.util.List;

/**
 *
 * @author abimael
 *
 */
public class PaymentInvoiceMapDAS extends AbstractDAS<PaymentInvoiceMapDTO> {

    public PaymentInvoiceMapDTO create(InvoiceDTO invoice, PaymentDTO payment, BigDecimal realAmount) {
        PaymentInvoiceMapDTO map = new PaymentInvoiceMapDTO();
        map.setInvoiceEntity(invoice);
        map.setPayment(payment);
        map.setAmount(realAmount);
        map.setCreateDatetime(Calendar.getInstance().getTime());

        return save(map);
    }

    public void deleteAllWithInvoice(InvoiceDTO invoice) {
        InvoiceDTO inv = new InvoiceDAS().find(invoice.getId());
        Criteria criteria = getSession().createCriteria(PaymentInvoiceMapDTO.class);
        criteria.add(Restrictions.eq("invoiceEntity", inv));

        List<PaymentInvoiceMapDTO> results = criteria.list();

        if (results != null && !results.isEmpty()) {
            for (PaymentInvoiceMapDTO paym : results) {
                delete(paym);
            }
        }
    }
}
