1 14 package org.compiere.model; 15 16 import java.sql.*; 17 import java.util.*; 18 19 import org.compiere.util.*; 20 21 27 public class MRecurring extends X_C_Recurring 28 { 29 public MRecurring (Properties ctx, int C_Recurring_ID) 30 { 31 super (ctx, C_Recurring_ID); 32 if (C_Recurring_ID == 0) 33 { 34 setDateNextRun (new Timestamp(System.currentTimeMillis())); 36 setFrequencyType (FREQUENCYTYPE_Monthly); 37 setFrequency(1); 38 setRunsMax (1); 41 setRunsRemaining (0); 42 } 43 } 45 public MRecurring (Properties ctx, ResultSet rs) 46 { 47 super (ctx, rs); 48 } 50 54 public String toString() 55 { 56 StringBuffer sb = new StringBuffer ("MRecurring[") 57 .append(getID()).append(",").append(getName()); 58 if (getRecurringType().equals(MRecurring.RECURRINGTYPE_Order)) 59 sb.append(",C_Order_ID=").append(getC_Order_ID()); 60 else if (getRecurringType().equals(MRecurring.RECURRINGTYPE_Invoice)) 61 sb.append(",C_Invoice_ID=").append(getC_Invoice_ID()); 62 else if (getRecurringType().equals(MRecurring.RECURRINGTYPE_Project)) 63 sb.append(",C_Project_ID=").append(getC_Project_ID()); 64 else if (getRecurringType().equals(MRecurring.RECURRINGTYPE_GLJournal)) 65 sb.append(",GL_JournalBatch_ID=").append(getGL_JournalBatch_ID()); 66 sb.append(",Fequency=").append(getFrequencyType()).append("*").append(getFrequency()); 67 sb.append("]"); 68 return sb.toString(); 69 } 71 72 73 77 public String executeRun() 78 { 79 Timestamp dateDoc = getDateNextRun(); 80 if (!calculateRuns()) 81 throw new IllegalStateException ("No Runs Left"); 82 83 MRecurringRun run = new MRecurringRun (getCtx(), this); 85 String msg = "@Created@ "; 86 87 88 if (getRecurringType().equals(MRecurring.RECURRINGTYPE_Order)) 90 { 91 MOrder order = MOrder.copyFrom (getCtx(), getC_Order_ID(), dateDoc); 92 run.setC_Order_ID(order.getC_Order_ID()); 93 msg += order.getDocumentNo(); 94 } 95 else if (getRecurringType().equals(MRecurring.RECURRINGTYPE_Invoice)) 96 { 97 MInvoice invoice = MInvoice.copyFrom (getCtx(), getC_Invoice_ID(), dateDoc); 98 run.setC_Invoice_ID(invoice.getC_Invoice_ID()); 99 msg += invoice.getDocumentNo(); 100 } 101 else if (getRecurringType().equals(MRecurring.RECURRINGTYPE_Project)) 102 { 103 MProject project = MProject.copyFrom (getCtx(), getC_Project_ID(), dateDoc); 104 run.setC_Project_ID(project.getC_Project_ID()); 105 msg += project.getValue(); 106 } 107 else if (getRecurringType().equals(MRecurring.RECURRINGTYPE_GLJournal)) 108 { 109 MJournalBatch journal = MJournalBatch.copyFrom (getCtx(), getGL_JournalBatch_ID(), dateDoc); 110 run.setGL_JournalBatch_ID(journal.getGL_JournalBatch_ID()); 111 msg += journal.getDocumentNo(); 112 } 113 else 114 return "Invalid @RecurringType@ = " + getRecurringType(); 115 run.save(); 116 117 setDateLastRun (run.getUpdated()); 119 setRunsRemaining (getRunsRemaining()-1); 120 setDateNextRun(); 121 save(); 122 return msg; 123 } 125 129 private boolean calculateRuns() 130 { 131 String sql = "SELECT COUNT(*) FROM C_Recurring_Run WHERE C_Recurring_ID=?"; 132 int current = DB.getSQLValue(sql, getC_Recurring_ID()); 133 int remaining = getRunsMax() - current; 134 setRunsRemaining(remaining); 135 save(); 136 return remaining > 0; 137 } 139 142 private void setDateNextRun() 143 { 144 if (getFrequency() < 1) 145 setFrequency(1); 146 int frequency = getFrequency(); 147 Calendar cal = Calendar.getInstance(); 148 cal.setTime(getDateNextRun()); 149 if (getFrequencyType().equals(FREQUENCYTYPE_Daily)) 151 cal.add(Calendar.DAY_OF_YEAR, frequency); 152 else if (getFrequencyType().equals(FREQUENCYTYPE_Weekly)) 153 cal.add(Calendar.WEEK_OF_YEAR, frequency); 154 else if (getFrequencyType().equals(FREQUENCYTYPE_Monthly)) 155 cal.add(Calendar.MONTH, frequency); 156 else if (getFrequencyType().equals(FREQUENCYTYPE_Quarterly)) 157 cal.add(Calendar.MONTH, 3*frequency); 158 Timestamp next = new Timestamp (cal.getTimeInMillis()); 159 setDateNextRun(next); 160 } 162 } | Popular Tags |