View Javadoc

1   package org.paneris.jammyjoes.controller;
2   
3   import java.text.ParsePosition;
4   import java.text.SimpleDateFormat;
5   import java.util.Calendar;
6   import java.util.Date;
7   import java.util.GregorianCalendar;
8   
9   import org.melati.Melati;
10  import org.melati.servlet.Form;
11  import org.melati.poem.AccessPoemException;
12  import org.melati.poem.Capability;
13  import org.melati.poem.PoemThread;
14  import org.melati.template.ServletTemplateContext;
15  import org.paneris.jammyjoes.model.JammyjoesDatabase;
16  import org.paneris.jammyjoes.model.User;
17  import org.paneris.jammyjoes.mvp.AffiliateStatsPresenter;
18  import org.paneris.jammyjoes.mvp.HitsSelection;
19  import org.paneris.jammyjoes.mvp.OrderSelection;
20  import org.paneris.jammyjoes.mvp.Presenter;
21  import org.paneris.jammyjoes.mvp.Selection;
22  import org.paneris.jammyjoes.mvp.TimesliceFactory;
23  import org.paneris.jammyjoes.servlet.JammyJoesMelatiServlet;
24  
25  public class AffiliateHome extends JammyJoesMelatiServlet {
26  
27    private static final long serialVersionUID = 1L;
28  
29    protected String jammyjoesRequest(Melati melati, ServletTemplateContext context) throws Exception {
30  
31      JammyjoesDatabase db = (JammyjoesDatabase) melati.getDatabase();
32      Capability affiliate = db.getAffiliateCapability();
33      User user = (User)PoemThread.accessToken();
34      if (!user.givesCapability(affiliate)) 
35        throw new AccessPoemException(user,affiliate);
36  
37      context.put("affiliate", user.getAffiliate());
38  
39      if (Form.getBooleanField(context,"materials").booleanValue()) {
40        return "view/AffiliateMaterials.wm";
41      }
42      
43      String template = "AffiliateHome.wm";
44      context.put("date", Form.getFormNulled(context,"date"));
45      
46      boolean detail = Form.getBooleanField(context,"detail").booleanValue();
47      
48      TimesliceFactory factory = null;
49      Date startDate = rawFrom(context, "date");
50      if (startDate == null) {
51        Calendar calendar = new GregorianCalendar();
52        calendar.setTime(new Date());
53        calendar.add(Calendar.YEAR, -1);
54        startDate = calendar.getTime();
55        factory = new MonthlyTimesliceFactory(startDate);
56      } else {
57        factory = new DailyTimesliceFactory(startDate);
58        template = "AffiliateHomeDay.wm";
59      }
60      
61      if (detail) {
62        template = "AffiliateDayDetail.wm";
63      }
64  
65      Selection hitsSelection = new HitsSelection(db.getAffiliateTransactionTable(), user.getAffiliate(), factory.getStartDate(), factory.getEndDate());    
66      Presenter hitsPresenter =
67        new AffiliateStatsPresenter("hits", context, factory, hitsSelection, detail);
68      hitsPresenter.handleInteraction(hitsPresenter.createSelection(), hitsPresenter.createCommand());
69      
70      Selection ordersSelection = new OrderSelection(db.getShopOrderTable(),db.getOrderStatusTable().paidStatuses(), user.getAffiliate(), factory.getStartDate(), factory.getEndDate());    
71      Presenter ordersPresenter =
72        new AffiliateStatsPresenter("orders", context, factory, ordersSelection, detail);
73      ordersPresenter.handleInteraction(ordersPresenter.createSelection(), ordersPresenter.createCommand());
74      
75      return "view/" + template;
76    }
77  
78    private static SimpleDateFormat dateFormatter = 
79        new SimpleDateFormat("MM/yyyy");
80  
81    public Date rawFrom(ServletTemplateContext context, String fieldName) {
82      String value = Form.getFormNulled(context,fieldName);
83      if (value == null) return null;
84      Date date = dateFormatter.parse(value, new ParsePosition(0));
85      return new Date(date.getTime());
86    }
87  
88  }