/*
* Provided by CSTI Consulting
* Following GNU LESSER GENERAL PUBLIC LICENSE
* You may obtain more details at
*
* http://www.csticonsulting.com
* Copyright (c) 2006-2010 Consultation CS-TI inc.
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
package com.salesmanager.central.orders;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.InputStream;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Date;
import org.apache.commons.configuration.Configuration;
import org.apache.commons.lang.StringUtils;
import org.apache.log4j.Logger;
import com.salesmanager.central.PageBaseAction;
import com.salesmanager.central.util.PropertiesHelper;
import com.salesmanager.core.entity.common.ReportHeader;
import com.salesmanager.core.entity.merchant.MerchantStore;
import com.salesmanager.core.entity.orders.OrderReport;
import com.salesmanager.core.entity.orders.SearchOrderResponse;
import com.salesmanager.core.entity.orders.SearchOrdersCriteria;
import com.salesmanager.core.service.ServiceFactory;
import com.salesmanager.core.service.merchant.MerchantService;
import com.salesmanager.core.service.order.OrderService;
import com.salesmanager.core.util.DateUtil;
import com.salesmanager.core.util.FileUtil;
import com.salesmanager.core.util.LabelUtil;
import com.salesmanager.core.util.LocaleUtil;
import com.salesmanager.core.util.MessageUtil;
import com.salesmanager.core.util.PropertiesUtil;
public class OrderListAction extends PageBaseAction {
private Logger log = Logger.getLogger(OrderListAction.class);
private String cardtext;
private Collection orders = new ArrayList();
static Configuration config = PropertiesHelper.getConfiguration();
private static int ordersize = 20;
private SearchOrdersCriteria criteria = null;
private InputStream inputStream;
private String orderId = "";
static {
ordersize = config.getInt("central.orderlist.maxsize", 20);
}
private void buildCriteria() throws Exception {
criteria = new SearchOrdersCriteria();
DateUtil dh = new DateUtil();
dh.processPostedDates(super.getServletRequest());
criteria.setSdate(dh.getStartDate());
criteria.setEdate(dh.getEndDate());
if (dh.getStartDate() != null) {
super.getServletRequest().setAttribute("sdate",
DateUtil.formatDate(dh.getStartDate()));
}
if (dh.getEndDate() != null) {
super.getServletRequest().setAttribute("edate",
DateUtil.formatDate(dh.getEndDate()));
}
String customername = super.getServletRequest().getParameter(
"customername");
if (customername != null && !customername.trim().equals("")) {
criteria.setCustomerName(customername);
super.getServletRequest()
.setAttribute("customername", customername);
}
criteria.setMerchantId(super.getContext().getMerchantid());
}
/**
* Creates report
* @return
*/
public String createReportByCriteria() {
// START DATE - END DATE
try {
this.buildCriteria();
if (!StringUtils.isBlank(this.getOrderId())) {
long oid = -1;
try {
oid = Long.parseLong(this.getOrderId());
} catch (NumberFormatException nfe) {
log.error(nfe);
}
criteria.resetCriteria();
criteria.setOrderId(oid);
}
LabelUtil label = LabelUtil.getInstance();
label.setLocale(super.getLocale());
OrderService oservice = (OrderService) ServiceFactory
.getService(ServiceFactory.OrderService);
SearchOrderResponse response = oservice.searchOrders(criteria);
orders = response.getOrders();
LocaleUtil.setLocaleToEntityCollection(orders, super.getLocale());
MerchantService mservice = (MerchantService)ServiceFactory.getService(ServiceFactory.MerchantService);
MerchantStore store = mservice.getMerchantStore(super.getContext().getMerchantid());
store.setLocale(super.getLocale());
ReportHeader reportHeader = new ReportHeader();
reportHeader.setStore(store);
OrderReport report = new OrderReport();
report.setOrders(orders);
if (!StringUtils.isEmpty(store.getStorelogo())) {
//String path = PropertiesUtil.getConfiguration().getString(
// "core.branding.cart.filefolder");
String path = FileUtil.getBrandingFilePath();
path = path + "/" + store.getMerchantId() + "/header/"
+ store.getStorelogo();
reportHeader.setMerchantStoreLogo(path);
}
//Build search string
/**
* startDate (may be null)
* endDate (may be null)
* customerName (may be null)
*/
StringBuffer reportCriteriaText = new StringBuffer();
reportCriteriaText.append(label.getText("label.order.searchreport.title"));
if (!StringUtils.isBlank(this.getOrderId())) {
long oid = -1;
try {
oid = Long.parseLong(this.getOrderId());
} catch (NumberFormatException nfe) {
log.error(nfe);
}
criteria.resetCriteria();
criteria.setOrderId(oid);
reportCriteriaText.append(" ").append(label.getText("label.order.orderid")).append(" ").append(oid);
} else {
if(criteria.getSdate()!=null) {
reportCriteriaText.append(" ").append(label.getText("label.generic.startdate")).append(" ").append(criteria.getStartDateString());
}
if(criteria.getEdate()!=null) {
reportCriteriaText.append(" ").append(label.getText("label.generic.enddate")).append(" ").append(criteria.getEndDateString());
}
if(!StringUtils.isBlank(criteria.getCustomerName())) {
reportCriteriaText.append(" ").append(label.getText("label.customer.name")).append(" ").append(criteria.getCustomerName());
}
}
reportHeader .setSearchReportCriteria(reportCriteriaText.toString());
report.setReportHeader(reportHeader);
OrderService orderService = (OrderService)ServiceFactory.getService(ServiceFactory.OrderService);
ByteArrayOutputStream os = new ByteArrayOutputStream();
orderService.prepareOrderListReport(report, super.getLocale(), os);
inputStream = new ByteArrayInputStream(os.toByteArray());
return SUCCESS;
} catch (Exception e) {
log.error(e);
MessageUtil.addErrorMessage(super.getServletRequest(), LabelUtil
.getInstance().getText("errors.technical"));
return INPUT;
}
}
/**
* Search header functions
*
* @return
* @throws Exception
*/
public String searchByCriteria() throws Exception {
// START DATE - END DATE
try {
super.getServletRequest().getSession().removeAttribute("ITEMCOUNT");
this.buildCriteria();
//String orderid = super.getServletRequest().getParameter("orderid");
if (!StringUtils.isBlank(this.getOrderId())) {
long oid = -1;
try {
oid = Long.parseLong(this.getOrderId());
} catch (NumberFormatException nfe) {
log.error(nfe);
}
criteria.resetCriteria();
criteria.setOrderId(oid);
}
this.setSize(ordersize);
super.setPageStartNumber();
OrderService oservice = (OrderService) ServiceFactory
.getService(ServiceFactory.OrderService);
SearchOrderResponse response = oservice.searchOrders(criteria);
orders = response.getOrders();
super.setListingCount(response.getCount());
super.setRealCount(response.getOrders().size());
super.setPageElements();
} catch (Exception e) {
log.error(e);
MessageUtil.addErrorMessage(super.getServletRequest(), LabelUtil
.getInstance().getText("errors.technical"));
}
return SUCCESS;
}
/**
* Page entry point
*
* @return
* @throws Exception
*/
private String getOrdersList() throws Exception {
try {
super.setPageTitle("label.order.orderlist.title");
this.buildCriteria();
// override start date & end date with page navigation criteria submission
DateFormat myDateFormat = new SimpleDateFormat("yyyy-MM-dd");
Date sDate = null;
Date eDate = null;
try {
if (super.getServletRequest().getParameter("navstartdate") != null) {
if (criteria.getSdate() == null) {
sDate = myDateFormat.parse(super.getServletRequest()
.getParameter("navstartdate"));
}
}
if (super.getServletRequest().getParameter("navenddate") != null) {
if (criteria.getEdate() == null) {
eDate = myDateFormat.parse(super.getServletRequest()
.getParameter("navenddate"));
}
}
criteria.setSdate(sDate);
criteria.setEdate(eDate);
} catch (Exception e) {
log.error(e);
}
this.setSize(ordersize);
super.setPageStartNumber();
criteria.setQuantity(ordersize);
criteria.setStartindex(super.getPageStartIndex());
OrderService oservice = (OrderService) ServiceFactory
.getService(ServiceFactory.OrderService);
SearchOrderResponse response = oservice.searchOrders(criteria);
orders = response.getOrders();
super.setListingCount(response.getCount());
super.setRealCount(response.getOrders().size());
super.setPageElements();
} catch (Exception e) {
log.error(e);
MessageUtil.addErrorMessage(super.getServletRequest(), LabelUtil
.getInstance().getText("errors.technical"));
}
return SUCCESS;
}
public String displayOrderList() throws Exception {
super.getServletRequest().getSession().removeAttribute("ITEMCOUNT");
return this.getOrdersList();
}
public String displayOrderListPage() throws Exception {
return this.getOrdersList();
}
public String getCardtext() {
return cardtext;
}
public void setCardtext(String cardtext) {
this.cardtext = cardtext;
}
public Collection getOrders() {
return orders;
}
public SearchOrdersCriteria getCriteria() {
return criteria;
}
public void setCriteria(SearchOrdersCriteria criteria) {
this.criteria = criteria;
}
public InputStream getInputStream() {
return inputStream;
}
public void setInputStream(InputStream inputStream) {
this.inputStream = inputStream;
}
public String getOrderId() {
return orderId;
}
public void setOrderId(String orderId) {
this.orderId = orderId;
}
}