@Override public boolean apply(final InvoiceModelDao invoice) { return includeVoidedInvoices ? true : !InvoiceStatus.VOID.equals(invoice.getStatus()); } }));
@Override public int hashCode() { int result = amount != null ? amount.hashCode() : 0; result = 31 * result + (currency != null ? currency.hashCode() : 0); result = 31 * result + (status != null ? status.hashCode() : 0); result = 31 * result + (invoiceId != null ? invoiceId.hashCode() : 0); result = 31 * result + (invoiceDate != null ? invoiceDate.hashCode() : 0); result = 31 * result + (targetDate != null ? targetDate.hashCode() : 0); result = 31 * result + (invoiceNumber != null ? invoiceNumber.hashCode() : 0); result = 31 * result + (balance != null ? balance.hashCode() : 0); result = 31 * result + (creditAdj != null ? creditAdj.hashCode() : 0); result = 31 * result + (refundAdj != null ? refundAdj.hashCode() : 0); result = 31 * result + (accountId != null ? accountId.hashCode() : 0); result = 31 * result + (items != null ? items.hashCode() : 0); result = 31 * result + (bundleKeys != null ? bundleKeys.hashCode() : 0); result = 31 * result + (credits != null ? credits.hashCode() : 0); result = 31 * result + (isParentInvoice != null ? isParentInvoice.hashCode() : 0); result = 31 * result + (parentInvoiceId != null ? parentInvoiceId.hashCode() : 0); result = 31 * result + (parentAccountId != null ? parentAccountId.hashCode() : 0); return result; } }
@Override public Void inTransaction(final EntitySqlDaoWrapperFactory entitySqlDaoWrapperFactory) throws Exception { final InvoiceSqlDao transactional = entitySqlDaoWrapperFactory.become(InvoiceSqlDao.class); // Retrieve the invoice and make sure it belongs to the right account final InvoiceModelDao invoice = transactional.getById(invoiceId.toString(), context); if (invoice == null) { throw new InvoiceApiException(ErrorCode.INVOICE_NOT_FOUND, invoiceId); } if (invoice.getStatus().equals(newStatus) || invoice.getStatus().equals(InvoiceStatus.VOID)) { throw new InvoiceApiException(ErrorCode.INVOICE_INVALID_STATUS, newStatus, invoiceId, invoice.getStatus()); } transactional.updateStatus(invoiceId.toString(), newStatus.toString(), context); cbaDao.doCBAComplexityFromTransaction(invoicesTags, entitySqlDaoWrapperFactory, context); // Invoice creation event sent on COMMITTED if (InvoiceStatus.COMMITTED.equals(newStatus)) { notifyBusOfInvoiceCreation(entitySqlDaoWrapperFactory, invoice, context); // Deactivate any usage trackingIds if necessary } else if (InvoiceStatus.VOID.equals(newStatus)) { final InvoiceTrackingSqlDao trackingSqlDao = entitySqlDaoWrapperFactory.become(InvoiceTrackingSqlDao.class); trackingSqlDao.deactivateForInvoice(invoiceId.toString(), context); } return null; } });
return false; if (status != null ? !status.equals(that.status) : that.status != null) { return false;
createdInvoiceIds.add(invoiceModelDao.getId()); } else if (invoiceOnDisk.getStatus() == InvoiceStatus.DRAFT && invoiceModelDao.getStatus() == InvoiceStatus.COMMITTED) { invoiceSqlDao.updateStatus(invoiceModelDao.getId().toString(), InvoiceStatus.COMMITTED.toString(), context); committedReusedInvoiceId.add(invoiceModelDao.getId()); if (InvoiceStatus.COMMITTED.equals(invoiceModelDao.getStatus())) {
@Override public int hashCode() { int result = super.hashCode(); result = 31 * result + (accountId != null ? accountId.hashCode() : 0); result = 31 * result + (invoiceNumber != null ? invoiceNumber.hashCode() : 0); result = 31 * result + (invoiceDate != null ? invoiceDate.hashCode() : 0); result = 31 * result + (targetDate != null ? targetDate.hashCode() : 0); result = 31 * result + (currency != null ? currency.hashCode() : 0); result = 31 * result + (migrated ? 1 : 0); result = 31 * result + (status != null ? status.hashCode() : 0); result = 31 * result + (invoiceItems != null ? invoiceItems.hashCode() : 0); result = 31 * result + (invoicePayments != null ? invoicePayments.hashCode() : 0); result = 31 * result + (processedCurrency != null ? processedCurrency.hashCode() : 0); result = 31 * result + (isWrittenOff ? 1 : 0); result = 31 * result + (isParentInvoice ? 1 : 0); result = 31 * result + (parentInvoice != null ? parentInvoice.hashCode() : 0); return result; }
@Override public boolean apply(final InvoiceModelDao invoice) { return !invoice.isMigrated() && invoice.getTargetDate().compareTo(fromDate) >= 0 && (includeVoidedInvoices ? true : !InvoiceStatus.VOID.equals(invoice.getStatus())); } })));
@Override public List<InvoiceModelDao> getAllInvoicesByAccount(final Boolean includeVoidedInvoices, final InternalTenantContext context) { final List<InvoiceModelDao> result = new ArrayList<InvoiceModelDao>(); synchronized (monitor) { final UUID accountId = accountRecordIds.inverse().get(context.getAccountRecordId()); for (final InvoiceModelDao invoice : invoices.values()) { if (accountId.equals(invoice.getAccountId()) && (includeVoidedInvoices ? true : !InvoiceStatus.VOID.equals(invoice.getStatus()))) { result.add(invoice); } } } return result; }
@Override public boolean apply(final InvoiceModelDao in) { final InvoiceModelDao invoice = (in.getParentInvoice() == null) ? in : in.getParentInvoice(); final BigDecimal balance = InvoiceModelDaoHelper.getRawBalanceForRegularInvoice(invoice); log.debug("Computed balance={} for invoice={}", balance, in); return InvoiceStatus.COMMITTED.equals(in.getStatus()) && (balance.compareTo(BigDecimal.ZERO) >= 1 && !in.isWrittenOff()) && (upToDate == null || in.getTargetDate() == null || !in.getTargetDate().isAfter(upToDate)); } });
@Override public BigDecimal inTransaction(final EntitySqlDaoWrapperFactory entitySqlDaoWrapperFactory) throws Exception { BigDecimal cba = BigDecimal.ZERO; BigDecimal accountBalance = BigDecimal.ZERO; final List<InvoiceModelDao> invoices = invoiceDaoHelper.getAllInvoicesByAccountFromTransaction(false, invoicesTags, entitySqlDaoWrapperFactory, context); for (final InvoiceModelDao cur : invoices) { // Skip DRAFT OR VOID invoices if (cur.getStatus().equals(InvoiceStatus.DRAFT) || cur.getStatus().equals(InvoiceStatus.VOID)) { continue; } final boolean hasZeroParentBalance = cur.getParentInvoice() != null && (cur.getParentInvoice().isWrittenOff() || cur.getParentInvoice().getStatus() == InvoiceStatus.DRAFT || cur.getParentInvoice().getStatus() == InvoiceStatus.VOID || InvoiceModelDaoHelper.getRawBalanceForRegularInvoice(cur.getParentInvoice()).compareTo(BigDecimal.ZERO) == 0); // invoices that are WRITTEN_OFF or paid children invoices are excluded from balance computation but the cba summation needs to be included accountBalance = cur.isWrittenOff() || hasZeroParentBalance ? BigDecimal.ZERO : accountBalance.add(InvoiceModelDaoHelper.getRawBalanceForRegularInvoice(cur)); cba = cba.add(InvoiceModelDaoHelper.getCBAAmount(cur)); } return accountBalance.subtract(cba); } });
@Override public List<InvoiceModelDao> getInvoicesByAccount(final Boolean includeVoidedInvoices, final LocalDate fromDate, final InternalTenantContext context) { final List<InvoiceModelDao> invoicesForAccount = new ArrayList<InvoiceModelDao>(); synchronized (monitor) { final UUID accountId = accountRecordIds.inverse().get(context.getAccountRecordId()); for (final InvoiceModelDao invoice : getAll(context)) { if (accountId.equals(invoice.getAccountId()) && !invoice.getTargetDate().isBefore(fromDate) && !invoice.isMigrated() && (includeVoidedInvoices ? true : !InvoiceStatus.VOID.equals(invoice.getStatus()))) { invoicesForAccount.add(invoice); } } } return invoicesForAccount; }
if (parentInvoiceModelDao.getStatus().equals(InvoiceStatus.COMMITTED)) { ItemAdjInvoiceItem adj = new ItemAdjInvoiceItem(UUIDs.randomUUID(), lastChildInvoiceItemAdjustment.getCreatedDate(),
if (newAndExistingInvoices.get(invoiceIdForItem) == null) { final DefaultInvoice existingInvoiceForExternalCharge = getInvoiceInternal(invoiceIdForItem, context); if (InvoiceStatus.COMMITTED.equals(existingInvoiceForExternalCharge.getStatus())) { throw new InvoiceApiException(ErrorCode.INVOICE_ALREADY_COMMITTED, existingInvoiceForExternalCharge.getId());