1 package org.kuali.ole.deliver.batch;
2
3 import org.kuali.ole.OLEConstants;
4 import org.kuali.ole.deliver.loan.LoanProcessor;
5
6 import java.util.ArrayList;
7 import java.util.HashMap;
8 import java.util.List;
9 import java.util.Map;
10
11
12
13
14
15
16
17
18 public class OleDeliverBatchServiceImpl {
19
20
21
22 private void getHTMLHeader(StringBuffer stringBuffer,String title) throws Exception{
23 stringBuffer.append("<HTML>");
24 stringBuffer.append("<TITLE>"+title+"</TITLE>");
25 stringBuffer.append("<HEAD></HEAD>");
26 stringBuffer.append("<BODY>");
27 }
28
29 private void getTemplateHeader(OleNoticeBo noticeBo,StringBuffer stringBuffer)throws Exception{
30
31 stringBuffer.append("<TABLE></BR></BR>");
32 stringBuffer.append("<TR><TD>Patron Name :</TD><TD>"+noticeBo.getPatronName()+"</TD></TR>");
33 stringBuffer.append("<TR><TD>Address :</TD><TD>"+noticeBo.getPatronAddress()+"</TD></TR>");
34 stringBuffer.append("<TR><TD>EMAIL :</TD><TD>"+noticeBo.getPatronEmailAddress()+"</TD></TR>");
35 stringBuffer.append("<TR><TD>Phone Number :</TD><TD>"+noticeBo.getPatronPhoneNumber()+"</TD></TR>");
36 stringBuffer.append("</TABLE>");
37 }
38
39 private void getTemplateBody(StringBuffer stringBuffer,String title,String body) throws Exception{
40 stringBuffer.append("<TR><TD> </TD><TD> </TD></TR>");
41 stringBuffer.append("<TABLE width=\"100%\">");
42 stringBuffer.append("<TR><TD><CENTER>"+ title+"</CENTER></TD></TR>");
43 stringBuffer.append("<TR><TD><p>"+body+"</p></TD></TR>");
44 stringBuffer.append("<TR><TD> </TD><TD> </TD></TR></TABLE>");
45 }
46
47 private void getTemplateFooter(OleNoticeBo noticeBo,StringBuffer stringBuffer) throws Exception{
48 stringBuffer.append("<TABLE><TR><TD>Circulation Location/Library Name :</TD><TD>"+noticeBo.getCirculationDeskName()+"</TD><TD> </TD><TD>Title :</TD><TD>"+noticeBo.getTitle()+"</TD></TR>");
49 stringBuffer.append("<TR><TD>Address :</TD><TD>"+noticeBo.getCirculationDeskAddress()+"</TD><TD> </TD><TD>Author :</TD><TD>"+noticeBo.getAuthor()+"</TD></TR>");
50 stringBuffer.append("<TR><TD>Email :</TD><TD>"+noticeBo.getCirculationDeskEmailAddress()+"</TD><TD> </TD><TD>Volume/Issue/Copy Number :</TD><TD>"+noticeBo.getVolumeNumber()+"</TD></TR>");
51 stringBuffer.append("<TR><TD>Phone Number :</TD><TD>"+noticeBo.getCirculationDeskPhoneNumber()+"</TD><TD> </TD><TD>Library shelving location :</TD><TD>"+noticeBo.getItemShelvingLocation()+"</TD></TR>");
52 stringBuffer.append("<TR><TD> </TD><TD> </TD><TD> </TD><TD>Call Number :</TD><TD>"+noticeBo.getItemCallNumber()+"</TD></TR>");
53 if(noticeBo.getOleItem() != null){
54 stringBuffer.append("<TR><TD> </TD><TD> </TD><TD> </TD><TD>Item Barcode :</TD><TD>"+noticeBo.getOleItem().getBarcodeARSL()+"</TD></TR>");
55 }
56 if(noticeBo.getNoticeName().equalsIgnoreCase("Overdue")){
57 stringBuffer.append("<TR><TD> </TD><TD> </TD><TD> </TD><TD>Item was due :</TD><TD>"+noticeBo.getDueDate()+"</TD></TR>");
58 }
59 if(noticeBo.getNoticeName().equalsIgnoreCase("Recall")){
60 stringBuffer.append("<TR><TD> </TD><TD> </TD><TD> </TD><TD>Original due date:</TD><TD>"+noticeBo.getOriginalDueDate()+"</TD></TR>");
61 stringBuffer.append("<TR><TD> </TD><TD> </TD><TD> </TD><TD>New due date:</TD><TD>"+noticeBo.getNewDueDate()+"</TD></TR>");
62 }
63 stringBuffer.append("<TR><TD> </TD><TD> </TD></TR>");
64 }
65
66 private void getPickUpLocationTemplate(OleNoticeBo noticeBo,StringBuffer stringBuffer)throws Exception{
67
68 stringBuffer.append("<TR><TD>Pick up location :</TD><TD></TD></TR>");
69 stringBuffer.append("<TR><TD>Circulation Location/Library Name :</TD><TD>"+noticeBo.getCirculationDeskName()+"</TD></TR>");
70 stringBuffer.append("<TR><TD>Address :</TD><TD>"+noticeBo.getCirculationDeskAddress()+"</TD></TR>");
71 stringBuffer.append("<TR><TD>Email :</TD><TD>"+noticeBo.getCirculationDeskEmailAddress()+"</TD></TR>");
72 stringBuffer.append("<TR><TD>Phone Number :</TD><TD>"+noticeBo.getCirculationDeskPhoneNumber()+"</TD></TR>");
73 stringBuffer.append("<TR><TD>Item will be held until</TD><TD>"+noticeBo.getDueDate()+"</TD></TR>");
74 }
75
76 private void getHTMLFooter(StringBuffer stringBuffer)throws Exception{
77 stringBuffer.append("</TABLE></BODY></HTML>");
78 }
79
80 private Map getSMSTemplate(List<OleNoticeBo> noticeBo) throws Exception{
81 List<OleNoticeBo> overDueNoticeList = new ArrayList<OleNoticeBo>();
82 List<OleNoticeBo> onHoldNoticeList = new ArrayList<OleNoticeBo>();
83 List<OleNoticeBo> recallNoticeList = new ArrayList<OleNoticeBo>();
84 List<OleNoticeBo> expiredNoticeList = new ArrayList<OleNoticeBo>();
85 List<OleNoticeBo> expiredRequiredNoticeList = new ArrayList<OleNoticeBo>();
86 Map smsMap = new HashMap();
87 for(int temp=0;temp<noticeBo.size();temp++){
88 if(noticeBo.get(temp).getNoticeName().equalsIgnoreCase(OLEConstants.NOTICE_OVERDUE)){
89 overDueNoticeList.add(noticeBo.get(temp));
90 }
91 if(noticeBo.get(temp).getNoticeName().equalsIgnoreCase("OnHold")){
92 onHoldNoticeList.add(noticeBo.get(temp));
93 }
94 if(noticeBo.get(temp).getNoticeName().equalsIgnoreCase("Recall")){
95 recallNoticeList.add(noticeBo.get(temp));
96 }
97 if(noticeBo.get(temp).getNoticeName().equalsIgnoreCase(OLEConstants.NOTICE_HOLD_COURTESY)){
98 expiredNoticeList.add(noticeBo.get(temp));
99 }
100 if(noticeBo.get(temp).getNoticeName().equalsIgnoreCase("ExpiredRequired")){
101 expiredRequiredNoticeList.add(noticeBo.get(temp));
102 }
103 }
104 Map overdue = new HashMap();
105 if(overDueNoticeList!=null && overDueNoticeList.size()>0){
106 overdue = getOverDueList(overdue,overDueNoticeList);
107 }
108 Map hod = new HashMap();
109 if(onHoldNoticeList != null && onHoldNoticeList.size()>0){
110 hod = getHoldList(hod,onHoldNoticeList);
111 }
112 Map recl = new HashMap();
113 if(recallNoticeList != null && recallNoticeList.size()>0){
114 recl = getRecallList(recl,recallNoticeList);
115 }
116 Map exp = new HashMap();
117 if(expiredNoticeList != null && expiredNoticeList.size()>0){
118 exp = getExpiredList(exp,expiredNoticeList);
119 }
120 Map expReq = new HashMap();
121 if(expiredRequiredNoticeList != null && expiredRequiredNoticeList.size()>0){
122 expReq = getExpiredRequiredList(expReq,expiredRequiredNoticeList);
123 }
124
125 smsMap.put("OVERDUE",overdue);
126 smsMap.put("HOLD",hod);
127 smsMap.put("RECALL",recl);
128 smsMap.put("EXPIRED",exp);
129 smsMap.put("EXPIREDREQ",expReq);
130 return smsMap;
131 }
132
133 private Map getExpiredRequiredList(Map expReq,List expiredRequiredNoticeList) throws Exception{
134 String smsExpiredReq = "";
135 LoanProcessor loanProcessor = new LoanProcessor();
136 for(int exReq=0;exReq<expiredRequiredNoticeList.size();exReq++){
137 OleNoticeBo oleNoticeBo = (OleNoticeBo)expiredRequiredNoticeList.get(exReq);
138 smsExpiredReq = loanProcessor.getParameter("EXP_REQ_TITLE")+" "+"Circulation Location/Library Name :"+oleNoticeBo.getCirculationDeskName()+",Address :"+oleNoticeBo.getCirculationDeskAddress()+",Title :"+oleNoticeBo.getTitle()+",Call Number :"+oleNoticeBo.getItemCallNumber()+",Item was due :"+oleNoticeBo.getDueDate();
139 expReq.put(exReq,smsExpiredReq);
140 }
141 return expReq;
142 }
143
144 private Map getExpiredList(Map expire,List expiredNoticeList) throws Exception{
145 String smsExpire = "";
146 LoanProcessor loanProcessor = new LoanProcessor();
147 for(int exp=0;exp<expiredNoticeList.size();exp++){
148 OleNoticeBo oleNoticeBo = (OleNoticeBo)expiredNoticeList.get(exp);
149 smsExpire = loanProcessor.getParameter("EXPIRED_TITLE")+" "+"Circulation Location/Library Name :"+oleNoticeBo.getCirculationDeskName()+",Address :"+oleNoticeBo.getCirculationDeskAddress()+",Title :"+oleNoticeBo.getTitle()+",Call Number :"+oleNoticeBo.getItemCallNumber()+",Item was due :"+oleNoticeBo.getDueDate();
150 expire.put(exp,smsExpire);
151 }
152 return expire;
153 }
154
155 private Map getRecallList(Map rcall,List recallNoticeList) throws Exception{
156 String smsRecall = "";
157 LoanProcessor loanProcessor = new LoanProcessor();
158 for(int recall=0;recall<recallNoticeList.size();recall++){
159 OleNoticeBo oleNoticeBo = (OleNoticeBo)recallNoticeList.get(recall);
160 smsRecall = loanProcessor.getParameter("RECALL_TITLE")+" "+"Circulation Location/Library Name :"+oleNoticeBo.getCirculationDeskName()+",Address :"+oleNoticeBo.getCirculationDeskAddress()+",Title :"+oleNoticeBo.getTitle()+",Call Number :"+oleNoticeBo.getItemCallNumber()+",Original due date :"+oleNoticeBo.getDueDate()+",New due date: "+oleNoticeBo.getNewDueDate();
161 rcall.put(recall,smsRecall);
162 }
163 return rcall;
164 }
165
166 private Map getHoldList(Map hod,List onHoldNoticeList) throws Exception{
167 String smsHod = "";
168 LoanProcessor loanProcessor = new LoanProcessor();
169 for(int hold=0;hold<onHoldNoticeList.size();hold++){
170 OleNoticeBo oleNoticeBo = (OleNoticeBo)onHoldNoticeList.get(hold);
171 smsHod = loanProcessor.getParameter("ONHOLD_TITLE")+" "+"Circulation Location/Library Name :"+oleNoticeBo.getCirculationDeskName()+",Address :"+oleNoticeBo.getCirculationDeskAddress()+",Title :"+oleNoticeBo.getTitle()+",Call Number :"+oleNoticeBo.getItemCallNumber()+",Item will be held until :"+oleNoticeBo.getDueDate()+",Pick up location:"+oleNoticeBo.getCirculationDeskName()+",Pick up location Address :"+oleNoticeBo.getCirculationDeskAddress();
172 hod.put(hold,smsHod);
173 }
174 return hod;
175 }
176
177
178
179 private Map getOverDueList(Map overdue,List overDueNoticeList) throws Exception{
180 String smsDue = "";
181 LoanProcessor loanProcessor = new LoanProcessor();
182 for(int due=0;due<overDueNoticeList.size();due++){
183 OleNoticeBo oleNoticeBo = (OleNoticeBo)overDueNoticeList.get(due);
184 smsDue = loanProcessor.getParameter("OVERDUE_TITLE")+" "+"Circulation Location/Library Name :"+oleNoticeBo.getCirculationDeskName()+",Address :"+oleNoticeBo.getCirculationDeskAddress()+",Title :"+oleNoticeBo.getTitle()+",Call Number :"+oleNoticeBo.getItemCallNumber()+",Item was due :"+oleNoticeBo.getDueDate();
185 overdue.put(due, smsDue);
186 }
187
188 return overdue;
189 }
190
191 private List getTemplate(List<OleNoticeBo> noticeBo) throws Exception{
192 StringBuffer stringBuffer = new StringBuffer();
193
194 List templateForNoticeList = new ArrayList();
195 List<OleNoticeBo> overDueNoticeList = new ArrayList<OleNoticeBo>();
196 List<OleNoticeBo> onHoldNoticeList = new ArrayList<OleNoticeBo>();
197 List<OleNoticeBo> recallNoticeList = new ArrayList<OleNoticeBo>();
198 List<OleNoticeBo> expiredNoticeList = new ArrayList<OleNoticeBo>();
199 List<OleNoticeBo> expiredRequiredNoticeList = new ArrayList<OleNoticeBo>();
200
201 for(int temp=0;temp<noticeBo.size();temp++){
202 if(noticeBo.get(temp).getNoticeName().equalsIgnoreCase(OLEConstants.NOTICE_OVERDUE)){
203 overDueNoticeList.add(noticeBo.get(temp));
204 }
205 if(noticeBo.get(temp).getNoticeName().equalsIgnoreCase("OnHold")){
206 onHoldNoticeList.add(noticeBo.get(temp));
207 }
208 if(noticeBo.get(temp).getNoticeName().equalsIgnoreCase("Recall")){
209 recallNoticeList.add(noticeBo.get(temp));
210 }
211 if(noticeBo.get(temp).getNoticeName().equalsIgnoreCase(OLEConstants.NOTICE_HOLD_COURTESY)){
212 expiredNoticeList.add(noticeBo.get(temp));
213 }
214 if(noticeBo.get(temp).getNoticeName().equalsIgnoreCase("ExpiredRequired")){
215 expiredRequiredNoticeList.add(noticeBo.get(temp));
216 }
217 }
218 LoanProcessor loanProcessor = new LoanProcessor();
219
220 if(overDueNoticeList!=null && overDueNoticeList.size()>0){
221 getHTMLHeader(stringBuffer,loanProcessor.getParameter("OVERDUE_TITLE"));
222 getTemplateHeader(overDueNoticeList.get(0), stringBuffer);
223 getTemplateBody(stringBuffer,loanProcessor.getParameter("OVERDUE_TITLE"),loanProcessor.getParameter("OVERDUE_BODY"));
224 for(int overdue=0;overdue<overDueNoticeList.size();overdue++){
225 getTemplateFooter(noticeBo.get(overdue),stringBuffer);
226 }
227 getHTMLFooter(stringBuffer);
228 }
229
230 if(onHoldNoticeList != null && onHoldNoticeList.size()>0){
231 getHTMLHeader(stringBuffer,loanProcessor.getParameter("ONHOLD_TITLE"));
232 getTemplateHeader(onHoldNoticeList.get(0), stringBuffer);
233 getTemplateBody(stringBuffer,loanProcessor.getParameter("ONHOLD_TITLE"),loanProcessor.getParameter("ONHOLD_BODY"));
234 for(int onHold=0;onHold<onHoldNoticeList.size();onHold++){
235 getTemplateFooter(noticeBo.get(onHold),stringBuffer);
236 getPickUpLocationTemplate(noticeBo.get(onHold),stringBuffer);
237 }
238 getHTMLFooter(stringBuffer);
239 }
240
241 if(recallNoticeList != null && recallNoticeList.size()>0){
242 getHTMLHeader(stringBuffer,loanProcessor.getParameter("RECALL_TITLE"));
243 getTemplateHeader(recallNoticeList.get(0), stringBuffer);
244 getTemplateBody(stringBuffer,loanProcessor.getParameter("RECALL_TITLE"),loanProcessor.getParameter("RECALL_BODY"));
245 for(int recall=0;recall<recallNoticeList.size();recall++){
246 getTemplateFooter(noticeBo.get(recall),stringBuffer);
247 }
248 getHTMLFooter(stringBuffer);
249 }
250
251 if(expiredNoticeList != null && expiredNoticeList.size()>0){
252 getHTMLHeader(stringBuffer,loanProcessor.getParameter("EXPIRED_TITLE"));
253 getTemplateHeader(expiredNoticeList.get(0), stringBuffer);
254 getTemplateBody(stringBuffer,loanProcessor.getParameter("EXPIRED_TITLE"),loanProcessor.getParameter("EXPIRED_BODY"));
255 for(int exp=0;exp<expiredNoticeList.size();exp++){
256 getTemplateFooter(noticeBo.get(exp),stringBuffer);
257 }
258 getHTMLFooter(stringBuffer);
259 }
260
261 if(expiredRequiredNoticeList != null && expiredRequiredNoticeList.size()>0){
262 getHTMLHeader(stringBuffer,loanProcessor.getParameter("EXP_REQ_TITLE"));
263 getTemplateHeader(expiredRequiredNoticeList.get(0), stringBuffer);
264 getTemplateBody(stringBuffer,loanProcessor.getParameter("EXP_REQ_TITLE"),loanProcessor.getParameter("EXP_REQ_BODY"));
265 for(int exReq=0;exReq<expiredRequiredNoticeList.size();exReq++){
266 getTemplateFooter(noticeBo.get(exReq),stringBuffer);
267 }
268 getHTMLFooter(stringBuffer);
269 }
270
271
272 templateForNoticeList.add(stringBuffer);
273
274 return templateForNoticeList;
275 }
276
277
278
279 public List getNoticeForPatron(List<OleNoticeBo> noticeBo) throws Exception{
280 return getTemplate(noticeBo);
281
282 }
283
284 public Map getSMSForPatron(List<OleNoticeBo> noticeBo) throws Exception {
285 return getSMSTemplate(noticeBo);
286 }
287
288 }