InvoicePortlet.java from riverock at Krugle
Show InvoicePortlet.java syntax highlighted
/*
* org.riverock.commerce - Commerce application
*
* Copyright (C) 2006, Riverock Software, All Rights Reserved.
*
* Riverock - The Open-source Java Development Community
* http://www.riverock.org
*
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public
* License as published by the Free Software Foundation; either
* version 2 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* General Public License for more details.
*
* You should have received a copy of the GNU General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
package org.riverock.commerce.invoice;
import java.io.PrintWriter;
import java.math.BigDecimal;
import java.text.MessageFormat;
import java.util.List;
import java.util.ResourceBundle;
import javax.portlet.*;
import org.apache.log4j.Logger;
import org.riverock.commerce.bean.Shop;
import org.riverock.commerce.bean.ShopOrder;
import org.riverock.commerce.bean.ShopOrderItem;
import org.riverock.commerce.dao.CommerceDaoFactory;
import org.riverock.commerce.price.OrderLogic;
import org.riverock.commerce.price.ShopPortlet;
import org.riverock.commerce.tools.ContentTypeTools;
import org.riverock.common.tools.NumberTools;
import org.riverock.common.tools.ServletTools;
import org.riverock.common.tools.StringTools;
import org.riverock.interfaces.portal.bean.User;
import org.riverock.interfaces.sso.a3.AuthSession;
import org.riverock.interfaces.ContainerConstants;
import org.riverock.common.utils.PortletUtils;
/**
* Author: mill
* Date: Dec 3, 2002
* Time: 3:14:51 PM
*
* $Id: InvoicePortlet.java 1229 2007-06-28 11:25:40Z serg_main $
*/
@SuppressWarnings({"UnusedAssignment"})
public final class InvoicePortlet implements Portlet {
private final static Logger log = Logger.getLogger( InvoicePortlet.class );
public final static String CTX_TYPE_INVOICE = "mill.invoice";
private static final String COMPLETE_SEND_ORDER = "complete-send-order";
public InvoicePortlet() {
}
private PortletConfig portletConfig = null;
public void init( PortletConfig portletConfig ) {
this.portletConfig = portletConfig;
}
public void destroy() {
}
public void processAction(ActionRequest actionRequest, ActionResponse actionResponse) {
String action = PortletUtils.getString(actionRequest, "action", null);
if ( log.isDebugEnabled() ) {
log.debug( "Action: " + action );
}
if ( action== null ) {
return;
}
PortletSession session = actionRequest.getPortletSession();
Long userOrderId = (Long)session.getAttribute( ShopPortlet.USER_ORDER_ID, PortletSession.APPLICATION_SCOPE );
if ( userOrderId == null ) {
return;
}
Long siteId = new Long( actionRequest.getPortalContext().getProperty( ContainerConstants.PORTAL_PROP_SITE_ID ) );
if ( action.equals( "set" ) ) {
Long shopItemId = PortletUtils.getLong( actionRequest, "set_id_item" );
int count = PortletUtils.getInt( actionRequest, ShopPortlet.NAME_INVOICE_NEW_COUNT_PARAM, 0 );
if ( log.isDebugEnabled() ) {
log.debug( "shopItemId - " + shopItemId );
log.debug( "count - " + count );
}
// set new quantity of item in backet
CommerceDaoFactory.getOrderDao().setNewQuantity(siteId, userOrderId, shopItemId, count );
} else if ( action.equals( "del" ) ) {
Long shopItemId = PortletUtils.getLong( actionRequest, "del_id_item" );
if ( log.isDebugEnabled() ) {
log.debug( "id_item - " + shopItemId );
}
// delete item from basket
CommerceDaoFactory.getOrderDao().deleteShopItem(siteId, userOrderId, shopItemId );
}
else if ( "send".equals( action )) {
AuthSession authSession = (AuthSession)actionRequest.getUserPrincipal();
if (authSession!=null) {
ResourceBundle bundle = portletConfig.getResourceBundle( actionRequest.getLocale() );
// send userOrderId
sendInvoice(bundle, authSession, userOrderId, actionResponse);
}
}
}
public void render( RenderRequest renderRequest, RenderResponse renderResponse ) throws PortletException {
PrintWriter out = null;
try {
Shop shop = OrderLogic.prepareCurrenctRequest( renderRequest );
ResourceBundle bundle = portletConfig.getResourceBundle( renderRequest.getLocale() );
ContentTypeTools.setContentType( renderResponse, ContentTypeTools.CONTENT_TYPE_UTF8 );
out = renderResponse.getWriter();
PortletSession session = renderRequest.getPortletSession();
Long userOrderId = (Long)session.getAttribute( ShopPortlet.USER_ORDER_ID, PortletSession.APPLICATION_SCOPE );
if ( userOrderId == null ) {
return;
}
AuthSession authSession = (AuthSession)renderRequest.getUserPrincipal();
int shopGroupId = PortletUtils.getInt( renderRequest, ShopPortlet.NAME_ID_GROUP_SHOP, 0 );
if ( authSession != null ) {
if ( log.isDebugEnabled() ) {
log.debug( "AuthSession is null. Try get from session" );
log.debug( "AuthSession in servlet session - " + authSession );
}
if ( authSession != null && log.isDebugEnabled() )
log.debug( "AuthSession not null. getLoginStatus() - " + authSession.checkAccess( renderRequest.getServerName() ) );
if ( ( authSession != null ) && ( authSession.checkAccess( renderRequest.getServerName() ) ) ) {
OrderLogic.updateAuthSession(userOrderId, authSession );
}
}
Long currencyID = PortletUtils.getLong( renderRequest, ShopPortlet.NAME_ID_CURRENCY_SHOP );
String addForm =
ServletTools.getHiddenItem( ContainerConstants.NAME_TYPE_CONTEXT_PARAM, CTX_TYPE_INVOICE ) +
ServletTools.getHiddenItem( ShopPortlet.NAME_ID_CURRENCY_SHOP, currencyID ) +
ServletTools.getHiddenItem( ShopPortlet.NAME_ID_GROUP_SHOP,
PortletUtils.getInt( renderRequest, ShopPortlet.NAME_ID_GROUP_SHOP, 0 ) ) +
ServletTools.getHiddenItem( ShopPortlet.NAME_ID_SHOP_PARAM, shop.getShopId() );
String statusSend = PortletUtils.getString(renderRequest, COMPLETE_SEND_ORDER, "");
if ("true".equalsIgnoreCase(statusSend)) {
PortletURL url = renderResponse.createRenderURL();
url.setParameter(ContainerConstants.NAME_TYPE_CONTEXT_PARAM, ShopPortlet.CTX_TYPE_SHOP);
addParameters(url, currencyID, shopGroupId, shop.getShopId());
String shopUrl = "<a href=\"" +url.toString()+ "\">";
String str = null;
Object args1[] = {url.toString()};
final String sendOrderName = "invoice.order-send-complete";
String s = bundle.getString( sendOrderName );
if ( s != null ) {
str = MessageFormat.format( s, args1 );
} else {
str = "Âàø çàêàç N" + userOrderId + " óñïåøíî îòîñëàí. " + shopUrl + "Ïðîäîëæèòü</a>";
}
args1 = null;
out.write( str );
session.removeAttribute( ShopPortlet.USER_ORDER_ID, PortletSession.APPLICATION_SCOPE );
return;
}
/*
if ( order.getAuthSession() == null ) {
String backURL = StringTools.rewriteURL( PortletUtils.url( "mill.invoice", renderRequest, renderResponse ) );
out.write( "<table cellspacing=\"2\" cellpadding=\"2\">\n" );
out.write( "<tr>\n" );
out.write( "<td class=\"pricedata\" rowspan=\"2\">\n" );
out.write( bundle.getString( "invoice.attention" ) );
out.write( "<br>\n" );
if ( Boolean.TRUE.equals( isRegisterAllowed ) ) {
out.write( bundle.getString( "invoice.register" ) );
out.write( "\n" );
out.write( "<a href=\"" );
out.write( PortletUtils.url( "mill.register", renderRequest, renderResponse ) + '&' +
LoginUtils.NAME_TOURL_PARAM + '=' + backURL );
out.write( "\">" );
out.write( bundle.getString( "button.next" ) );
out.write( " " );
out.write( "</a>\n" );
}
out.write( "</td>\n" +
"<form method=\"POST\" action=\"" + PortletUtils.ctx( renderRequest ) + "\">\n" +
ServletTools.getHiddenItem( ContainerConstants.NAME_TYPE_CONTEXT_PARAM, LoginUtils.LOGIN_CHECK_PORTLET ) +
addForm +
ServletTools.getHiddenItem( LoginUtils.NAME_TOURL_PARAM, backURL ) +
"<td class=\"pricedata\">" );
out.write( bundle.getString( "invoice.login" ) );
out.write( "</td>\n" );
out.write( "<td class=\"pricedata\">" );
out.write( "<input type=\"text\" name=\"username\" size=\"12\" tabindex=\"1\">" );
out.write( "</td>\n" );
out.write( "<td rowspan=\"2\" valign=\"middle\" class=\"pricedata\">" );
out.write( "<input type=\"submit\" value=\"Login\" tabindex=\"3\">\n" );
out.write( "<tr>\n" );
out.write( "<td class=\"pricedata\">" );
out.write( bundle.getString( "invoice.password" ) );
out.write( "</td>\r\n" );
out.write( "<td class=\"pricedata\">" );
out.write( "<input type=\"password\" name=\"password1\" size=\"12\" tabindex=\"2\">" );
out.write( "</td>\n" );
out.write( "</tr>\n" );
out.write( "</form>\n" );
out.write( "</table>\n" );
out.write( "<br>" );
}
*/
out.write( "<table border=\"0\">\n<tr>\n<td align=\"left\">\n" );
PortletURL url = renderResponse.createRenderURL();
url.setParameter(ContainerConstants.NAME_TYPE_CONTEXT_PARAM, ShopPortlet.CTX_TYPE_SHOP);
addParameters(url, currencyID, shopGroupId, shop.getShopId());
out.write( "<a href=\"" + url.toString() + "\">" );
out.write( bundle.getString( "invoice.continue_select" ) );
out.write( "</a>" );
out.write( "</td>\n</tr>\n</table>\n<br>" );
out.write( bundle.getString( "invoice.your_select" ) );
out.write( "<table border=\"0\" cellpadding=\"2px\" cellspacing=\"2px\">\n" );
List<ShopOrder> shopOrders = CommerceDaoFactory.getOrderDao().getShopOrders(userOrderId);
for (ShopOrder shopOrder : shopOrders) {
if ( shopOrder.getShopOrderItems().size()>0 ) {
Shop shopBean = CommerceDaoFactory.getShopDao().getShop(shopOrder.getShopId());
out.write( "<tr>\n<td colspan=\"6\" align=\"left\" border=\"0\">\n" );
out.write( shopBean.getShopNameForPriceList() );
out.write( "</td>\n<tr>\n" );
out.write( "<tr>\n" );
out.write( "<th class=\"priceData\">" );
out.write( bundle.getString( "invoice.name_item" ) );
out.write( "</th>\n" );
out.write( "<th class=\"priceData\">" );
out.write( bundle.getString( "invoice.ppq" ) );
out.write( "</th>\n" );
out.write( "<th class=\"priceData\">" );
out.write( bundle.getString( "invoice.quantity" ) );
out.write( "</th>\n" );
out.write( "<th class=\"priceData\">" );
out.write( bundle.getString( "invoice.total_price" ) );
out.write( "</th>\n" );
out.write( "<th class=\"priceData\">" );
out.write( bundle.getString( "invoice.currency" ) );
out.write( "</th>\n" );
out.write( "<th class=\"priceData\">" );
out.write( bundle.getString( "invoice.delete_item" ) );
out.write( "</th>\n" );
out.write( "</tr>" );
String currentCurrency = "";
BigDecimal orderSumm = new BigDecimal(0);
int currentPrecision = 0;
boolean isFirst=true;
for (ShopOrderItem item : shopOrder.getShopOrderItems()) {
if ( isFirst ) {
isFirst=false;
currentCurrency = item.getResultCurrencyName();
currentPrecision = item.getPrecisionResult();
}
BigDecimal itemFullPrice =
NumberTools.multiply(
item.getResultPrice(), item.getCountItem(), item.getPrecisionResult()
);
orderSumm = orderSumm.add(itemFullPrice);
out.write( "<tr>\n" );
out.write( "<td class=\"priceData\">" );
out.write( item.getShopItemName() );
out.write( "</td>\n" );
out.write( "<form method=\"GET\" action=\"" + PortletUtils.ctx( renderRequest ) + "\">\n" );
out.write( addForm );
out.write( ServletTools.getHiddenItem( "set_id_item", item.getShopItemId() ) );
out.write( ServletTools.getHiddenItem( "action", "set" ) );
out.write( "<td class=\"priceData\" align=\"right\">" );
out.write( NumberTools.truncate( item.getResultPrice(), currentPrecision ).toString() );
out.write( "</td>\n" );
out.write( "<td class=\"priceData\" align=\"center\">\n" );
out.write( "<input type=\"text\" size=\"3\" name=\"" +
ShopPortlet.NAME_INVOICE_NEW_COUNT_PARAM +
"\" value=\"" + item.getCountItem() + "\"> \n" );
out.write( "<input type=\"submit\" value=\"" );
out.write( bundle.getString( "invoice.change_qty" ) );
out.write( "\">" );
out.write( "</td>\n" );
out.write( "<td class=\"priceData\" align=\"right\">" );
out.write( NumberTools.truncate( itemFullPrice, currentPrecision ).toString() );
out.write( "</td>\n" );
out.write( "<td class=\"priceData\" align=\"center\">" );
out.write( item.getResultCurrencyName() );
out.write( "</td>\n" );
out.write( "</form>\n" );
out.write( "<form method=\"GET\" action=\"" + PortletUtils.ctx( renderRequest ) + "\">\n" );
out.write( addForm );
out.write( ServletTools.getHiddenItem( "del_id_item", item.getShopItemId() ) );
out.write( ServletTools.getHiddenItem( "action", "del" ) );
out.write( "<td class=\"priceData\" align=\"center\">" );
out.write( "<input type=\"submit\" value=\"" );
out.write( bundle.getString( "invoice.delete_button" ) );
out.write( "\">" );
out.write( "</td>\n" );
out.write( "</form>\n" );
out.write( "</tr>\n" );
}
out.write( "<tr>\n<td colspan=\"6\" align=\"left\" border=\"0\">\n" );
out.write( bundle.getString( "invoice.total_summ" ) );
out.write( " " + NumberTools.truncate( orderSumm, currentPrecision )+ " " + currentCurrency );
out.write( "</td>\n<tr>\n" );
if ( log.isDebugEnabled() ) {
out.write( "<tr>\n<td colspan=\"6\" align=\"left\" border=\"0\">\n" );
out.write( bundle.getString( "invoice.total_summ" ) );
out.write( " " + orderSumm + " " + currentCurrency );
out.write( "</td>\n<tr>\n" );
}
out.write( "<tr>\n<td colspan=\"6\" align=\"left\" border=\"0\">\n" );
out.write( " " );
out.write( "</td>\n<tr>\n" );
}
}
out.write( "</table>\n" );
/*
// button for send invoice
if ( !order.getShopOrders().isEmpty() && authSession!=null &&
!StringUtils.isBlank( orderEmail ) && isActivateEmailOrder ) {
out.write( "<br>\n" );
out.write( "<form method=\"GET\" action=\"" + PortletUtils.ctx( renderRequest ) + "\">\n" );
out.write( addForm );
out.write( ServletTools.getHiddenItem( "action", "send" ) );
out.write( "<input type=\"submit\" value=\"" );
out.write( bundle.getString( "invoice.send_button" ) );
out.write( "\">\n" );
out.write( "</form>" );
}
*/
}
catch( Exception e ) {
final String es = "Error procesing invoice";
log.error( es, e );
throw new PortletException( es, e );
}
if (out!=null) {
out.flush();
out.close();
out = null;
}
}
private void addParameters(PortletURL url, Long currencyId, int shopGroupId, Long shopId) {
url.setParameter(ShopPortlet.NAME_ID_CURRENCY_SHOP , ""+currencyId);
url.setParameter(ShopPortlet.NAME_ID_GROUP_SHOP, ""+shopGroupId);
url.setParameter(ShopPortlet.NAME_ID_SHOP_PARAM , shopId.toString());
}
private void sendInvoice(ResourceBundle bundle, AuthSession authSession, Long userOrderId, ActionResponse actionResponse) {
// Todo rewrite from constans
final boolean isActivateEmailOrder = false;
String s = bundle.getString( "reg.send_order.1" );
String orderCustomString = MessageFormat.format( s, "" + userOrderId);
User ui = authSession.getUser();
String orderAdminString =
"Çàêàç÷èê: " + StringTools.getUserName(ui.getMiddleName(), ui.getFirstName(), ui.getLastName()) +
"\n\n" + orderCustomString;
List<ShopOrder> shopOrders = CommerceDaoFactory.getOrderDao().getShopOrders(userOrderId);
for (ShopOrder shopOrder : shopOrders) {
orderCustomString = processUserEmail(shopOrder, bundle, orderCustomString);
if ( log.isDebugEnabled() ) {
log.debug( "Your order N" + userOrderId + "\n" + orderCustomString );
}
if ( Boolean.TRUE.equals( isActivateEmailOrder ) ) {
orderAdminString = processAdminEmail(shopOrder, bundle, orderAdminString);
}
}
if ( log.isDebugEnabled() ) {
log.debug( "send admin order: your order N" + userOrderId + "\n" + orderAdminString );
}
actionResponse.setRenderParameter(COMPLETE_SEND_ORDER, "true");
throw new IllegalStateException("Need switch to user Portal mail service");
/*
MailMessage.sendMessage( orderCustomString,
order.getAuthSession().getUserInfo().getEmail(),
orderEmail,
"Your order N" + order.getUserOrderId(),
GenericConfig.getMailSMTPHost() );
if ( Boolean.TRUE.equals( isActivateEmailOrder ) ) {
MailMessage.sendMessage( orderAdminString,
orderEmail,
orderEmail,
"Order N" + order.getUserOrderId(),
GenericConfig.getMailSMTPHost() );
}
*/
}
private String processUserEmail(ShopOrder shopOrder, ResourceBundle bundle, String orderCustomString) {
String s;
if ( shopOrder.getShopOrderItems().size()>0 ) {
ShopOrderItem itemTemp = shopOrder.getShopOrderItems().get(0);
Shop shopBean = CommerceDaoFactory.getShopDao().getShop(shopOrder.getShopId());
s = bundle.getString( "reg.send_order.shop-header" );
orderCustomString +=
MessageFormat.format( s,
"" + shopOrder.getShopId(),
shopBean.getShopName(),
shopBean.getShopCode(),
itemTemp.getResultCurrencyName());
int idx=1;
for (ShopOrderItem item : shopOrder.getShopOrderItems()) {
BigDecimal itemFullPrice =
NumberTools.multiply(
item.getResultPrice(), item.getCountItem(), item.getPrecisionResult()
);
s = bundle.getString( "reg.send_order.2" );
orderCustomString +=
MessageFormat.format( s,
"" + idx++,
item.getShopItemName(),
NumberTools.truncate( item.getResultPrice(), item.getPrecisionResult() ),
item.getResultCurrencyName(),
"" + item.getCountItem(),
NumberTools.truncate( itemFullPrice, item.getPrecisionResult() ),
"",
"" + shopOrder.getShopId(),
"" + item.getShopItemId()
);
}
}
return orderCustomString;
}
private String processAdminEmail(ShopOrder shopOrder, ResourceBundle bundle, String orderAdminString) {
String s;
ShopOrderItem itemTemp = shopOrder.getShopOrderItems().get(0);
Shop shopBean = CommerceDaoFactory.getShopDao().getShop(shopOrder.getShopId());
s = bundle.getString( "reg.send_order.shop-header" );
orderAdminString +=
MessageFormat.format( s,
"" + shopOrder.getShopId(),
shopBean.getShopName(),
shopBean.getShopCode(),
itemTemp.getResultCurrencyName());
BigDecimal orderSumm = new BigDecimal(0);
boolean isFirst=true;
int index=0;
String currentCurrency = "";
int currentPrecision = 0;
for (ShopOrderItem item : shopOrder.getShopOrderItems()) {
index++;
if ( isFirst ) {
isFirst=false;
currentCurrency = item.getResultCurrencyName();
if ( item.getPrecisionResult() != null ) {
currentPrecision = item.getPrecisionResult();
}
}
BigDecimal itemFullPrice =
NumberTools.multiply(
item.getResultPrice(), item.getCountItem(), item.getPrecisionResult()
);
orderSumm = orderSumm.add(itemFullPrice);
s = bundle.getString( "reg.send_order.2" );
orderAdminString +=
MessageFormat.format( s,
"" + index,
item.getShopItemName(),
NumberTools.truncate( item.getResultPrice(), currentPrecision ),
item.getResultCurrencyName(),
"" + item.getCountItem(),
NumberTools.truncate( itemFullPrice, currentPrecision ),
"",
shopOrder.getShopId(),
item.getShopItemId());
}
orderAdminString +=
"Total summ of invoice: " +
NumberTools.truncate( NumberTools.truncate( orderSumm, currentPrecision ), currentPrecision ) +
" " + currentCurrency + "\n\n";
return orderAdminString;
}
}
See more files for this project here