private void createOrderProcess( NewInvoiceDTO newInvoice, InvoiceDTO invoice, BillingProcessDTO process, Integer origin) throws SessionInternalError { LOG.debug("Generating order process records..."); // update the orders involved, now that their old data is not needed // anymore for (int f = 0; f < newInvoice.getOrders().size(); f++) { OrderDTO order = (OrderDTO) newInvoice.getOrders().get(f); LOG.debug(" ... order " + order.getId()); // this will help later List<PeriodOfTime> periodsList = newInvoice.getPeriods().get(f); Date startOfBillingPeriod = (Date) periodsList.get(0).getStart(); Date endOfBillingPeriod = periodsList.get(periodsList.size() - 1).getEnd(); Integer periods = (Integer) newInvoice.getPeriods().get(f).size(); // We don't update orders if this is just a review if (newInvoice.getIsReview().intValue() == 0) { // update the to_process if applicable updateStatusFinished(order, startOfBillingPeriod, endOfBillingPeriod); // update this order process field updateNextBillableDay(order, endOfBillingPeriod); } // create the period and update the order-invoice relationship try { OrderProcessDAS das = new OrderProcessDAS(); OrderProcessDTO orderProcess = new OrderProcessDTO(); orderProcess.setPeriodStart(startOfBillingPeriod); orderProcess.setPeriodEnd(endOfBillingPeriod); orderProcess.setIsReview(newInvoice.getIsReview()); orderProcess.setPurchaseOrder(order); InvoiceDAS invDas = new InvoiceDAS(); orderProcess.setInvoice(invDas.find(invoice.getId())); BillingProcessDAS proDas = new BillingProcessDAS(); orderProcess.setBillingProcess(process != null ? proDas.find(process.getId()) : null); orderProcess.setPeriodsIncluded(periods); orderProcess.setOrigin(origin); orderProcess = das.save(orderProcess); LOG.debug( "created order process id " + orderProcess.getId() + " for order " + order.getId()); } catch (Exception e) { throw new SessionInternalError(e); } } }
public void purgeReview(Integer entityId, boolean isReview) { BillingProcessDTO review = billingProcessDas.findReview(entityId); if (review == null) { // no review, nothing to delete then return; } // if we are here, a review exists ConfigurationBL configBL = new ConfigurationBL(entityId); if (configBL.getEntity().getGenerateReport().intValue() == 1 && !new Integer(configBL.getEntity().getReviewStatus()) .equals(Constants.REVIEW_STATUS_APPROVED) && !isReview) { eLogger.warning( entityId, null, configBL.getEntity().getId(), EventLogger.MODULE_BILLING_PROCESS, EventLogger.BILLING_REVIEW_NOT_APPROVED, Constants.TABLE_BILLING_PROCESS_CONFIGURATION); } // delete the review LOG.debug("Removing review id = " + review.getId() + " from " + " entity " + entityId); // this is needed while the order process is JPA, but the billing process is Entity OrderProcessDAS processDas = new OrderProcessDAS(); com.sapienter.jbilling.server.process.db.BillingProcessDTO processDto = new BillingProcessDAS().find(review.getId()); for (OrderProcessDTO orderDto : processDto.getOrderProcesses()) { processDas.delete(orderDto); } processDto.getOrderProcesses().clear(); // delete processRunUsers otherwise will be constraint violation for (ProcessRunDTO processRun : review.getProcessRuns()) { new ProcessRunUserDAS().removeProcessRunUsersForProcessRun(processRun.getId()); } // otherwise this line would cascade de delete getHome().delete(review); }
/** * This will remove all the records (sql delete, not just flag them). It will also update the * related orders if applicable */ public void delete(Integer executorId) throws SessionInternalError { if (invoice == null) { throw new SessionInternalError("An invoice has to be set before delete"); } // prevent a delegated Invoice from being deleted if (invoice.getDelegatedInvoiceId() != null && invoice.getDelegatedInvoiceId().intValue() > 0) { SessionInternalError sie = new SessionInternalError("A carried forward Invoice cannot be deleted"); sie.setErrorMessages( new String[] {"InvoiceDTO,invoice,invoice.error.fkconstraint," + invoice.getId()}); throw sie; } // start by updating purchase_order.next_billable_day if applicatble // for each of the orders included in this invoice for (OrderProcessDTO orderProcess : (Collection<OrderProcessDTO>) invoice.getOrderProcesses()) { OrderDTO order = orderProcess.getPurchaseOrder(); if (order.getNextBillableDay() == null) { // the next billable day doesn't need updating if (order.getStatusId().equals(Constants.ORDER_STATUS_FINISHED)) { OrderBL orderBL = new OrderBL(order); orderBL.setStatus(null, Constants.ORDER_STATUS_ACTIVE); } continue; } // only if this invoice is the responsible for the order's // next billable day if (order.getNextBillableDay().equals(orderProcess.getPeriodEnd())) { order.setNextBillableDay(orderProcess.getPeriodStart()); if (order.getStatusId().equals(Constants.ORDER_STATUS_FINISHED)) { OrderBL orderBL = new OrderBL(order); orderBL.setStatus(null, Constants.ORDER_STATUS_ACTIVE); } } } // go over the order process records again just to delete them // we are done with this order, delete the process row for (OrderProcessDTO orderProcess : (Collection<OrderProcessDTO>) invoice.getOrderProcesses()) { OrderDTO order = orderProcess.getPurchaseOrder(); OrderProcessDAS das = new OrderProcessDAS(); order.getOrderProcesses().remove(orderProcess); das.delete(orderProcess); } invoice.getOrderProcesses().clear(); // get rid of the contact associated with this invoice try { ContactBL contact = new ContactBL(); if (contact.setInvoice(invoice.getId())) { contact.delete(); } } catch (Exception e1) { LOG.error("Exception deleting the contact of an invoice", e1); } // remove the payment link/s PaymentBL payment = new PaymentBL(); Iterator<PaymentInvoiceMapDTO> it = invoice.getPaymentMap().iterator(); while (it.hasNext()) { PaymentInvoiceMapDTO map = it.next(); payment.removeInvoiceLink(map.getId()); invoice.getPaymentMap().remove(map); // needed because the collection has changed it = invoice.getPaymentMap().iterator(); } // log that this was deleted, otherwise there will be no trace if (executorId != null) { eLogger.audit( executorId, invoice.getBaseUser().getId(), Constants.TABLE_INVOICE, invoice.getId(), EventLogger.MODULE_INVOICE_MAINTENANCE, EventLogger.ROW_DELETED, null, null, null); } // before delete the invoice most delete the reference in table // PAYMENT_INVOICE new PaymentInvoiceMapDAS().deleteAllWithInvoice(invoice); Set<InvoiceDTO> invoices = invoice.getInvoices(); if (invoices.size() > 0) { for (InvoiceDTO delegate : invoices) { // set status to unpaid as against carried delegate.setInvoiceStatus(new InvoiceStatusDAS().find(Constants.INVOICE_STATUS_UNPAID)); // remove delegated invoice link delegate.setInvoice(null); getHome().save(delegate); } } // now delete the invoice itself getHome().delete(invoice); getHome().flush(); }